Die tkc-Dateien sind nach Monaten aufgeschlüsselt. Fragen dazu
Wenn das Terminal die Tickdaten noch nicht hochgeladen hat, woher weiß das Terminal beim Aufruf von CopyTicks, welche tkc-Dateien es ziehen soll?
Abrufe jeden Monat, beginnend mit dem aktuellen Monat.
Ist CopyTicksRange auf der Grundlage von CopyTicks oder unabhängig davon implementiert?
Basierend auf CopyTicks, d.h. überhaupt nicht optimiert.
Verstehe ich das richtig, dass das Abrufen von Ticks für September z. B. über CopyTicksRange immer schneller geht als über CopyTicks, weil CopyTicks über die Eingabeparameter nicht weiß, für welchen Monat Daten gezogen werden sollen?
Nein, CopyTicksRange wird wegen des oben genannten Punktes genauso langsam sein. Hier ist ein Skript, das die Absurdität der aktuellen Implementierung von CopyTicksRange zeigt
Es scheint klar vorgegeben zu sein, welche tkc-Dateien gezogen werden müssen. Aber nein, es wird auf die gleiche Weise wie CopyTicks gezogen - alle tkc-Dateien. Und bei Zeitüberschreitung hört es auf zu funktionieren. Aber eigentlich sollte es fast sofort funktionieren.
Sie müssen die Geschichte so schnell wie möglich in den Indikator aufnehmen. Es ist möglich, dies über CopyTicksRange anzufordern und eine -1 zu erhalten, bis alles heruntergeladen ist. Und wenn Sie nach Monaten anfragen: aktueller Monat, dann Vormonat, usw. Er wird nicht langsamer sein, aber der Indikator wird zumindest mit einer gewissen Historie arbeiten können. Oder?
Es macht keinen Unterschied, wie sich herausstellt (siehe oben).
Wenn Sie das Konto wechseln(auf einen anderen Handelsserver), müssen wir die letzten 2000 Ticks des alten Kontos in die Datei schreiben. Wie kann man das tun?
Das wird nicht funktionieren.
voidOnDeinit( constint )
{
MqlTick Ticks[];
CopyTicks(_Symbol, Ticks); // Если была смена торгового сервера, то БД-тиков поменяласьFileSave(__FILE__, Ticks);
}
Bitte erzeugen Sie das Ereignis CHARTEVENT_ACCOUNTCLOSING vor dem Kontowechsel, wenn die Verarbeitung (in OnChartEvent) noch nicht auf die neue Handelsumgebung umgestellt wurde.
fxsaber: Bei einem Kontowechsel(anderer Handelsserver) ist es notwendig, die letzten 2000 Ticks des alten Kontos in die Datei zu schreiben. Wie kann ich das tun?
Das wird nicht funktionieren.
Bevor Sie das Konto wechseln, erzeugen Sie bitte das Ereignis CHARTEVENT_ACCOUNTCLOSING, bei dessen Verarbeitung (in OnChartEvent) die gesamte Handelsumgebung noch nicht auf das neue Konto umgestellt wurde.
Intelligenterweise sollten wir eine Rückmeldung hinzufügen, wie es in Windows gemacht wird.
Als Flag in einem Chart-Ereignis (oder auch nicht) wird beim Setzen des Flags das Ereignis selbst (in diesem Fall der Kontowechsel) rückgängig gemacht.
Lassen Sie es abrupt sein, aber es ist ärgerlich, dass Dutzende von Fehlerberichten, sie werden behoben, und neue tauchen immer wieder mit diesem CopyTicks.
Solche Tricks machen mich müde.
#define TOSTRING(A) (#A + " = " + (string)(A))
voidOnStart()
{
MqlTick Ticks[];
if (CopyTicks(_Symbol, Ticks, COPY_TICKS_ALL, 0, 131072+ 1) > 0) // Если прибавлять не единицу, а ноль, то все будет работать
{
constulong BeginTime = Ticks[0].time_msc;
Print(TOSTRING(CopyTicksRange(_Symbol, Ticks, COPY_TICKS_INFO, BeginTime, LONG_MAX)));
Print(TOSTRING(CopyTicksRange(_Symbol, Ticks, COPY_TICKS_INFO, BeginTime, (TimeCurrent() + 1) * 1000)));
}
}
In der Tat, eine so interessante Funktion in der Sprache und sie funktioniert sofort...
Ich habe eine Frage. Ich habe die Ticks manuell (685.007 Ticks) über das Menü Symbole heruntergeladen. Ich brauche für EURUSD von 2016.11.01 00:00 bis 2016.11.08 00:00. Hier ist ein Bildschirmfoto.
Wenn Sie kein Benutzerkonto haben, registrieren Sie sich
Erlauben Sie die Verwendung von Cookies, um sich auf der Website MQL5.com anzumelden.
Bitte aktivieren Sie die notwendige Einstellung in Ihrem Browser, da Sie sich sonst nicht einloggen können.
Sie sind angemeldet. Die Zwei-Faktor-Authentifizierung wurde deaktiviert. Richten Sie sie erneut ein und scannen Sie einen neuen QR-Code oder fahren Sie mit deaktivierter Zwei-Faktor-Authentifizierung fort.
Die tkc-Dateien sind nach Monaten aufgeschlüsselt. Fragen dazu
Nein, CopyTicksRange wird wegen des oben genannten Punktes genauso langsam sein. Hier ist ein Skript, das die Absurdität der aktuellen Implementierung von CopyTicksRange zeigt
Es scheint klar vorgegeben zu sein, welche tkc-Dateien gezogen werden müssen. Aber nein, es wird auf die gleiche Weise wie CopyTicks gezogen - alle tkc-Dateien. Und bei Zeitüberschreitung hört es auf zu funktionieren. Aber eigentlich sollte es fast sofort funktionieren.
Es macht keinen Unterschied, wie sich herausstellt (siehe oben).
CopyTicks funktioniert nicht in OnDeinit, wennUninitializeReason !=REASON_CHARTCHANGE
Ergebnis (nach Entfernen des Expert Advisors)
Dies geschieht in Expert Advisors. Bei Indikatoren funktioniert CopyTicks normalerweise in OnDeinit.
Das wird nicht funktionieren.
Bitte erzeugen Sie das Ereignis CHARTEVENT_ACCOUNTCLOSING vor dem Kontowechsel, wenn die Verarbeitung (in OnChartEvent) noch nicht auf die neue Handelsumgebung umgestellt wurde.
Bei einem Kontowechsel(anderer Handelsserver) ist es notwendig, die letzten 2000 Ticks des alten Kontos in die Datei zu schreiben. Wie kann ich das tun?
Das wird nicht funktionieren.
Bevor Sie das Konto wechseln, erzeugen Sie bitte das Ereignis CHARTEVENT_ACCOUNTCLOSING, bei dessen Verarbeitung (in OnChartEvent) die gesamte Handelsumgebung noch nicht auf das neue Konto umgestellt wurde.
Intelligenterweise sollten wir eine Rückmeldung hinzufügen, wie es in Windows gemacht wird.
Als Flag in einem Chart-Ereignis (oder auch nicht) wird beim Setzen des Flags das Ereignis selbst (in diesem Fall der Kontowechsel) rückgängig gemacht.
Lassen Sie es abrupt sein, aber es ist ärgerlich, dass Dutzende von Fehlerberichten, sie werden behoben, und neue tauchen immer wieder mit diesem CopyTicks.
Solche Tricks machen mich müde.
Ergebnis
Entfernen Sie eine aus dem Quellcode
Vervielfältigt auf verschiedenen Charakteren und Handelsservern. Überprüft am freien Tag - die Quotierer stehen.
Wann werden die Bugs in diesem Thread beseitigt sein?
In der Tat, eine so interessante Funktion in der Sprache und sie funktioniert sofort...
Ich habe eine Frage. Ich habe die Ticks manuell (685.007 Ticks) über das Menü Symbole heruntergeladen. Ich brauche für EURUSD von 2016.11.01 00:00 bis 2016.11.08 00:00. Hier ist ein Bildschirmfoto.
Ich beantrage programmatisch wie folgt:
Die Ausgabe ist 0. Was ist los?
Die Ausgabe ist 0. Was ist los?
Multiplizieren Sie mit 1000 von und bis.
Multiplizieren Sie mit 1.000 von und bis.
Schande über mich, ich habe mich geirrt. Danke, Mann.
Nach dem ersten Lauf auf EURUSD M1 MetaQuotes-Demo haben wir ein korrektes Ergebnis
Alle nächsten Durchläufe werden einen Fehler zeigen
Nach dem erneuten Laden des Terminals wiederholt sich die Situation: erster Durchlauf - gut, nächste Durchläufe - Fehler.
SZY Beachten Sie den hervorgehobenen Kommentar in der Quelle!