Rentabilidad / Reducción máxima (Reducción máxima intradía o reducción por operación)
A veces el Drawdown calculado no refleja el Drawdown máximo que podríamos tener y que provocaría un margin call. Tengo muchas estrategias con gran relación Ret/DD. Pero cuando miro las estrategias puedo ver que algunas de ellas tienen un Max Intraday Drawdown mucho mayor (= Máxima Excursión Adversa). Ver imagen.
Este nuevo código elige el mayor Drawdown (Max Intraday Drawdown o Trade Drawdown).
Espero que no haya errores.
paquete SQ.Columns.Databanks; import com.strategyquant.lib.*; import com.strategyquant.datalib.*; import com.strategyquant.tradinglib.*; //creado por Fabien 17/12/2022 public class ProfitMaxDD extends DatabankColumna { public ProfitMaxDD() { super("Beneficio/MaxDD", DatabankColumn.Decimal2, // formato de visualización del valor ValueTypes.Maximize, // si el valor debe maximizarse / minimizarse / aproximarse a un valor 0, // valor objetivo si se ha elegido la aproximación 0, // mínimo medio de este valor 100); // máximo medio de este valor setWidth(80); // ancho de columna por defecto en píxeles setTooltip("NetProfit/ Max Intraday o Trade DD Ratio"); setDependencies("NetProfit", "MaxIntradayDrawdown", "Drawdown"); /* Si esta nueva columna depende de otras columnas que tienen que calcularse primero, póngalas aquí. Asegúrese de no crear una dependencia circular, como A depende de B y B depende de A. Las columnas (=valores de estadísticas) se identifican por el nombre de la clase) */ //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")); doble MaxDD = Math.max(maxIntradayDrawdown, DD); return round2( SQUtils.safeDivide(netProfit, MaxDD)); } }
Gracias, Fabien.