Diskussion zum Artikel "LifeHack für Händler: Fast-Food aus Indikatoren" - Seite 8

 
Rashid Umarov:

PS Ich habe die Standard-MACD-Beispiel auf USDJPY M30 2017.02.01-2018.01.18 "Alle Ticks" (wie in dem Artikel) MetaQuotes-Demo.

Wie kann man das in 8 Sekunden unterbringen? Vor allem in 1 Sekunde?

Forum zum Thema Trading, automatisierte Handelssysteme und Testen von Handelsstrategien

Diskussion zum Artikel "LifeHack für Trader: Fastfood aus Indikatoren kochen"

fxsaber, 26.01.2018 11:06 Uhr.

Habe nichts gemacht. Lasse es so laufen wie es ist. In den obigen Protokollen alle Daten zu reproduzieren. Ihr Ergebnis sollte völlig die gleiche wie meine in Bezug auf den Gewinn sein. Und von der Leistung nicht viel anders.

 
Rashid Umarov:
Wirklich? Wenn Sie behaupten, einen Fehler oder ein Problem in meinem Artikel gefunden zu haben, für den ich Geld bezahlt habe, werde ich das auf jeden Fall überprüfen. In der Zwischenzeit lassen Sie uns nicht "lassen". Denn bei Ihnen klingt es so, als ob Sie herablassend wären.
 
fxsaber:

Machen Sie den MACD SaMple von der Lieferung auf Ihre Einstellungen. Und woher kommt der EURO in der Bilanz, ist das nicht der Punkt?

Und die Testzeit ist immer noch viel länger als Ihre.

2018.01.26 13:34:10.520 Core 1  authorized (agent build 1755)
2018.01.26 13:34:10.522 Tester  EURUSD,M1 (MetaQuotes-Demo): testing of Experts\Examples\MACD\MACD Sample.ex5 from 2017.09.01 00:00 to 2018.01.26 00:00

2018.01.26 13:34:16.792 Core 1  EURUSD,M1 (MetaQuotes-Demo): generating based on real ticks
2018.01.26 13:34:16.792 Core 1  EURUSD,M1: testing of Experts\Examples\MACD\MACD Sample.ex5 from 2017.09.01 00:00 to 2018.01.26 00:00 started with inputs:
2018.01.26 13:34:16.792 Core 1    InpLots=0.1
2018.01.26 13:34:16.792 Core 1    InpTakeProfit=50
2018.01.26 13:34:16.792 Core 1    InpTrailingStop=30
2018.01.26 13:34:16.792 Core 1    InpMACDOpenLevel=3
2018.01.26 13:34:16.792 Core 1    InpMACDCloseLevel=2
2018.01.26 13:34:16.792 Core 1    InpMATrendPeriod=26


2018.01.26 13:25:46.482 Core 1  final balance 10168.90 USD
2018.01.26 13:25:46.482 Core 1  EURUSD,M1: 9753093 ticks, 147480 bars generated. Environment synchronized in 0:00:02.610. 
Test passed in 0:00:19.062 (including ticks preprocessing 0:00:02.078).
2018.01.26 13:25:46.482 Core 1  EURUSD,M1: total time from login to stop testing 0:00:21.672 (including 0:00:02.610 for history data synchronization)
2018.01.26 13:25:46.482 Core 1  600 Mb memory used including 44 Mb of history data, 256 Mb of tick data
 

Auf dem Zeitrahmen aus dem Artikel, auf EURUSD,M30 und USDJPY,M30

MACD Sample One value at a time.mq5:

final balance 100180.01 USD
EURUSD,M30: 26390728 ticks, 12510 bars generated. Environment synchronized in 0:00:00.125. Test passed in 0:00:41.016 (including ticks preprocessing 0:00:02.328).
EURUSD,M30: total time from login to stop testing 0:00:41.141 (including 0:00:00.125 for history data synchronization)
756 Mb memory used including 1.88 Mb of history data, 512 Mb of tick data

final balance 99523.31 USD
USDJPY,M30: 29801706 ticks, 11837 bars generated. Environment synchronized in 0:00:00.032. Test passed in 0:01:00.937 (including ticks preprocessing 0:00:02.735).
USDJPY,M30: total time from login to stop testing 0:01:00.969 (including 0:00:00.032 for history data synchronization)
819 Mb memory used including 1.88 Mb of history data, 576 Mb of tick data


