Documentação
Aplicações
Última atualização em 18. 5. 2020 por Mark Fric
Acréscimo de coluna de banco de dados / filtro
Conteúdo da página
Você pode querer ampliar a StrategyQuant adicionando uma nova coluna de banco de dados que computa algumas estatísticas únicas que são importantes para você.
Cada métrica, como lucro líquido, fator de lucro, Drawdown, razão Sharpe etc., é implementada como um snippet de coluna de banco de dados. O snippet se encarrega de calcular o valor e devolvê-lo no formato adequado para ser exibido na grade.
Usaremos os termos valor estatístico, valor estatístico, coluna de banco de dados de forma intercambiável, eles significam a mesma coisa.
Há duas formas básicas de calcular o valor das estatísticas:
- De ofícios
- Como alguma razão entre outros, já computados valores de estatísticas
NetProfit - exemplo de cálculo do valor das estatísticas de comércio
Abaixo está um método computa() de cálculo do lucro líquido do NetProfit que calcula o lucro líquido total.
Ela simplesmente passa por uma lista fornecida de negócios e soma de seus PL.
@Override duplo cálculo público(SQStats stats, StatsTypeCombination combination, OrdersList ordersList, SettingsMap settings, SQStats statsLong, SQStats statsShort) lança Exceção { duplo netProfit = 0; for(int i = 0; i<ordersList.size(); i++) { Order Order = OrderList.get(i); if(order.isBalanceOrder()) { // não contam em ordens de saldo (depósitos, saques) continuar; } duplo PL = getPLByStatsType(pedido, combinação); // isto retorna PL como $, % ou valor pips netProfit += PL; } retornar round2(netProfit); }
A única "especialidade" aqui é o método helper getPLByStatsType(order), que devolve PL em dinheiro, pips ou %.
Relação Ret/DD - exemplo de valor de estatísticas de computação de outros valores
Alguns valores de estatísticas são computados como proporções de outros valores de estatísticas. Um exemplo disto é a razão Ret/DD que é simplesmente uma razão entre o lucro líquido e o Drawdown.
Aqui está seu código:
retornos públicosDDRatio() { super(L.t("Ret/DD Ratio"), DatabankColumn.Decimal2, ValueTypes.Maximize, 0, -20, 20); setDependências("NetProfit", "Drawdown"); setTooltip(L.t("Return / Drawdown Ratio")); } //------------------------------------------------------------------------ @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"); duplo DD = Math.abs(stats.getDouble("Drawdown")); volta volta2(safeDivide(netProfit, DD)); }
Ao chamar setDependências("NetProfit", "Drawdown"); no construtor do ReturnDDRatio dissemos à StrategyQuant que este valor depende de dois outros valores iniciais que têm de ser computados primeiro.
No método compute(), simplesmente recuperamos estes valores e retornamos o lucro líquido dividido pelo drawdown.
Este artigo foi útil? O artigo foi útil O artigo não foi útil