Errori, bug, domande - pagina 3133

 
Yury Lemeshev #:

Sii coerente. Se si controlla

SymbolIsSynchronized(euSY01)==true

poi controllare e

(euSY01b>0)==true

:)

 
Yury Lemeshev #:

Se fate questo, e ci sono sette linee di questo tipo nel codice per sette coppie, allora la panoramica del mercato avrà solo le quotazioni per una valuta.


Funzione costosa, la aggirerei attraverso l'uguaglianza al valore precedente.
 
JRandomTrader #:

Sii coerente. Se si controlla

poi controllare e

:)

(euSY01b>0)==true

È meglio di un semplice

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


Se si controlla la sincronizzazione, funziona solo per una valuta. Ho bisogno di analizzare 7 valute alla volta.

 
Yury Lemeshev #:
Se controllate la sincronizzazione, funziona solo per una valuta. Ma ho bisogno di analizzare 7 valute alla volta.

Ho bisogno di farlo in 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


Se si controlla la sincronizzazione, funziona solo per una valuta. E ho bisogno di analizzare 7 valute in un momento.

Come stampella, potreste provare a ricordare l'ora in cui la coppia è stata sincronizzata l'ultima volta e usarla come riferimento.

Inoltre, potete usare SymbolInfoTick() per ask e bid

 

Forum sul trading, sistemi di trading automatico e test di strategie di trading

Bug, bug, domande

Yury Lemeshev, 2022.01.02 08:54

(euSY01b>0)==true

Questo è più corretto di un semplice

euSY01b>0

è come vero == vero, risultato: vero. e falso == vero, risultato: falso :)

questo è esattamente il risultato che si ottiene se

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

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

o

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

if (-1) {
  ...
}

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

Se fate questo, e ci sono 7 linee di questo tipo nel codice per sette coppie, allora la panoramica del mercato mostrerà solo le quotazioni per una valuta.


prova a chiamare Bars in OnTick

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

dall'articolo:

   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);
        }
     }
Inoltre, il riferimento ai prezzi in OnTick dovrebbe essere (in modo che i caratteri di terzi siano caricati).
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Bars - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Mihail Matkovskij #:

prova a chiamare Bars in OnTick

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

dall'articolo:

Inoltre, ci dovrebbe essere un riferimento ai prezzi in OnTick (in modo che vengano caricati i caratteri di terzi).

Questo non risolve il problema dell'originale

SymbolInfoDouble(euSY06,SYMBOL_BID,euSY06b) è sempre riempito con il valore se usato correttamente. Per qualche motivo il valore corretto per il simbolo richiesto non arriva. E sembra essere riempito utilizzando il valore precedente ricevuto, che è il valore di una delle altre sette valute.

Se non c'è soluzione, e questa soluzione la sto cercando da più di un mese, sento che è solo un bug tester. Gli sviluppatori sono pregati di prestare attenzione a questo. Se si tratta di un bug, correggilo
 
Vitaly Muzichenko #:

Ho bisogno di fare in OnInit()

Ma quando provo uno dei miei indicatori multisimbolo, in OnInit viene caricata la lista dei simboli dalla stringa dei parametri di input e in OnCalculate si accede ai loro prezzi. Inoltre, quando imposto di caricare i simboli da Market Watch, nel tester appare solo un simbolo base.