English 日本語
preview
Saisonale Filterung und Zeitabschnitt für Deep Learning ONNX Modelle mit Python für EA

Saisonale Filterung und Zeitabschnitt für Deep Learning ONNX Modelle mit Python für EA

MetaTrader 5Experten | 23 Mai 2024, 13:24
89 0
Javier Santiago Gaston De Iriarte Cabrera
Javier Santiago Gaston De Iriarte Cabrera

Einführung

Als ich auf den Artikel stieß: Ich habe mir die Saisonalität des Devisenmarktes zunutze gemacht, um diesen, wie ich finde, interessanten Artikel zu verfassen. Ich könnte damit beginnen, einen EA mit und ohne Saisonalität zu vergleichen, um zu sehen, ob er davon profitieren kann. 

Ich wusste schon immer, dass die Märkte eine Saisonabhängigkeit aufweisen, seit ich gelesen habe, dass Mark Zuckerberg das Geld für Facebook von einem Investor bekommen hat, der sein Geld in Aktien von Erdöl investierte, als das Klima in der Karibik von Wirbelstürmen heimgesucht wurde. Er untersuchte zunächst das Klima und sagte voraus, dass es in einem bestimmten Zeitabschnitt ein schlechtes Wetter geben würde.

Ich bin sehr stolz und interessiert, diesen Artikel zu schreiben, denn wenn die Ergebnisse nicht besser sind, obwohl ich weiß, dass Markt und Saisonalität gute Begleiter sind. Ein guter Ansatz, um dies zu verwirklichen, wäre die Zusammenlegung beider EAs in einem, aber darüber haben wir bereits einen Artikel geschrieben, hier ist der Link:  Ein Beispiel für die Zusammenstellung von ONNX-Modellen in mql5.

Zunächst werden wir Modelle mit und ohne Filterung mit Hilfe eines EA vergleichen, um zu sehen, wie sich die Filterung der Daten auswirkt oder nicht. Danach werden wir das Seasoning anhand eines Diagramms diskutieren, um am Ende einen realen Studienfall für Februar 2024 mit und ohne Seasoning zu haben. Im letzten Teil des Artikels (den ich sehr interessant finde), werden wir andere Ansätze für den EA diskutieren, die wir bereits aus dem Artikel kennen: Wie man ONNX-Modelle in MQL5 verwendet, und wir werden sehen, ob wir vom Finetuning dieser EAs und ONNX-Modelle profitieren können, und ja, die Antwort ist, dass wir das können.

Dazu werden wir zunächst die Daten (alle Ticks) mit diesem Skript herunterladen: Laden Sie alle Daten eines Symbols herunter (bitte unterstützen Sie diesen Artikel, indem Sie dieses Skript verwenden). Wir müssen nur das Skript zu dem Symbolchart hinzufügen, den wir untersuchen wollen, und in einiger Zeit (weniger als eine Stunde) werden wir alle historischen Ticks von diesem Symbol in unseren Dateiordner heruntergeladen haben.

Wenn wir alle Ticks heruntergeladen haben, arbeiten wir mit dieser csv-Datei und extrahieren nur die Daten, die wir brauchen oder wollen (in diesem Fall die Zeiträume von Januar bis Februar 2015 bis 2023).


Saisonalität

Bei der Saisonalität im Handel geht es darum, das regelmäßige Auf und Ab der Preise von Vermögenswerten zu erkennen, das im Laufe des Jahres vorhersehbar ist. Es ist wie die Erkenntnis, dass bestimmte Aktien zu bestimmten Zeiten besser laufen als andere. Lassen Sie uns diese Idee ein wenig näher erläutern.

