English 日本語
preview
MQL5-Assistenten-Techniken, die Sie kennen sollten (Teil 25): Multi-Timeframe-Tests und -Handel

MQL5-Assistenten-Techniken, die Sie kennen sollten (Teil 25): Multi-Timeframe-Tests und -Handel

MetaTrader 5Handelssysteme | 22 August 2024, 11:47
45 0
Stephen Njuki
Stephen Njuki

Einführung

In unserem letzten Artikel haben wir uns mit pythagoreischen Mittelwerten, die eine Gruppe von gleitenden Durchschnitten sind, von denen einige ziemlich neu und nicht weit genug verbreitet sind, obwohl sie, wie wir in den Testberichten angedeutet haben, für einige Händler von Nutzen sein könnten. Diese pythagoreischen Mittelwerte wurden in einem Halbkreisdiagramm dargestellt, das zusammenfasste, was jeder Mittelwert war, wenn er mit zwei ungleichen Werten dargestellt wurde, die sich zum Durchmesser des Halbkreises addierten. Zu den Sehnenwerten im Halbkreis, auf die in dem Artikel nicht eingegangen wurde, gehörte der als Q bezeichnete Wert, der den quadratischen Mittelwert der beiden Werte a und b darstellt.

Der quadratische Mittelwert (QM) tendiert dazu, die größeren Werte in der Stichprobe, deren Mittelwert gesucht wird, stärker zu gewichten, was im Gegensatz zu den geometrischen und harmonischen Mittelwerten steht, die wir im vorherigen Artikel angeschaut haben. Es ist auch so, dass das geometrische Mittel nur positive Werte liefert, sodass die Stichprobenmenge, deren Mittelwert gesucht wird, nur positive Werte haben muss. Der Titel dieses Artikels ist jedoch die Implementierung von Multi-Timeframe-Strategien in mit dem Assistenten erstellten Expert Advisors. QM wird also einfach das Tool sein, das wir verwenden, um zu zeigen, wie mehrere Zeitrahmen in einem mit dem Assistenten erstellten Expert Advisor getestet werden können.

Warum also ist das Testen mehrerer Zeitrahmen mit Wizard-built Experts so schwierig? Meiner Meinung nach liegt das daran, dass die Anpassung für jedes hinzugefügte Signal in der Assistentengruppe erfolgen sollte und dies oft übersehen wird. Die Anpassung der Symbolnamen und Zeitrahmen für einen mit dem Assistenten zusammengestellten Expert Advisor kann während der Signalauswahlschritte des Assistenten erfolgen, aber oft gehen die meisten Leute davon aus, dass man nach der Auswahl eines Signals auch das Symbol und den Zeitraum auswählen kann. In diesem früheren Artikel habe ich verschiedene Möglichkeiten aufgezeigt, wie der Handel mit mehreren Symbolen in assemblierten Experten durch Änderung des assemblierten Quellcodes möglich ist. Ein offensichtlicher und primärer Ansatz, den ich nicht mit Ihnen geteilt habe, ist die Durchführung mehrerer Anhänge von Signalen, wobei jeder Signalanhang für ein bestimmtes Symbol ist. Diese mehrfachen Verbindungen treten auf, obwohl ein und dasselbe Signal verwendet wird. Die Signalanpassung bei der Zuweisung des Symbols sollte in den unten angegebenen Schritten erfolgen:

n1


n2

Ebenso können mehrere Zeitrahmen für jeden Expert Advisor innerhalb eines Signals als Eingabeparameter angepasst werden (ein Beispielcode hierfür ist beigefügt). Der bevorzugte Ansatz könnte jedoch darin bestehen, jedem erforderlichen Zeitrahmen ein Signal zuzuordnen und dieses Signal unabhängig in der Assistentengruppe anzubringen. Die Schritte zur Anpassung der Zeitrahmen für jedes Signal sind sehr ähnlich zu denen, die wir oben für den Handel mit mehreren Symbolen beschrieben haben.

f1


f2

Strategien mit mehreren Zeitrahmen können ein Segen sein, wenn man z. B. nach Divergenzmöglichkeiten zwischen den verfolgten Zeitrahmen sucht. So könnte ein kurzfristiger Abwärtstrend im schnelleren (oder kürzeren) Zeitrahmen ein wichtiges Signal sein, wenn dieser vor dem Hintergrund eines größeren Aufwärtstrends im größeren Zeitrahmen stattfindet. Alternativ könnten Strategien mit mehreren Zeitrahmen auf der Grundlage von Bestätigungs-Setups zwischen zwei oder mehreren getesteten Zeitrahmen entwickelt werden. Aus diesen und anderen Gründen werden wir uns mit der Implementierung von Multi-Time-Frame-Strategien in assistentengestützten Expert Advisors befassen.

Auch der bereits in diesem Artikel betrachtete Multi-Symbol-Handel erweitert sicherlich die Möglichkeiten eines Traders. In diesem Artikel werden wir jedoch 3 Währungspaare betrachten, die das Potenzial haben, sich in einem Arbitrage-Setup gegenseitig aufzuheben, aber wir werden nicht versuchen, abgesicherte Arbitrage-Systeme zu entwickeln oder zu testen, sondern wir werden versuchen, gemeinsame gleitende Durchschnittseinstellungen zu erkunden, wenn alle Paare von einem Expert Advisor gehandelt werden.

Multi-Timeframe-Trading und Multi-Symbol-Trading sind sehr interessant, doch aufgrund der Art und Weise, wie Wizard-Assembly-Experten kodiert sind, ist das inhärente Design für parallele oder mehrere Signale, die bei Wizard-Assembly hinzugefügt werden, wobei jedes hinzugefügte Signal für ein bestimmtes Symbol oder einen bestimmten Zeitrahmen gilt. Der Hauptgrund dafür liegt meiner Meinung nach in den Initialisierungsphasen der vom Assistenten zusammengestellten Expert Advisors. Es gibt 4 Initialisierungsphasen der Klasse 'CExpertBase', die als Ankerklasse nicht nur für Signale, sondern auch für das Management des Geldes und der Trailing-Stopps dient. Diese Phasen sind der Start der Initialisierung, die Einstellung der Parameterwerte, die Überprüfung der Parameterwerte und der Abschluss der Initialisierung.

In der Phase der Parametereinstellung wird einer Instanz der Signalklasse Expert das Handelssymbol und der Zeitrahmen zugewiesen. Laut der Dokumentation, kann dies jedoch auch in der Phase der Parameterprüfung geschehen. Ich glaube, die Phase der Parametereinstellung wird als Abstimmungsphase bezeichnet, aber ich habe keine entsprechende Dokumentation gefunden. Da ein Handelssymbol viele der Parameter bestimmt, auf die sich die Signalklasse stützen würde, wie z. B. die zu ladenden OHLC-Preise, die Punktgröße usw., ist dies etwas, das von vornherein einmal bei der Initialisierung festgelegt wird. Ebenso muss der Zeitrahmen, der zum Abrufen der OHLC-Preispuffer verwendet wird, im Voraus festgelegt werden, und auch dies geschieht während der Initialisierung und niemals danach.

Diese Entwurfseinschränkungen bedeuten daher, dass die beabsichtigte Art der Verwendung von Mehrfachsymbolen und Zeitrahmen darin besteht, dass eine Instanz einer Signalklasse während des Assistentenaufbaus vorab zugewiesen wird, sodass diese Symbol- und Zeitrahmenwerte als konstante Parameter fungieren.

