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.
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.
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 in0:00:00.125. Test passed in0: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.125for 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 in0:00:00.032. Test passed in0: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.032for 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 in0:00:00.140. Test passed in0: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.140for 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 in0:00:00.031. Test passed in0: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.031for 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.
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(constint rates_total,
constint prev_calculated,
constint begin,
constint period,
const T &price[],
double &buffer_pos[],
double &buffer_neg[],
double &buffer_rsi[])
{
int i;
T diff;
//--- Prüfung der Anzahl der Tarifeif(period<1 || rates_total-begin<period) return(0);
//--- as_series-Flags speichernbool 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 Berechnungenint 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 Berechnungenfor(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-Flagsif(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);
}
//+------------------------------------------------------------------+
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.2613:34:10.520 Core 1 authorized (agent build 1755)
2018.01.2613:34:10.522 Tester EURUSD,M1 (MetaQuotes-Demo): testing of Experts\Examples\MACD\MACD Sample.ex5 from2017.09.0100:00 to 2018.01.2600:002018.01.2613:34:16.792 Core 1 EURUSD,M1 (MetaQuotes-Demo): generating based on real ticks
2018.01.2613:34:16.792 Core 1 EURUSD,M1: testing of Experts\Examples\MACD\MACD Sample.ex5 from2017.09.0100:00 to 2018.01.2600:00 started with inputs:
2018.01.2613:34:16.792 Core 1 InpLots=0.12018.01.2613:34:16.792 Core 1 InpTakeProfit=502018.01.2613:34:16.792 Core 1 InpTrailingStop=302018.01.2613:34:16.792 Core 1 InpMACDOpenLevel=32018.01.2613:34:16.792 Core 1 InpMACDCloseLevel=22018.01.2613:34:16.792 Core 1 InpMATrendPeriod=262018.01.2613:25:46.482 Core 1 final balance 10168.90 USD2018.01.2613:25:46.482 Core 1 EURUSD,M1: 9753093 ticks, 147480 bars generated. Environment synchronized in0:00:02.610.
Test passed in0:00:19.062 (including ticks preprocessing 0:00:02.078).
2018.01.2613:25:46.482 Core 1 EURUSD,M1: total time fromlogin to stop testing 0:00:21.672 (including 0:00:02.610for history data synchronization)
2018.01.2613:25:46.482 Core 1600 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 from2017.09.0100:00 to 2018.01.2600: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 in0:00:00.031. Test passed in0:00:06.302.
EURUSD,M1: total time from login to stop testing 0:00:06.333 (including 0:00:00.031for 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
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.
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.
Ich habe in allen Beiträgen nachgesehen - die Anzahl der Ticks ist die gleiche
2018.01.2613:25:46.482 Core 1 final balance 10168.90 USD2018.01.2613:25:46.482 Core 1 EURUSD,M1: 9753093 ticks, 147480 bars generated. Environment synchronized in0:00:02.610.
Test passed in0:00:19.062 (including ticks preprocessing 0:00:02.078).
2018.01.2613:25:46.482 Core 1 EURUSD,M1: total time fromlogin to stop testing 0:00:21.672 (including 0:00:02.610for history data synchronization)
2018.01.2613:25:46.482 Core 1600 Mb memory used including 44 Mb of history data, 256 Mb of tick data
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.
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.
Auf dem Zeitrahmen aus dem Artikel, auf EURUSD,M30 und USDJPY,M30
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.
Die Beschreibung dieses Themas wird hier nämlich auf einer etwas anderen Ebene gesehen:
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.
...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?
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.
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.
Hier ist mein Log mit Ihren Einstellungen
Warum es bei mir 3,5 mal schneller ist (Caching wurde durch Rekompilierung 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. Deshalb ist es so seltsam.
Die Testzeiten sind doppelt so unterschiedlich. Und es sind nicht 8 oder 1 Sekunde.
Zeigen Sie die Konfigurationszeilen aus dem Terminal-Startprotokoll an.
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
Ich habe in allen Beiträgen nachgesehen - die Anzahl der Ticks ist die gleiche