Diskussion zum Artikel "Klassische Strategien neu interpretieren (Teil XI): Kreuzung gleitender Durchschnitte (II)"

 

Neuer Artikel Klassische Strategien neu interpretieren (Teil XI): Kreuzung gleitender Durchschnitte (II) :

Die gleitenden Durchschnitte und der Stochastik-Oszillator können verwendet werden, um trendfolgende Handelssignale zu generieren. Diese Signale werden jedoch erst nach dem Eintreten der Preisaktion beobachtet. Diese den technischen Indikatoren innewohnende Verzögerung können wir mit Hilfe von KI wirksam überwinden. In diesem Artikel erfahren Sie, wie Sie einen vollständig autonomen KI-gesteuerten Expert Advisor erstellen, der Ihre bestehenden Handelsstrategien verbessern kann. Selbst die älteste mögliche Handelsstrategie kann verbessert werden.

Wir haben bereits früher über die Idee der Vorhersage von gleitenden Durchschnittsüberkreuzungen berichtet, der Artikel ist hier verlinkt. Wir haben festgestellt, dass das Kreuzen der gleitenden Durchschnitte leichter zu prognostizieren ist als direkte Preisänderungen. Heute haben wir uns diesem bekannten Problem erneut zugewendet, allerdings mit einem völlig anderen Ansatz.

 
Wir haben gründlich untersucht, wie groß der Unterschied für unsere Handelsanwendungen ist und wie diese Tatsache Ihre Handelsstrategien verbessern kann. Das Kreuzen von gleitenden Durchschnitten ist eine der ältesten Handelsstrategien überhaupt. Es ist eine Herausforderung, eine gewinnbringende Strategie mit einer so weithin bekannten Technik zu entwickeln. Dennoch hoffe ich, Ihnen in diesem Artikel gezeigt zu haben, dass alte Hüte durchaus neue Tricks hervorzaubern können.

Um in unseren Vergleichen empirisch zu sein, werden wir zunächst eine Handelsstrategie in MQL5 für das EURGBP-Paar erstellen und dabei nur die folgenden Indikatoren verwenden:

  1. 2 Exponentielle gleitende Durchschnitte, angewandt auf den Schlusskurs. Eine mit einer Periode von 20 und die andere mit 60.
  2. Der Stochastik-Oszillator mit den Standardeinstellungen 5,3,3 wurde auf den Modus „Exponentieller gleitender Durchschnitt“ gesetzt und so eingestellt, dass er seine Berechnungen im Modus CLOSE_CLOSE durchführt.
  3. Der Average True Range-Indikator mit einer Periode von 14, um unsere Preise für Take-Profit und Stop-Loss festzulegen.

Unsere Strategie ist auf den Handel im täglichen Zeitrahmen ausgerichtet. Wir werden diese Strategie vom ersten Januar 2022 bis Anfang Juni 2024 testen. Unsere Strategie wird zunächst klassische Handelsregeln verwenden. Kaufsignale werden also immer dann generiert, wenn der sich schnell bewegende Durchschnitt den sich langsam bewegenden Durchschnitt nach oben kreuzt und der Stochastikwert über 80 liegt. Umgekehrt gilt das für unsere Verkaufssignale. Wir registrieren ein Verkaufssignal, wenn der sich schnell bewegende Durchschnitt unter dem langsamen liegt und der Stochastik-Oszillator unter 20 liegt.


Autor: Gamuchirai Zororo Ndawana

 

Vielen Dank, Gamu. Ich genieße Ihre Veröffentlichungen und versuche zu lernen, indem ich Ihre Schritte reproduziere.

Ich habe einige Probleme hoffentlich kann dies anderen helfen.

1) meine Tests mit Ihnen EURGBP_Stochastic täglich mit dem Skript geliefert produziert nur 2 Aufträge und anschließend Sharpe Ratio von 0,02 . Ich glaube, ich habe die gleichen Einstellungen wie Sie, aber bei 2 Brokern werden nur 2 Orders erzeugt.

2) als Vorwarnung für andere müssen Sie eventuell die Symboleinstellungen an Ihren Broker anpassen (z.B. EURGBP an EURGBP.i), falls nötig

3) als nächstes, wenn ich versuche, die Daten zu exportieren, erhalte ich ein Array außerhalb des Bereichs für die ATR, was meiner Meinung nach daran liegt, dass ich keine 100000 Datensätze in mein Array bekomme (wenn ich es auf 677 ändere), kann ich dementsprechend eine Datei mit 677 Zeilen erhalten. für mich ist der Standardwert für maximale Balken in einem Diagramm 50000, wenn ich das auf 100000 ändere, ist meine Array-Größe nur 677, aber möglicherweise habe ich eine schlechte Einrichtung. Vielleicht könnten Sie auch das Datenextraktionsskript in Ihren Download aufnehmen.

