Dokumentation

Anwendungen

Zuletzt aktualisiert am 21. 12. 2021 von clonex / Ivan Hudec

ATR-Volatilität Einfaches Sizing

In Situationen, in denen die Volatilität kurzfristig steigt oder fällt, kann es sinnvoll sein, die Positionsgröße zu ändern. Im folgenden Tutorial zeigen wir Ihnen ein einfaches Snippet in StrategyQuant X x, mit dem Sie die Größe eines Trades erhöhen/verringern können. Das Snippet können Sie herunterladen hier.

Schritt 1 - Neues Snippet für die Geldverwaltung erstellen

Öffnen Sie CodeEditorklicken Sie auf Neu erstellen und wählen Sie Geld-Management  Option ganz unten. Name ATRVolatilitätGröße.

Dadurch wird ein neues Snippet erstellt ATRVolatilitätGröße.java im Ordner Benutzer/Schnipsel/SQ/Geldverwaltung

 

 

Schritt 2 - Parameter definieren

An dieser Stelle definieren wir die Parameter, die wir später bei der Implementierung des Snippets verwenden werden. In diesem Fall werden wir Folgendes definieren

  • Größe - der Standardwert für die Handelsgröße.
  • Multiplikator - Multiplikator, den wir verwenden, um die Handelsgröße zu ändern.
  • FastATR- Schneller ATR-Zeitraum
  • SlowATR- Langsamer ATR-Zeitraum

 

@ClassConfig(name="ATR Volatility Sizing", display="ATR Volatility Sizing: #Size# lots with multiplication #Multiplier#")
@Help("<b>ATR-Volatilitätsberechnung</b>")
@Description("ATR Volatility Sizing, #Size# und #Multiplier#")
@SortOrder(100)
public class ATRVolatilitySizing extends MoneyManagementMethod {

    @Parameter(defaultValue="0.1", minValue=0.01d, name="Ordergröße", maxValue=1000000d, step=0.1d, category="Default")
    @Help("Ordergröße (Anzahl der Lots für Forex)")
    public double Size;

    @Parameter(defaultValue="0.1", minValue=0.01d, name="Multiplier", maxValue=1000, step=0.1d, category="Default")
    @Help("Multiplikator")
    public double Multiplikator;

    @Parameter(defaultValue="5", minValue=2, name="Fast ATR Period", maxValue=480, step=1, category="Default")
    @Hilfe("Schneller ATR-Zeitraum")
    public int FastATR;

    @Parameter(defaultValue="20", minValue=2, name="Slow ATR Period", maxValue=480, step=1, category="Default")
    @Help("Langsamer ATR-Zeitraum")
    public int SlowATR;

 

 

Schritt 3 - Implementierung der Methode double computeTradeSize

Bei dieser Methode geben Sie die Losgröße an. Die Parameter der Methode sind erwähnenswert.

  • StrategyBase strategy ist die Basisklasse für die Strategie, von ihr gibt es abgeleitete Klassen, die zusätzliche Funktionen implementieren
    String-Symbol - das Symbol, mit dem die Strategie bestellt wurde
  • byte orderType
  • doppelter Preis - der Preis bei der Eröffnung des Geschäfts
  • Doppelter Sl - Stop Loss
  • double tickSize tick size
  • double pointValue - Wert des Punktes.

Mit dieser Methode können wir einfachere, aber auch komplexere Berechnungen durchführen. In unserem Fall geben wir den vorherigen Schlusskurs und zwei verschiedene ATR-Werte ein. Wenn die kurzfristige ATR höher ist als die langfristige ATR, ändern wir die Positionsgröße.

 

@Override
public double computeTradeSize(StrategyBase strategy, String symbol, byte orderType, double price, double sl, double tickSize, double pointValue) throws Exception {
    
    double tradeSize;
    // Vorherigen Schlusskurs ermitteln
    double prevClose = strategy.MarketData.Chart(symbol).Close(1);
    // liefert gerundete ATR mit langsamerer Periode
    double slowValueATR = SQUtils.round(strategy.getATRValue(strategy.MarketData.Chart(symbol),SlowATR, 1), 5);
    // gerundete ATR mit schnellerer Periode erhalten
    double fastValueATR = SQUtils.round(strategy.getATRValue(strategy.MarketData.Chart(symbol),FastATR, 1), 5);
    // wenn die Short-Volatilität nach oben schnellt, dann die Größe des Handels ändern
    if(fastValueATR>slowValueATR){
        tradeSize = Größe*Multiplikator;

    }
    // sonst nichts tun
    sonst tradeSize = Size;
    // Rückgabe der Handelsgröße
    return tradeSize;
    
}

Schritt 4 - Verwendung des ATR Volatility Sizing Snippets

Nach dem Neustart von SQX finden Sie das neue Snippet auf der Registerkarte Geldverwaltung.

In der nachstehenden Grafik sehen Sie, wie sich der Umfang der Geschäfte verändert.

 

 

 

Kommentierter Code

 

/*
 * Copyright (c) 2017-2018, StrategyQuant - Alle Rechte vorbehalten.
 *
 * Der Code in dieser Datei wurde in dem guten Glauben erstellt, dass er korrekt ist und das tut, was er soll.
 * Wenn Sie einen Fehler in diesem Code gefunden haben ODER Sie einen Verbesserungsvorschlag haben ODER Sie möchten
 * Ihren eigenen Codeschnipsel in unsere Standardbibliothek aufnehmen möchten, kontaktieren Sie uns bitte unter:
 * https://roadmap.strategyquant.com
 *
 * Dieser Code kann nur innerhalb von StrategyQuant-Produkten verwendet werden.
 * Jeder Besitzer einer gültigen (kostenlosen, Test- oder kommerziellen) Lizenz für ein StrategyQuant-Produkt
 * darf diesen Code ohne Einschränkungen frei verwenden, kopieren, modifizieren oder davon abgeleitete Arbeiten erstellen,
 * in allen StrategyQuant-Produkten zu verwenden und seine Änderungen oder abgeleiteten Arbeiten
 * mit der StrategyQuant-Gemeinschaft zu teilen.
 *
 * DIE SOFTWARE WIRD OHNE MÄNGELGEWÄHR BEREITGESTELLT, OHNE JEGLICHE AUSDRÜCKLICHE ODER STILLSCHWEIGENDE GARANTIE,
 * EINSCHLIESSLICH, ABER NICHT BESCHRÄNKT AUF DIE GARANTIEN DER MARKTGÄNGIGKEIT, DER EIGNUNG FÜR EINEN BESTIMMTEN
 * ZWECK UND NICHTVERLETZUNG VON RECHTEN DRITTER. IN KEINEM FALL SIND DIE AUTOREN HAFTBAR FÜR JEGLICHE ANSPRÜCHE, SCHÄDEN
 * ODER ANDERE HAFTUNG, OB IN EINER KLAGE AUS VERTRAG, UNERLAUBTER HANDLUNG ODER ANDERWEITIG, DIE AUS,
 * AUS ODER IN VERBINDUNG MIT DER SOFTWARE ODER DER NUTZUNG ODER DEM SONSTIGEN UMGANG MIT DER SOFTWARE.
 *
 */
Paket SQ.MoneyManagement;

import com.strategyquant.lib.*;
import com.strategyquant.datalib.*;
import com.strategyquant.tradinglib.*;

@ClassConfig(name="ATR Volatility Sizing", display="ATR Volatility Sizing: #Size# lots with multiplication #Multiplier#")
@Help("<b>ATR-Volatilitätsberechnung</b>")
@Description("ATR Volatility Sizing, #Size# und #Multiplier#")
@SortOrder(100)
public class ATRVolatilitySizing extends MoneyManagementMethod {

