文章 ""New Bar" (新柱)事件处理程序" - 页 5

 
tito.vinicius:

目前,我的 EA 在同一蜡烛上打开多个订单。我认为这篇文章中的材料会对我有所帮助。

我该如何实施?


您可以将交易进入逻辑从 OnTick() 事件中移出,放到 OnNewBar() 函数中。这样,只有在出现新的条形图时才会执行,而不会在同一蜡烛图上多次进入,因为一旦执行,它只会在下一根蜡烛图上再次执行。

 
非常感谢你提供的这张漂亮的纸 - 非常感谢你的努力!
 

好文章。

谢谢!

 

非常好,谢谢、

我希望能有一个 MQL5库函数,但似乎没有。我有一个模块化交易库,我遇到的问题是,信号模块会设置其 IsNewBar 标志并覆盖 prevCandleTime,而当 TrailingSL 模块必须评估相同函数时,由于 prevCandleTime 与当前时间相同,所以返回 false。

是的,我可以将结果存储在一个中央标志中,并将其用于所有模块,这样就不会出现这种情况了,但这些模块可以在不同的时间框架上运行,因此这个解决方案太完美了,谢谢。

 
文章内容丰富,非常感谢
 
谢谢,这是检测新酒吧的最佳方法! :)
 
在我看来,有时我们会把事情搞得过于复杂。出于实际原因,即使从性能上讲,也没有什么能比系统时间(窗口时间)更快。在下一分钟开始时,或者为了确定起见,在几秒钟后,我们可以假设每个符号都会有一个新的条形图。比如说一分钟、五分钟、十五分钟,或者任何你想要的时间范围。当然,你也可以 检查 条形图时间和系统时间是否一致。

但是,当我们都知道何时会出现新的条形图时,就没有必要为了检查是否有新的条形图而创建该类的多个实例了。


 
double Old_open, New_open;
bool  NewBar = false;

int OnInit()
  {
        //---------- 

        Old_open = iOpen(Symbol(),PERIOD_CURRENT,0);
        
        //---------- 

        return(INIT_SUCCEEDED);
  }
void OnTick()
  {
        //---
        New_open = iOpen(Symbol(),PERIOD_CURRENT,0);
        if (New_open != Old_open)
           {
               Print("有家新酒吧要开张了", TimeCurrent());
               NewBar = true;
               Old_open = New_open;
           }
        else NewBar = false;
         
  }

你好,我认为只要 Open() 报价出现,就意味着新的条形图 出现了。我认为这样做更简单,还是我遗漏了什么?

 
Max Go 新的条形图 出现了。我认为这样更简单,还是我遗漏了什么?

试想一下,当新条形图的开盘价等于上一条形图的开盘价时....。在小型 TF 上很有可能出现这种情况。

 

我没有比这更简单的方法了。
跟踪当前条形图的开盘时间,并在每个刻度线进行比较。

// 我没有比这更简单的方法了。
// 跟踪当前条形图的开盘时间,并在每个刻度进行比较。

double lastTime = 0;

void OnTick() {

   if(isNewBar()){

      Print("New Bar");

     }

}



bool isNewBar() {

   double thisTime= NormalizeDouble(iTime(_Symbol, PERIOD_CURRENT, 0), _Digits);

   if(lastTime != thisTime) {

      lastTime = thisTime;

      return true;

     }

   return false;

  }

Документация по MQL5: Преобразование данных / NormalizeDouble
Документация по MQL5: Преобразование данных / NormalizeDouble
  • www.mql5.com
NormalizeDouble - Преобразование данных - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5