SOLO PARA LECTURA

El foro es ahora un archivo de sólo lectura.

Para informes de errores y preguntas sobre la plataforma → [email protected]

Nuestra comunidad vive en Discord y YouTube: ¡únete a nosotros!

ÚNASE A NOSOTROS Discordia YouTube

La columna del banco de datos siempre muestra un valor cero

1 respuesta

Julián González

Abonado, bbp_participant, sq-ultimate, cliente, comunidad, 8 respuestas.

Visitar el perfil

hace 10 meses #291831

He creado una columna Databank y se autogenera un código de plantilla calculando netProfit. Lo compilo y reinicio SQX UI. Cuando abro el DataBank desde Builder y añado la columna, siempre muestra valor cero. Lo mismo ocurre si descargo snippets de la comunidad.

Si creo uno nuevo sólo con getNumericValue() y getValue() funciona perfectamente. Así que parece que la función compute() no hace nada, ¿por qué?

Ya lo he intentado con las versiones 136, 142 y 143. Ayuda

Esta es la plantilla:

paquete SQ.Columns.Databanks;
import com.strategyquant.lib.*;
import com.strategyquant.datalib.*;
import com.strategyquant.tradinglib.*;
public class Prueba2 extends DatabankColumn {
  public Prueba2() {
    super(“Prueba2”,
          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); // media máxima de este valor
    setWidth(80); // anchura por defecto de la columna en píxeles
    setTooltip(“Su información sobre herramientas aquí”);
    /* Si esta nueva columna depende de otras columnas que tienen que ser calculadas primero, ponlas aquí.
       Asegúrate de no crear dependencias circulares, como A depende de B y B depende de A.
       Las columnas (=valores de las estadísticas) se identifican por el nombre de la clase)
    */
    //setDependencies(“DrawdownPct”, “NumberOfTrades”);
  }
  //————————————————————————
  /**
   * Este método debe devolver el valor calculado de esta nueva columna. Por lo general, debería calcularlo a partir de la lista de pedidos
   * o a partir de algunos valores estadísticos ya calculados (otras columnas del banco de datos).
   */
  @Override
  public double compute(SQStats stats, StatsTypeCombination combination, OrdersList ordersList, SettingsMap settings, SQStats statsLong, SQStats statsShort) throws Exception {
    /* un ejemplo - así se pueden obtener otros valores de los que depende este nuevo valor */
    //int numberOfTrades = stats.getInt(“NumberOfTrades”);
    //double drawdownPct = stats.getDouble(“DrawdownPct”);
    /* un ejemplo - calcular el beneficio neto a partir de la lista de operaciones */
    double netProfit = 0;
    for(int i = 0; i<ordersList.size(); i++) {
      Pedido pedido = ordersList.get(i);
      if(order.isBalanceOrder()) {
        // no cuentan las órdenes de saldo (depósitos, retiradas) en
        continuar;
      }
      /* el método getPLByStatsType devuelve automáticamente el PL dependiendo del tipo de estadísticas - en dinero, % o pips */
      double PL = getPLByStatsType(orden, combinación);
      netProfit += PL;
    }
    /* redondea y devuelve el valor. Se guardará en las estadísticas bajo la clave “Prueba2” */
    return round2(netProfit);
  }
}

0

Julián González

Abonado, bbp_participant, sq-ultimate, cliente, comunidad, 8 respuestas.

Visitar el perfil

hace 10 meses #291832

¡Resuelto!

Parece que la función compute() sólo se actualiza cuando se fuerza a la estrategia a ser backtested de nuevo (retesteándola o generando una nueva estrategia). En cambio, las funciones getNumericValue() y getValue() no lo necesitan.

🙂

1

Viendo 1 respuesta (de un total de 1)