Es gibt jedoch noch eine Einschränkung, wenn es um den Handel mit mehreren Symbolen im Rahmen dieses Vorabzuweisungsregimes innerhalb des Assistenten geht. Wie wir im Artikel über die Mehrfachwährungen gesehen haben, müssen wir noch eine Array-Instanz der Klasse „CExpert“ erstellen und unsere geplanten Handelssymbole jeder Instanz der Expertenklasse in diesem Array neu zuordnen. Der Assistent für die Symbolzuweisung legt offenbar nur fest, welches Symbol beim Abrufen von OHLC-Preisdaten unter den Enumeration „USED_SERIES“ verwendet wird. Das eigentliche Symbol, das nach der Initialisierung unter der Symbol-Info-Klasse „m_symbol“ gehandelt wird, ist jedoch das Symbol, das im allerersten Schritt der Assistentenanordnung zugewiesen wird, bevor ein Signal ausgewählt wird.

s1

Diese Einschränkung für den Handel mit mehreren Symbolen spiegelt sich nicht im Handel mit mehreren Zeitrahmen wider, da die Signalzuweisung eines Zeitrahmens während der Assistentenzusammenstellung ausreicht, um sicherzustellen, dass jeder zugewiesene Zeitrahmen bei der Signalverarbeitung verwendet wird, sobald der Expert Advisor handelt.


Auswirkungen der Abstimmungsphase bei der Initialisierung.

Da wir bei der Initialisierung nur Anpassungen für Handelssymbole und Zeitrahmen festlegen können, bedeutet diese Einschränkung, dass wir nicht in der Lage sind, nach handelbaren Symbolen oder idealen Zeitrahmen zu suchen oder diese zu optimieren, sobald ein Expert Advisor zusammengestellt wurde. Es gibt Umgehungsmöglichkeiten, bei denen das gesuchte Handelssymbol oder der Zeitrahmen als Eingabeparameter für eine nutzerdefinierte Signalklasse dienen kann. Solche Eingabeparameter würden die Form einer Zeichenkette bzw. der Enumeration der Zeitrahmen annehmen. Sie würden natürlich auch Standardwerte haben, und im Allgemeinen sollte die Zuweisung von nutzerdefinierten Zeitrahmenwerten einfacher sein, da die Optionen aus der bereits festgelegten Enumeration ENUM_TIMEFRAMES stammen. Wenn es jedoch um Symbolnamen für den Handel geht, sollte ein zusätzlicher Schritt oder eine Funktion verwendet werden, um sicherzustellen, dass der eingegebene Symbolname tatsächlich gültig ist, in der Marktbeobachtung aufgeführt wird und gehandelt werden kann.


Quadratische gleitende Durchschnitte

Quadratische Mittelwerte (QA), die auch als „Root Mean Square“ bezeichnet werden, sind einfach die Quadratwurzel des Durchschnitts aller quadrierten Werte in einer Stichprobe. Wie die meisten nicht-arithmetischen Mittelwerte weisen sie eine Verzerrung oder Präferenzgewichtung auf, die sich im Gegensatz zum geometrischen Mittel und zum harmonischen Mittel auf die größeren Werte der Gruppe bezieht. In dem Halbkreisdiagramm, das in diesem früheren Artikel gezeigt wurde, in dem die verschiedenen Arten von Mittelwerten für zwei u gleiche Werte a und b maßstabsgetreu innerhalb des Halbkreises dargestellt waren, wurde auch das quadratische Mittel angegeben, das der Länge der mit Q gekennzeichneten Sehne entspricht.

Wobei

  • n die Anzahl der Werte in der Stichprobe ist,
  • x die Werte in der Menge bei ihrem jeweiligen Index sind.

Wir verwenden das QM, um ein nutzerdefiniertes Signal zu entwickeln und zu testen, das auf mehreren Zeitrahmen gehandelt wird, sowie ein weiteres nutzerdefiniertes Signal, das ebenfalls über mehrere Symbole hinweg gehandelt wird. Im vorangegangenen Artikel haben wir aufgrund der Verzerrung oder Präferenzgewichtung hin zu kleineren Werten in einer Stichprobe für das geometrische Mittel und das harmonische Mittel Spiegeldurchschnitte entwickelt, die eine Verzerrung hin zu größeren Werten aufweisen. Die Implementierung von QM in MQL5 wird durch den unten stehenden Code dargestellt:

