Ошибки, баги, вопросы - страница 3133

 
Yury Lemeshev #:

Будьте последовательны. Если проверяете

SymbolIsSynchronized(euSY01)==true

то проверяйте и

(euSY01b>0)==true

:)

 
Yury Lemeshev #:

Если делать так, а в коде 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 валют.

Нужно сделать в ОнИнит() 

// Потрогаем символ, иначе в тестере не грузит историю
 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 валют.

Как костыль, можно попробовать запоминать время, когда пара последний раз была синхронизирована, и отталкиваться от этого.

Также, для ask и bid можно использовать SymbolInfoTick()

 

это всё равно что true == true, результат: true. а false == true, результат: false :)

именно этот результат и получает if

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

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

или 

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

if (-1) {
  ...
}

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

Если делать так, а в коде 7 таких строк для семи пар, то в обзоре рынка будут котировки только по одной валюте.


попробуйте вызвать Bars в OnTick

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 #:

попробуйте вызвать Bars в OnTick

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

из статьи:

также, обращение к ценам в OnTick должно быть (чтобы сторонние символы погрузились).

Это не решает проблемы изначальной

SymbolInfoDouble(euSY06,SYMBOL_BID,euSY06b) при правильном использовании всегда заполняется значением. По каким то причинам правильное значение по нужному символу не приходит. И заполнение происходит видимо по предыдущему полученому значению, а это значение одной из других семи валют.

Если нет какого то решения, а это решение я ищу уже не первый месяц, то я чувствую что юто просто баг тестера. Разработчики уделите пожалуйста этому внимание. Если это баг исправте
 
Vitaly Muzichenko #:

Нужно сделать в ОнИнит() 

точно не помню. но когда я тестирую один из своих мультисимвольных индикаторов, то в OnInit подгружается список символов из строки в input параметрах. а обращение к их ценам идёт в OnCalculate. при чем, когда я устанавливаю в настройках загрузку символов из Market Watch, то в тестере появляется только один основной символ. не знаю как в роботах, но думаю там всё аналогично.

Причина обращения: