Diskussion zum Artikel "Entwurfsmuster in der Softwareentwicklung und MQL5 (Teil 4): Verhaltensmuster 2"
Vielen Dank für diesen tollen Artikel.
Ich denke, ich habe das Strategiemuster in einem Expert Advisor implementiert, aber vielleicht auf eine andere Weise
Dies könnte ein praktischeres Beispiel für unsere lieben Leser sein, und für mich würde ich vielleicht gerne Ihr Feedback erhalten, wenn ich konzeptionelle Fehler gemacht habe:
Ich werde den Prozess hier vereinfachen:
der Expert selbst ist ein Objekt und wird zum Context:
- Ich habe ein Enum, um die Strategie auswählen zu können (als Beispiel STRATEGY_RSI, STRATEGY_MA,...)
- Ich habe eine Switch-Anweisung im OnInit(), auf der Strategie-Enum, und je nach dem Ergebnis, I
switch(strategyName) { case STRATEGY_RSI : m_strategy = new Strategy_RSI(); break; case STRATEGY_MA : m_strategy = new Strategy_MA(); break; default: break; }
- Ich setze die Eingabeparameter in die Strategie durch ein Parameterobjekt (wie mqlparams)
[...] // Hinzufügen der Signalparameter zur Strategie über die Expertenmethode Expert.AddParameterObject(signal_RSI_Params); // signal_RSI_Params ist das Parameterobjekt, das die Eingabeparameter enthält //Detail der Methode AddParameterObject (vereinfacht): bool CExpert::AddParameterObject(CParameter & parameter) { if(!m_strategy.AddParameterObject(parameter)) { return(false); } } return true; } // Fügen Sie die generischen Expertenparameter hinzu. Expert.InitStrategyParameters(expert_1_Params); //Detail der Methode (vereinfacht) : bool CExpert::InitStrategyParameters(CParameter & expertParameters) { // if(!m_strategy.InitStrategyParameters(expertParameters)) { [...] return false; } return true; }
- Alle Strategien implementieren die gleichen Methoden (ein Signal öffnen, einen Handel schließen,...)
- Alle Strategien können ein Signal oder ihre benutzerdefinierten Indikatoren laden
In der OnTick-Funktion des Experten rufe ich die generischen Strategiemethoden auf.
bool CExpert::CheckOpenLong(void) { [...] if(true == m_strategy.CheckOpenLong([...])) { [...] } [...] }
Es funktioniert sehr gut, da ich auch mehrere Strategien / Optimierungen mit demselben Experten testen kann.
Das Einzige, was ich nie herausgefunden habe, außer die Eingabeparameter in eine separate Datei zu legen, ist, wie man die Eingabeparameter dynamisch lädt, je nachdem, was der Benutzer als diesen bestimmten Eingabeparameter (d.h. die Strategieeingabe) wählt.
Ich würde gerne Ihr Feedback zu der Art und Weise erhalten, wie ich es implementiert habe, ist es ein Strategiemuster oder ein Hybrid, was könnte verbessert werden?
Und haben Sie eine Idee, wie wir (ich glaube nicht, dass es mit MT5 möglich ist) dynamische kontextbezogene Eingabeparameter haben könnten?
Ich danke Ihnen vielmals
Didma
sehr lehrreich
Warum haben Funktionen mit der gleichen Funktionalität unterschiedliche Namen
z.B. hier
void Memento::SetState(string state) { m_state=state; } void Originator::State(string state) { m_state=state; }
- Freie Handelsapplikationen
- Über 8.000 Signale zum Kopieren
- Wirtschaftsnachrichten für die Lage an den Finanzmärkte
Sie stimmen der Website-Richtlinie und den Nutzungsbedingungen zu.
Neuer Artikel Entwurfsmuster in der Softwareentwicklung und MQL5 (Teil 4): Verhaltensmuster 2 :
In diesem Artikel werden wir unsere Serie über das Thema Entwurfmuster abschließen. Wir haben erwähnt, dass es drei Arten von Entwurfmuster gibt: Erzeugungs-, Verhaltens- und strukturelle Muster. Wir werden die verbleibenden Muster des Verhaltenstyps vervollständigen, die dabei helfen können, die Methode der Interaktion zwischen Objekten so festzulegen, dass unser Code sauber wird.
Memento
In diesem Abschnitt werden wir das Memento-Muster als verhaltensorientiertes Entwurfsmuster identifizieren. Das Memento-Muster kann verwendet werden, um den Zustand eines Objekts zu externalisieren, um eine Rollback-Funktionalität bereitzustellen, und es ist auch als Token bekannt.
Was bewirkt das Muster?
Wir können das Memento-Muster verwenden, wenn wir eine Momentaufnahme des Zustands des Objekts speichern müssen, die zu einem späteren Zeitpunkt wiederhergestellt werden kann, und wenn eine direkte Schnittstelle zum Abrufen des Zustands die Details der Ausführung offenlegen und die Kapselung des Objekts aufheben würde. Dieses Muster erfasst und externalisiert also den Objektzustand, um ihn später wiederherzustellen. Das folgende Diagramm zeigt die Struktur dieses Musters und wie man es einsetzen kann:
Autor: Mohamed Abdelmaaboud