//+------------------------------------------------------------------+
//| Quadratic Mean                                                   |
//+------------------------------------------------------------------+
double CSignalQM::QM(int Index, int Mask = 8)
{  vector _f;
   _f.CopyRates(m_symbol.Name(), m_period, Mask, Index, m_length);
   vector _p = _f*_f;
   double _m = _p.Mean();
   return(sqrt(_m));
}

Bevor wir uns auf die Suche nach möglichen Anwendungen machen, wäre es ratsam, etwas Ähnliches für die QM zu tun, da sie eher zu den größeren Werten tendiert, indem wir einen spiegelbildlichen Mittelwert mit der Bezeichnung QM' haben, der eher zu den kleineren Werten gewichtet ist. Aus dieser Dichotomie von kleinerer Wertgewichtung und größerer Wertgewichtung lassen sich wiederum niedrige Preispuffer und hohe Preispuffer ableiten.

Im vorangegangenen Artikel haben wir diese Pufferpaare verwendet, um Hüllkurven (Bollinger Bands) und Divergenzsignale zu erzeugen. Neben diesen beiden Anwendungen können wir alternative Anwendungen generieren, wenn wir z.B. OSMA-Signale ableiten würden. Da der Hauptzweck dieses Artikels jedoch nicht die Einführung von QM oder Durchschnittswerten an sich ist, sondern der Handel mit mehreren Symbolen und der Handel auf mehreren Zeitrahmen, werden wir uns an die bereits im vorherigen Artikel vorgestellten Anwendungen halten. Wie immer kann der Leser den beigefügten Code selbständig modifizieren, um andere Möglichkeiten der Implementierung von QM zu erforschen.

Der QM-Spiegel QM' kann durch eine ähnliche Formel gegeben werden, wie wir sie im letzten Artikel mitgeteilt haben:

//+------------------------------------------------------------------+
//| Inverse Quadratic Mean                                           |
//+------------------------------------------------------------------+
double CSignalQM::QM_(int Index, int Mask = 8)
{  double _am = AM(Index, Mask);
   double _qm = QM(Index, Mask);
   return(_am + (_am - _qm));
}

Die zentrale These dieser Formel ist, dass das arithmetische Mittel den unparteiischsten und gerechtesten Mittelwert darstellt, was bedeutet, dass jeder Abstand von diesem Mittelwert zu einem alternativen Mittelwert „gespiegelt“ werden kann, wenn wir dieses rohe arithmetische Mittel als eine Spiegellinie nehmen. Der MQL5-Quellcode, der dies implementiert, ist daher identisch mit dem, den wir bereits freigegeben haben, und wird hier nicht weitergegeben. Er ist unten beigefügt.

Auch hier ist es unser Ziel, den Handel mit mehreren Symbolen und Zeitrahmen zu zeigen. Zwei Arten von Expert Advisors. Daraus folgt, dass wir das QM als Bollinger-Band-Signal für das eine und das andere als Divergenzsignal verwenden könnten, wobei beide Implementierungen bereits im letzten Artikel vorgestellt wurden.

Wie wir oben hervorgehoben haben, wurden die mit dem MQL5-Assistenten zusammengestellten Expert Advisors so konzipiert, dass sie das Testen (und den Handel) mit mehreren Zeitrahmen und Symbolen auf der Basis einzelner Signale ermöglichen. Jedes vom Expert Advisor verwendete Signal erhält ein nutzerdefiniertes Symbol oder einen Zeitrahmen, bevor es im Assistenten hinzugefügt wird. Dies bedeutet, dass wir für jedes beliebige Signal mehrere Symbole und mehrere Zeitrahmen hätten testen können. Da wir uns jedoch im letzten Artikel nur mit neuartigen Mittelwerten befasst haben, fahren wir in diesem Sinne fort, indem wir quadratische Mittelwerte behandeln.


Entwicklung von nutzerdefinierten Signalklassen mit QMA

