错误、漏洞、问题 - 页 343

 
Kairoser:

下午好!

在升级到420版本后,我开始测试我的EA,发现它由于某种原因开始 "丢失"。我分析了我的交易,发现止损是在不存在的价格上触发的。例如,我在欧元兑美元上设置了1.06520的止损,但它是有效的,尽管最大的价格 是1.05920。当我进一步看时,我看到很多这样的交易。获利是通过同样的原则触发的(在不存在的价格)--三角洲是相同的--600点。在图表上的测试器中,上下箭头 "挂 "在空中,离条状物很远。

附上一张截图。

请在MetaQuotes-Demo上运行测试。Alpari有一个公然错误的(在传播)图表历史。
 
Renat:
请在MetaQuotes-Demo上运行测试。Alpari有一个公然错误的(在传播)图表历史。
是的,确实如此,在MetaQuotes-Demo服务器上,一切工作正常。谢谢你的帮助。
 

有几个问题值得关注。

1.如果在策略测试器中使用了指标,系统是如何工作的?首先,所有的指标都要计算手柄,然后才启动OnTick?

2.如果是的话,最好是先启动OnTick,然后运行一个命令来计算所附的指标。因此,例如我不需要在每个五位数的刻度上计算指标,而只需要在四位数上计算。当我启动OnTick时,我检查当前和之前的价格并决定是否开始计算指标

因为如果有很多,而且相当 "重",它们在优化模式下会消耗资源......

虽然,你可以尝试在ontick中创建句柄,并在结束时删除指标,在下一次ontick开始时(如果有必要)再次创建句柄--目前还不清楚这是否能提高性能...

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
olyakish:

有几个问题值得关注。

1.如果在策略测试器中 使用了指标,系统是如何工作的?首先,所有的指标都要计算手柄,然后才运行OnTick?

是的,更普遍的答案是--所有的指标值都是在每次调用事件处理程序之前计算的。

  • 控件
  • 计时器
  • 在图表事件中,以此类推
 
olyakish:
2.如果是,那么先运行OnTick,然后用这个命令运行所附指标的计算,将是非常有用的。例如,我不需要在每个五位数的刻度上计算指标,而只需要在四位数上计算。当我启动OnTick时,我检查当前和之前的价格并决定是否开始计算指标

因为如果它们有很多,而且相当 "重",它们在优化模式下会吃掉资源......

你不能这样做。你可以使用更快的tick生成模式进行测试。

  1. 分钟柱上的OHLC价格
  2. 只有被测试时期的公开价格
 
Rosh:

你不能这样做。你可以使用更快的tick生成模式 进行测试。

  1. 分钟柱上的OHLC价格
  2. 仅测试期间的开盘价
我知道这些模式和它们的特殊性。我只是想以一种合理(可能是最佳)的方式加快优化。
 

帮帮忙,数据转换 功能不想工作,写了一个简单的脚本来测试。Build 420,64位操作系统。

void OnStart()
  {
//---
   int i=0;
   bool res=false;
   string stroka1;
   string stroka2;
   string stroka3;
   string stroka4;
   string stroka5;

   datetime buf1;
   double   buf2;
   double   buf3;
   double   buf4;
   double   buf5;
   
   int filehandle=FileOpen("56451.csv",FILE_READ|FILE_CSV|FILE_ANSI,',',CP_UTF8);

   if(filehandle==INVALID_HANDLE)Print("Ошибка № - ",GetLastError());
   else
     {

      while(!res)
        {
         stroka1 = FileReadString(filehandle);
         stroka2 = FileReadString(filehandle);
         stroka3 = FileReadString(filehandle);
         stroka4 = FileReadString(filehandle);
         stroka5 = FileReadString(filehandle);

         buf1 = StringToTime(stroka1);
         buf2 = StringToDouble(stroka2);
         buf3 = StringToDouble(stroka3);
         buf4 = StringToDouble(stroka4);
         buf5 = StringToDouble(stroka5);

         res=FileIsEnding(filehandle);
         i++;
        }
      FileClose(filehandle);
     }
  }
//+------------------------------------------------------------------+
附加的文件:
56451.zip  16 kb
 
sergey1294:

帮帮忙,数据转换功能不想工作,写了一个简单的脚本来测试。Build 420,64位操作系统。


在任何阶段摆脱引号....
 
AlexSTAL:
摆脱任何阶段的倒装逗号....
你是如何做到这一点的?
 
sergey1294:
你是如何做到这一点的?

要么确保它们最初不在文件中,要么在读取时应用一个额外的函数,例如。

string StringWithoutQuotes(string Value)
{
   StringTrimLeft(Value);
   StringTrimRight(Value);
   return(StringSubstr(Value, 1, StringLen(Value) - 2));
}

..........

         stroka1 = StringWithoutQuotes(FileReadString(filehandle));
         stroka2 = StringWithoutQuotes(FileReadString(filehandle));