Emulation von Ticks aus einem EA/Indikator - Seite 2

 
Meat:

Ihr Code emuliert nicht nur einen Tick, sondern erzwingt bei jedem Tick eine Aktualisierung des Graphen mit der entsprechenden Historie. Schauen Sie auch manchmal in die Logdatei? Schauen Sie in aller Ruhe nach, was dort los ist. Und schätzen Sie, was in etwa einem Tag da sein wird. Ganz zu schweigen von der Belastung Ihres Systems und Ihres Internetkanals.

Wenn wir statt der Aktualisierung des Diagramms in Ihrem Code den Tick emulieren, führt dies zu Schleifen (d.h. der Indikator startet, ohne anzuhalten), und dementsprechend bleibt das Terminal hängen.

Warum muss ich aktualisieren, ohne den Verlauf zu laden? Die erzwungene Auffrischung des Diagramms ist eine Tick-Emulation.

Hier ist das Protokoll nach 2500 Ticks:

00:51:32 Check_UpdateChart EURUSD,M1: erfolgreich geladen
00:52:48 Check_UpdateChart EURUSD,M1: uninit Grund 1
00:52:48 Check_UpdateChart EURUSD,M1: entfernt

Nichts hängt. Die Emulation ist so gestaltet, dass der Indikator in einer Schleife läuft. Mit anderen Worten, er löst sich selbst aus.
 
Zhunko:

Warum müssen Sie aktualisieren, ohne den Verlauf zu laden? Die Aktualisierung des Diagramms wird durch die Tick-Emulation erzwungen.

Hier ist das Protokoll nach 2500 Ticks:

00:51:32 Check_UpdateChart EURUSD,M1: erfolgreich geladen
00:52:48 Check_UpdateChart EURUSD,M1: uninit Grund 1
00:52:48 Check_UpdateChart EURUSD,M1: entfernt

Nichts hängt. Die Emulation ist so gestaltet, dass der Indikator in einer Schleife läuft. Das heißt, er startet von selbst.


Ich dachte, ich hätte es deutlich geschrieben: "log log". Warum zeigen Sie mir dann das Expertenprotokoll? Offensichtlich hatte ich recht, Sie schauen dort nie nach. Es würde mich nicht wundern, wenn Sie die Hälfte Ihrer Festplatte mit diesen Protokollen gefüllt haben :)

Die Aktualisierung der Historie und die Tick-Emulation sind zwei verschiedene Dinge. Eingehende Ticks vom Server aktualisieren nicht die Historie (d. h. frühere Balken). Wenn dies der Fall wäre, würde das Terminal eine Menge Datenverkehr und Ressourcen verschwenden.

Daher ist es unklar, warum Sie ihn bei jedem Tick aktualisieren müssen, was IndicatorCounted() auf Null zurücksetzt und somit die Überprüfung der gesamten Historie bei jedem Tick erfordert. Das ist eine große Verschwendung von Ressourcen.

 
Meat:

Eingehende Ticks vom Server aktualisieren die Historie (d.h. frühere Balken) nicht, sonst würde das Terminal eine Menge Datenverkehr und Ressourcen verbrauchen.

Was ist zu tun, wenn z.B. 1 Bar = 2 Ticks )))))? In meinem Fall tickt Update History ?
 
IgorM:

nachgestellt

Ich habe es im Protokoll:

23:39:01 test EURUSD,H1: erfolgreich geladen
23:39:01 test EURUSD,H1: PostMsgAddr =1977398342
23:39:01 test EURUSD,H1: initialisiert
23:39:01 test EURUSD,H1: Zyklus abgeschlossen....

Ja, es ist nicht klar, was los ist... Versuchen Sie dies: In der Import-Sektion #import"user32.dll" eine Funktion hinzufügen:

CallWindowProcA(int lpPrevWndFunc[], int hWnd, int Msg, int wParam, int lParam);

Und fügen Sie am Ende der Funktion SetMyTimer eine Zeile hinzu: CallWindowProcA(code,0,0,0,0);