Wir werden keine Tests für den Expert Advisor mit Mehrfachwährungssymbolen durchführen, da das, was im Assistenten zusammengestellt wird, Änderungen erfordert, die wir in diesem Artikel bereits behandelt haben. Wie bereits erwähnt, können Tests für Expert Advisors mit mehreren Symbolen und Zeitrahmen mit derselben Signaldatei durchgeführt werden, da diese Symbol- und Zeitrahmenwerte pro Signal zugewiesen werden. Die Verarbeitung der Long- und Short-Bedingungen folgt dem allgemeinen Ansatz, den wir bei der Erzeugung von Signalen für das geometrische Mittel im vorherigen Artikel hatten. Wir nehmen einige Änderungen vor, da wir im vorigen Artikel nur mit einem Signal gearbeitet haben. Wir konnten es uns leisten, nach scharfen Einstiegspunkten zu suchen, wie z. B. das Kreuzen der oberen Bänder, das wir suchten, wenn wir ein Aufwärtssignal suchten, oder das Kreuzen der unteren Bänder, das ein Aufwärtssignal suchte.

Da wir in diesem Artikel mehrere Signale parallel verarbeiten, ist es unwahrscheinlich, dass sie sich alle gleichzeitig kreuzen. Anstatt also nach solch scharfen Einstiegspunkten zu suchen, verwenden wir die Bänder als Wahrscheinlichkeitsmaßstab für Hausse und Baisse, indem wir messen, wie weit über (für Baisse) oder unter (für Hausse) dem Schlusskurs im Verhältnis zur Basislinie der beiden Bänder liegt. Je weiter der aktuelle Schlusskurs also über der Basislinie liegt, desto höher ist die Gewichtung für den Abwärtstrend, und je tiefer der Schlusskurs unter der Basislinie liegt, desto höher ist die Gewichtung für den Aufwärtstrend.

Jedes der verwendeten Signale, die auf unterschiedlichen Zeitrahmen liefen, stellt also eine Bedingung für einen Auf- oder Abwärtstrend dar, je nachdem, wo die Positionen ihrer jeweiligen Schlusskurse liegen. Diese Bedingungen werden dann unter Verwendung der einzelnen optimierten Signalgewichte kombiniert, um über einen gewichteten Durchschnitt zu einer einzigen Bedingung zu gelangen. Anhand dieses Durchschnitts wird entschieden, ob laufende Positionen geschlossen werden können und ob neue Positionen eröffnet werden sollen. Der Code für unsere geänderten Kauf- und Verkaufs-Bedingungen ist weiter unten zu finden:

//+------------------------------------------------------------------+
//| "Voting" that price will grow.                                   |
//+------------------------------------------------------------------+
int CSignalQM::LongCondition(void)
{  int result = 0;
   m_close.Refresh(-1);
   if(m_close.GetData(StartIndex()) > m_close.GetData(StartIndex() + 1) && m_close.GetData(StartIndex()) > BandsDn(StartIndex()) && m_close.GetData(StartIndex() + 1) < BandsDn(StartIndex() + 1))
   {  result = int(round(100.0 * ((m_close.GetData(StartIndex()) - m_close.GetData(StartIndex()+1))/(fabs(m_close.GetData(StartIndex()) - m_close.GetData(StartIndex()+1)) + fabs(BandsUp(StartIndex()) - BandsDn(StartIndex()))))));
   }
   return(result);
}
//+------------------------------------------------------------------+
//| "Voting" that price will fall.                                   |
//+------------------------------------------------------------------+
int CSignalQM::ShortCondition(void)
{  int result = 0;
   m_close.Refresh(-1);
   if(m_close.GetData(StartIndex()) < m_close.GetData(StartIndex() + 1) && m_close.GetData(StartIndex()) < BandsUp(StartIndex()) && m_close.GetData(StartIndex() + 1) > BandsUp(StartIndex() + 1))
   {  result = int(round(100.0 * ((m_close.GetData(StartIndex()+1) - m_close.GetData(StartIndex()))/(fabs(m_close.GetData(StartIndex()) - m_close.GetData(StartIndex()+1)) + fabs(BandsUp(StartIndex()) - BandsDn(StartIndex()))))));
   }
   return(result);
}


