3.62K 浏览
0

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日
0

目标仓位已经达到的情况下是无不会再去开单

如果想加强了解可以参考targetpostask的源码:https://github.com/shinnytech/tqsdk-python/blob/master/tqsdk/lib.py

ringo 已回答的问题 2019年12月31日