Testen von 'CopyTicks' - Seite 39

 
 
fxsaber:

Sie sollte nicht langsam und abhängig vom Handelsserver sein.

Liefergeschwindigkeit: Das Terminal speichert 4096 letzte Ticks für jedes Symbol im Cache für einen schnellen Zugriff (für Symbole mit laufender Statistik - 65536 Ticks), Anfragen an diese Daten sind schneller. Bei der Abfrage von Ticks der aktuellen Handelssitzung außerhalb des Caches greift CopyTicks() auf Ticks zu, die bereits im Speicher des Terminals gespeichert sind, diese Anfragen benötigen mehr Zeit für die Ausführung. Am langsamsten sind die Abfragen von Ticks für andere Tage, da in diesem Fall die Daten von der Festplatte gelesen werden.

Wenn sich die Terminals auf der gleichen Festplatte befinden, haben Sie recht.

Haben Sie mehrere Tests durchgeführt? Kommt es auf einem bestimmten Server ständig zu Verzögerungen? Nur für den Fall, dass die Festplatte zum Zeitpunkt des Tests mit einem anderen Vorgang beschäftigt war...

 
Alexey Kozitsyn:

Wenn sich die Terminals auf demselben Laufwerk befinden, haben Sie recht.

Haben Sie mehrere Tests durchgeführt? Ist die Latenz auf einem bestimmten Server konstant? Nur für den Fall, dass das Laufwerk zum Zeitpunkt des Tests mit einem anderen Vorgang beschäftigt war...

Sie ist zu 100 % reproduzierbar. Das Terminal ist das gleiche.

 

Wie erhält man Ticks im OnDeinit-Indikator? Ich möchte Ticks erhalten, die bereits in tkc-Dateien vorhanden sind und die fast sofort gegeben werden. Aber wie kann man feststellen, welche Zecken vorhanden sind und welche nicht?

Hinter all der scheinbaren Attraktivität der Einfachheit von CopyTicks verbergen sich in Wirklichkeit Fallstricke, die sich aufgrund der eingeschränkten Funktionalität um dieser äußeren Attraktivität willen nicht mehr vermeiden lassen.

 
fxsaber:

Wie erhält man Ticks im OnDeinit-Indikator? Ich möchte Ticks erhalten, die bereits in tkc-Dateien vorhanden sind und die fast sofort gegeben werden. Aber wie kann man feststellen, welche Zecken vorhanden sind und welche nicht?

Hinter all der scheinbaren Attraktivität der Einfachheit von CopyTicks verbergen sich in Wirklichkeit Fallstricke, die aufgrund der eingeschränkten Funktionalität um dieser äußeren Attraktivität willen wiederum nicht zu vermeiden sind.

Warum sollten wir die Ticks in OnDeinit() erhalten?
 
Alexey Kozitsyn:
Warum Ticks in OnDeinit() erhalten?

Sie müssen ein benutzerdefiniertes Symbol erstellen und alle konvertierten Tick-Historien (ab einem bestimmten Datum), die bereits in den tkc-Dateien vorhanden sind, in dieses Symbol schreiben. Die Zecken, die sich nicht auf dem Gerät befinden, sind uninteressant. Deshalb sollte der Indikator bei dieser Aufgabe nicht nachlassen. Mit CopyTicks ist es jedoch nicht möglich, Ticks auf diese Weise zu empfangen.

 
Versuch, Ticks für ein anderes Symbol in OnInit zu erhalten
#include <Trade\Trade.mqh>

bool OpenPos( const string Symb )
{
  static CTrade Trade;
  
  return(Trade.Buy(1, Symb));
}

void OnInit()
{
  Sleep(3600 * 1000);    
  
  OpenPos("NZDUSD"); // Заставляем Агент получить тики по чужому символу

  MqlTick Ticks[];
  
  Print(CopyTicks("NZDUSD", Ticks, COPY_TICKS_INFO, 0, 5)); // 0
  
  ArrayPrint(Ticks);
}


Ergebnis