Praktische Umsetzung und Prüfung

Sobald ein Experte, der unser obiges Signal verwendet, im Assistenten zusammengestellt wurde, sieht der Header-Teil der *MQ5-Datei wie folgt aus, wenn wir mehrere Zeitrahmen verwenden:

//+------------------------------------------------------------------+
//|                                                           qm.mq5 |
//|                                  Copyright 2024, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2024, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Include                                                          |
//+------------------------------------------------------------------+
#include <Expert\Expert.mqh>
//--- available signals
#include <Expert\Signal\My\SignalWZ_25.mqh>
//--- available trailing
#include <Expert\Trailing\TrailingNone.mqh>
//--- available money management
#include <Expert\Money\MoneyFixedMargin.mqh>
//+------------------------------------------------------------------+
//| Inputs                                                           |
//+------------------------------------------------------------------+
//--- inputs for expert
input string Expert_Title           = "qm_frame"; // Document name
ulong        Expert_MagicNumber     = 2028; //
bool         Expert_EveryTick       = false; //
//--- inputs for main signal
input int    Signal_ThresholdOpen   = 10;   // Signal threshold value to open [0...100]
input int    Signal_ThresholdClose  = 10;   // Signal threshold value to close [0...100]
input double Signal_PriceLevel      = 0.0;  // Price level to execute a deal
input double Signal_StopLevel       = 50.0; // Stop Loss level (in points)
input double Signal_TakeLevel       = 50.0; // Take Profit level (in points)
input int    Signal_Expiration      = 4;    // Expiration of pending orders (in bars)
input int    Signal_0_QM_Length     = 50;   // QM(50) H1 Averaging Length
input double Signal_0_QM_Weight     = 1.0;  // QM(50) H1 Weight [0...1.0]
input int    Signal_1_QM_Length     = 50;   // QM(50) H4 Averaging Length
input double Signal_1_QM_Weight     = 1.0;  // QM(50) H4 Weight [0...1.0]
input int    Signal_2_QM_Length     = 50;   // QM(50) D1 Averaging Length
input double Signal_2_QM_Weight     = 1.0;  // QM(50) D1 Weight [0...1.0]
//--- inputs for money
input double Money_FixMargin_Percent = 10.0; // Percentage of margin

Wie zu sehen ist, weisen wir jedem der drei gewählten Zeitrahmen einen Parameter für die Länge des gleitenden Durchschnitts und einen Gewichtungsparameter zu. In diesem Fall sind dies PERIOD_H1, PERIOD_H4 und PERIOD_D1. Da das für den Expert Advisor generierte Signal ein gewichteter Mittelwert des Abstands zwischen dem Schlusskurs und der Basislinie des Bollinger-Bands ist, bedeutet dies, dass wir zu jedem Zeitpunkt ein Signal haben, im Gegensatz zu den scharfen Einstiegen, die wir mit dem geometrischen Mittelwert im vorherigen Artikel untersucht haben. Das bedeutet, dass es wahrscheinlich eine gute Idee wäre, Tests ohne Kursziele für Ausstiege wie Stop-Loss oder Take-Profits durchzuführen. Im letzten Artikel haben wir als einziges Kursziel die Gewinnmitnahme verwendet. Das Setzen eines Stop-Loss‘ wird immer als solide Strategie zur Verlustbegrenzung angepriesen. Der Stop-Loss-Preis ist jedoch nie garantiert, und die meisten Konten, die ausgiebig getestet wurden, haben keine Marge mehr, weil die Positionsgröße zu optimistisch war, im Gegensatz zu einem nicht gesetzten Stop-Loss. Natürlich wird die Debatte über die Bedeutung eines Stop-Loss weitergehen, aber das ist meine Meinung. In diesem Artikel werden wir uns jedoch nur auf den Zielpreis für die Gewinnmitnahme beschränken, und der Leser ist eingeladen, die Eingabeparameter beim Testen so zu ändern, dass sie seinem Verlustmanagementansatz entsprechen.


