Documentación

Aplicaciones

Última actualización el 18. 5. 2020 by Mark Fric

Añadir columna / filtro de base de datos

Es posible que desee ampliar StrategyQuant añadiendo una nueva columna del banco de datos que calcule alguna estadística única que sea importante para usted.

Cada métrica como Beneficio neto, Factor de beneficio, Reducción, Ratio de Sharpe, etc., se implementa como un fragmento de columna del banco de datos. El fragmento se encarga de calcular el valor y devolverlo en el formato adecuado para que se muestre en la cuadrícula.

Utilizaremos los términos valor estadístico, valor estadístico, columna del banco de datos de forma intercambiable, significan lo mismo.

Hay dos formas básicas de calcular el valor de las estadísticas:

  1. De oficios
  2. Como una relación entre otros valores estadísticos ya calculados

 

NetProfit - ejemplo de cálculo del valor estadístico de las operaciones

A continuación se muestra un fragmento del método compute() de NetProfit que calcula el beneficio neto total.
Simplemente recorre la lista de operaciones proporcionada y suma su PL.

@Override
public double compute(SQStats stats, StatsTypeCombination combination, OrdersList ordersList, SettingsMap settings, SQStats statsLong, SQStats statsShort) throws Exception {

  double netProfit = 0;

  for(int i = 0; i<ordersList.size(); i++) {
    Pedido pedido = ordersList.get(i);
    
    if(order.isBalanceOrder()) {
      // no contar en órdenes de saldo (ingresos, retiradas)
      continuar;
    }
    
    double PL = getPLByStatsType(order, combination); // esto devuelve PL como valor $, % o pips
    
    netProfit += PL;
  }

  return round2(netProfit);
}

La única "especialidad" aquí es el método de ayuda getPLByStatsType(order), que devuelve PL ya sea en dinero, pips o %.

 

Ratio Ret/DD - ejemplo de cálculo del valor de las estadísticas a partir de otros valores

Algunos valores estadísticos se calculan como ratios de otros valores estadísticos. Un ejemplo de esto es la relación Ret/DD, que es simplemente una relación entre el beneficio neto y la reducción.

Este es su código:

public Relación Ret/DD() {
  super(L.t("Ret/DD Ratio"), DatabankColumn.Decimal2, ValueTypes.Maximize, 0, -20, 20);

  setDependencies("NetProfit", "Drawdown");
  setTooltip(L.t("Relación Rentabilidad/Disminución"));
}

//------------------------------------------------------------------------

@Override
public double compute(SQStats stats, StatsTypeCombination combination, OrdersList ordersList, SettingsMap settings, SQStats statsLong, SQStats statsShort) throws Exception {
  double netProfit = stats.getDouble("NetProfit");
  double DD = Math.abs(stats.getDouble("Drawdown"));
  
  return round2(safeDivide(netProfit, DD));
}

Llamando a setDependencies("NetProfit", "Drawdown"); en el constructor de ReturnDDRatio le dijimos a StrategyQuant que este valor depende de otros dos valores de inicio que tienen que ser calculados primero.

En el método compute() simplemente recuperamos estos valores y devolvemos el beneficio neto dividido por el drawdown.

¿Le ha resultado útil este artículo? El artículo era útil El artículo no era útil

Suscríbase a
Notificar a
0 Comentarios
Feedbacks de Inline
Ver todos los comentarios