4. 1. 2023

5 1

Rendite / Max Drawdown (Max Intraday Drawdown oder Trade Drawdown)


Manchmal spiegelt der berechnete Drawdown nicht den maximalen Drawdown wider, den wir haben könnten und der einen Margin Call auslösen würde. Ich erhalte viele Strategien mit einem hervorragenden Ret/DD-Verhältnis. Aber wenn ich mir die Strategien ansehe, kann ich feststellen, dass einige von ihnen einen viel größeren maximalen Intraday-Drawdown (= maximale negative Abweichung) haben. Siehe Bild.
Dieser neue Code wählt den größeren Drawdown (Max Intraday Drawdown oder Trade Drawdown).

Ich hoffe, dass es keine Fehler gibt!

Paket SQ.Columns.Databanks;

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

//erstellt von Fabien 17/12/2022

public class ProfitMaxDD extends DatabankColumn {
    
    public GewinnMaxDD() {
        super("Gewinn/MaxDD",
          DatabankColumn.Decimal2, // Format der Wertanzeige
          ValueTypes.Maximize, // ob Wert maximiert / minimiert / auf einen Wert angenähert werden soll
          0, // Zielwert, falls Annäherung gewählt wurde
          0, // durchschnittliches Minimum dieses Wertes
          100); // durchschnittliches Maximum dieses Wertes
        
    setWidth(80); // Standardspaltenbreite in Pixel
    
        setTooltip("NetProfit/ Max Intraday oder Trade DD Ratio");
    setDependencies("NetProfit", "MaxIntradayDrawdown", "Drawdown");
    /* Wenn diese neue Spalte von anderen Spalten abhängig ist, die zuerst berechnet werden müssen, fügen Sie sie hier ein.
       Achten Sie darauf, dass Sie keine zirkulären Abhängigkeiten erstellen, wie z.B. A hängt von B und B hängt von A ab.
       Spalten (=Statistikwerte) werden durch den Namen der Klasse identifiziert)
    */
    //setDependencies("DrawdownPct", "NumberOfTrades");
    }
  
  //------------------------------------------------------------------------


    @Override
    public double compute(SQStats stats, StatsTypeCombination combination, OrdersList ordersList, SettingsMap settings, SQStats statsLong, SQStats statsShort) throws Exception {
    
    double netProfit = stats.getDouble("NetProfit");
    double maxIntradayDrawdown = stats.getDouble("MaxIntradayDrawdown");
    double DD = Math.abs(stats.getDouble("Drawdown"));
    double MaxDD = Math.max(maxIntradayDrawdown, DD);

        return round2( SQUtils.safeDivide(netProfit, MaxDD));
    }
}

 

Abonnieren
Benachrichtigen Sie mich bei
1 Kommentar
Älteste
Neuestes Meistgewählt
Inline-Rückmeldungen
Alle Kommentare anzeigen
Emmanuel
15. 1. 2023 8:57 Uhr

Vielen Dank, Fabien!