Strategy Tester Berichte und Analysen

Wenn wir Testläufe für das Jahr 2023 auf dem 1-Stunden-Zeitrahmen für das EURJPY-Paar durchführen und gleichzeitig nach einem ausgewogenen Signal auf dem 1-Stunden-, 4-Stunden- und Tages-Zeitrahmen suchen, erhalten wir als einige unserer fairen Ergebnisse die folgenden:

r2

c2

Die Ergebnisse sind in gewissem Sinne weit entfernt von dem, was wir erreicht haben, als wir uns auf scharfe Einstiege bei den oberen und unteren Kursspannen verlassen haben. Wir haben daher Tests mit mehreren Zeitrahmen durchgeführt und dabei den klaren Einstieg bei der Überkreuzung der Bollinger-Bänder genutzt, und überraschenderweise war die Anzahl der platzierten Handelsgeschäfte beim Warten auf das Kreuzen höher als bei dem gewichteten Durchschnittsansatz, den wir gerade oben angenommen haben. Nachstehend sind die Ergebnisse aufgeführt:

r1

c1


Schlussfolgerung

Abschließend haben wir gezeigt, wie mehrere Zeitrahmen in assistentengestützten Expert Advisors verwendet werden können. Der wichtigste Punkt, auf den wir bei dieser Darstellung eingegangen sind, ist, dass der Assistent bei der Zusammenstellung jedes Signals nicht nur einen eigenen Zeitrahmen, sondern auch ein eigenes Handelssymbol verwenden kann. Die Anpassung eines Signals durch die Zuweisung eines bestimmten Zeitrahmens impliziert, dass die OHLC-Puffer für dieses Signal an diesen Zeitrahmen gebunden sind, und dies ist ein relativ einfacher Prozess, im Gegensatz zur Anpassung eines Signals für den Handel mit einem bestimmten Symbol. Das liegt daran, dass bei der Zuweisung von Signalen für den Handel mit einem bestimmten Symbol zusätzliche Änderungen an der Instanz der Klasse „CExpert“ vorgenommen werden müssen, die in einem Array-Format vorliegen sollte, um jedes Symbol, das gehandelt werden soll, aufzunehmen. Wir haben dies in zwei Einstellungen getestet, wobei eine immer die Wahrscheinlichkeiten bewertete und die andere nach spezifischen Einstiegssignalen suchte, und wir erhielten mit beiden Ansätzen deutlich unterschiedliche Ergebnisse.

Der Handel mit mehreren Zeitrahmen zielt im Allgemeinen darauf ab, die besten oder „richtigsten“ Einstiegspunkte zu finden, indem gleichzeitig ein großer Zeitrahmen für den Makrotrend beobachtet wird, während das Signal für den tatsächlichen Einstieg auf einem kürzeren Zeitrahmen ausgewählt wird. Zu diesem Zweck wäre es vielleicht sinnvoller gewesen, verschiedene Signale mit jeweils unterschiedlichen Zeitrahmen zu verwenden, wobei der größere Zeitrahmen den Wahrscheinlichkeitsansatz verfolgt, den wir in unserem ersten Testfall oben betrachtet haben, und der kleinere Zeitrahmen die tatsächlichen Überkreuzungspunkte als Auslösungspunkt für das Signal berücksichtigt.

