Documentação

Aplicações

Última atualização em 18. 5. 2020 por Mark Fric

Acréscimo de coluna de banco de dados / filtro

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:

  1. De ofícios
  2. 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

Assine
Notificação de
0 Comentários
Feedbacks em linha
Ver todos os comentários