Diskussion zum Artikel "Entwicklung eines Expert Advisors für mehrere Währungen (Teil 5): Variable Positionsgrößen"
Sehen Sie sich den neuen Artikel an: Entwicklung eines Multiwährungs-Expert Advisors (Teil 5): Variable Positionsgrößen.
Autor: Yuriy Bykov
Wenn ich den EA SimpleVolumesExpert mit (3+3+3) und der Skalierung 2.18 ausführe, zeigt das Protokoll virtuelle Trades an, aber keine realen Trades im Strategietester. Habe ich etwas übersehen?
Wenn ich SimpleVolumesExpert mit (3+3+3) und Skalierung 2.18 ausführe, zeigt das Protokoll offene virtuelle Trades, aber keine realen Trades im Strategietester. Vielleicht habe ich etwas übersehen?
Stellen Sie sicher, dass der Anfangssaldo im Tester $10000 oder mehr beträgt. Ich habe dieses Verhalten, wenn der Saldo nicht groß genug ist. In diesem Fall erzeugt nicht jede virtuelle Position eine reale Position. Aber der Grund ist wahrscheinlich ein anderer, denn Ihr Saldo ist wahrscheinlich korrekt.
Gibt es reale Trades, wenn der EA mit anderen Varianten der Strategiegruppierung ausgeführt wird?
Guten Tag. Ich danke Ihnen für Ihre Arbeit. Ich bin sehr an Ihrer Architektur interessiert und versuche, sie Schritt für Schritt zu verstehen. Ich habe nur die Strategieklasse geändert - ich verwende meine eigene. Aber in diesem Stadium hatte ich Schwierigkeiten mit der Skalierung der Strategie. Für die Reinheit des Experiments habe ich eine Instanz der Strategie und zwei Varianten des Skalenmultiplikators_ 1 und 2 (fixedBalance_ = 0;) verwendet. In beiden Fällen ist das Ergebnis das gleiche - die Losgröße ändert sich nicht. Die Stelle im Code, an der die Losgröße bestimmt wird
//+------------------------------------------------------------------+ //| Bestimmung der tatsächlichen Größe der virtuellen Position | //+------------------------------------------------------------------+ double CMoney::Volume(CVirtualOrder *p_order) { // Abfrage des normalisierten Strategiesaldos für diese virtuelle Position double fittedBalance = p_order.FittedBalance(); // Ist er gleich 0, ist das reale Volumen gleich dem virtuellen Volumen if(fittedBalance == 0.0) { return p_order.Volume(); } // Andernfalls ermitteln wir den Wert der Gesamtbilanz für den Handel double totalBalance = s_fixedBalance > 0 ? s_fixedBalance : AccountInfoDouble(ACCOUNT_BALANCE); // Rückgabe des berechneten realen Volumens durch das virtuelle Volumen return p_order.Volume() * totalBalance * s_depoPart / fittedBalance ; } //+------------------------------------------------------------------+
Die Parameter m_fittedBalance und m_fixedLot werden jedoch standardmäßig im Konstruktor der virtuellen Strategie festgelegt.
//+------------------------------------------------------------------+ //| Konstruktor| //+------------------------------------------------------------------+ CVirtualStrategy::CVirtualStrategy(double p_fittedBalance = 0, double p_fixedLot = 0.01) : m_fittedBalance(p_fittedBalance), m_fixedLot(p_fixedLot) {}
Daher ändert sich die Losgröße nicht.
// Ist er gleich 0, ist das reale Volumen gleich dem virtuellen Volumen if(fittedBalance == 0.0) { return p_order.Volume(); }
Obwohl sie logischerweise skalieren sollte. Können Sie mir bitte sagen, woran das liegt? Ich möchte mich nicht in meine eigenen Bearbeitungen einmischen - um sie nicht kaputt zu machen, und ich habe der Klasse CVirtualOrder bereits einige Methoden hinzugefügt, weil meine Strategie ein teilweises Schließen, einen Stop-Loss und ein Schließen auf dem Zählersignal vorsieht.
Hallo.
alles ist richtig, für den Handel mit variablen Lots ist es notwendig, dass eine Strategieinstanz den Wert m_fittedBalance > 0 erhält. Dies wird von den Erben der Basisklasse der Handelsstrategie durchgeführt. Ihnen wird dieser Parameter übergeben, und sie setzen ihn in den Aufruf des CVirtualStrategy-Konstruktors ein:
class CSimpleVolumesStrategy : public CVirtualStrategy { ... public: //--- Öffentliche Methoden CSimpleVolumesStrategy( string p_symbol, ENUM_TIMEFRAMES p_timeframe, int p_signalPeriod, double p_signalDeviation, double p_signaAddlDeviation, int p_openDistance, double p_stopLevel, double p_takeLevel, int p_ordersExpiration, int p_maxCountOfOrders, double p_fittedBalance = 0 ); // Konstrukteur ... }; ... //+------------------------------------------------------------------+ //| Konstruktor| //+------------------------------------------------------------------+ CSimpleVolumesStrategy::CSimpleVolumesStrategy( string p_symbol, ENUM_TIMEFRAMES p_timeframe, ... int p_maxCountOfOrders, double p_fittedBalance = 0) : // Initialisierungsliste CVirtualStrategy(p_fittedBalance, 0.01), m_symbol(p_symbol), m_timeframe(p_timeframe), ... }
Bei der Erstellung von Instanzen geben wir einen bestimmten Wert für den letzten Parameter an, damit der Standardwert 0 nicht ersetzt wird:
//+------------------------------------------------------------------+ //| Experteninitialisierungsfunktion| //+------------------------------------------------------------------+ int OnInit() { // Parameter in der Kapitalverwaltungsklasse einstellen CMoney::DepoPart(expectedDrawdown_ / 10.0); CMoney::FixedBalance(fixedBalance_); // Erstellen Sie einen Expert Advisor, der mit virtuellen Positionen arbeitet. expert = new CVirtualAdvisor(magic_, "SimpleVolumes_" + EnumToString(group_)); // Erstellen und Auffüllen eines Arrays mit allen Strategieinstanzen CVirtualStrategy *strategies[] = { new CSimpleVolumesStrategy("EURGBP", PERIOD_H1, 13, 0.3, 1.0, 0, 10500, 465, 1000, 3, 1600), new CSimpleVolumesStrategy("EURGBP", PERIOD_H1, 17, 1.7, 0.5, 0, 16500, 220, 1000, 3, 900), new CSimpleVolumesStrategy("EURGBP", PERIOD_H1, 51, 0.5, 1.1, 0, 19500, 370, 22000, 3, 1600), ... }; ... return(INIT_SUCCEEDED); }
Im Expert Advisor SimpleVolumesExpertSingle.mq5 tun wir dies nicht, da die Optimierung nur bei einer festen Anfangspositionsgröße durchgeführt wird. Beachten Sie, dass der Parameter m_fixedLot in der Strategie nicht ausschließlich als Größe für alle offenen virtuellen Positionen verwendet werden muss. Er ist nur ein Basiswert, von dem aus wir alle anderen berechnen können. In der Modellstrategie im Artikel sind einfach die Größen aller Positionen gleich und dieser Parameter wird ohne Transformation verwendet. Aber nichts hindert Sie daran, eine virtuelle Position der Größe 10*m_fixedLot in einer anderen Strategie zu eröffnen und dann deren schrittweise Schließung anzuwenden.
Hallo.
alles ist richtig, für den Handel mit variablen Lots ist es notwendig, dass eine Strategieinstanz den Wert m_fittedBalance > 0 erhält. Dies wird von den Erben der Basisklasse der Handelsstrategie durchgeführt. Ihnen wird dieser Parameter übergeben, und sie ersetzen ihn im Aufruf des CVirtualStrategy-Konstruktors:
Bei der Erstellung von Instanzen geben wir einen bestimmten Wert für den letzten Parameter an, damit der Standardwert 0 nicht ersetzt wird:
Im Expert Advisor SimpleVolumesExpertSingle.mq5 tun wir dies nicht, da die Optimierung nur bei einer festen Anfangspositionsgröße durchgeführt wird. Beachten Sie, dass der Parameter m_fixedLot in der Strategie nicht ausschließlich als Größe für alle offenen virtuellen Positionen verwendet werden muss. Er ist lediglich ein Basiswert, von dem aus wir alle anderen berechnen können. In der Modellstrategie im Artikel sind einfach die Größen aller Positionen gleich und dieser Parameter wird ohne Transformation verwendet. Aber nichts hindert Sie daran, eine virtuelle Position der Größe 10*m_fixedLot in einer anderen Strategie zu eröffnen und dann deren schrittweise Schließung anzuwenden.
- 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 Entwicklung eines Expert Advisors für mehrere Währungen (Teil 5): Variable Positionsgrößen :
In den vorangegangenen Teilen konnte der in Entwicklung befindliche Expert Advisor (EA) nur eine feste Positionsgröße für den Handel verwenden. Dies ist für Testzwecke akzeptabel, aber für den Handel mit einem echten Konto nicht ratsam. Lassen Sie uns den Handel mit variablen Positionsgrößen ermöglichen.
Im vorherigen Teil haben wir die Möglichkeit beschrieben, den Zustand des EA nach einem Neustart wiederherzustellen. Es spielt keine Rolle, was der Grund dafür war - ein Neustart des Terminals, eine Änderung des Zeitrahmens auf dem Chart mit dem EA, das Starten einer neueren Version des EA - in allen Fällen erlaubte die Wiederherstellung des Status dem EA, nicht bei Null anzufangen zu arbeiten und bereits offene Positionen nicht zu verlieren, sondern sie weiter zu bearbeiten.
Die Größe der eröffneten Positionen blieb jedoch für jede Instanz der Strategie während des gesamten Testzeitraums gleich. Ihre Größe wurde bei der EA-Einführung festgelegt. Wenn sich der Kontostand des Handelskontos durch den Einsatz des EA erhöht, kann die Positionsgröße erhöht werden, ohne das Risiko zu erhöhen. Es wäre sinnvoll, sich dies zunutze zu machen. Beginnen wir also damit, die Verwendung variabler Positionsgrößen zu implementieren.
Autor: Yuriy Bykov