Die Saisonalität im Handel verstehen:

  • Definition: Saisonalität bedeutet, dass die Preise in Abhängigkeit von der Jahreszeit nach einem bestimmten Muster schwanken. Dies könnte an tatsächliche Jahreszeiten (z. B. Sommer oder Winter), kommerzielle Jahreszeiten (z. B. Urlaubszeit) oder sogar an bestimmte Monate gebunden sein.
  • Beispiele: Kluge Anleger behalten diese Muster im Auge, da sie oft zuverlässig und profitabel sind. Hier sind einige Beispiele:
    • Wetterbedingte Saisonabhängigkeit: So wie das Wetter die landwirtschaftlichen Jahreszeiten beeinflusst, wirkt es sich auch auf Dinge wie die Rohstoffpreise und die entsprechenden Aktien aus. Ein Unternehmen, das beispielsweise Strandausrüstung verkauft, könnte im Sommer einen Umsatzanstieg, in den kälteren Monaten jedoch einen Umsatzrückgang verzeichnen, was sich auf seine Aktien auswirkt.
    • Feiertags-Saisonalität: Einzelhandelsaktien erleben während des Weihnachtseinkaufsrausches oft einen Aufschwung. Unternehmen, die vom Weihnachtsgeschäft profitieren, wie z. B. Geschenkeläden, sind in dieser Zeit besonders erfolgreich.
    • Saisonabhängigkeit der Quartalsergebnisse: Börsennotierte Unternehmen berichten jedes Quartal über ihre Gewinne, und ihre Aktienkurse können während dieser Zeiträume vorhersehbar reagieren.
    • Steuerliche Saisonalität: Steuerlich bedingte Ereignisse können den Markt erschüttern, vor allem in finanznahen Sektoren.
    • Natürliche Zyklen: Branchen wie der Fremdenverkehr oder die Energiewirtschaft haben ihre eigenen saisonalen Nachfragemuster, z. B. Sommerferien oder Heizbedarf im Winter.

Handelsstrategien auf der Grundlage der Saisonalität:

  • Händler können sich die Saisonalität auf verschiedene Weise zunutze machen:
    • Erkennen von saisonalen Mustern: Auswertung von Daten aus der Vergangenheit, um Trends zu erkennen, die sich zu bestimmten Zeiten des Jahres wiederholen.
    • Zeitbedingter Handel: Auf der Grundlage dieser saisonalen Trends können Sie Positionen eröffnen und schließen.
    • Risikomanagement: Anpassung des Risikos, das Sie in volatilen Zeiten eingehen.
    • Sektor Rotation: Umschichtung von Investitionen zwischen Sektoren, die zu verschiedenen Zeiten des Jahres besser abschneiden.


Daten filtern

Wir werden den Tiefpassfilter verwenden. Laut Wikipedia:

Ein Tiefpassfilter ist ein Filter, der Signale mit einer Frequenz unterhalb einer bestimmten Grenzfrequenz durchlässt und Signale mit Frequenzen oberhalb der Grenzfrequenz abschwächt. Der genaue Frequenzgang des Filters hängt von der Konstruktion des Filters ab. Der Filter wird manchmal auch als Hochpassfilter oder Höhenpassfilter in Audioanwendungen bezeichnet. Ein Tiefpassfilter ist das Komplement eines Hochpassfilters.

Warum wählen wir beim algorithmischen Handel Tiefpassfilter gegenüber Hochpassfiltern? Beim algorithmischen Handel hat die Bevorzugung von Tiefpassfiltern mehrere entscheidende Vorteile:
  1. Signalglättung: Tiefpassfilter glätten verrauschte Kursbewegungen effektiv und heben längerfristige Trends gegenüber kurzfristigen Schwankungen hervor.
  2. Verringerung des hochfrequenten Rauschens: Sie tragen dazu bei, hochfrequentes Rauschen zu dämpfen, das möglicherweise keine aussagekräftigen Informationen für Handelsstrategien liefert.
  3. Niedrigere Transaktionskosten: Indem sie sich auf längerfristige Trends konzentrieren, können Tiefpassfilter zu weniger, strategischeren Geschäften führen, was die Transaktionskosten senken kann.
  4. Besseres Risikomanagement: Tiefpassfilter tragen zu einer stabileren und berechenbareren Handelsstrategie bei und verringern die Auswirkungen kurzfristiger Marktschwankungen.
  5. Anpassung an den Investitionshorizont: Sie eignen sich gut für Strategien mit längerfristigen Anlagehorizonten, da sie Trends über längere Zeiträume hinweg effektiv abbilden.

