Fehler, Irrtümer, Fragen - Seite 3133

 
Yury Lemeshev #:

Seien Sie konsequent. Wenn Sie prüfen

SymbolIsSynchronized(euSY01)==true

dann prüfen und

(euSY01b>0)==true

:)

 
Yury Lemeshev #:

Wenn Sie dies tun und es gibt sieben solcher Zeilen im Code für sieben Paare, dann wird die Marktübersicht nur Kurse für eine Währung enthalten.


Teure Funktion, ich würde sie durch Gleichheit mit dem vorherigen Wert umgehen.
 
JRandomTrader #:

Seien Sie konsequent. Wenn Sie prüfen

dann prüfen und

:)

(euSY01b>0)==true

Es ist besser als nur

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 falsch
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURCHF falsch
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 falsch
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 falsch
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 falsch
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


Wenn Sie die Synchronisierung überprüfen, funktioniert sie nur für eine Währung. Ich muss 7 Währungen auf einmal analysieren.

 
Yury Lemeshev #:
Wenn Sie die Synchronisierung überprüfen, funktioniert sie nur für eine Währung. Aber ich muss gleich 7 Währungen analysieren.

Ich muss es in OnInit() tun

// Потрогаем символ, иначе в тестере не грузит историю
 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 falsch
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURCHF falsch
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURGBP falsch
2022.01.02 11:03:22.330 2019.01.02 07:56:40 EURAUD falsch
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 falsch
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 falsch
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


Wenn Sie die Synchronisierung überprüfen, funktioniert sie nur für eine Währung. Und ich muss gleich 7 Währungen analysieren.

Als Hilfestellung könnten Sie versuchen, sich an den Zeitpunkt der letzten Synchronisierung des Paares zu erinnern und diesen als Referenz zu verwenden.

Sie können auch SymbolInfoTick() für Kauf- und Verkaufsangebote verwenden

 

es ist wie wahr == wahr, Ergebnis: wahr. und falsch == wahr, Ergebnis: falsch :)

das ist genau das Ergebnis, das man erhält, wenn

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

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

oder

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

if (-1) {
  ...
}

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

Wenn Sie dies tun und es gibt 7 solcher Zeilen im Code für sieben Paare, dann zeigt die Marktübersicht nur Kurse für eine Währung an.


Versuchen Sie, Bars in OnTick aufzurufen

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

aus dem Artikel:

   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);
        }
     }
Außerdem sollte der Verweis auf die Preise in OnTick sein (damit die Zeichen von Dritten geladen werden).
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
Документация по MQL5: Доступ к таймсериям и индикаторам / Bars
  • www.mql5.com
Bars - Доступ к таймсериям и индикаторам - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Mihail Matkovskij #:

Versuchen Sie, Bars in OnTick aufzurufen

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

aus dem Artikel:

Außerdem sollte es einen Verweis auf Preise in OnTick geben (damit Zeichen von Drittanbietern geladen werden).

Dies löst nicht das Problem der ursprünglichen

SymbolInfoDouble(euSY06,SYMBOL_BID,euSY06b) wird bei korrekter Verwendung immer mit einem Wert gefüllt. Aus irgendeinem Grund wird der richtige Wert für das gewünschte Symbol nicht angezeigt. Und er wird offenbar durch den zuvor erhaltenen Wert aufgefüllt, der der Wert einer der anderen sieben Währungen ist.

Wenn es keine Lösung gibt, und diese Lösung suche ich seit mehr als einem Monat, habe ich das Gefühl, dass es nur ein Bug-Tester ist. Die Entwickler sollten dies beachten. Wenn es ein Fehler ist, beheben Sie ihn
 
Vitaly Muzichenko #:

Ich muss in OnInit() Folgendes tun

Aber wenn ich einen meiner Multisymbol-Indikatoren teste, wird die Liste der Symbole aus der Zeichenkette der Eingabeparameter in OnInit geladen. Und ihre Preise werden in OnCalculate abgerufen. Wenn ich außerdem einstelle, dass Symbole von Market Watch geladen werden, erscheint nur ein Basissymbol im Tester.