错误、漏洞、问题 - 页 3133

 
Yury Lemeshev #:

要保持一致。如果你检查

SymbolIsSynchronized(euSY01)==true

然后检查和

(euSY01b>0)==true

:)

 
Yury Lemeshev #:

如果你这样做,而代码中存在7个这样的行,用于7个货币对,那么市场概览将只有一种货币的报价。


昂贵的函数,我会通过与前一个值相等来绕过它。
 
JRandomTrader #:

要保持一致。如果你检查

然后检查和

:)

(euSY01b>0)==true

这比只是

euSY01b>0
 
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURJPY false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURCAD false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURCHF false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURGBP false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURAUD false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURNZD false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURUSD true
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURJPY false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURCAD false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURCHF false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURGBP false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURAUD false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURNZD false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURUSD true


如果你检查同步性,它只对一种货币起作用。我需要一次分析7种货币。

 
Yury Lemeshev #:
如果你检查同步,它只对一种货币起作用。但我需要一次分析7种货币。

我需要在OnInit()中做到这一点。

// Потрогаем символ, иначе в тестере не грузит историю
 for(int i=0;i<CountSymbol;i++) {
   iClose(SymbTrade[i],PERIOD_CURRENT,1);
 }
 
Yury Lemeshev #:
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURJPY false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURCAD false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURCHF false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURGBP false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURAUD false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURNZD false
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURUSD true
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURJPY false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURCAD false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURCHF false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURGBP false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURAUD false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURNZD false
2022.01.02 11:03:22.330 2019.01.02 07:56:42 EURUSD true


如果你检查同步性,它只对一种货币起作用。而我一会儿需要分析一下7种货币。

作为一个拐杖,你可以试着记住这对组合最后一次同步的时间,并将其作为一个参考。

此外,你还可以使用SymbolInfoTick()来获取卖价和买价。

 

就像true == true,结果是true。而false == true,结果是false :)

这正是你得到的结果,如果

if (true) { // управление передается коду в скобках
  ...
}

if (false) { // управление не передаётся коду в скобках
  ...
}

// в if не 0 - true
if (1) {
  ...
}

if (-1) {
  ...
}

// в if 0 - false
if (0) {
  ...
}
 
Yury Lemeshev #:

如果你这样做,并且在代码中存在7个这样的行,用于7个货币对,那么市场概览将只显示一种货币的报价。


尝试在OnTick中调用Bars

https://www.mql5.com/ru/docs/series/bars

摘自文章。

   int bars=Bars(_Symbol,_Period);
   if(bars>0)
     {
      Print("Количество баров в истории терминала по символу-периоду на данный момент = ",bars);
     }
   else  //нет доступных баров
     {
      //--- видимо, данные по символу не синхронизированы с данными на сервере
      bool synchronized=false;
      //--- счетчик цикла
      int attempts=0;
      // сделаем 5 попыток дождаться синхронизации
      while(attempts<5)
        {
         if(SeriesInfoInteger(Symbol(),0,SERIES_SYNCHRONIZED))
           {
            //--- есть синхронизация, выходим
            synchronized=true;
            break;
           }
         //--- увеличим счетчик
         attempts++;
         //--- подождем 10 миллисекунд до следующей итерации
         Sleep(10);
        }
      //--- вышли из цикла по факту синхронизации
      if(synchronized)
        {
         Print("Количество баров в истории терминала по символу-периоду на данный момент = ",bars);
         Print("Самая первая в истории терминала дата по символу-периоду на данный момент = ",
               (datetime)SeriesInfoInteger(Symbol(),0,SERIES_FIRSTDATE));
         Print("Самая первая дата в истории по символу на сервере = ",
               (datetime)SeriesInfoInteger(Symbol(),0,SERIES_SERVER_FIRSTDATE));
        }
      //--- синхронизация данных так и не была достигнута
      else
        {
         Print("Не удалось получить количество баров на ",_Symbol);
        }
     }
另外,在OnTick中对价格的引用应该是(这样才能加载第三方字符)。
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Bars - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Mihail Matkovskij #:

尝试在OnTick中调用Bars

https://www.mql5.com/ru/docs/series/bars

摘自文章。

另外,在OnTick中应该有一个对价格的参考(以便加载第三方字符)。

这并没有解决原来的问题

SymbolInfoDouble(euSY06,SYMBOL_BID,euSY06b)在正确使用时总是被填入一个值。由于某些原因,所需符号的正确值没有出现。而它似乎是用之前收到的价值来填补,也就是其他七种货币之一的价值。

如果没有解决方案,而这个解决方案我找了一个多月,我觉得它只是一个错误测试器。开发人员请注意这一点。如果它是一个bug,那么就修复它
 
Vitaly Muzichenko #:

我需要在OnInit()中做的是

但是,当我测试我的一个多符号指标时,输入参数字符串中的符号列表在OnInit中被加载。 而它们的价格在OnCalculate中被访问。 此外,当我设置从Market Watch加载符号时,只有一个基本符号出现在测试器中。