A coluna do banco de dados sempre mostra o valor zero
1 resposta
Julian Gonzalez
10 meses atrás #291831
Criei uma coluna no banco de dados e um código modelo é gerado automaticamente calculando netProfit. Eu o compilo e reinicio a interface do usuário do SQX. Quando abro o banco de dados no Builder e adiciono a coluna, ele sempre mostra valor zero. O mesmo acontece se eu baixar trechos da comunidade.
Se eu criar um novo com apenas getNumericValue() e getValue(), ele funciona perfeitamente. Portanto, parece que a função compute() não faz nada. Por quê?
Já tentei com as versões 136, 142 e 143. Socorro!
Este é o modelo:
pacote SQ.Columns.Databanks;importar com.strategyquant.lib.*;import com.strategyquant.datalib.*;import com.strategyquant.tradinglib.*;classe pública Prueba2 estende DatabankColumn {público Prueba2() {super(“Prueba2”,DatabankColumn.Decimal2, // formato de exibição do valorValueTypes.Maximize, // se o valor deve ser maximizado/minimizado/aproximado a um valor0, // valor alvo se a aproximação foi escolhida0, // média mínima deste valor100); // média máxima deste valorsetWidth(80); // largura padrão da coluna em pixelssetTooltip(“Sua dica aqui”);/* Se esta nova coluna depender de outras colunas que precisam ser calculadas primeiro, coloque-as aqui.Certifique-se de não criar dependências circulares, como A depende de B e B depende de A.As colunas (=valores estatísticos) são identificadas pelo nome da classe.*///setDependencies(“DrawdownPct”, “NumberOfTrades”);}//————————————————————————/*** Este método deve retornar o valor calculado desta nova coluna. Normalmente, você deve calculá-lo a partir da lista de pedidos.* ou a partir de alguns valores estatísticos já calculados (outras colunas do banco de dados).*/@Overridepublic double compute(SQStats estatísticas, StatsTypeCombination combinação, OrdersList lista de pedidos, SettingsMap configurações, SQStats estatísticasLongas, SQStats estatísticasCurtas) throws Exception {/* um exemplo – é assim que você pode obter outros valores dos quais esse novo valor depende *///int númeroDeNegociações = stats.getInt(“NúmeroDeNegociações”);//double drawdownPct = stats.getDouble(“DrawdownPct”);/* um exemplo – cálculo do lucro líquido a partir da lista de transações */double netProfit = 0;para(int i = 0; i<tamanho da lista de pedidos(); i++) {Ordem ordem = listaDeOrdens.obter(i);if(pedido.éPedidoComSaldo()) {// não conte ordens de saldo (depósitos, retiradas) emcontinuar;}/* O método getPLByStatsType retorna automaticamente o PL dependendo do tipo de estatística fornecido – em dinheiro, % ou pips */duplo PL = obterPLPorTipoDeEstatísticas(pedido, combinação);netProfit += PL;}/* arredonde e retorne o valor. Ele será salvo nas estatísticas sob a chave “Prueba2” */retornar round2(netProfit);}}
0
Julian Gonzalez
10 meses atrás #291832
Resolvido!
Parece que a função compute() só é atualizada quando você força a estratégia a ser testada novamente (retestando-a ou gerando uma nova estratégia). Em contrapartida, as funções getNumericValue() e getValue() não precisam disso.
🙂
1
Visualizando 1 resposta (de um total de 1)