@@ -31,7 +31,6 @@ def _init_self(self, **kwargs):
3131
3232 # 下面的代码和AbuFactorBuyBase的实现一摸一样
3333 self .xd = kwargs ['xd' ]
34- self .skip_days = 0
3534 self .factor_name = '{}:{}' .format (self .__class__ .__name__ , self .xd )
3635
3736 def fit_month (self , today ):
@@ -46,7 +45,7 @@ def fit_month(self, today):
4645 end_key = int (benchmark_today .ix [0 ].key )
4746 start_key = end_key - 20
4847 if start_key < 0 :
49- return 0
48+ return False
5049
5150 # 使用切片切出从今天开始向前20天的数据
5251 benchmark_month = benchmark_df [start_key :end_key + 1 ]
@@ -68,15 +67,14 @@ def fit_day(self, today):
6867 return None
6968
7069 # 下面的代码和AbuFactorBuyBase的实现一摸一样
71- day_ind = int (today .key )
72- if day_ind < self .xd - 1 or day_ind >= self .kl_pd .shape [0 ] - 1 :
73- return None
74- if self .skip_days > 0 :
75- self .skip_days -= 1
70+ if self .today_ind < self .xd - 1 :
7671 return None
77- if today .close == self .kl_pd .close [day_ind - self .xd + 1 :day_ind + 1 ].max ():
72+ # 今天的收盘价格达到xd天内最高价格则符合买入条件
73+ if today .close == self .kl_pd .close [self .today_ind - self .xd + 1 :self .today_ind + 1 ].max ():
74+ # 把突破新高参数赋值skip_days,这里也可以考虑make_buy_order确定是否买单成立,但是如果停盘太长时间等也不好
7875 self .skip_days = self .xd
79- return self .make_buy_order (day_ind )
76+ # 生成买入订单, 由于使用了今天的收盘价格做为策略信号判断,所以信号发出后,只能明天买
77+ return self .buy_tomorrow ()
8078 return None
8179
8280
@@ -94,20 +92,18 @@ def fit_day(self, today):
9492 :param today: 当前驱动的交易日金融时间序列数据
9593 :return:
9694 """
97- # key是金融时间序列索引
98- day_ind = int (today .key )
99- # 忽略不符合买入的天(统计周期内前第1天及最后一天)
100- if day_ind == 0 or day_ind >= self .kl_pd .shape [0 ] - 1 :
95+ # 忽略不符合买入的天(统计周期内前第1天, 因为要用到昨天的交易数据)
96+ if self .today_ind == 0 :
10197 return None
10298
10399 # 今天的涨幅
104100 td_change = today .p_change
105101 # 昨天的涨幅
106- yd_change = self .kl_pd .ix [day_ind - 1 ].p_change
102+ yd_change = self .kl_pd .ix [self . today_ind - 1 ].p_change
107103
108104 if td_change > 0 and 0 < yd_change < td_change :
109- # 连续涨两天, 且今天的涨幅比昨天还高 ->买入
110- return self .make_buy_order ( day_ind )
105+ # 连续涨两天, 且今天的涨幅比昨天还高 ->买入, 用到了今天的涨幅,只能明天买
106+ return self .buy_tomorrow ( )
111107 return None
112108
113109
@@ -178,11 +174,8 @@ def _init_self(self, **kwargs):
178174 """
179175 # 突破参数 xd, 比如20,30,40天...突破, 不要使用kwargs.pop('xd', 20), 明确需要参数xq
180176 self .xd = kwargs ['xd' ]
181- # 忽略连续创新高,比如买入后第二天又突破新高,忽略
182- self .skip_days = 0
183177 # 在输出生成的orders_pd中显示的名字
184178 self .factor_name = '{}:{}' .format (self .__class__ .__name__ , self .xd )
185-
186179 # 添加了通过AbuFactorBuyBreakUmpDemo记录训练好的决策器
187180 self .hit_ml = kwargs ['hit_ml' ]
188181
@@ -248,14 +241,12 @@ def fit_day(self, today):
248241 """
249242 self .pg .show ()
250243
251- # key是金融时间序列索引
252- day_ind = int (today .key )
253- # 忽略不符合买入的天(统计周期内前两天及最后一天),因为btc的机器学习特证需要三天交易数据
254- if day_ind < 2 or day_ind >= self .kl_pd .shape [0 ] - 1 :
244+ # 忽略不符合买入的天(统计周期内前两天, 因为btc的机器学习特证需要三天交易数据)
245+ if self .today_ind < 2 :
255246 return None
256247
257248 # 今天,昨天,前天三天的交易数据进行特证转换
258- btc = self .kl_pd [day_ind - 2 :day_ind + 1 ]
249+ btc = self .kl_pd [self . today_ind - 2 :self . today_ind + 1 ]
259250 # 三天的交易数据进行转换后得到btc_today_x
260251 btc_today_x = self .make_btc_today (btc )
261252
@@ -265,7 +256,8 @@ def fit_day(self, today):
265256 # 买入条件1: 当日这100个股票60%以上都是上涨的
266257 vote_val = self .similar_predict (today .date )
267258 if vote_val > self .btc_vote_val :
268- return self .make_buy_order (day_ind - 1 )
259+ # 没有使用当天交易日的close等数据,且btc_ml判断的大波动是当日,所以当日买入
260+ return self .buy_today ()
269261
270262 # noinspection PyUnresolvedReferences
271263 def make_btc_today (self , sib_btc ):
0 commit comments