Dies kann vom Leser implementiert und getestet werden, da beide Instanzen dieser Signalklassen unten angehängt sind. Darüber hinaus gibt es alternative Multi-Timeframe-Implementierungen, die einen Indikator-Zeitrahmen als Eingabe verwenden können, wobei sich dieser Zeitrahmen von dem Zeitrahmen des Charts unterscheidet, an den der Expert Advisor angehängt ist. Mit diesem Ansatz lässt sich das Problem umgehen, dass nicht der optimale Zeitrahmen ausgewählt werden kann, der vorhanden ist, wenn einem Signal während der Assistenten-Zusammenstellung Zeitrahmen zugewiesen werden. Da es sich um einen Signaleingangsparameter handelt, könnte er so optimiert werden, dass er der Strategie am besten entspricht. Interessanterweise kann dieser Ansatz sogar verwendet werden, um einem nutzerdefinierten OHLC-Zeitreihenpuffer einen Zeitrahmen zuzuweisen. Sein Hauptmanko ist der Multi-Symbol-Handel, bei dem zwar Preis- und Indikatorablesungen anhand eines Symbolnamens, der ein Parameter ist, vorgenommen werden können, die Platzierung von Trades aber nur möglich ist, wenn Änderungen an der zusammengestellten Expert-Datei vorgenommen werden, wie oben erwähnt.


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

Erstellen einer interaktiven grafischen Nutzeroberfläche in MQL5 (Teil 1): Erstellen des Panels Erstellen einer interaktiven grafischen Nutzeroberfläche in MQL5 (Teil 1): Erstellen des Panels
In diesem Artikel werden die grundlegenden Schritte bei der Erstellung und Implementierung einer grafischen Nutzeroberfläche (GUI) mit MetaQuotes Language 5 (MQL5) erläutert. Nutzerdefinierte Utility-Panels verbessern die Nutzerinteraktion beim Handel, indem sie gängige Aufgaben vereinfachen und wichtige Handelsinformationen visualisieren. Durch die Erstellung nutzerdefinierter Panels können Händler ihre Arbeitsabläufe straffen und bei Handelsgeschäften Zeit sparen.
Verwendung des Algorithmus PatchTST für maschinelles Lernen zur Vorhersage der Kursentwicklung in den nächsten 24 Stunden Verwendung des Algorithmus PatchTST für maschinelles Lernen zur Vorhersage der Kursentwicklung in den nächsten 24 Stunden
In diesem Artikel wenden wir einen relativ komplexen Algorithmus eines neuronalen Netzes aus dem Jahr 2023 namens PatchTST zur Vorhersage der Kursentwicklung der nächsten 24 Stunden an. Wir werden das offizielle Repository verwenden, geringfügige Änderungen vornehmen, ein Modell für EURUSD trainieren und es zur Erstellung von Zukunftsprognosen sowohl in Python als auch in MQL5 anwenden.
Eine alternative Log-datei mit der Verwendung der HTML und CSS Eine alternative Log-datei mit der Verwendung der HTML und CSS
In diesem Artikel werden wir eine sehr einfache, aber leistungsfähige Bibliothek zur Erstellung der HTML-Dateien schreiben, dabei lernen wir auch, wie man eine ihre Darstellung einstellen kann (nach seinem Geschmack) und sehen wir, wie man es leicht in seinem Expert Advisor oder Skript hinzufügen oder verwenden kann.
Datenwissenschaft und maschinelles Lernen (Teil 25): Forex-Zeitreihenvorhersage mit einem rekurrenten neuronalen Netzwerk (RNN) Datenwissenschaft und maschinelles Lernen (Teil 25): Forex-Zeitreihenvorhersage mit einem rekurrenten neuronalen Netzwerk (RNN)
Rekurrente neuronale Netze (RNNs) zeichnen sich dadurch aus, dass sie Informationen aus der Vergangenheit nutzen, um zukünftige Ereignisse vorherzusagen. Ihre bemerkenswerten Vorhersagefähigkeiten wurden in verschiedenen Bereichen mit großem Erfolg eingesetzt. In diesem Artikel werden wir RNN-Modelle zur Vorhersage von Trends auf dem Devisenmarkt einsetzen und ihr Potenzial zur Verbesserung der Vorhersagegenauigkeit beim Devisenhandel aufzeigen.