我来扔块砖头。handle_data函数居然在7个时点重复了7次相同的语句,是copy+paste编辑的代码吧。这显然是个很不好的习惯。改成这样,会清晰的多。
```python
# 开盘时运行函数
def market_open(context):
# 下季合约
IF_next_quarter = g.IF_next_quarter
c_time = context.current_dt.strftime('%H:%M')
if c_time in ['09:31', '10:31', '11:01', '13:05', '13:35', '14:05', '14:35']:
signal = get_signal(context)
log.info('signal =', signal)
if signal == 1 and len(context.portfolio.long_positions) == 0:
order_target_value(IF_next_quarter, context.portfolio.cash * 0.25, side='long')
log.info('多单开仓')
elif signal == 1 and len(context.portfolio.long_positions) != 0:
log.info('继续持有多单')
elif signal == -1 and len(context.portfolio.short_positions) == 0:
order_target_value(IF_next_quarter, context.portfolio.cash * 0.2, side='short')
log.info('空单开仓')
elif signal == -1 and len(context.portfolio.short_positions) != 0:
log.info('继续空单')
elif signal == 0 and len(context.portfolio.positions) == 0:
log.info('暂时空仓')
elif signal == 0 and len(context.portfolio.positions) != 0:
sell_long_pos(context)
sell_short_pos(context)
log.info('平所有仓位')
# 获取信号:1认定为上涨趋势,-1认定人下降趋势,0为震荡市,其中震荡市不开仓
def get_signal(context):
# signal = 0
slope_flag = ma_slope('000300.XSHG')
current_price = get_current_price('000300.XSHG')
price_n_ma = get_stock_avg_price('000300.XSHG', g.nMa)
if slope_flag > g.SlopeLong and current_price > price_n_ma:
signal = 1
elif slope_flag < g.SlopeShort:
signal = -1
else:
signal = 0
#
return signal
```
2019-12-01