Und mit einem parallel laufenden Indikator prüfen, ob in diesem Moment ein Tick erzeugt wird.

 
solar:
Was, wenn ich zum Beispiel 1 Bar = 2 Ticks habe ))))) In meinem Fall aktualisieren Zecken den Verlauf ?
Natürlich wird der aktuelle Balken immer aktualisiert, aber wir sprachen über die Geschichte im Allgemeinen.
 
Meat:


Ich habe es deutlich geschrieben: "das Protokoll". Warum zeigen Sie mir dann das Log des Expert Advisors? Anscheinend hatte ich Recht, Sie schauen dort nie nach - es überrascht mich nicht, wenn die Hälfte Ihrer Festplatte bereits mit diesen Logs vollgestopft ist :)

Und verwechseln Sie nicht die Begriffe:Historische Aktualisierung und Tick-Emulation sind zwei verschiedene Dinge. Eingehende Ticks vom Server aktualisieren die Historie (d.h. frühere Balken) nicht, sonst würde das Terminal enorme Mengen an Datenverkehr und Ressourcen verbrauchen.

Daher ist es unklar, warum Sie ihn bei jedem Tick aktualisieren müssen, was IndicatorCounted() auf Null zurücksetzt und somit die Überprüfung der gesamten Historie bei jedem Tick erfordert. Das ist eine große Verschwendung von Ressourcen.

Das Protokoll ist ebenfalls leer, aber aus einem anderen Grund. Ich verwende den Konsolenreiniger, nachdem die Geschichte ausgetauscht wurde. Ich habe mein eigenes Protokoll.

Das MT4-Protokoll stört mich nicht im Geringsten. Metacquotes hat wiederholt erklärt, dass die Protokollierung das Letzte ist, was getan werden muss. Das ist keine Priorität. Es werden keine Ressourcen verbraucht. Es muss nur rechtzeitig gereinigt werden, das ist alles.

Wie bei IndicatorCounted()... Ich benutze es nicht. Meine Indikatoren sind leere Boxen, die Informationen aus dem Expert Advisor herausziehen. Ich denke, dass es schädlich ist, Indikatoren in MT4 zu verwenden. Die Schnittstellen-Threads sind langsam und arbeiten 3 Mal langsamer als Expert Advisors.

Hervorgehoben ist natürlich richtig, aber lohnt es sich, sich so viel Mühe mit der Trennung zu machen?

Hier ist das Logbuch für 415 Aktualisierungen:

03:00:44 Benutzerdefinierter Indikator Check_UpdateChart EURUSD,M1: erfolgreich geladen
03:00:46 HistoryCenter: 'EURUSD1' synchronisieren
03:00:46 HistoryCenter: 2 Balken in 'EURUSD1' importiert
03:00:47 HistoryCenter: 'EURUSD1' synchronisieren
03:00:47 HistoryCenter: 2 Balken in 'EURUSD1' importiert
03:00:47 HistoryCenter: 'EURUSD1' synchronisieren
03:00:47 HistoryCenter: 2 Balken in 'EURUSD1' importiert
03:00:48 HistoryCenter: 'EURUSD1' synchronisieren
03:00:48 HistoryCenter: 2 Balken in 'EURUSD1' importiert
03:00:48 HistoryCenter: 'EURUSD1' synchronisieren
03:00:49 HistoryCenter: 2 Balken in 'EURUSD1' importiert
03:00:49 HistoryCenter: 'EURUSD1' synchronisieren
03:00:49 HistoryCenter: 2 Balken in 'EURUSD1' importiert
03:00:50 HistoryCenter: 'EURUSD1' synchronisieren
03:00:50 HistoryCenter: 2 Balken in 'EURUSD1' importiert
03:00:51 HistoryCenter: 'EURUSD1' synchronisieren
03:00:51 HistoryCenter: 2 Balken in 'EURUSD1' importiert
03:00:51 HistoryCenter: 'EURUSD1' synchronisieren
03:00:52 HistoryCenter: 2 Balken in 'EURUSD1' importiert
03:00:52 HistoryCenter: 'EURUSD1' synchronisieren
03:00:55 HistoryCenter: 2 Balken in 'EURUSD1' importiert
03:00:55 HistoryCenter: 'EURUSD1' synchronisieren
03:00:55 HistoryCenter: 2 Balken in 'EURUSD1' importiert
03:00:55 HistoryCenter: 'EURUSD1' synchronisieren
03:00:55 HistoryCenter: 2 Balken in 'EURUSD1' importiert
03:00:55 HistoryCenter: 'EURUSD1' synchronisieren
03:00:56 HistoryCenter: 2 Balken in 'EURUSD1' importiert
03:00:56 HistoryCenter: 'EURUSD1' synchronisieren
03:00:57 Benutzerdefinierter Indikator Check_UpdateChart EURUSD,M1: entfernt
03:00:59 HistoryCenter: 2 Balken in 'EURUSD1' importiert
03:01:01 MetaTrader Build 438 gestoppt

