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

 
elibrarius:
Ja. Synonyme sind fic, input, predictor.
Danke, ich hatte schon immer "Fiches", obwohl das Wort schief ist.
 
Evgeny Dyuka:
Danke, ich hatte schon immer ein 'Ding', obwohl das Wort schief ist

auch unangenehm....

das korrekteste Wort ist meiner Meinung nach" features". aber es gibt viele synonyme. und nicht das beste.

elibrarius:
Ja. Synonyme sind fic, input, predictor.
 
Evgeny Dyuka:
Danke, ich hatte schon immer "fiches", obwohl das Wort schief ist

Vor allem, wenn man mit der Transliteration nicht vertraut ist.

 
Maxim Kuznetsov:

wird der Balken erst dann geöffnet, wenn ein Tick auf dem Instrument aufgetreten ist. Eine Zecke gibt es vielleicht schon lange nicht mehr ;-)

Und dieses Problem ist im Code leider nicht vollständig gelöst. Haben Sie Ideen, wie das Problem so gelöst werden kann, dass es möglich ist, die gleichen Daten von einem Symbol zu erhalten, auf dem sich der EA nicht im OHLC-Modellierungsmodus und im Modus "Jeder Tick basiert auf echten Ticks" befindet? Haben Sie eine Idee, wie man das OHLC-Problem mit der Synchronisierung ohne Verzögerung lösen kann, d.h. wenn es noch keinen Balken auf einem anderen Symbol gibt, dann verwenden wir die vorherigen Balkendaten? Wenn wir alle Ticks überprüfen, können wir (obwohl ich es noch nicht ausprobiert habe) die Daten des ersten Ticks im Balken empfangen und uns der Synchronisation sicher sein, d.h. wissen, ob es im Moment des Öffnens eines neuen Balkens einen Balken auf dem aktuellen Chart gab oder nicht.

 
Aleksey Vyazmikin:

Und dieses Problem wird durch den Code leider nicht vollständig gelöst. Gibt es irgendwelche Ideen, wie es gelöst werden kann, so dass es möglich wäre, die gleichen Daten von dem Symbol zu erhalten, wo der EA nicht befindet, sowohl in OHLC Simulationsmodus und in "Jeder Tick basiert auf realen Ticks" Modus? Haben Sie eine Idee, wie man das Problem der Synchronisierung ohne Verzögerung bei OHLC lösen kann, d.h. wenn es noch keinen Balken auf einem anderen Symbol gibt, dann verwenden wir die vorherigen Balkendaten? Wenn wir es mit allen Ticks überprüfen, dann ist es möglich (obwohl ich es nicht ausprobiert habe), die Daten des ersten Ticks im Balken zu erhalten und sicher zu sein, dass die Synchronisation damit erfolgt, d.h. zu wissen, ob es einen Balken im aktuellen Diagramm zum Zeitpunkt der Öffnung eines neuen gab oder nicht.

Es können sogar einige winzige Takte fehlen. Bilden Sie einen Balken zum Schlusskurs des vorangegangenen Balkens. Dies kann für die Analyse des kombinierten Verhaltens mehrerer Symbole nützlich sein. Für ein Währungspaar mag das unwichtig sein.
 
elibrarius:
Vielleicht fehlen sogar ein paar Minutentakte. Bilden Sie einen Balken zum Schlusskurs des vorangegangenen Balkens. Für die Analyse des gemeinsamen Verhaltens mehrerer Instrumente ist sie gut geeignet. Für eine Währung ist das wahrscheinlich nicht wichtig.

Auf diese Weise kommt es zu einer Desynchronisation, da laut OHLC der vorhergehende Balken der vorhergehende sein wird, aber im realen Handel kann es der vorhergehende sein.

 

Für diejenigen, die nicht wussten, dass der OHLC-Modus eine unsynchronisierte Symbolzeitserie ist, ist es entscheidend für MO


Forum zum Thema Handel, automatisierte Handelssysteme und Strategietests

Neue Version von MetaTrader 5 build 2615: Fundamentalanalyse und komplexe Kriterien in Strategy Tester

Aleksey Vyazmikin, 2020.09.26 13:26