4) Ich habe den Code aus Ihrem Artikel kopiert, um ihn in Python auszuprobieren. Ich erhalte einen Fehler look_ahead not defined ----> 3 data.loc[data["Close"].shift(-look_ahead) > data["Close"], "Binary Target"] = 1

4 data = data.iloc[:-look_ahead,:]


NameError: Name 'look_ahead' ist nicht definiert

5) Als ich Ihr Juypiter-Notizbuch lud, stellte ich fest, dass es eine Vorausschau benötigte #Lassen Sie uns 20 Schritte in die Zukunft voraussagen

look_ahead = 20 , Danach habe ich nur noch die von Ihnen beigefügte Datei verwendet, aber ich bleibe bei folgendem Fehler hängen, der möglicherweise damit zusammenhängt, dass ich nur 677 Zeilen habe.

Ich lasse #Scale die Daten laufen, bevor wir sie visualisieren

from sklearn.preprocessing import RobustScaler

Skalierer = RobustScaler()

data[['Open', 'High', 'Low', 'Close', 'MA Fast', 'MA Slow','Stoch Main']] = scaler.fit_transform(data[['Open', 'High', 'Low', 'Close', 'MA Fast', 'MA Slow','Stoch Main']])

was mir eine Fehlermeldung gibt, die ich nicht verstehe, wie ich sie lösen kann

ipython-input-6-b2a044d397d0>:4: SettingWithCopyWarning: Es wird versucht, einen Wert auf eine Kopie eines Slice aus einem DataFrame zu setzen. Versuchen Sie es stattdessen mit .loc[row_indexer,col_indexer] = value Beachten Sie die Hinweise in der Dokumentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy data[['Open', 'High', 'Low', 'Close', 'MA Fast', 'MA Slow','Stoch Main']] = scaler.fit_transform(data[['Open', 'High', 'Low', 'Close', 'MA Fast', 'MA Slow','Stoch Main']])

 
linfo2 #:

Vielen Dank, Gamu. Ich genieße Ihre Veröffentlichungen und versuche zu lernen, indem ich Ihre Schritte reproduziere.

Ich habe einige Probleme hoffentlich kann dies anderen helfen.

1) meine Tests mit Ihnen EURGBP_Stochastic täglich mit dem Skript geliefert produziert nur 2 Aufträge und anschließend Sharpe Ratio von 0,02 . Ich glaube, ich habe die gleichen Einstellungen wie Sie, aber auf 2 Brokern produziert es nur 2 Aufträge.

2) als Vorwarnung für andere müssen Sie die Symboleinstellungen ggf. an Ihren Broker anpassen (z.B. EURGBP an EURGBP.i)

3) als nächstes, wenn ich versuche, die Daten zu exportieren, erhalte ich ein Array außerhalb des Bereichs für die ATR, was meiner Meinung nach daran liegt, dass ich keine 100000 Datensätze in mein Array bekomme (wenn ich es auf 677 ändere), kann ich dementsprechend eine Datei mit 677 Zeilen erhalten. für mich ist der Standardwert für maximale Balken in einem Diagramm 50000, wenn ich das auf 100000 ändere, ist meine Array-Größe nur 677, aber möglicherweise habe ich eine schlechte Einrichtung. Vielleicht könnten Sie auch das Datenextraktionsskript in Ihren Download aufnehmen.

4) Ich habe den Code aus Ihrem Artikel kopiert, um ihn in Python auszuprobieren. Ich erhalte einen Fehler look_ahead not defined ----> 3 data.loc[data["Close"].shift(-look_ahead) > data["Close"], "Binary Target"] = 1

4 data = data.iloc[:-look_ahead,:]


NameError: Name 'look_ahead' ist nicht definiert

5) Als ich Ihr Juypiter-Notizbuch lud, stellte ich fest, dass es eine Vorausschau benötigte #Lassen Sie uns 20 Schritte in die Zukunft voraussagen

look_ahead = 20 , Danach habe ich nur die von Ihnen beigefügte Datei verwendet, aber ich bleibe bei dem folgenden Fehler hängen, der möglicherweise damit zusammenhängt, dass ich nur 677 Zeilen habe.

Ich führe #Scale the data aus, bevor wir mit der Visualisierung beginnen.

from sklearn.preprocessing import RobustScaler

scaler = RobustScaler()

data[['Open', 'High', 'Low', 'Close', 'MA Fast', 'MA Slow','Stoch Main']] = scaler.fit_transform(data[['Open', 'High', 'Low', 'Close', 'MA Fast', 'MA Slow','Stoch Main']])

was zu einer Fehlermeldung führt, deren Lösung ich nicht verstehe

ipython-input-6-b2a044d397d0>:4: SettingWithCopyWarning: Es wird versucht, einen Wert auf eine Kopie eines Slice aus einem DataFrame zu setzen. Versuchen Sie es stattdessen mit .loc[row_indexer,col_indexer] = value Beachten Sie die Hinweise in der Dokumentation: https://pandas.pydata.org/pandas-docs/stable/user_guide/indexing.html#returning-a-view-versus-a-copy data[['Open', 'High', 'Low', 'Close', 'MA Fast', 'MA Slow','Stoch Main']] = scaler.fit_transform(data[['Open', 'High', 'Low', 'Close', 'MA Fast', 'MA Slow','Stoch Main']])

Was ist los Neil, ich vertraue darauf, dass es Ihnen gut geht.

Lassen Sie mich sehen, wie ich helfen kann:

1) Dieser Fehler ist ziemlich seltsam, hier ist, wie ich es angehen würde:

Unser System eröffnet nur dann Trades, wenn beide KI-Modelle die gleiche Prognose abgeben. Trainieren Sie die Modelle und werten Sie ihre Koeffizienten aus, damit Sie wissen, wann jedes Modell ein Signal erzeugt und wie hoch das Signal sein wird. Beobachten Sie dann sorgfältig den Backtest, um zu sehen, ob die Bedingungen, unter denen das Modell steht, die Anzahl der Trades erklären.

2) Dies ist ein ständiges Problem und ist schwer zu kontrollieren, da jeder Broker seine eigene Namenskonvention hat, aber die von Ihnen vorgeschlagene Lösung ist gültig.

3) Dies kann darauf hinweisen, dass Ihr Broker nur 677 Balken täglicher Daten hat, die Sie verwenden können, ohne Periodenberechnungen. Das ist normal, ich erlebe das auch. Manchmal versuche ich, nur 1 Jahr täglicher Daten abzurufen, aber ich erhalte nur 200 und etwas mehr Balken.

4) Versuchen Sie, den Look ahead direkt über der Anweisung zu definieren, die Probleme verursacht, und aktualisieren Sie ihn dann im gesamten Code, falls erforderlich.

5) Das kann daran liegen, dass wir unterschiedliche Bibliotheksversionen, Python-Versionen usw. verwenden. Ich denke, die Anpassung muss vor der Zuweisung erfolgen. Also die Zeile:

data[['Open', 'High', 'Low', 'Close', 'MA Fast', 'MA Slow','Stoch Main']] =

Muss möglicherweise angepasst werden an:

data.loc[:,['Open','High',...,'Stoch Main']] =
 
Gamuchirai Zororo Ndawana #:
Was gibt's, Neil? Ich hoffe, es geht dir gut.

Mal sehen, wie ich helfen kann:

1) Dieser Fehler ist ziemlich seltsam, hier ist, wie ich es angehen würde:

Unser System eröffnet nur dann einen Handel, wenn beide KI-Modelle dieselbe Prognose liefern. Trainieren Sie die Modelle und bewerten Sie ihre Koeffizienten, damit Sie wissen, wann jedes Modell ein Signal erzeugt und wie hoch das Signal sein wird. Überwachen Sie dann sorgfältig den Backtest, um zu sehen, ob die Bedingungen, unter denen das Modell steht, die Anzahl der Trades erklären.

2) Dies ist ein ständiges Problem, und ist schwer zu kontrollieren, weil jeder Broker hat ihre eigene Namenskonvention, aber Lösung, die Sie zur Verfügung gestellt ist gültig.

3) Dies kann darauf hindeuten, dass Ihr Broker nur 677 Balken der täglichen Daten hat, die Sie verwenden können, ohne Periodenberechnungen. Das ist normal, ich erlebe das auch. Manchmal versuche ich, nur 1 Jahr täglicher Daten abzurufen, aber ich erhalte nur 200 und etwas mehr Balken.

4) Versuchen Sie, den Look ahead direkt über der Anweisung zu definieren, die Probleme verursacht, und aktualisieren Sie ihn dann im gesamten Code, falls erforderlich.

5) Das kann daran liegen, dass wir unterschiedliche Bibliotheksversionen, Python-Versionen usw. verwenden. Ich denke, die Anpassung muss vor der Zuweisung erfolgen. Also die Zeile:

data[['Open', 'High', 'Low', 'Close', 'MA Fast', 'MA Slow','Stoch Main']] =

Muss eventuell angepasst werden:

data.loc[:,['Open','High',...,'Stoch Main']] =

Danke Gamu Ich weiß das zu schätzen, ja ich weiß, dass es viele bewegliche Teile gibt, ich werde sehen, ob dies meine Probleme lösen wird

 
linfo2 #:

Vielen Dank Gamu Ich weiß das zu schätzen, ja ich weiß, dass es viele bewegliche Teile gibt, ich werde sehen, ob dies meine Probleme lösen wird

Stimmt's? So viele, und dies nur eine einfache Implementierung