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.
¿Cómo puedo saber la pérdida máxima diaria abierta de un sistema que podría adaptar este código?
Gracias por este código, muy apreciado.
Sigo luchando con el problema que Fabien describió anteriormente. Tengo muchas grandes estrategias con gran Ret / DD ratios. Pero desde un punto de vista de ejecución adversa máxima MAE muchos de ellos son inútiles (como llamadas de margen habría matado a la estrategia).
¿Podría el equipo SQX incluir las métricas MAE/MFE en los filtros de clasificación?
Lo pongo en mi sqx con code dieter,y compilo el codigo con exito.
y abrir la columna en el banco de datos, pero ¿por qué todos los datos ProfitMaxDD mostrar 0?
¿alguien me puede ayudar? muchas gracias