Devolução / Max Drawdown (Max Intraday Drawdown ou Trade Drawdown)
Às vezes o Drawdown calculado não reflete o Drawdown máximo que poderíamos ter e que desencadearia uma chamada de margem. Eu recebo muitas estratégias com uma ótima relação Ret/DD. Mas quando olho para as estratégias, posso ver que algumas delas têm um Drawdown Máximo Intraday muito maior (= Maximum Adverse Excursion). Veja a figura.
Este novo código escolhe o maior Drawdown (Max Intraday Drawdown ou Trade Drawdown).
Espero que não haja erros!
pacote SQ.Colunas.Bancos de dados; import com.strategyquant.lib.*; import com.strategyquant.datalib.*; import com.strategyquant.tradinglib.*; //criado por Fabien 17/12/2022 classe pública ProfitMaxDDD estende Banco de DadosColuna { lucro públicoMaxDD() { super("Lucro/MaxDD", Decimal2, // formato de exibição de valores ValorTipos.Maximizar, // se o valor deve ser maximizado / minimizado / aproximado a um valor 0, // valor-alvo se a aproximação foi escolhida 0, // mínimo médio deste valor 100); // máximo médio deste valor setWidth(80); // largura da coluna padrão em pixels setTooltip("NetProfit/ Max Intraday ou Trade DD Ratio"); setDependencies("NetProfit", "MaxIntradayDrawdown", "Drawdown"); /* Se esta nova coluna depende de algumas outras colunas que têm de ser computadas primeiro, coloque-as aqui. Certifique-se de não criar dependência circular, tal como A depende de B e B depende de A. As colunas (= valores de estatísticas) são identificadas pelo nome da classe) */ //setDependências("DrawdownPct", "NumberOfTrades"); } //------------------------------------------------------------------------ @Override duplo cálculo público(SQStats stats, StatsTypeCombination combination, OrdersList ordersList, SettingsMap settings, SQStats statsLong, SQStats statsShort) lança Exceção { double netProfit = stats.getDouble("NetProfit"); double maxIntradayDrawdown = stats.getDouble("MaxIntradayDrawdown"); duplo DD = Math.abs(stats.getDouble("Drawdown")); duplo MaxDDD = Math.max(maxIntradayDrawdown, DD); retorno round2( SQUtils.safeDivide(netProfit, MaxDDD)); } }
Obrigado Fabien !
How can I know the maximum daily open loss of a system that could adapt this code?