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));
}
}
Vielen Dank, Fabien!
Wie kann ich den maximalen täglichen offenen Verlust eines Systems kennen, das diesen Code anpassen könnte?
Vielen Dank für diesen Code, den ich sehr schätze.
Ich kämpfe immer noch mit dem Problem, das Fabien oben beschrieben hat. Ich erhalte viele großartige Strategien mit tollen Ret/DD-Verhältnissen. Aber unter dem Gesichtspunkt der maximal ungünstigen Ausführung (Maximum Adverse Execution MAE) sind viele von ihnen nutzlos (da Margin Calls die Strategie zerstört hätten).
Kann das SQX-Team bitte MAE/MFE-Metriken in die Ranking-Filter aufnehmen?
Ich habe es in mein Sqx mit Code Dieter eingefügt, und ich kompiliere den Code erfolgreich.
und öffnen Sie die Spalte in der Datenbank, aber warum zeigen alle ProfitMaxDD-Daten 0 an?
Kann mir jemand helfen? Vielen Dank!