Ich persönlich verwende Tiefpassfilter, um hohe Frequenzen zu filtern. Es macht wenig Sinn, hier einen Hochpassfilter zu verwenden.

Dies werden wir verwenden (Anmerkung: Am Ende habe ich die Parameter order und cutoff_frequency im letzten Teil des Artikels auf 0,1 cutoff und order gleich 1 geändert, da dies zu besseren Ergebnissen führte. Außerdem sind die richtigen .py zum Filtern die aus dem letzten Teil des Artikels (dort habe ich nicht nur bessere Parameter verwendet, sondern auch Minmax-Skalierer zum Anpassen und Umkehren.)

# Low-pass filter parameters
cutoff_frequency = 0.01  # Cutoff frequency as a proportion of the Nyquist frequency
order = 4

# Apply the low-pass filter
def butter_lowpass_filter(data, cutoff, fs, order):
    nyquist = 0.5 * fs
    normal_cutoff = cutoff / nyquist
    b, a = butter(order, normal_cutoff, btype='low', analog=False)
    print("Filter coefficients - b:", b)
    print("Filter coefficients - a:", a)
    y = lfilter(b, a, data)
    return y

filtered_data_low = butter_lowpass_filter(df2['close'], cutoff_frequency, fs=1, order=order)

Wir werden „onnx_LSTM_simple_filtered.py“ und „onnx_LSTM_simple_not_filtered.py“ verwenden, um die ONNX-Modelle zu erstellen und sie zu vergleichen.

Anmerkung: Ich habe ein Modell v1 und ein Modell v2 verwendet, die unterschiedliche Tiefpassfilterparameter haben.

Das sind die Ergebnisse:

Wir werden die gleichen Eingaben für die EA's verwenden

Eingänge

Eingänge2

Der Untersuchungszeitraum ist vom ersten Februar bis zum ersten März.

Für das nicht gefilterte Modell:

RMSE         : 0.0010798043714784716
MSE          : 1.165977480664017e-06
R2 score     : 0.8799146678247277

Nicht gefiltert


Gefiltert v1

# Parámetros del filtro pasa bajo

cutoff_frequency = 0.01  # Frecuencia de corte en proporción a la frecuencia de Nyquist

order = 4


RMSE         : 0.0010228999869332884
MSE          : 1.0463243832681218e-06
R2 score     : 0.8922378749062259


gefiltert v1


Gefiltert v2

cutoff_frequency = 0.1  # Frecuencia de corte en proporción a la frecuencia de Nyquist

order = 2

RMSE         : 0.0010899163515744447
MSE          : 1.1879176534293484e-06
R2 score     : 0.8775550550819025

gefiltert v2


Schlussfolgerung über die Filterung

Sie liefert nur dann bessere Ergebnisse, wenn die richtigen Parameter verwendet werden.

Also, ja, die Filterung ist bequem zu handhaben.

Verwendeter Code und Modelle:

ONNX.eurusd.H1.120.Prediction_FILTERED.mq5

ONNX.eurusd.H1.120.Prediction_FILTERED_v2.mq5 ONNX.eurusd.H1.120.Prediction_NOT_FILTERED.mq5

onnx_LSTM_simple_EURUSD_filtered.py

onnx_LSTM_simple_EURUSD_not_filtered.py

Alle Daten eines Symbols herunterladen EURUSD_LSTM_120_1h_not_filtered.onnx EURUSD_LSTM_120_1h_filtered_v1.onnx EURUSD_LSTM_120_1h_filtered_v2.onnx


Sind die Symbole saisonabhängig?

Für diesen Teil werden wir dies zuerst in einem Diagramm sehen, wir werden die Daten vom Februar seit 2015 bis 2023 erhalten und wir werden die Daten hinzufügen, um zu sehen, wie sie sich um diese Wochen bewegen.

Dies ist das, was wir aus dieser Zeit sehen können:

Summe im Februar

Schlussfolgerung:

Wir können sehen, dass es einige Tendenzen gibt, oder zumindest sehen wir keine schwarze (Summenlinie) horizontale Linie. Zwischen den einzelnen Zeilen gibt es Lücken, da das Symbol im Laufe des Jahres gehandelt wird und die Preise schwanken. Aus diesem Grund werden wir im nächsten Teil des Artikels alle Symbole nach Jahren für den Februar verketten, und aus diesem Grund müssen wir einen Filter verwenden, damit er die hohe Frequenz vom letzten Datum des Jahres 2022 bis zum ersten Februar 2023 nicht durchlässt, und wenn die KI z. B. auf den Schluss eines Freitags und die Eröffnung eines Montags trainiert wird, untersucht sie diese Änderungen nicht und sucht nach geglätteten Daten.

verwendete Skripte und Daten:

Herunterladen von allen Daten eines Symbols Download_seasonalities_1h_v2.py data febs.zip draw_with_sum.py


Sind diese Daten aus dem Symbol korreliert?

Die Autokorrelation ist ein Merkmal der Daten, das den Grad der Ähnlichkeit zwischen Werten in aufeinander folgenden Zeitintervallen anzeigt.

Ein Wert nahe 1 zeigt an, dass es eine starke positive Korrelation gibt.

Dies sind die Ergebnisse, die wir mit autocorrelation.py erhalten haben.

[1.         0.99736147 0.99472432 0.99206626 0.98937664 0.98671649
 0.98405706 0.98144222 0.9787753  0.97615525 0.97356318 0.97099777
 0.96848029 0.96602671 0.96360361 0.96113539 0.95865344 0.95615626
 0.95362417 0.95108177 0.94854957 0.94599045 0.94346076 0.94091564
 0.93837742 0.93583734 0.9332909  0.93074655 0.92826504 0.92579028
 0.92330505 0.92084645 0.91834403 0.91581296 0.91328091 0.91076099
 0.90826447]


Erstellung eines ONNX-Modells für die Februar-Saison

Für diese Aufgabe müssen wir lediglich alle Daten in einer einzigen CSV-Datei zusammenfassen und daraus ein Modell erstellen.

Wir werden die Funktion create concat seasonal .py verwenden, um eine einzige csv-Datei zu erstellen, die dem zip seasonal_feb_contac hinzugefügt wird. Mit der Datei onnx_LSTM_..._seasonals.py werden wir das Modell trainieren und erstellen.

Verwendete Skripte und Daten:


saisonal_feb_concat.zip
create_concat_seasonal_data.py

onnx_LSTM_simple_EURUSD_concat_seasonals.py


Testergebnisse für das saisonale Modell und Vergleich mit dem 120 Tage (1h) gefilterten Modell

Saisonales Modell

RMSE         : 0.013137568368684325
MSE          : 0.00017259570264185493
R2 score     : 0.7166764010650979

Dies sind keine erstaunlichen Ergebnisse, aber die Ergebnisse sehen insgesamt gut aus (es gibt nicht viele negative Sharpe-Ergebnisse)

Sharpe

sharpe2

saisonale Optimierung


Wenn wir es mit dem gefilterten Modell vergleichen,

Sharpe gefiltert

Sharpe gefiltert 2d

Gefilterte Optimierung


Was ich merkwürdig finde, ist, dass die Anzahl der negativen Sharpe-Werte die Hälfte der Tabelle der Optimierung für das gefilterte Modell einnimmt, während die negativen Werte für das saisonale Modell etwa ein Fünftel der Tabelle einnehmen. Dies ist bemerkenswert, da es sich trotz eines geringeren r2-Wertes um ein robustes Modell zu handeln scheint, das rentable Ergebnisse liefert.

Ich hätte den EA auch ohne SL und TP testen können, aber ich halte es für eine bessere Praxis, sie immer in EAs zu verwenden.


Code und verwendetes ONNX-Modell:

ONNX.eurusd.H1.120.Prediction_seasonal.mq5 EURUSD_LSTM_270_1h_filtered_seasonal0.72.onnx onnx_LSTM_simple_EURUSD_concat_seasonals.py



Für welchen Zeitabschnitt?

Für diesen Teil des Artikels habe ich den Filter verfeinert, um bessere Ergebnisse für EURUSD zu erzielen

cutoff_frequency = 0.1  # Frecuencia de corte en proporción a la frecuencia de Nyquist
order = 1

Ich habe auch den Filter geändert:

from sklearn.preprocessing import MinMaxScaler
from scipy.signal import butter, lfilter

# Parámetros del filtro pasa bajo
cutoff_frequency = 0.1  # Frecuencia de corte en proporción a la frecuencia de Nyquist
order = 1

# Aplicar filtro pasa bajo
def butter_lowpass_filter(data, cutoff, fs, order):
    nyquist = 0.5 * fs
    normal_cutoff = cutoff / nyquist
    b, a = butter(order, normal_cutoff, btype='low', analog=False)
    print("Coeficientes del filtro - b:", b)
    print("Coeficientes del filtro - a:", a)
    y = lfilter(b, a, data)
    return y

scaled = MinMaxScaler(feature_range=(0,1))

valores_df1 = df.filter(['close']).values
valores_df1 = pd.DataFrame(valores_df1)
x_features1 = valores_df1[[0]]
valores_df2 = x_features1.values


data_escalada = scaled.fit_transform(valores_df2)

print(data_escalada)

filtered_data_low = butter_lowpass_filter(data_escalada, cutoff_frequency, fs=1, order=order)
print("filtered_data_low",filtered_data_low)

filtered_data_low_unscaled = scaled.inverse_transform(filtered_data_low)

Der Auftrag muss ein Auftrag in der Nähe des Preises als Ganzzahl sein.

Diese Strategietests werden über einen Monat für die 1 h-Strat am Februar 2024 durchgeführt. Die 30-Minuten-Schicht wird vom ersten Februar bis zum 15. Februar verwendet und so weiter ...

Ich habe 15 Minuten-Tests mit und ohne Filter durchgeführt, und die Ergebnisse zeigen, dass ein Filter mit seiner Feineinstellung bessere Ergebnisse liefert (zumindest insgesamt).

15 min mit Filter (Sharpe)

Tests 15 min mit Filter


tester 2d 15 min

Prüfung 15min mit Filter


LTSM_simple_15m_filtrado.py LSTM.15m.EURUSD.120.0.98.onnx ONNX.eurusd.H1.120.15m_eurusd.mq5


15 min ohne Filter

15 min ohne Filtertests

2d 15 min ohne Filter

Tests 15 min mit Filter .

LTSM_simple_15m_filtrado_sin.py LSTM.15m.EURUSD.120.0.98.onnx ONNX.eurusd.H1.120.15m_eurusd.mq5


30 min mit Filter (von nun an werde ich immer Filter verwenden)

Tester 30 min

Tester 30 min 2d

Tester 30 min


LSTM.30m.EURUSD.120.0.94.onnx
LTSM_simple_30m_filtrado.py ONNX.eurusd.H1.120.30m_eurusd.mq5


1 Stunde

1-Stunden-Tests

Heatmap für 1-Stunden-Tests

1-Stunden-Tests


1 hour files.zip (815.64 KB)


2 Stunden

Da ich keinen Zeitabschnitt von zwei Tagen verwenden kann, habe ich einen Zeitabschnitt von einem Tag verwendet (für den Wert des nächsten Tages im EA)

Tester 2h

Heatmap 2h

Tests 2h

Diagramm 2h

Backtesting 2h


2h.zip

Da ich nicht mehr als 32 Dateien laden kann, werden die nächsten Dateien alle in einen Ordner hochgeladen.


Schlussfolgerung

Es scheint, dass mit dieser Strategie die Ergebnisse für alle TP's und SL's robuster aussehen, je länger der Zeitabschnitt ist.


NextDay var

Ich habe die Strategie aus diesem Artikel verwendet: Wie kann man ONNX-Modelle in mql5 verwenden, aber da ich gute Ergebnisse mit der 2-Stunden-Strategie hatte, und in dieser habe ich 1Day Periode verwendet. Wir werden andere Werte für die Variable NextDays untersuchen

   if(TimeCurrent()>=ExtNextDay)
     {
      GetMinMax();
      //--- set next day time
      ExtNextDay=TimeCurrent();
      ExtNextDay-=ExtNextDay%PeriodSeconds(PERIOD_D1);
      ExtNextDay+=PeriodSeconds(PERIOD_D1);
     }
void GetMinMax(void)
  {
   vectorf close;
   close.CopyRates(_Symbol,PERIOD_D1,COPY_RATES_CLOSE,0,SAMPLE_SIZE);
   ExtMin=close.Min();
   ExtMax=close.Max();
  }

Wir werden nun EURUSD mit einem Zeitabschnitt von 30 Minuten mit gefilterten Daten und verschiedenen NextDay-Perioden (1D, 12h und 6h) untersuchen und die Ergebnisse diskutieren.

1D mit 30 min Periode

1D 30min

1D-Heatmap 30min

1D-Tests


12 Stunden mit 30 Minuten Periode

12h 30 min Tests

12h heatmap

12-Stunden-Tests 30 Minuten


6h 30 min Periode

6h 30 min Periode

6h-Heatmap 30-Minuten-Periode

h6 30-Minuten-Tests


Die Ergebnisse scheinen besser zu sein, wenn die NextDay-Variable feiner eingestellt wird. Mal sehen, wie sie sich in niedrigeren NextDay-Perioden entwickelt.

30 Minuten mit NextDay-Periode von 4 Stunden

4h-Perioden

Heatmap für 4-Stunden-Perioden

Tests 4h Perioden


30 Minuten mit NextDay-Periode von 2 Stunden

30 min 2 h Perioden

Heatmap der 30-min-2-Stunden-Perioden des nächsten Tages

2-Stunden-Tests


30 Minuten mit NextDay-Periode von 1 Stunde

h1 Periode 30 min

h1-Heatmap 30 min

Tests 1h 30 min


Es hat den Anschein, dass bei einer Dauer von mindestens 30 Minuten etwa 8 bis 12 Balken von 30 Minuten bessere Ergebnisse liefern.


Bei diesem „Spiel“ geht es darum, mehr Geld zu gewinnen, und eine Möglichkeit, das zu tun, ist, mehr gewinnbringende Handelsgeschäfte und eine solide Strategie zu haben. Mal sehen, ob wir diesen Start nutzen können, um mit 5-Minuten-Perioden zu gewinnen, so werden wir versuchen, diese Strategie für 5 Minuten und 1 h und 30 min für die NextDay var.

Eingaben

5 Minuten mit 1 h NextDay var.

Tester 1 h (5 min Periode)

Heatmap 1h (5 min Periode)

Ergebnisse Test 1h (5 min)



5 Minuten mit 30 Minuten NextDay var.

Tester 30 min (5 min)

Heatmap 30 min (5 min)

Tester 30 min (5 min)

Verwendete Dateien:   Last files.zip

Andere Perioden, scheinen zuverlässiger zu sein, aber, wenn Sie einen anderen EA wollen, haben Sie mehr zu verwenden.


Als letztes können wir Anpassungen an der Strategie vornehmen, die zu besseren oder solideren Ergebnissen führen könnten, wie z.B. die Festlegung einer Zeit- oder Balkenbegrenzung, z.B. in 1-Stunden-Perioden, und bei Verwendung einer 12-Stunden-Periode für den nächsten Tag könnten wir festlegen, dass eine einmal erteilte Order nicht länger als 12 Stunden geöffnet bleiben darf.

   if(ExtPredictedClass>=0)
     {
      if(PositionSelect(_Symbol))
         CheckForClose();
      else
        {
         CheckForOpen();
         started_time1 = rates[0].time;
         string started_time1_str = TimeToString(started_time1);
int total = PositionsTotal();
   if(total>0)
     {
      datetime started_time2 = rates[0].time;
      string started_time2_str = TimeToString(started_time2);
      int segundos = started_time2 - started_time1;
      Print("Tiempo 1: ", started_time1_str);
      Print("Tiempo 2: ", started_time2_str);
      Print("Diferencia en segundos: ", segundos);
      if((segundos >= days*PeriodSeconds(PERIOD_H12)) && segundos != 0)
        {
         Print("closing position----------------");
         ExtTrade.PositionClose(_Symbol,3);

        }
     }

tester

Heatmap

Tests

Diagramm


ONNX.eurusd.120.1h_H12_eurusd.v3.mq5
 (9.23 KB)


Schlussfolgerung

Wir haben uns mit Seasoning, Filterung und dem Vergleich von Modellen, EAs und Parametern für die EAs beschäftigt, um mit Feintuning bessere Ergebnisse zu erzielen. Ich hoffe, Sie hatten genauso viel Spaß beim Lesen dieses Artikels wie ich bei seiner Erstellung. 


Übersetzt aus dem Englischen von MetaQuotes Ltd.
Originalartikel: https://www.mql5.com/en/articles/14424

Einführung in MQL5 (Teil 5): Eine Anleitung für Anfänger zu den Array-Funktionen in MQL5 Einführung in MQL5 (Teil 5): Eine Anleitung für Anfänger zu den Array-Funktionen in MQL5
Entdecken Sie die Welt der MQL5-Arrays in Teil 5, der sich an absolute Anfänger richtet. Dieser Artikel vereinfacht komplexe Kodierungskonzepte und legt dabei den Schwerpunkt auf Klarheit und Einbeziehung aller Beteiligten. Werden Sie Teil unserer Gemeinschaft von Lernenden, in der Fragen willkommen sind und Wissen geteilt wird!
Wie man einen einfachen Multi-Currency Expert Advisor mit MQL5 erstellt (Teil 7): Signale von ZigZag und dem Awesome Oszillator Wie man einen einfachen Multi-Currency Expert Advisor mit MQL5 erstellt (Teil 7): Signale von ZigZag und dem Awesome Oszillator
Der Multi-Currency Expert Advisor in diesem Artikel ist ein Expert Advisor für den automatisierten Handel, der den ZigZag-Indikator und den Awesome Oscillator als Signale verwendet.
Entwicklung eines MQTT-Clients für Metatrader 5: ein TDD-Ansatz — Teil 6 Entwicklung eines MQTT-Clients für Metatrader 5: ein TDD-Ansatz — Teil 6
Dieser Artikel ist der sechste Teil einer Serie, die unsere Entwicklungsschritte für einen nativen MQL5-Client für das MQTT 5.0-Protokoll beschreibt. In diesem Teil erläutern wir die wichtigsten Änderungen unserer ersten Überarbeitung, wie wir zu einem brauchbaren Entwurf für unsere paketbildenden Klassen gekommen sind, wie wir PUBLISH- und PUBACK-Pakete bilden und die Semantik hinter den PUBACK-Reason-Codes (Begründungscode).
Verständnis von Programmierparadigmen (Teil 2): Ein objektorientierter Ansatz für die Entwicklung eines Price Action Expert Advisors Verständnis von Programmierparadigmen (Teil 2): Ein objektorientierter Ansatz für die Entwicklung eines Price Action Expert Advisors
Lernen Sie das objektorientierte Programmierparadigma und seine Anwendung im MQL5-Code kennen. Dieser zweite Artikel geht tiefer auf die Besonderheiten der objektorientierten Programmierung ein und bietet anhand eines praktischen Beispiels praktische Erfahrungen. Sie lernen, wie Sie unseren früher entwickelten prozeduralen Price Action Expert Advisor mit dem EMA-Indikator und Kursdaten der Kerzen in objektorientierten Code umwandeln können.