Build 2622, 1-Minuten-Zeitrahmen, Tool Si-12.20 Broker "Otkrytie".

Druck bei der Eröffnung eines neuen Balkens im Modus"Jeder Tick basierend auf den echten Ticks" und "OHLC auf M1". :

Print("Time",TimeToString(iTime(Symbol(),PERIOD_CURRENT,0),TIME_DATE|TIME_MINUTES), " Time_TOM=",TimeToString(iTime("USDRUB_TOM",PERIOD_CURRENT,0),TIME_DATE|TIME_MINUTES));

Die obigen Ergebnisse sind tabellarisch dargestellt und ich habe Fragen dazu:

1. Ich habe erwartet, dass die Verzögerung auftreten kann, wenn es einen neuen Balken für das aktuelle Symbol gibt, aber noch nicht für das Symbol, von dem wir die Informationen anfordern - diese Situation passiert wirklich, aber nur bei der Eröffnung eines neuen Tages - es ist grün hervorgehoben.

2) Die Situation ist die gleiche wie im ersten Punkt ohne Markierung, aber wenn dies bei den Potik-Tests erwartet wird, dann ist unklar, warum diese Situation bei"OHLC on M1" auftritt- warum es eine Desynchronisation gibt.

3. die Situation, in der zwei Ticks gleichzeitig empfangen werden oder ein Tick für das angeforderte Symbol schneller ist als für das Symbol, von dem die Information abgerufen wird, wird gelb hervorgehoben; aber warum gibt es im Modus "OHLC auf M1" keinen Tick auf diesem Balken, wenn er bereits im tickweisen Modus empfangen wurde?

Ich bitte die Entwickler um Aufklärung, war dies die Absicht, was ist dann die Logik, oder ist dies ein Fehler, der behoben werden wird?


Antwort:

Forum zum Thema Handel, automatische Handelssysteme und Testen von Handelsstrategien

Neue Version des MetaTrader 5 build 2615: Fundamentalanalyse und komplexe Kriterien im Strategy Tester

Renat Fatkhullin, 2020.09.26 13:33

Ihre Frage bezieht sich nur auf den OHLC-Modus der Prüfung, denn im Poticky-Modus ist alles korrekt?

Die Antwort ist einfach: Bei OHLC-Tests gibt es keine Garantien für die genaue Synchronisierung von fremden Zeichen. OHLC ist ausschließlich für Verschmutzungsprüfungen vorgesehen.


 

Scheint das Problem der Out-of-Sync gelöst zu haben, wenn Daten von einem anderen Symbol angefordert werden - musste in einigen Fällen einen Minutenbalken opfern, aber stabiles Ergebnis bei der Modellierung auf allen Ticks und auf OHLC, was bedeutet, dass das gleiche im realen Handel erwartet wird.