Das scheint mir für den Test der Leistung des Indikators am Wochenende keine Rolle zu spielen. Das Protokoll kann nach der Arbeit manuell gereinigt werden.

Es ist jedoch einfacher, eine Codezeile am Ende von start() einzufügen, als Ihren Code einzufügen. Es hat keinen Sinn, die Sache zu verkomplizieren.

 

Ich habe XP - es scheint zu funktionieren - dann stürzt das Terminal ab ....

Ob im Indikatorcode - oder im EA-Code - oder alleine - das Ergebnis ist das gleiche - das Terminal stürzt nach ca. 15 - 50 Sekunden ab ...

Sie haben also etwas falsch gemacht...

aber es ist keine schlechte Idee ...

 

Gibt es eine Möglichkeit, dies für einen Indikator ähnlich zu gestalten?

Einfach, indem ich den Cursor auf den Zeitpunkt setze, an dem ich den Indikatorwert (zu diesem Zeitpunkt) sehen möchte?

 

Zhunko, nun, wenn alles nicht standardisiert ist (Ihr eigenes Protokoll, Ihre eigene Implementierung von Indikatoren, etc.), warum beginnen Sie dann diese ganze Diskussion? Wir diskutieren eigentlich die Arbeit speziell mit MT4, nicht mit unseren eigenen Entwicklungen.

In meinem ersten Beitrag habe ich ausdrücklich darauf hingewiesen, dass mein Code nützlich sein wird, wenn die Aufgabe darin besteht, auf externe Links zu verzichten, d.h. einen autarken Expert Advisor/Indikator zu implementieren, der nur Systembibliotheken verwendet. Und wenn Sie Ihre eigenen Entwicklungen verwenden, dann ist er für Sie nicht anwendbar.

Und im Allgemeinen verstehe ich nicht, warum ich das Protokoll nach der Arbeit manuell bereinigen muss", wenn es einfacher ist, es nicht zu überladen. Denn soweit ich verstanden habe, implementieren Sie Ihre Entwicklungen in DLL. Was hindert Sie dann daran, dort denselben Timer einzustellen, wie ich es hier vorgeschlagen habe? Aber aus irgendeinem Grund bevorzugen Sie alle möglichen Tänze mit Tamburin und das Reinigen des Logs. Mein Code stört Sie, während Sie zu faul sind, das Log jeden Tag zu reinigen :)

 
elmucon:

Ich habe XP - es scheint zu funktionieren - dann stürzt das Terminal ab ....

Ob im Indikatorcode - oder im EA-Code - oder alleine - das Ergebnis ist das gleiche - das Terminal stürzt nach ca. 15 - 50 Sekunden ab ...

Sie haben also etwas falsch gemacht...

aber es ist keine schlechte Idee ...


Ja, vielleicht ist es ein bisschen weit hergeholt. Ich bin kein großer Assembler-Experte, also verurteile mich nicht zu hart :) Ich werde versuchen, herauszufinden, was das Problem ist.