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日