💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 13.1 易经、传统文化 · 老黄历诊股 A:听说你今天满仓了? B:是啊,听老专家说炒股要看黄历,我早上查了,今天宜开市。你呢,仓位如何? A:策略有卖出信号,我昨天就空仓了。 S:怪不得今天跌停,原来是空头行动了。 最近小散发现了一个管用的择时方法:“看黄历”。4号忌交易,熔断;6号宜开市,红盘。7号宜开市,满仓杀入。然后就有了上面的对话。 等等,好像哪里不对。 为了让大家科学的赚钱,小散决定验证一下这个策略。 第一步:读入老黄历data ```py import pandas as pd data = pd.read_csv('老黄历诊股.csv',encoding='GB18030') data = data[['calendarDate','isOpen']] buydata = data[data['isOpen'] == 1] selldata = data[data['isOpen'] == -1] print buydata.head(5) print selldata.head(5) calendarDate isOpen 3 2015-01-08 1 7 2015-01-14 1 8 2015-01-15 1 11 2015-01-20 1 27 2015-02-11 1 calendarDate isOpen 1 2015-01-06 -1 10 2015-01-19 -1 13 2015-01-22 -1 15 2015-01-26 -1 18 2015-01-29 -1 ``` 第二步A,买卖HS300ETF。根据老黄历信号,宜开市开仓,否则平仓。 ```py buy_date = map(lambda x: x[0:4]+x[5:7]+x[8:10], buydata['calendarDate'].values.tolist()) sell_date = map(lambda x: x[0:4]+x[5:7]+x[8:10], selldata['calendarDate'].values.tolist()) start = '2015-01-01' # 回测起始时间 end = '2015-12-31' # 回测结束时间 benchmark = 'HS300' # 策略参考标准 universe = ['510310.XSHG'] # 股票池 # 策略参考标准 refresh_rate = 1 # 调仓频率,即每 refresh_rate 个交易日执行一次 handle_data() 函数 def initialize(account): # 初始化虚拟账户状态 pass def handle_data(account): # 每个交易日的买入卖出指令 today=account.current_date.strftime('%Y%m%d') for stk in account.universe: if today in buy_date: order_pct_to(stk, 1) else: if stk in account.avail_secpos: order_to(stk, 0) ``` ![](https://box.kancloud.cn/2016-07-30_579cbdb5c8a24.jpg) 第二步B,买卖HS300ETF。根据老黄历信号,忌开市开仓,否则平仓。 ```py start = '2015-01-01' # 回测起始时间 end = '2015-12-31' # 回测结束时间 benchmark = 'HS300' # 策略参考标准 universe = ['510310.XSHG'] # 股票池 # 策略参考标准 refresh_rate = 1 # 调仓频率,即每 refresh_rate 个交易日执行一次 handle_data() 函数 def initialize(account): # 初始化虚拟账户状态 pass def handle_data(account): # 每个交易日的买入卖出指令 today=account.current_date.strftime('%Y%m%d') for stk in account.universe: if today in sell_date: order_pct_to(stk, 1) else: if stk in account.avail_secpos: order_to(stk, 0) ``` ![](https://box.kancloud.cn/2016-07-30_579cbdb5e1e63.jpg) 观察策略结果,虽然A,B都显著跑输大盘,但是A相对B仍然有5%的超额收益。真是应了那句老话: ![](https://box.kancloud.cn/2016-07-31_579d7a030af90.jpg) 本策略告诉小散:炒股有风险,新手慎入。 `老黄历诊股.csv` 数据来源: 1、`DataAPI.TradeCalGet` 得到交易日历,下载到本地。 2、根据汉典老黄历开市日历为`isOpen`字段赋值,宜开市为1,忌开市为-1,无提示为0。 3、上传到Data使用。 ```py print "Buydate:",buy_date print "Selldate:",sell_date Buydate: [u'20150108', u'20150114', u'20150115', u'20150120', u'20150211', u'20150217', u'20150226', u'20150304', u'20150306', u'20150311', u'20150312', u'20150316', u'20150318', u'20150330', u'20150401', u'20150408', u'20150420', u'20150424', u'20150506', u'20150513', u'20150515', u'20150520', u'20150521', u'20150525', u'20150527', u'20150612', u'20150619', u'20150625', u'20150701', u'20150707', u'20150708', u'20150713', u'20150714', u'20150720', u'20150722', u'20150806', u'20150819', u'20150820', u'20150831', u'20150901', u'20150902', u'20150908', u'20150910', u'20150914', u'20151009', u'20151021', u'20151027', u'20151102', u'20151106', u'20151110', u'20151111', u'20151117', u'20151120', u'20151204', u'20151216'] Selldate: [u'20150106', u'20150119', u'20150122', u'20150126', u'20150129', u'20150130', u'20150203', u'20150212', u'20150213', u'20150216', u'20150305', u'20150319', u'20150326', u'20150331', u'20150402', u'20150403', u'20150409', u'20150416', u'20150423', u'20150427', u'20150428', u'20150430', u'20150505', u'20150512', u'20150522', u'20150526', u'20150605', u'20150616', u'20150626', u'20150702', u'20150715', u'20150723', u'20150727', u'20150729', u'20150807', u'20150817', u'20150825', u'20150826', u'20150828', u'20150907', u'20150915', u'20150916', u'20150917', u'20150923', u'20150925', u'20150928', u'20150929', u'20151015', u'20151016', u'20151022', u'20151028', u'20151029', u'20151030', u'20151103', u'20151104', u'20151112', u'20151116', u'20151119', u'20151124', u'20151127', u'20151201', u'20151202', u'20151203', u'20151211', u'20151218', u'20151221', u'20151223', u'20151224', u'20151225', u'20151228', u'20151230'] ```