SOMENTE LEITURA

O fórum agora é um arquivo somente para leitura.

Para relatórios de bugs e perguntas sobre a plataforma → [email protected]

Nossa comunidade vive no Discord e no YouTube - junte-se a nós!

JUNTE-SE A NÓS EM Discórdia YouTube

A coluna do banco de dados sempre mostra o valor zero

1 resposta

Julian Gonzalez

Assinante, bbp_participant, sq-ultimate, cliente, comunidade, 8 respostas.

Perfil da visita

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 valor
          ValueTypes.Maximize, // se o valor deve ser maximizado/minimizado/aproximado a um valor
          0, // valor alvo se a aproximação foi escolhida
          0, // média mínima deste valor
          100); // média máxima deste valor
    setWidth(80); // largura padrão da coluna em pixels
    setTooltip(“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).
   */
  @Override
  public 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) em
        continuar;
      }
      /* 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

Assinante, bbp_participant, sq-ultimate, cliente, comunidade, 8 respostas.

Perfil da visita

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)