    @Parameter(defaultValue="0.1", minValue=0.01d, name="Ordergröße", maxValue=1000000d, step=0.1d, category="Default")
    @Help("Ordergröße (Anzahl der Lots für Forex)")
    public double Size;

    @Parameter(defaultValue="0.1", minValue=0.01d, name="Multiplier", maxValue=1000, step=0.1d, category="Default")
    @Help("Multiplikator")
    public double Multiplikator;

    @Parameter(defaultValue="5", minValue=2, name="Fast ATR Period", maxValue=480, step=1, category="Default")
    @Hilfe("Schneller ATR-Zeitraum")
    public int FastATRPeriod;

    @Parameter(defaultValue="20", minValue=2, name="Slow ATR Period", maxValue=480, step=1, category="Default")
    @Help("Langsamer ATR-Zeitraum")
    public int SlowATRPeriod;



    //------------------------------------------------------------------------
    //------------------------------------------------------------------------
    //------------------------------------------------------------------------
    
    @Override
    public double computeTradeSize(StrategyBase strategy, String symbol, byte orderType, double price, double sl, double tickSize, double pointValue) throws Exception {
        
        double tradeSize;
        // Vorherigen Schlusskurs ermitteln
        double prevClose = strategy.MarketData.Chart(symbol).Close(1);
        // liefert gerundete ATR mit langsamerer Periode
        double slowValueATR = SQUtils.round(strategy.getATRValue(strategy.MarketData.Chart(symbol),SlowATRPeriod, 1), 5);
        // gerundete ATR mit schnellerer Periode erhalten
        double fastValueATR = SQUtils.round(strategy.getATRValue(strategy.MarketData.Chart(symbol),FastATRPeriod, 1), 5);
        // wenn die Short-Volatilität nach oben schnellt, wird die Handelsgröße angepasst
        if(fastValueATR&gt;slowValueATR){
            tradeSize = Größe*Multiplikator;

        }
        // sonst Größe gleich Standardgröße
        sonst tradeSize = Size;
        // Rückgabe der Handelsgröße
        return tradeSize;

 

War dieser Artikel hilfreich? Der Artikel war nützlich Der Artikel war nicht nützlich

Abonnieren
Benachrichtigen Sie mich bei
6 Kommentare
Älteste
Neuestes Meistgewählt
Inline-Rückmeldungen
Alle Kommentare anzeigen
Emmanuel
6. 1. 2022 11:56 Uhr

Ausgezeichnet !!!!!!!!!!!!!!

binhsir
15. 1. 2022 14:05 Uhr

Das ist genau das, was ich brauche. Danke clonex

Kaveh Karimi
1. 3. 2022 9:39 Uhr

Hallo, wie kann ich diese Datei im CODE EDITOR kompilieren? Vielen Dank für Ihre Aufmerksamkeit

Herr Omi
3. 11. 2023 5:03 Uhr

Danke clonex / Ivan Hudec.

Ich weiß nicht, warum ich meine Strategie nicht im mq5-Format speichern kann. Der Fehler ist "Einer oder mehrere Blöcke, die die Strategie verwendet, ist nicht in MQL-Code implementiert", "Template inclusion failed (for parameter value "MoneyManagement/ATRVolatilitySizing_variables.tpl").

Könnten Sie mir bitte helfen, das Problem zu beheben?

Last edited 6 Monate zuvor by Mr Omi
Emmanuel
13. 2. 2024 1:17 pm

I can not make it work with build 138

Emmanuel
13. 2. 2024 1:27 pm

For build 138 , we need to update the line :
@Override
    public doppelt computeTradeSize(StrategyBase strategy, String symbol, byte orderType, doppelt Preis, doppelt sl, doppelt tickSize, doppelt pointValue, doppelt sizeStep) throws Exception {