Maschinelles Lernen im Handel: Theorie, Modelle, Praxis und Algo-Trading - Seite 1849

 
Mihail Marchukajtes:
Standard mit icustom... Aber er liest Daten aus der Datei, in die jeder Tick geschrieben wird, und der Indikator liest Daten, wenn ein neuer Balken erscheint, und es stellt sich heraus, dass er einen falschen Wert nimmt.

Zunächst einmal ist nicht jede Zecke geschrieben

  if ((interest!=inter))
  {

   MqlTick last_tick;
   if(SymbolInfoTick(Name_instrFS,last_tick)) 
    StartDate=last_tick.time;
    else StartDate=TimeCurrent();
    for (int i=0;i<100 && !IsStopped();i++)
    { 
      h=FileOpen("OpenI\\"+Name_instr+"_OI.csv",FILE_WRITE|FILE_READ|FILE_ANSI|FILE_CSV|FILE_COMMON|FILE_SHARE_READ,",");
       if(h!=INVALID_HANDLE)                                                         
       {  
         
         FileSeek(h,0,SEEK_END);
         FileWrite(h,StartDate,DoubleToString(interest,0)); 
         FileClose(h); 
         Sleep(100);
         break; 
       }
    }   
    inter=interest;
   // byOR=byORD;
   // sellOR=sellORD;
  }

OI wird nur geschrieben, wenn sie sich geändert hat und wenn die Änderung mehr als 10 (100 Zyklen des Schreibens identischer Zeilen multipliziert mit 0,1 Sekunden Wartezeit nach jedem Schreiben) Sekunden zurückliegt. Tatsächlich werden viele Ticks übersprungen, so dass eine exakte Synchronisation während der Wiedergabe nicht mehr möglich ist. Obwohl ich nicht mit Ticks arbeite - geben Sie im Tester alle Ticks an oder nur diejenigen, in denen der Kauf/Verkauf des Instruments (Vermögenswertes) stattfand?

Es ist besser, ein Symbol zu erstellen, das auf den Ergebnissen einer geschlossenen Minute basiert - es gibt weniger Datenmüll, die Synchronisierung im Indikator ist bequemer.


Was den Indikator anbelangt, so gehen wir davon aus, dass in der Historie etwas richtig gezeichnet wurde.

