回溯测试多货币EA - 页 2

 
在我的案例中,解决方案是IsNewBar()方法,并切换到 "Every Tick "执行方法,除非我的EA只在开放价格 上工作。
Documentation on MQL5: Standard Constants, Enumerations and Structures / Indicator Constants / Price Constants
  • www.mql5.com
Standard Constants, Enumerations and Structures / Indicator Constants / Price Constants - Documentation on MQL5
 
trendick:

阿里,我上面提到的例子是你提到的EA,它是你提到的IsNewBar()函数的来源,并且已经使用了它。

你怎么解释这个?

我说的是我的EA,它在两个符号上交易。一个符号 用ontick()获得 数据

另一个使用Isnewbar()。

当我改变它们获取数据的方式时,结果是一样的。你可以尝试一下,比较一下结果。我还尝试像上面讨论的EA一样,用isnewbar获取两个报价,也有同样的问题,但是用ontick()获取原始符号的报价,问题就解决了。

当然,测试器是有问题的,我只是展示了我是如何得到我想要的结果的。

 
kgo:
在我的例子中,解决方案是IsNewBar()方法,并切换到 "Every Tick "执行方法,除非我的EA只在开盘价 上工作。

你能详细说明一下吗? 也许可以用一个代码片段来证明? 你能处理3种货币吗?
 
trendick:
你能详细说明一下吗? 也许可以用一个代码片段来演示? 你能处理3种货币吗?

好的,我明白你的意思。其中一个货币对用于触发一个新的条形图,对于其他货币对,你可以立即读取点子。

 

Kgo,但这仍然不能解决我的问题。能否请你展示一下你的工作片段?

谢谢,trendick

 
谢谢TheEconmist!(我以为你们坚持随机行走的假设......:-)):我马上就去查这个。
 
我做了一些新的测试,我之前的帖子是不正确的。IsNewBar()方法并没有帮助。TheEconomist展示了一个很好的例子,对于多货币EA来说,OnTick()应该如何实现。
 
你能相信我甚至不知道这个IsNewBar()方法在哪里?哪个类?
 
TheEconomist:
你能相信我甚至不知道这个IsNewBar()方法在哪里吗?哪个类?

我们指的是第105条的方法。这里是(只有开头和结尾是相关的)。

在这里,它是。

/+X================================================================X+
//| IsNewBar() function                                              |
//+X================================================================X+
bool IsNewBar(int Number,string symbol,ENUM_TIMEFRAMES timeframe)
  {
//----+
   static datetime Told[];
   datetime Tnew[1];
//----+ Declare variable to store sizes of variables arrays
   static int Size_=0;

//----+ Change size of variables arrays
   if(Number+1>Size_)
     {
      uint size=Number+1;
      //----
      if(ArrayResize(Told,size)==-1)
        {
         string word="";
         StringConcatenate(word,"IsNewBar( ",Number,
                           " ): Error!!! Unable to change sizes of variables arrays!!!");
         Print(word);
         //----          
         int error=GetLastError();
         ResetLastError();
         if(error>4000)
           {
            StringConcatenate(word,"IsNewBar( ",Number," ): Error code ",error);
            Print(word);
           }
         //----                                                                                                                                                                                                  
         Size_=-2;
         return(false);
        }
     }

   CopyTime(symbol,timeframe,0,1,Tnew);
   if(Tnew[0]!=Told[Number])
     {
      Told[Number]=Tnew[0];
      return(true);
     }
//----+
   return(false);
  }