请求各位前辈大哥看一下这段代码问题出在哪里

 

  有时会重复开单  于是就想用bars判定一下  但是不行 用itime也不行  我记得mt4用time[0]就可以     不知道错在哪里  请高手指点一下啊  谢谢



int dd=0;

    int bars=Bars(_Symbol,_Period);

  

      if(PositionsTotal()==0)

        {


         if(dd!=bars && ....................... )


           {

            buy();

            dd=bars;

           }

 
mufeng666:

  有时会重复开单  于是就想用bars判定一下  但是不行 用itime也不行  我记得mt4用time[0]就可以     不知道错在哪里  请高手指点一下啊  谢谢



int dd=0;

    int bars=Bars(_Symbol,_Period);

  

      if(PositionsTotal()==0)

        {


         if(dd!=bars && ....................... )


           {

            buy();

            dd=bars;

           }

简单看了一下,括号是(中文括号),少了一个 }

 
Tiecheng Fu:

简单看了一下,括号是(中文括号),少了一个 }

不是我的意思是 怎么防止ea在同一个k线上重复开单  

 
mufeng666:

不是我的意思是 怎么防止ea在同一个k线上重复开单  

个人是用时间。如果当前持仓订单中的最大开仓时间大于了当前柱的开盘时间, 返回;当然,用小于来判断进入也可。

 
Lin Luo:

个人是用时间。如果当前持仓订单中的最大开仓时间大于了当前柱的开盘时间, 返回;当然,用小于来判断进入也可。

我是用close[1]开单的,close[1]>close[2] 就开单  随后止损后  ,由于close[1]>close[2]条件还成立,于是就又开单了。
以前MT4用time[0]判定一下就可以了,但是同样的逻辑在mt5上不管用了
 
mufeng666:
我是用close[1]开单的,close[1]>close[2] 就开单  随后止损后  ,由于close[1]>close[2]条件还成立,于是就又开单了。
以前MT4用time[0]判定一下就可以了,但是同样的逻辑在mt5上不管用了
建議你print時間的值出來就知道如何處理
 
mufeng666:
我是用close[1]开单的,close[1]>close[2] 就开单  随后止损后  ,由于close[1]>close[2]条件还成立,于是就又开单了。
以前MT4用time[0]判定一下就可以了,但是同样的逻辑在mt5上不管用了

我说的是“ 当前持仓订单中的最大开仓时间 ”,不是 close[1], close[1]不是“ 当前持仓订单中的最大开仓时间 ” ,得遍历订单,从订单中找到这个最大的时间(即订单的OrderOpenTime())再来比较。

如果是止损后不想再开单,得从历史订单中去找平仓订单中的最大开仓时间。

 
Lin Luo:

我说的是“ 当前持仓订单中的最大开仓时间 ”,不是 close[1], close[1]不是“ 当前持仓订单中的最大开仓时间 ” ,得遍历订单,从订单中找到这个最大的时间(即订单的OrderOpenTime())再来比较。

如果是止损后不想再开单,得从历史订单中去找平仓订单中的最大开仓时间。

哦 谢谢哈 我好像明白您表达的意思了  就是用开仓时间和现在这根k线时间比较一下  如果相等表示还在这跟k线 嗯嗯 好的  谢谢   我发现如果获取最后一单的时间是不用遍历的 直接用函数获取就是最后一个

 
Yip Sin Hang:
建議你print時間的值出來就知道如何處理

time[0] 和itime 我都print了  一模一样

 
用K线的开盘时间iTime(),同一K线开盘时间只开一次就可以了。
 
Wen Tao Xiong:
用K线的开盘时间iTime(),同一K线开盘时间只开一次就可以了。
嗯嗯  谢谢老铁指点
原因: