La columna del banco de datos siempre muestra un valor cero
1 respuesta
Julián González
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 valorValueTypes.Maximize, // si el valor debe maximizarse / minimizarse / aproximarse a un valor0, // valor objetivo si se ha elegido la aproximación0, // mínimo medio de este valor100); // media máxima de este valorsetWidth(80); // anchura por defecto de la columna en píxelessetTooltip(“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).*/@Overridepublic 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) encontinuar;}/* 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
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)