while True:
api.wait_update()
if api.is_changing(klines_m5.iloc[-1]) :
macd_m5=MACD(klines_m5,12,26,9)
macd_m5_diff=macd_m5[\"diff\"]
macd_m5_dea=macd_m5[\"dea\"]
macd_m5向下 = macd_m5[\"diff\"].iloc()[-1]<0 and macd_m5[\"diff\"].iloc()[-1]<macd_m5[\"diff\"].iloc()[-2] # diff小于0,diff向下
macd_m5向上 = macd_m5[\"diff\"].iloc()[-1]>0 and macd_m5[\"diff\"].iloc()[-1]>macd_m5[\"diff\"].iloc()[-2]
当前委托 = order.volume_left # 未成交的委托手数
空头老仓 = position[\'pos_short_his\']
空头今仓 = position[\'pos_short_today\']
多头老仓 = position[\'pos_long_his\']
多头今仓 = position[\'pos_long_today\']
浮动盈亏 = position.float_profit # 当前品种相对于开仓价的盈亏
# ------------------------------------------------------------
if (当前委托 ==0 or 当前委托 =={} ) and (空头老仓 ==0 or 空头老仓 =={} ) and (空头今仓 ==0 or 空头今仓 =={} )and (多头老仓 ==0 or 多头老仓 =={} )and (多头今仓 ==0 or 多头今仓 =={} ): # 无委托 无仓位
if kdj_m1死叉==1 and kdj_m30向下 and macd_m5向下 : # 判断做空条件
target_pos.set_target_volume(-1) # 执行做空命令
else:pass
# ------------------------------------
elif ( 空头老仓 >0 or 空头今仓 >0 ) : # 判断是否持有空单
if (浮动盈亏>30 or 浮动盈亏<-60 ): # 空单平仓
target_pos.set_target_volume(0)
else:pass
else:pass
api.close() # 关闭api
上述代码 在运行时 存在 出现信号后连续不断开仓的情况,但不是每次都出现,有一定概率。
关于 target_pos.set_target_volume(-1) 设置目标持仓手数,是不是这样理解的:
如果现在持有一手空单,后面出现开空单信号,目标仓位已经提前达到了,这个target_pos.set_target_volume(-1)不会有动作再去开单了。
ringo 已回答的问题 2019年12月31日
目标仓位已经达到的情况下是无不会再去开单
如果想加强了解可以参考targetpostask的源码:https://github.com/shinnytech/tqsdk-python/blob/master/tqsdk/lib.py
ringo 已回答的问题 2019年12月31日