Bei der Nullleiste ergibt sich dann die folgende Situation

  BufOI[0]=SymbolInfoDouble(Symbol(),SYMBOL_SESSION_INTEREST);
 LastUPdate=FileGetInteger("OpenI\\"+FileName1,FILE_MODIFY_DATE,true);
  if ((LastUPdate!=UPdate))
     {
       int h=FileOpen("OpenI\\"+FileName1,FILE_READ|FILE_ANSI|FILE_CSV|FILE_COMMON,",");
       string str=FileReadString(h);                            // читаем очередную строку из файла

    BufOI[1]=StringToDouble(str);
       FileClose(h);
   BufOI[0]=BufOI[1];

 UPdate=LastUPdate;   

Wir nehmen OM-Daten vom Server und sie sind nicht im Tester vorhanden - und sie werden nicht verwendet.

Dann, wenn es ein neues Änderungsdatum der Datei gibt, die einmal in 15 Minuten live aktualisiert wird, aber nicht im Tester, lesen wir Daten aus der Datei (die letzte Zeile) FileName1=_Symbol+FileNames+"_TMP.csv" und wir weisen die Daten dem ersten Balken zu und schließen die Datei und weisen dem Null-Balken einen Wert zu. Nun, es ist klar, dass diese Variante im Testgerät nicht funktionieren wird.

Sie benötigen zwei Modi für den Indikator - für die Historie und für die Echtzeit, denke ich.


Haben Sie die Korrektheit der Daten in der Historie überprüft - es sieht seltsam aus, wenn Sie die Daten aus der Datei lesen...

         while(!FileIsEnding(h))
           {
            ArrayResize(oi,ct+2,1000);
            string str=FileReadString(h);                            // читаем очередную строку из файла
            if(cnt==0) oi[ct].time=StringToTime(str);                 //если запись первая, т.е. дата, то конвертируем из стринга в дататайм
            else if(cnt==2) oi[ct].oi=StringToDouble(str);   //если запсиь вторая, т.е. ОИ, то конвертируем в инт и 

            cnt++; // увеличиваем счетчик прочитанных строк
            if(FileIsLineEnding(h)) {cnt=0; ct++;}
           }

Es stellt sich heraus, dass die Daten gelesen wurden

 
Aleksey Vyazmikin:

Zunächst einmal ist nicht jedes Häkchen geschrieben

Der OI wird nur geschrieben, wenn er sich geändert hat und wenn die Änderung mehr als 10 (100 Zyklen der Aufzeichnung der gleichen Zeilen multipliziert mit 0,1 Sekunden Wartezeit nach jeder Aufzeichnung) Sekunden zurückliegt. Tatsächlich werden viele Ticks übersprungen, so dass eine exakte Synchronisation während der Wiedergabe nicht mehr möglich ist. Obwohl ich nicht mit Ticks arbeite - geben Sie im Tester alle Ticks an oder nur diejenigen, in denen der Kauf/Verkauf des Instruments (Vermögenswertes) stattfand?

Es ist besser, ein Symbol zu erstellen, das auf den Ergebnissen einer geschlossenen Minute basiert - es gibt weniger Datenmüll, die Synchronisierung im Indikator ist bequemer.


Was den Indikator anbelangt, so gehen wir davon aus, dass in der Historie etwas richtig gezeichnet wurde.

Bei der Nullleiste ergibt sich dann die folgende Situation

Wir nehmen OM-Daten vom Server und sie sind nicht im Tester vorhanden - und sie werden nicht verwendet.

Dann, wenn es ein neues Änderungsdatum der Datei gibt, die einmal in 15 Minuten live aktualisiert wird, aber nicht im Tester, lesen wir Daten aus der Datei (die letzte Zeile) FileName1=_Symbol+FileNames+"_TMP.csv" und wir weisen die Daten dem ersten Balken zu und schließen die Datei und weisen dem Null-Balken einen Wert zu. Nun, es ist klar, dass diese Variante im Testgerät nicht funktionieren wird.

Sie benötigen zwei Modi für den Indikator - für die Historie und für die Echtzeit, denke ich.


Haben Sie die Korrektheit der Daten in der Historie überprüft - es sieht seltsam aus, wenn Sie die Daten aus der Datei lesen...

Es stellte sich heraus, dass die Daten gelesen wurden...

Da stimme ich Ihnen absolut zu. Und es werden mehrere Werte innerhalb einer Minute geschrieben, zwar nicht bei jedem Tick, aber immerhin. Anschließend wird aus diesen Daten eine beliebige TF konstruiert.

Über die Datei ТМP, die ich selbst geschrieben habe. Ich habe versucht, den Indikator bei jeder neuen Kerze zu aktualisieren, und es war irgendwie richtig auf dem realen Konto. Aber zu einem bestimmten Zeitpunkt wird entweder der letzte Wert der vorherigen Kerze oder der erste Wert der bereits geöffneten Kerze genommen. Ich habe den Autor gebeten, dies für eine Minutenkerze zu ändern, aber es ist nicht wahr geworden.

Ich erinnere mich, dass ich für jedes Signal den EA neu kompilieren musste, um den Indikator korrekt zu initialisieren und die richtigen Ergebnisse zu erhalten. Dies könnte das aktuelle Signal verändern. Dies ist es, was wirklich störend war....

Основы тестирования в MetaTrader 5
Основы тестирования в MetaTrader 5
  • www.mql5.com
Идея автоматической торговли привлекательна тем, что торговый робот может без устали работать 24 часа в сутки и семь дней в неделю. Робот не знает усталости, сомнений и страха,  ему не ведомы психологические проблемы. Достаточно четко формализовать торговые правила и реализовать их в виде алгоритмов, и робот готов неустанно трудиться. Но прежде...
 
Mihail Marchukajtes:

Da stimme ich Ihnen absolut zu. Und die Daten schreibt es mehrere Werte innerhalb einer Minute, es ist nicht jeder Tick, aber immer noch. Dann wird eine beliebige TF aus diesen Daten erstellt

Was nützt es also, mehrere OI innerhalb einer Minute zu schreiben, wenn Sie Daten aus dem Indikator nehmen - es wird nicht weniger TF geben. Und ja, ich liege falsch, es gibt einen Ausgang aus der Schleife, wenn erfolgreich geschrieben, aber immer noch 0,1 Sekunden Mindestabstand. Bauen Sie Ihr Modell auf Ticks auf?

Mihail Marchukajtes:

Ich habe über die TMP-Datei geschrieben. Ich habe den Indikator aktualisiert, wenn eine neue Kerze eintrifft, und er funktionierte in der Realität korrekt. Aber zu einem bestimmten Zeitpunkt nimmt er entweder den letzten Wert der vorherigen Kerze oder den ersten Wert der bereits geöffneten Kerze. Ich habe den Autor gebeten, dies für Minutenindikatoren zu ändern, aber es gab kein Ergebnis.

Für einen echten Handel reicht diese Zeile im Indikator aus - warum sollten Sie die Daten aus der Datei lesen, wenn Sie sie vom Markt nehmen können?

BufOI[rates_total-1]=SymbolInfoDouble(Symbol(),SYMBOL_SESSION_INTEREST);

Wird der Verlauf im Visualizer korrekt dargestellt?

 
Mihail Marchukajtes:

Ich erinnerte mich daran, dass ich den Expert Advisor bei jedem Signal neu kompilieren musste, damit der Indikator korrekt initialisiert wurde und die richtigen Ergebnisse lieferte, um tatsächliche Ergebnisse bei der NS-Eingabe zu erhalten. Dies könnte das aktuelle Signal verändern. Das ist es, was mich wirklich gestört hat....

Das ist seltsam. Vielleicht sollten wir aus dem Indikator für die EA verweigern und direkt aus der Datei in die Struktur lesen und suchen Sie nach dem Wert in der Array-Struktur?

Bitte lassen Sie das Archiv von XI ein paar Tage lang auf Si liegen - es ist schwer, abstrakt zu argumentieren.
 
elibrarius:

Ich hatte auch eine ähnliche Idee, aber im Moment bin ich mit etwas anderem beschäftigt. Ich hoffe, dass ich bald damit experimentieren kann.
Es hat auch den Nachteil, dass das Modell aus 10-mal weniger Daten lernt. Ich habe den Eindruck, dass in diesem Fall die Verallgemeinerungsfähigkeit abnehmen wird.

Man könnte es auch anders machen: mit 9/10 lernen und mit dem verbleibenden 1/10 einer Probe abschneiden.

 
Aleksey Vyazmikin:

Sie können es auch anders machen - lernen Sie auf 9/10 und schneiden Sie auf das verbleibende 1/10 der Probe.

Aleksey Vyazmikin:

Was macht es also für einen Sinn, OI mehrmals innerhalb einer Minute zu schreiben, wenn man die Daten vom Indikator nimmt - es wird nicht weniger TF geben. Und ja, ich habe mich geirrt, es gibt einen Ausgang aus der Schleife, wenn erfolgreich geschrieben, aber immer noch 0,1 Sekunden Mindestabstand. Das Modell basiert auf Ticks?

Für das reale Konto reicht diese Zeile im Indikator also aus - warum die Daten aus der Datei lesen, wenn sie vom Markt genommen werden können?

Wurde sie im Visualizer des Strategietesters korrekt dargestellt?

Ja, aber im Falle eines Verbindungsfehlers wird ein Loch entstehen. Es gibt keine Prüfung der Vollständigkeit der Geschichte. Was das Protokoll betrifft, stimme ich voll und ganz zu.

OI-Archiv

http://fayloobmennik.cloud/7399404

 
Mihail Marchukajtes:

Ja, aber im Falle eines Verbindungsabbruchs entsteht ein Loch. Es gibt keine Prüfung auf Vollständigkeit der Geschichte. Was das Protokoll anbelangt, so stimme ich voll und ganz zu.

OI-Archiv

http://fayloobmennik.cloud/7399404

Wie werden also die Daten in die Datei geschrieben, wenn die Verbindung unterbrochen wird?

 
Roman:

Fundamentaldaten haben viele Indikatoren, die numerische Werte liefern.
Sogar hier auf der Website enthält der Nachrichtenkalender Statistiken zu Veranstaltungen.
Ja, ich stimme zu, in sprachlichen Äußerungen fehlen die Zahlenwerte.
Deshalb sollten solche Daten wahrscheinlich als 0 1 klassifiziert werden.
Es geht vor allem darum, den Unterschied zwischen positiver und negativer Sprache zu lehren ))
Aber auch hier ist das eine Idee, zum Nachdenken! ))

