基于MarketPosition == 0条件判断开仓,为什么会重复开仓?



我在前面的那根阴线已经开了2手多单,但是为什么在画圈的这根K线又建了2手多单呢?


打印出来的MarketPosition也是1.

代码如下:



有开仓逻辑限制,为什么还会重复开仓?
信号闪烁导致重复开仓
MarketPosition==0 无法控制已开仓的合约继续加仓
信号闪烁造成重复开仓的问题反馈
多个开仓方式执行顺序和判断问题
MarketPosition判断问题
我设置了检测持仓,为什么偶尔还是会重复下单?
策略没有开仓指令运行时怎么会产生开仓操作
PlayWavSound函数触发单一条件开仓时,单根K线多次重复语音播报问题
定义一个变量,判断上次均线交叉后是否有开仓,若有开仓返回1,否则返回0。应该怎么写这个变量表达式?

又在交易条件里看到global了

是global的问题吗

建议你看一下零基础课程吧。

一般新手我是不建议用globa类型作为交易信号的状态条件。

global不是说不行,只是如果没有设计好业务逻辑就很容易出错,99%会信号闪烁。

当然有一些熟练的开发者也是会用global作为交易信号的状态条件

这个熟练的前提,最基本也要求两条

第一条非常了解onbar行情驱动的机制

第二条非常了解global数据结构的特性

这两条你可以问问自己评估一下

如果得不到答案,我建议你先看一下零基础课程。

https://video.tbquant.net/?menu=%E9%9B%B6%E5%9F%BA%E7%A1%80%E5%AD%A6%E9%87%8F%E5%8C%96

是否跟我定义的变量有关系,之前定义的是series类型

 另外,我前面写了均线止损逻辑,不知道会不会对下面的开仓逻辑有影响?

AvgValue20 = AverageFC(Close,MALength);

     

       PlotNumeric("MA20",AvgValue20);

       

       

       //空单止损

       if(Close[1]<=AvgValue20[1] && Close>AvgValue20)

       {

           myExitPrice = Close;

//            myExitPrice = IIF(myExitPrice < Open, Open,myExitPrice); // 大跳空的时候用开盘价代替

//            BuyToCover(0,myExitPrice);    // 数量用0的情况下将全部平仓

//            CanOpenShort = True;

           If(BuyToCover(0,myExitPrice))

               {//下单成功,做多标识取消

                   CanOpenShort=True;

               }

       }

       

       //多单止损

       if(Close[1]>=AvgValue20[1] && Close<AvgValue20)

       {

           myExitPrice = Close;

//            myExitPrice = IIF(myExitPrice > Open, Open,myExitPrice); // 大跳空的时候用开盘价代替

//            Sell(0,myExitPrice);    // 数量用0的情况下将全部平仓

//            PreBreakoutFailure = True;

//            CanOpenLong = True;

           If(Sell(0,myExitPrice))

               {//下单成功,做多标识取消

                   CanOpenLong=True;

               }

       }

       

     

11.3

今天又出现这个问题了。

在11.3收盘的时候又出现下单了,从图上可以看出,我在下单之前用了MarketPosition 。CanOpenLong做了双重控制,还是可以重复开多单。消息中心未出现闪烁信号。


onbarclose设置执行的时间是:

看看消息中心有没有那个闪烁提示

正常开仓没问题,你已有仓位了A,MarketPosition ==0条件1不附合,那往下走条件2附合,B附合走条件3开仓。1、改MarketPosition <=0,2、查B有仓位了是False,为什么变成True了,3、把3删IF(..........)

按说1条件不符合,应该就走不进去了,为啥还要判断2 、和3 呢?