//+------------------------------------------------------------------+
//|Получение информации о ценах OHLC текущего бара                   |
//+------------------------------------------------------------------+
void Get_OHLC(string symbol,ENUM_TIMEFRAMES TF, double &arr_OHLC[])
{
   ArrayResize(arr_OHLC,4);
   arr_OHLC[0]=iOpen(symbol,TF,0);
   arr_OHLC[3]=iOpen(symbol,PERIOD_M1,0);
   datetime s=iTime(symbol,TF,0);
   datetime f=iTime(symbol,PERIOD_M1,1);
   datetime Time_1=iTime(Symbol(),PERIOD_M1,1);

   if(TF!=PERIOD_M1)
   {
      double arr_High[];
      double arr_Low[];
      int copied=0;
      if(Symbol()!=symbol)//Если берем данные с другого символа, то проверяем синхронизацию - нужно, так как при открытии новой свечи на текущем символе данных можнт небыть на опрашиваемом символе
      {
         if(Time_1>f)//На текущем символе открылись раньше появления нового бара на запрашиваемом
         {
            f=iTime(symbol,PERIOD_M1,0);
            arr_OHLC[3]=iClose(symbol,PERIOD_M1,0);
         }
         else
         {
            arr_OHLC[3]=iClose(symbol,PERIOD_M1,1);
         }
         if(s>f)//Если текущий бар ТФ открылся раньше, чем минутный бар до которого включительно берем информацию OHLC
         {
            s=iTime(symbol,TF,1);
            arr_OHLC[0]=iOpen(symbol,TF,1);
         }
         copied=CopyHigh(symbol,PERIOD_M1,s,f,arr_High);
         if (copied>0)
         {
            arr_OHLC[1]=arr_High[ArrayMaximum(arr_High,0,WHOLE_ARRAY)];
         }
         else
         {
            Print("Ошибка копирования в массив arr_High");
         }
         copied=CopyLow(symbol,PERIOD_M1,s,f,arr_Low);
         if (copied>0)
         {
            arr_OHLC[2]=arr_Low[ArrayMinimum(arr_Low,0,WHOLE_ARRAY)];
         }
         else
         {
            Print("Ошибка копирования в массив arr_Low");
         }

      }
      else
      {
         if(s<f)
         {
            copied=CopyHigh(symbol,PERIOD_M1,s,f,arr_High);
            if (copied>0)
            {
               arr_OHLC[1]=arr_High[ArrayMaximum(arr_High,0,WHOLE_ARRAY)];
            }
            else
            {
               Print("Ошибка копирования в массив arr_High");
            }
            copied=CopyLow(symbol,PERIOD_M1,s,f,arr_Low);
            if (copied>0)
            {
               arr_OHLC[2]=arr_Low[ArrayMinimum(arr_Low,0,WHOLE_ARRAY)];
            }
            else
            {
               Print("Ошибка копирования в массив arr_Low");
            }
         }
         else
         {
            if(s==f)//Если ТФ открылся на прошлом минутном баре
            {
               arr_OHLC[1]=iHigh(symbol,PERIOD_M1,1);
               arr_OHLC[2]=iLow(symbol,PERIOD_M1,1);
            }
            if(s>f)//Если ТФ открылся на текущем минутном баре
            {
               arr_OHLC[1]=iOpen(symbol,PERIOD_M1,0);
               arr_OHLC[2]=iOpen(symbol,PERIOD_M1,0);
            }
         }
      }
   }
   else
   {
      arr_OHLC[0]=iOpen(symbol,PERIOD_M1,0);
      arr_OHLC[1]=iOpen(symbol,PERIOD_M1,0);
      arr_OHLC[2]=iOpen(symbol,PERIOD_M1,0);
      arr_OHLC[3]=iOpen(symbol,PERIOD_M1,0);
      if(Symbol()!=symbol)
      {
         if(Time_1>iTime(symbol,PERIOD_M1,1))//Если не появился новый бар
         {
            arr_OHLC[0]=iOpen(symbol,PERIOD_M1,0);
            arr_OHLC[1]=iHigh(symbol,PERIOD_M1,0);
            arr_OHLC[2]=iLow(symbol,PERIOD_M1,0);
            arr_OHLC[3]=iClose(symbol,PERIOD_M1,0);
         }
         else//Если появился новый бар
         {
            arr_OHLC[0]=iOpen(symbol,PERIOD_M1,1);
            arr_OHLC[1]=iHigh(symbol,PERIOD_M1,1);
            arr_OHLC[2]=iLow(symbol,PERIOD_M1,1);
            arr_OHLC[3]=iClose(symbol,PERIOD_M1,1);
         }
      }
   }
}
 
Bei einem normalen, robusten Algo hat eine kleine Verzögerung keinerlei Auswirkungen. (Dies sind weit hergeholte Probleme).
 
Maxim Dmitrievsky:
Für ein normales robustes Algo hat eine kleine Verzögerung keine Auswirkungen. Das sind weit hergeholte Probleme.)

Wo bekommt man diese "normalen" Exemplare? Und es wirkt sich aus oder nicht - hier ist es zufällig, wenn man während der Quantisierung an die Grenze zwischen den Quantilen gerät, dann kann es während des Trainings so aussehen, als ob nur 1 Quantilsunterschied einen Eingangssprung auf real verursacht. Im Allgemeinen mag ich es nicht, wenn ich im Tester einen abgeschlossenen Handelstag nicht reproduzieren kann, also habe ich den Grund identifiziert und begonnen, ihn zu beseitigen.

Grund der Beschwerde: