Testen von 'CopyTicks' - Seite 43

 
fxsaber:
Fehler, wenn CopyTicksRange alle angeforderten Ticks korrekt zurückgibt, aber mit LastError == ERR_HISTORY_TIMEOUT(4403).


Das ist kein Fehler, sondern eine Funktion. Mit CopyTicks verhält es sich manchmal genauso. Ich habe noch nicht herausgefunden, wie man dieses "Ding" benutzt.

in der Beschreibung der Funktion CopyTicksRange:

ERR_HISTORY_TIMEOUT – время ожидание синхронизации тиков вышло, функция отдала всё что было.

Natürlich würde ich mir wünschen, dass die Entwickler erklären, was dieser Fehler bedeutet, wenn ein Tick mit der Funktion CopyTicks empfangen wird. Wie ist dieser Fehler zu behandeln? ps: Ich rufe ihn in einem Indikator auf

 

Welche Daten müssen bereitgestellt werden, um dieses Problem so schnell wie möglich zu lösen?

void OnStart()
{
  MqlTick Ticks[];

  Print(CopyTicksRange(_Symbol, Ticks, COPY_TICKS_INFO, (ulong)D'2020.04.09 10:40:29' * 1000, (ulong)D'2020.04.11' * 1000)); // 8192
  Print(_LastError); // 4407

  ResetLastError();

  MqlTick Ticks2[];

  Print(CopyTicksRange(_Symbol, Ticks2, COPY_TICKS_INFO, (ulong)D'2020.04.09 10:40:30' * 1000)); // 131066
  Print(_LastError); // 0
}


Tiki kopiert nicht und gibt eine Fehlermeldung aus.

Konstante

Wert

Beschreibung

ERR_HISTORY_SMALL_BUFFER

4407

Empfangsarray zu klein, um alle angeforderten Daten aufzunehmen


Mit solchen Überraschungen ist es unmöglich, richtig zu arbeiten!


Über die grafische Benutzeroberfläche (CTRL+U) werden die Häkchen ohne Probleme gesetzt.

Suchbegriff: Oshibka 007.
 
fxsaber:

Welche Daten müssen bereitgestellt werden, um dieses Problem so schnell wie möglich zu lösen?

Tiki kopiert nicht und gibt eine Fehlermeldung aus.

Konstante

Wert

Beschreibung

ERR_HISTORY_SMALL_BUFFER

4407

Empfangsarray zu klein, um alle angeforderten Daten aufzunehmen

Lokal auf verschiedene Weise getestet - bisher keine Wiedergabe. Ich brauche mehr Details:

1. Welche Version des Terminals?

2. Mit welchem Server arbeiten Sie?

3. auf welchem Zeichen wird das Skript aufgerufen?

4. Wenn nicht mit COPY_TICKS_INFO, sondern mit COPY_TICKS_ALL aufgerufen wird, wird dann auch der Fehler ERR_HISTORY_SMALL_BUFFER gesetzt?

Ich danke Ihnen!

 
Anton:

Lokal auf verschiedene Weise getestet - bisher keine Wiedergabe. Sie brauchen Details:

1. Welche Version des Terminals?

2. Mit welchem Server arbeiten Sie?

3. auf welchem Zeichen wird das Skript aufgerufen?

4. Wenn Sie es nicht mit COPY_TICKS_INFO, sondern mit COPY_TICKS_ALL aufrufen, wird dann auch der Fehler ERR_HISTORY_SMALL_BUFFER ausgelöst?

Ich danke Ihnen!

  1. 2380.
  2. Jeder Server - siehe Punkt 3.
  3. Benutzerdefiniertes Symbol.
  4. Das Flag ändert das Verhalten nicht.

ZS Im Anhänger ist eine Sonderanfertigung. Symbol aus json erstellen, Ticks importieren, Skript auf dem Chart dieses Symbols ausführen. Bitte geben Sie an, ob sie reproduziert wurde oder nicht.

Dateien:
EURUSD.zip  896 kb
 
fxsaber:

Bitte schreiben Sie, ob es gespielt wurde oder nicht.

Ja, es wurde auf 2380 wiedergegeben.

Herzlichen Dank! Sortieren Sie es aus.

 
fxsaber:

  1. 2380.
  2. Jeder Server - siehe Punkt 3.
  3. Benutzerdefiniertes Symbol.
  4. Das Flag ändert das Verhalten nicht.

ZY Der Anhänger ist eine Sonderanfertigung. Symbol aus json erstellen, Ticks importieren, Skript auf diesem Symboldiagramm ausführen. Bitte schreiben Sie, ob es reproduziert wurde oder nicht.


Nochmals vielen Dank.

Ja, im Jahr 2380 wurde das Problem versehentlich eingeführt und dann schnell behoben. Aber es ist gelungen, in Build 2380 zu gelangen.

Leider wurden seither neue Builds auf MetaQuotes-Demo noch nicht gefixt.

Sie können entweder zu einer früheren Version zurückkehren oder auf die nächste Version von MetaQuotes-Demo warten.
 
Anton:
Sie können entweder zu einer früheren Version zurückkehren oder auf die nächste Version von MetaQuotes-Demo warten.

Danke, für jetzt ist die vorherige Build für real. Der 2380 hat eine Menge geleistet...

 

MT5 neueste Version Build 2361. Erstellen Sie ein Symbol aus json, importieren Sie Ticks, führen Sie den EA auf einem Chart dieses Symbols aus.

EA

void OnTick()
{
  MqlTick Tick={0};
  if(SymbolInfoTick(_Symbol,Tick))
  {
    MqlTick OldTicks[];
    Print(CopyTicks(_Symbol,OldTicks,COPY_TICKS_ALL));
    Print(GetLastError());
    Print(CopyTicks(_Symbol,OldTicks,COPY_TICKS_ALL,(ulong)D'2020.04.06 00:00:00' * 1000));
    Print(GetLastError());
  }
  ExpertRemove();
}

Parameter

[Tester]
Expert=test.ex5
Symbol=AUDNZD.RannForex
Period=M1
Optimization=0
Model=4
FromDate=2020.04.08
ToDate=2020.04.09
ForwardMode=0
Deposit=10000000
Currency=USD
ProfitInPips=1
Leverage=100
ExecutionMode=0
OptimizationCriterion=6
Visual=0

1. Netting-Konto.

1.1. Mit den angegebenen Daten ist die Ausgabe ähnlich wie bei true: 2000 0 2000 0.

1.2. Wenn die Daten auf 07.04.2020-08.04.2020 geändert werden, wird die Ausgabe seltsam: -1 4004 1 0.

Erstens: Warum tritt der Fehler im ersten Fall auf? Zweitens: Warum dauert der zweite Fall nur 1 Tick? Das Datum der Abfrage hat sich nicht geändert.

2. Hedge-Konto.

2.1. Mit den angegebenen Daten wird die Ausgabe seltsam: 2000 0 1 0.

Warum dauert der zweite Fall nur 1 Tick? Das Datum der Abfrage hat sich nicht geändert.

2.2. Wenn sich das Datum auf 07.04.2020-08.04.2020 ändert, wird die Ausgabe nicht mehr seltsam, sondern gleich sein: 2000 0 1 0.


Daher die Frage: Warum hängt CopyTicks mit festen Parametern nicht nur von den Testdaten, sondern auch von der Kontoart ab? Oder ich verstehe etwas nicht, und ich mache etwas falsch?

Dies erschwert die Arbeit sehr, bitte korrigieren Sie dies, wenn möglich. Ist es Ihnen gelungen, das Problem zu reproduzieren? Brauchen Sie sonst noch etwas von mir, um es zu reproduzieren? Ich danke Ihnen.

Dateien:
AUDNZD.zip  2448 kb
 
traveller00:

Daher die Fragen: Warum hängt CopyTicks mit festen Parametern nicht nur von den Testdaten, sondern auch von der Kontoart ab? Oder habe ich etwas missverstanden und mache etwas falsch?

Die Abhängigkeit von der Art des Kontos - Sie können sich die Gründe ungefähr vorstellen. Ich würde nicht sagen, dass sie korrekt ist. Tauschsymbole mit letzter Geschichte - die Entwickler müssen sich gut überlegen, was sie mit ihnen auf der Hecke machen wollen, usw.

Ich selbst verwende CopyTicks in Tester nicht. Die ersten 24 Stunden sind nicht wichtig. Wenn Sie wirklich klare Handelssignale benötigen, dann handeln Sie nicht am ersten Tag.

 
traveller00:

MT5 neueste Version Build 2361. Erstellen Sie ein Symbol aus json, importieren Sie Ticks, führen Sie den EA auf einem Chart dieses Symbols aus.

EA

Parameter

1. Netting-Konto.

1.1. Mit den angegebenen Daten ist die Ausgabe ähnlich wie bei true: 2000 0 2000 0.

1.2. Wenn die Daten auf 07.04.2020-08.04.2020 geändert werden, wird die Ausgabe seltsam: -1 4004 1 0.

Erstens: Warum tritt der Fehler im ersten Fall auf? Zweitens: Warum dauert der zweite Fall nur 1 Tick? Das Datum der Abfrage hat sich nicht geändert.

2. Hedge-Konto.

2.1. Mit den angegebenen Daten wird die Ausgabe seltsam: 2000 0 1 0.

Warum dauert der zweite Fall nur 1 Tick? Das Datum der Abfrage hat sich nicht geändert.

2.2. Wenn sich das Datum auf 07.04.2020-08.04.2020 ändert, wird die Ausgabe nicht mehr seltsam, sondern gleich sein: 2000 0 1 0.


Daher die Frage: Warum hängt CopyTicks mit festen Parametern nicht nur von den Testdaten, sondern auch von der Kontoart ab? Oder ich verstehe etwas nicht, und ich mache etwas falsch?

Dies erschwert die Arbeit sehr, bitte korrigieren Sie dies, wenn möglich. Ist es Ihnen gelungen, das Problem zu reproduzieren? Brauchen Sie sonst noch etwas von mir, um es zu reproduzieren? Ich danke Ihnen.

Der allererste Lauf. Ich schaue mir die Protokolle der Tester an.

2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: symbol to be synchronized
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: symbol synchronized, 3720 bytes of symbol info received
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: load 23 Kb of history data to synchronize in 0:00:00.009
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: history synchronized from 2020.04.06 to 2020.04.08
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: ticks synchronization started
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: load 567 Kb of tick data to synchronize in 0:00:00.031
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex: history ticks synchronized from 2020.04.08 to 2020.04.08
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex,M1: history cache allocated for 3897 bars and contains 2868 bars from 2020.04.06 00:05 to 2020.04.07 23:59
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex,M1: history begins from 2020.04.06 00:05
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex,M1 (MetaQuotes-Demo): generating based on real ticks
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex,M1: testing of Experts\test.ex5 from 2020.04.08 00:00 to 2020.04.09 00:00 started
2020.04.21 10:53:10.573 Core 01 AUDNZD.RannForex : real ticks begin from 2020.04.08 00:00:00
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   -1
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   4004
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   1
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   0
2020.04.21 10:53:10.573 Core 01 2020.04.08 00:01:11   ExpertRemove() function called
2020.04.21 10:53:10.573 Core 01 removed itself within OnTick

Der Prüfer hat die Zecken nur für einen Tag, den 8. April, synchronisiert. Das heißt, dass es vor dem 8. April keine Zecken gibt.

Zu Beginn erhielten wir die Fehlermeldung 4004 (nicht genügend Speicher für die angeforderten Ticks). Dies ist eine ungültige Meldung, wir werden uns das ansehen. Es scheint daran zu liegen, dass die Anfrage mit den Standardparametern an der Grenze der bestehenden Ticks liegt

Bei der nächsten Abfrage erhielten Sie zu Recht 1 Häkchen. Denn von 2020.04.06 00:00:00 bis zum aktuellen Tester, als der erste Tick eintraf, gibt es nur einen Tick.

Lassen Sie uns den EA ein wenig anpassen

void OnTick()
  {
   MqlTick Tick= {0};
   if(SymbolInfoTick(_Symbol,Tick))
     {
      MqlTick OldTicks[];
      Print(CopyTicks(_Symbol,OldTicks,COPY_TICKS_ALL));
      if(GetLastError()!=0)
         return;
      Print(GetLastError());
      Print(CopyTicks(_Symbol,OldTicks,COPY_TICKS_ALL,(ulong)D'2020.04.06 00:00:00' * 1000));
      Print(GetLastError());
     }
   ExpertRemove();
  }

und wir sehen, dass ab der zweiten Zecke die Zecken aufgegriffen werden. In beiden Fällen sind es 2 Ticks.

2020.04.21 11:14:13.256 Core 01 AUDNZD.RannForex : real ticks begin from 2020.04.08 00:00:00
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:11   -1
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   2
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   0
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   2
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   0
2020.04.21 11:14:13.256 Core 01 2020.04.08 00:01:19   ExpertRemove() function called

Das heißt, dass sich die Annahme über den Abfragefehler an der Tickgrenze als richtig erwiesen hat.

Ändern wir den Starttermin auf den 7. April.

2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex: history ticks synchronized from 2020.04.07 to 2020.04.08
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex,M1: history cache allocated for 3486 bars and contains 1429 bars from 2020.04.06 00:05 to 2020.04.06 23:59
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex,M1: history begins from 2020.04.06 00:05
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex,M1 (MetaQuotes-Demo): generating based on real ticks
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex,M1: testing of Experts\test.ex5 from 2020.04.07 00:00 to 2020.04.09 00:00 started
2020.04.21 11:18:17.775 Core 01 AUDNZD.RannForex : real ticks begin from 2020.04.07 00:00:00
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   -1
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   4004
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   1
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   0
2020.04.21 11:18:17.775 Core 01 2020.04.07 00:01:28   ExpertRemove() function called
2020.04.21 11:18:17.775 Core 01 removed itself within OnTick

Bis auf die Tatsache, dass die Ticks bereits für 2 Tage synchronisiert sind - die Datenbank des Testers enthält Ticks für den 7. und 8. April - ist alles gleich geblieben.

Wir haben den Starttermin auf den 8. April verschoben. Und wir sehen das erwartete Ergebnis

2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: load 47 bytes of history data to synchronize in 0:00:00.000
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: history synchronized from 2020.04.06 to 2020.04.08
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: ticks synchronization started
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: load 54 bytes of tick data to synchronize in 0:00:00.000
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex: history ticks synchronized from 2020.04.07 to 2020.04.08
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex,M1: history cache allocated for 3897 bars and contains 2868 bars from 2020.04.06 00:05 to 2020.04.07 23:59
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex,M1: history begins from 2020.04.06 00:05
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex,M1 (MetaQuotes-Demo): generating based on real ticks
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex,M1: testing of Experts\test.ex5 from 2020.04.08 00:00 to 2020.04.09 00:00 started
2020.04.21 11:20:51.257 Core 01 AUDNZD.RannForex : real ticks begin from 2020.04.07 00:00:00
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   2000
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   0
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   2000
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   0
2020.04.21 11:20:51.257 Core 01 2020.04.08 00:01:11   ExpertRemove() function called
2020.04.21 11:20:51.257 Core 01 removed itself within OnTick

Denn im Tester sind mehr Zecken als im ersten Durchlauf. Und es hat nichts mit Hedging und Netting zu tun.