300字范文,内容丰富有趣,生活中的好帮手!
300字范文 > :根据中证800指数最近十年历史P/b分位数确认基金目标仓位

:根据中证800指数最近十年历史P/b分位数确认基金目标仓位

时间:2022-02-24 21:25:44

相关推荐

:根据中证800指数最近十年历史P/b分位数确认基金目标仓位

1.导入需要的模块,尤其连接wind数据模块WindPy

import pandas as pdimport numpy as npfrom WindPy import *w.start()w.isconnected()

2.中证800指数P/b历史分位数情况并判断基金目标仓位

(1)设置当前的日期

import datetimenow_day = datetime.datetime.now().strftime('%Y-%m-%d') #得到的当前日期,是字符串格式

(2)得到上月的天数

import calendarlast_month_days = calendar.monthrange(int(now_day[0:4]), int(now_day[5:7])-1) #上上个月最后天的星期数和得到上月的天数及,返回值是元组last_month_days = last_month_days[1] #得到上月的天数,元组的引用同列表

(3)设定好上月最后一天的日期

last_month_lastday = now_day[0:6] + str(int(now_day[6:7])-1) + '-' + str(last_month_days) #字符串拼接成了上个月最后一天的具体日期,有漏洞的

(4)返回上月末最后一天的中证800指数市净率P/B数据

`zz800_pb = w.wsd("000906.SH", "pb_lf", "ED0TD", last_month_lastday, "")` #设定好最后一天,取相对日期,起始日为上追溯0交易日

zz800_pb = round(sum(zz800_pb.Data,[])[0], 4)

(5)返回中证800指数(000906.SH)最近十年的市净率p/b历史数据

data = w.wsd("000906.SH", "pb_lf", "ED-10Y", last_month_lastday, "")df = pd.DataFrame(sum(data.Data, []), index=data.Times, columns=['P/b'])df.index.name = 'date'

(6)可以得到过去十年每日P/B分位数排名情况

qt_dot90 = round(df.quantile(0.9)[0], 4)qt_dot75 = round(df.quantile(0.75)[0], 4)qt_dot25 = round(df.quantile(0.25)[0], 4)

(7)判断上月末最后一天的分位数与最近十年市净率大小情况,选定本月的仓位上限情况

stock_position_up = 0stock_position_down = 0if zz800_pb > qt_dot90:stock_position_down = 0stock_position_up = 0.45elif zz800_pb > qt_dot75 and zz800_pb < qt_dot90:stock_position_down = 0.1stock_position_up = 0.55elif zz800_pb > qt_dot25 and zz800_pb < qt_dot75:stock_position_down = 0.35stock_position_up = 0.80else:stock_position_down = 0.55stock_position_up = 1print("基金:本月股票仓位下限为 %s,本月股票仓位上限为 %s. " % (stock_position_down, stock_position_up))

3. 小结

(1)可以进一步优化,上月最后一天的日期取法存在漏洞。

(2)月数为两位数时,存在取数的漏洞。

(3)WinPy取数的代码可以用代码生成器辅助进行。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。