MACD Sample 4 to 5 MQL4 style.mq5:

final balance 100192.51 USD
EURUSD,M30: 26390728 ticks, 12510 bars generated. Environment synchronized in 0:00:00.140. Test passed in 0:01:37.969 (including ticks preprocessing 0:00:02.329).
EURUSD,M30: total time from login to stop testing 0:01:38.109 (including 0:00:00.140 for history data synchronization)
755 Mb memory used including 1.88 Mb of history data, 512 Mb of tick data

final balance 99550.10 USD
USDJPY,M30: 29801706 ticks, 11837 bars generated. Environment synchronized in 0:00:00.031. Test passed in 0:01:51.328 (including ticks preprocessing 0:00:02.500).
USDJPY,M30: total time from login to stop testing 0:01:51.359 (including 0:00:00.031 for history data synchronization)
819 Mb memory used including 1.88 Mb of history data, 576 Mb of tick data

Die Testzeit unterscheidet sich zweimal. Und es ist nicht 8 oder 1 Sekunde.

Wenn Sie die Salden vergleichen - ja, es gibt einen leichten Unterschied in den Zahlen, aber es ist nicht auf dem Chart bemerkbar.

 
Vasiliy Sokolov:

Die Beschreibung dieses Themas wird hier nämlich auf einer etwas anderen Ebene gesehen:

  • Es wurden bereits Tausende von Indikatoren geschrieben, auf die über iCustom zugegriffen wird, wobei die entsprechenden Puffer/Handles zugewiesen werden und so weiter und so fort. Das ist eine langsame und ressourcenintensive Geschichte;
  • Ein Indikator kann als reine Funktion innerhalb eines Expert Advisors implementiert werden - in diesem Fall wird der gewünschte Wert viel schneller berechnet und benötigt weniger Speicher.

Die Idee ist, eine Art Schnittstelle zu schreiben, die einen einheitlichen Zugriff auf alle benutzerdefinierten Indikatoren ermöglicht , aber wenn der Indikator als separate reine Funktion implementiert ist, wird der Verweis auf diese Funktion anstelle des Handles vorgenommen. Als Ergebnis erhalten wir eine gute Beschleunigung und gleichzeitig verlieren wir nicht den Zugriff auf beliebige Indikatoren. Das ist ein interessantes Thema, ich würde es sogar aufgreifen.

Probieren Sie es aus, es ist interessant zu sehen, ob es sich lohnt. Mir würde ein Ansatz dieser Art gefallen - wir nehmen OnCalculate aus dem Indikator heraus, modifizieren es leicht unter einem neuen Namen, fügen es in den Indikatorcode ein und nun können wir diese Funktion als Bibilio-Funktion ziehen und ihr Parameter aus dem Expert Advisor übergeben. Richtig?
 
Rashid Umarov:
...Ich möchte einen Ansatz dieser Art - wir nehmen OnCalculate aus dem Indikator heraus, modifizieren es leicht unter einem neuen Namen, fügen es dem Indikatorcode hinzu und jetzt können wir diese Funktion als Bibilio-Funktion nutzen und ihr Parameter vom Expert Advisor übergeben. Richtig?
Wir müssen über die Implementierung nachdenken. Jetzt ist es schwierig zu sagen, wie es sein kann.
 
Rashid Umarov:
Probieren Sie es aus, es ist interessant zu sehen, ob es sich lohnt. Ich hätte gerne einen Ansatz dieser Art - wir nehmen OnCalculate aus dem Indikator heraus, modifizieren es leicht unter einem neuen Namen, fügen es dem Indikatorcode hinzu und jetzt können wir diese Funktion als Bibilio-Funktion aufrufen und ihr Parameter vom Expert Advisor übergeben. Richtig?

Ich habe dies für iRSIOnArray() getan, das nicht in mql5 enthalten ist. Sie funktioniert im Indikator. Um es aus dem Expert Advisor aufzurufen, ist es notwendig, nicht so direkt zu tun.