MetaTester 5 started on 127.0.0.1:3000
initialization finished
login (build 1653)
template file tester.tpl added. 2398 bytes loaded
38520 bytes of account info loaded
1482 bytes of tester parameters loaded
188 bytes of input parameters loaded
3456 bytes of symbols list loaded
expert file added: Experts\Test4.ex5. 44667 bytes loaded
initial deposit 10000000.00 USD, leverage 1:500
successfully initialized
48 Kb of total initialization data received
Intel Core i7-2700 K  @ 3.50 GHz, 16301 MB
EURUSD: symbol to be synchronized
EURUSD: symbol synchronized, 3464 bytes of symbol info received
EURUSD: history synchronization started
EURUSD: load 27 bytes of history data to synchronize in 0:00:00.000
EURUSD: history synchronized from 2016.01.04 to 2017.10.11
EURUSD: ticks synchronization started
EURUSD: load 34 bytes of tick data to synchronize in 0:00:00.000
EURUSD: history ticks synchronized from 2017.04.03 to 2017.10.10
EURUSD,M1: history cache allocated for 667542 bars and contains 651824 bars from 2016.01.04 00:00 to 2017.09.29 23:59
EURUSD,M1: history begins from 2016.01.04 00:00
EURUSD,M1 (MetaQuotes-Demo): generating based on real ticks
EURUSD,M1: testing of Experts\Test4.ex5 from 2017.10.01 00:00 to 2017.10.11 00:00 started
EURUSD : real ticks begin from 2017.04.03 00:00:00
EURUSD : 2017.10.01 00:00 - 2017.10.11 00:00  last prices absent for 7 whole days, bars built by bid prices
NZDUSD: symbol to be synchronized
NZDUSD: symbol synchronized, 3464 bytes of symbol info received
NZDUSD: history synchronization started
NZDUSD: load 27 bytes of history data to synchronize in 0:00:00.000
NZDUSD: history synchronized from 2016.01.04 to 2017.10.11
NZDUSD: ticks synchronization started
NZDUSD: load 34 bytes of tick data to synchronize in 0:00:00.000
NZDUSD: history ticks synchronized from 2017.10.02 to 2017.10.10
2017.10.01 01:00:00   instant buy 1.00 NZDUSD at 0.72043 (0.72017 / 0.72043)
2017.10.01 01:00:00   deal #2 buy 1.00 NZDUSD at 0.72043 done (based on order #2)
2017.10.01 01:00:00   deal performed [#2 buy 1.00 NZDUSD at 0.72043]
2017.10.01 01:00:00   order performed buy 1.00 at 0.72043 [#2 buy 1.00 NZDUSD at 0.72043]
2017.10.01 01:00:00   CTrade::OrderSend: instant buy 1.00 NZDUSD at 0.72043 [done at 0.72043]
2017.10.01 01:00:00   true
2017.10.01 01:00:00   0
NZDUSD : real ticks begin from 2017.10.02 00:00:00
NZDUSD : 2017.10.01 00:00 - 2017.10.11 00:00  last prices absent for 7 whole days, bars built by bid prices


D.h. es gibt keine Tickdaten am Anfang auf dem Charakter einer anderen Person. Und die Ticks werden in der Datenbank erzeugt, wenn OnTick erscheint. Ist das so vorgesehen oder sollen neben dem Hauptprüfzeichen auch Häkchen für die fremden Zeichen vorhanden sein?

 
Was bedeutet dieses Zitat aus der Dokumentation?

Примечание

Die Funktion CopyTicksRange() dient dazu, Ticks aus einem genau spezifizierten Bereich abzufragen, z. B. für einen bestimmten Tag in der Historie. Mit CopyTicks()kann nur das Anfangsdatum angegeben werden, um z. B. alle Ticks vom Monatsanfang bis zum aktuellen Zeitpunkt zu erhalten.

Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTicksRange
Документация по MQL5: Доступ к таймсериям и индикаторам / CopyTicksRange
  • www.mql5.com
[out]  Cтатический или динамический массив MqlTick для приема тиков. Если в статический массив не вмещаются все тики из запрошенного интервала времени, то будет получено столько тиков, сколько помещается в массив. При этом функция сгенерирует ошибку ERR_HISTORY_SMALL_BUFFER (4407) . ERR_NOT_ENOUGH_MEMORY – не хватает памяти для получения...
 

CopyTicks funktioniert nur mit Zeichen, die in der Marktübersicht enthalten sind. Und das war vor dem Aufkommen der benutzerdefinierten Symbole immer logisch.

Benutzerdefinierte Symbole haben ein riesiges Anwendungsgebiet und es ist bei weitem nicht immer so, dass diese Symbole im Market Watch benötigt werden. Allerdings ist es manchmal notwendig, einen Teil der Tick-Historie über CopyTicks aus ihnen herauszuholen.

Deaktivieren Sie daher die CopyTicks-Fehlerrückmeldung für benutzerdefinierte Symbole, wenn das benutzerdefinierte Symbol nicht in Market Watch ausgewählt ist.

 
Bei benutzerdefinierten Zeichen müssen Sie, um die Gesamtzahl der Ticks zu ermitteln, CopyTicksRange(Symb, Ticks) (plus dies) verwenden und die Größe des Arrays beobachten. Aber das ist sehr verschwenderisch!