um die Stiftung zu nutzen, fehlen einige Zahlen

Soweit ich mich erinnere, habe ich keine monetären Aggregate gefunden, es gibt mehrere davon.

einige von ihnen sind seit etwa 2010 nicht mehr öffentlich zugänglich gemacht worden.

 
Mihail Marchukajtes:

Ja, aber im Falle eines Verbindungsabbruchs entsteht ein Loch. Es gibt keine Prüfung auf Vollständigkeit der Geschichte. Was das Protokoll anbelangt, so stimme ich voll und ganz zu.

OI-Archiv

http://fayloobmennik.cloud/7399404

Sind Sie damit einverstanden, dass zum Zeitpunkt der Eröffnung des Minutenbalkens der OI für den vorherigen Eintrag genommen werden sollte? Zum Beispiel nehmen wir zum Zeitpunkt der Öffnung um 10:00 Uhr den OM als 23:49:55.

Ich denke, es ist besser, den Indikator auf M1 zu verwenden und alle notwendigen Informationen aus dem Null-Balken zu nehmen und verschiedene Vergleiche im Expert Advisor unter Berücksichtigung der Informationsanforderung aus dem Indikatorpuffer mit dem erforderlichen Offset durchzuführen.

Was ist der dritte Wert in der Datei - der erste ist das Datum, der zweite ist OM und der dritte ist OI? Ich dachte, es sei ein Delta, aber es funktioniert nicht.

Ich habe versucht, den Indikator zu ändern, wie ich oben geschrieben habe, er liest und zeigt OM an, die Arbeitsgeschwindigkeit ist jetzt viel schneller, probieren Sie es einfach aus.

Ja, und das Lesen aus der Datei sollte funktionieren, wenn Daten in der Datei vorhanden sind, aber der Markt geschlossen ist und nicht überprüft wurde.

Dateien:
OI_Test.mq5  16 kb
 
Aleksey Vyazmikin:

Wie werden also die Daten in die Datei geschrieben, wenn die Verbindung unterbrochen wird?

Wird die Verbindung durch den Makler weltweit unterbrochen, kann nichts unternommen werden. Der Berater für die Datenspeicherung befindet sich auf dem UPU-Server, und ich kann sagen, dass die Daten ohne jegliche Verluste geschrieben wurden.
Grund der Beschwerde: