为4个ETF都加一个RSRS,发现效果很差,不如单独的动量因子。
关键买卖逻辑如下:
#对所有的4个ETF进行打分
# 过滤条件:tuple的第二个值是否>0,且trade_signal中该股票的Value为"KEEP"或"BUY"
filtered_stocks = [stock[0] for stock in stock_pool if stock[1] > 0 and g.trade_signal.get(stock[0]) in ["KEEP", "BUY"]]
# 根据stock_pool的预测收益值排序,从大到小
filtered_stocks.sort(key=lambda x: stock_pool[[y[0] for y in stock_pool].index(x)][1], reverse=True)
print('0:当前持仓的stock_hold:{}'.format(stock_hold))
print('0:期望的stock_pool:{}'.format(stock_pool))
print('0:期望的g.trade_signal{}'.format(g.trade_signal))
print('0:过滤后的filtered_stocks{}'.format(filtered_stocks))
#首先判断当前股票是否在需要卖出的股票清单里
for stock in stock_hold:
if stock not in filtered_stocks:
print('1.平仓逻辑:{}'.format(stock))
order_target_value(stock, 0)
for stock in filtered_stocks:
if stock in stock_hold and (g.trade_signal[stock] == "BUY" or g.trade_signal[stock] == "KEEP") :
print('2.继续持有逻辑:{}'.format(stock))
print("已持有,不调仓")
break
elif stock not in stock_hold and g.trade_signal[stock] == "BUY":
print('3.新购逻辑:{}'.format(stock))
value = context.portfolio.available_cash / g.stock_number
order_target_value(stock, value)
break
else:
print('4.空仓逻辑:当前ETF{},即不满足继续持有,也不满足新购逻辑,估计要空仓'.format(stock))