//+------------------------------------------------------------------+
//| Relativer Stärke-Index auf Array|
//+------------------------------------------------------------------+
template<typename T>
int RSIOnArray(const int rates_total,
               const int prev_calculated,
               const int begin,
               const int period,
               const T &price[],
               double &buffer_pos[],
               double &buffer_neg[],
               double &buffer_rsi[])
  {
   int   i;
   T     diff;
//--- Prüfung der Anzahl der Tarife
   if(period<1 || rates_total-begin<period) return(0);
//--- as_series-Flags speichern
   bool as_series_price=ArrayGetAsSeries(price);
   bool as_series_rsi=ArrayGetAsSeries(buffer_rsi);
   if(as_series_price)
      ArraySetAsSeries(price,false);
   if(as_series_rsi)
     {
      ArraySetAsSeries(buffer_rsi,false);
      ArraySetAsSeries(buffer_pos,false);
      ArraySetAsSeries(buffer_neg,false);
     }
//--- vorläufige Berechnungen
   int pos=prev_calculated-1;
   if(pos<=period)
     {
      //--- erste RSIPeriodenwerte des Indikators werden nicht berechnet
      buffer_rsi[0]=0.0;
      buffer_pos[0]=0.0;
      buffer_neg[0]=0.0;
      T SumP=0.0;
      T SumN=0.0;
      for(i=1; i<=period; i++)
        {
         buffer_rsi[i]=0.0;
         buffer_pos[i]=0.0;
         buffer_neg[i]=0.0;
         diff=price[i]-price[i-1];
         SumP+=(diff>0 ? diff : 0);
         SumN+=(diff<0 ?-diff : 0);
        }
      //--- ersten sichtbaren Wert berechnen
      buffer_pos[period]=double(SumP/period);
      buffer_neg[period]=double(SumN/period);
      
      buffer_rsi[period]=100.0-(100.0/(1.0+buffer_pos[period]/(buffer_neg[period]>0 ? buffer_neg[period] : DBL_MIN)));
      //--- den Positionswert für die Hauptberechnung vorbereiten
      pos=period+1;
     }
//--- die Hauptschleife der Berechnungen
   for(i=pos;i<rates_total && !IsStopped();i++)
     {
      diff=price[i]-price[i-1];
      buffer_pos[i]=(buffer_pos[i-1]*(period-1)+(diff>0.0 ? diff : 0.0))/period;
      buffer_neg[i]=(buffer_neg[i-1]*(period-1)+(diff<0.0 ?-diff : 0.0))/period;
      buffer_rsi[i]=100.0-100.0/(1+buffer_pos[i]/(buffer_neg[i]>0 ? buffer_neg[i] : DBL_MIN));
     }
//--- Wiederherstellung der as_series-Flags
   if(as_series_price) ArraySetAsSeries(price,true);
   if(as_series_rsi)
     {
      ArraySetAsSeries(buffer_rsi,true);
      ArraySetAsSeries(buffer_pos,true);
      ArraySetAsSeries(buffer_neg,true);
     }
//---
   return(rates_total);
  }
//+------------------------------------------------------------------+
 

Forum zum Thema Handel, automatisierte Handelssysteme und Testen von Handelsstrategien

Diskussion über den Artikel "LifeHack für Trader: Fast Food aus Indikatoren kochen"

Rashid Umarov, 2018.01.26 11:30 AM

Habe MACD SaMple aus dem Angebot auf deinen Einstellungen gemacht. Woher ist der EURO in der Bilanz, ist das nicht der Punkt?

Das ist nicht der Punkt. EUR von hier


Und die Testzeit ist immer noch viel länger als Ihre.

2018.01.26 13:34:10.520 Core 1  authorized (agent build 1755)
2018.01.26 13:34:10.522 Tester  EURUSD,M1 (MetaQuotes-Demo): testing of Experts\Examples\MACD\MACD Sample.ex5 from 2017.09.01 00:00 to 2018.01.26 00:00

2018.01.26 13:34:16.792 Core 1  EURUSD,M1 (MetaQuotes-Demo): generating based on real ticks
2018.01.26 13:34:16.792 Core 1  EURUSD,M1: testing of Experts\Examples\MACD\MACD Sample.ex5 from 2017.09.01 00:00 to 2018.01.26 00:00 started with inputs:
2018.01.26 13:34:16.792 Core 1    InpLots=0.1
2018.01.26 13:34:16.792 Core 1    InpTakeProfit=50
2018.01.26 13:34:16.792 Core 1    InpTrailingStop=30
2018.01.26 13:34:16.792 Core 1    InpMACDOpenLevel=3
2018.01.26 13:34:16.792 Core 1    InpMACDCloseLevel=2
2018.01.26 13:34:16.792 Core 1    InpMATrendPeriod=26


2018.01.26 13:25:46.482 Core 1  final balance 10168.90 USD
2018.01.26 13:25:46.482 Core 1  EURUSD,M1: 9753093 ticks, 147480 bars generated. Environment synchronized in 0:00:02.610. 
Test passed in 0:00:19.062 (including ticks preprocessing 0:00:02.078).
2018.01.26 13:25:46.482 Core 1  EURUSD,M1: total time from login to stop testing 0:00:21.672 (including 0:00:02.610 for history data synchronization)
2018.01.26 13:25:46.482 Core 1  600 Mb memory used including 44 Mb of history data, 256 Mb of tick data

Hier ist mein Log mit Ihren Einstellungen

EURUSD,M1 (MetaQuotes-Demo): generating based on real ticks
EURUSD,M1: testing of Experts\Examples\MACD\MACD Sample.ex5 from 2017.09.01 00:00 to 2018.01.26 00:00 started with inputs:
  InpLots=0.10
  InpTakeProfit=50
  InpTrailingStop=30
  InpMACDOpenLevel=3
  InpMACDCloseLevel=2
  InpMATrendPeriod=26

final balance 10000168.90 USD
EURUSD,M1: 9753093 ticks, 147480 bars generated. Environment synchronized in 0:00:00.031. Test passed in 0:00:06.302.
EURUSD,M1: total time from login to stop testing 0:00:06.333 (including 0:00:00.031 for history data synchronization)
571 Mb memory used including 44 Mb of history data, 256 Mb of tick data


Warum es bei mir 3,5 mal schneller ist (Caching wurde durch Rekompilierung vor dem Backtest entfernt) - ich weiß es nicht. Konfiguration

2018.01.26 11:45:38.151 Terminal        Alpari Limited MT5 x64 build 1755 started (Alpari Limited)
2018.01.26 11:45:38.151 Terminal        Windows 7 Service Pack 1 (build 7601) x64, IE 9, Intel Core i7-2700 K  @ 3.50 GHz, Memory: 10147 / 16301 Mb, Disk: 3 / 29 Gb, GMT+2

Lassen Sie uns die Gründe dafür herausfinden! Ich denke, dies ist sehr wichtig. Ich habe keine HDD (nur SSD). Vielleicht ist das das Problem. Aber dann ist es SEHR schlecht für den MT5. Der Computer ist sehr alt - sicher fünf Jahre. Deshalb ist es so seltsam.

 
Vladimir Karputov:

Die Testzeiten sind doppelt so unterschiedlich. Und es sind nicht 8 oder 1 Sekunde.

Zeigen Sie die Konfigurationszeilen aus dem Terminal-Startprotokoll an.

 
fxsaber:

Warum ich eine 3,5-mal schnellere Ausführung habe (Zwischenspeicherung durch Neukompilierung vor dem Backtest entfernt) - ich weiß es nicht. Konfiguration

Lassen Sie uns die Gründe dafür herausfinden! Ich denke, dies ist sehr wichtig. Ich habe keine HDD (nur SSD). Vielleicht ist das das Problem. Aber dann ist es SEHR schlecht für den MT5. Der Computer ist sehr alt - sicher fünf Jahre alt. Deshalb ist es so seltsam.

Hier ist mein Rechner, keine SSD

MetaTrader 5 x64 build 1755 started (MetaQuotes Software Corp.)
Windows 10 (build 16299) x64, IE 11, UAC, Intel Core i7  920 @ 2.67 GHz, Memory: 6613 / 12277 Mb, Disk: 156 / 270 Gb, GMT+3

Ich habe in allen Beiträgen nachgesehen - die Anzahl der Ticks ist die gleiche

2018.01.26 13:25:46.482 Core 1  final balance 10168.90 USD
2018.01.26 13:25:46.482 Core 1  EURUSD,M1: 9753093  ticks, 147480 bars generated. Environment synchronized in 0:00:02.610. 
Test passed in 0:00:19.062 (including ticks preprocessing 0:00:02.078).
2018.01.26 13:25:46.482 Core 1  EURUSD,M1: total time from login to stop testing 0:00:21.672 (including 0:00:02.610 for history data synchronization)
2018.01.26 13:25:46.482 Core 1  600 Mb memory used including 44 Mb of history data, 256 Mb of tick data