Documentação

Aplicações

Última atualização em 18. 5. 2020 por Mark Fric

SQN InSample / OutOfSample ratio

Neste exemplo, vamos adicionar novas métricas (coluna de banco de dados) que serão computadas como proporção de dois valores de coluna já computados. Em nosso caso, queremos obter razão de SQN(IS) vs SQN (OOS).

Portanto, a fórmula será simples:

Relação SQN É OOS = SQN (IS) / SQN (OOS)

 

Iremos passo a passo:

Criar novo snippet de coluna de banco de dados

Mudar para editor de código:

então clique em Criar novos botão:

Defina SQNRatioISOOS como um nome de nova coluna, e escolha o tipo de coluna Banco de Dados:

Isto criará um novo recorte de coluna com um modelo padrão.

Este novo trecho não faz muito. Uma nova coluna será adicionada ao banco de dados depois que você recompilar e
reinicie o SQ, mas ele exibirá o valor normal do lucro líquido, pois este é o exemplo de cálculo no
modelo padrão.

 

Calcule o valor desejado no trecho

A fim de calcular o valor que queremos, precisamos fazer algumas modificações.

Primeiro, vamos modificar seu construtor (primeiro método)

O código original era:

público SQNRatioISOOS() {
  super("SQNRatioISOOS",
        Decimal2, // formato de exibição de valores
        ValorTipos.Maximizar, // se o valor deve ser maximizado / minimizado / aproximado a um valor
        0, // valor-alvo se a aproximação foi escolhida
        0, // mínimo médio deste valor
        100); // máximo médio deste valor
  
  setWidth(80); // largura da coluna padrão em pixels
  
  setTooltip("Sua ponta de ferramenta aqui");
  
  /* Se esta nova coluna depende de algumas outras colunas que têm que ser computadas primeiro, coloque-as aqui.
     Certifique-se de não criar dependência circular, tal como A depende de B e B depende de A.
     As colunas (= valores de estatísticas) são identificadas pelo nome da classe)
  */
  //setDependências("DrawdownPct", "NumberOfTrades");
}

 

vamos mudá-lo para:

público SQNRatioISOOS() {
  super("SQN Ratio IS/OOS",
        Decimal2, // formato de exibição de valores
        ValorTipos.Maximizar, // se o valor deve ser maximizado / minimizado / aproximado a um valor
        0, // valor-alvo se a aproximação foi escolhida
        0, // mínimo médio deste valor
        100); // máximo médio deste valor
  
  setWidth(80); // largura da coluna padrão em pixels
  
  setTooltip("Razão de SQN (IS) / SQN (OOS)");
}

Não fizemos nada de especial, apenas especificamos um nome melhor para o nosso snippet e a ajuda de ponta de ferramenta. Excluímos comentários com dependências que não precisamos.

 

Em seguida, vamos apagar o método compute()

Normalmente utilizamos este método para calcular o valor do trecho. Este método pode ser usado para computar o valor métrico a partir de uma lista de negócios ou como uma relação entre alguns campos já computados.

Infelizmente, em nosso caso, precisamos calcular a relação entre o mesmo valor de estatística (SQN), mas calculado para duas partes diferentes dos dados - In Sample e Out of Sample.

Isto não pode ser feito no método compute(), portanto, podemos apagá-lo.

 

 Adicione o método getValue()

temos que anular um método especial getValue() que é chamado quando a grade do banco de dados recupera o valor para esta célula.

Neste método podemos recuperar estatísticas separadas para a parte IS e OOS, e a partir delas os valores de SQN da parte IS e OOS.

public String getValue(ResultadosResultadosResultados do grupo, resultado da StringKey, direção do byte, byte plType, byte sampleType) lança Exceção {
    // obter estatísticas para a parte SI e OOS
    SQStatsIS = resultados.subResultado(resultadoKey).stats(Directions.Both, PlTypes.Money, SampleTypes.InSample);
    SQStats statsOOS = resultados.subResultado(resultadoKey).stats(Directions.Both, PlTypes.Money, SampleTypes.OutOfSample);

    duplo sqnIS = 0, sqnOOS = 0;
    
    // obter valores de SQN para IS e OOS. Temos que ter certeza de que os objetos de estatísticas não sejam nulos
    if(statsIS != null) sqnIS = statsIS.getDouble("SQN");
    if(statsOOS != null) sqnOOS = statsOOS.getDouble("SQN");

    // nw computar e devolver sua relação - note que usamos safeDivide porque sqnOOS também pode ser zero
    relação dupla = SQUtils.safeDivide(sqnIS, sqnOOS);

    return String.format("%.2f", ratio);
}

isto é tudo o que é necessário. Agora o snippet irá calcular o valor desta célula como uma proporção dos valores já existentes de SQN (IS) e SQN (OOS).

Acesse Compilação e você deve ver o resultado com uma compilação bem sucedida:

 

Agora reinicie o SQ e você deve ver esta nova coluna nas colunas disponíveis. Para utilizá-la, abra Gerenciar visualização em algum banco de dados e crie ou edite uma visualização:

Salve, depois selecione esta visualização em seu banco de dados e você deverá ver sua nova coluna devidamente computada:

Isso é tudo - temos um novo recorte de coluna de banco de dados.

Este artigo foi útil? O artigo foi útil O artigo não foi útil

Assine
Notificação de
5 Comentários
Mais antigo
Novidades Mais Votados
Feedbacks em linha
Ver todos os comentários
Emmanuel
27. 11. 2021 8:34 am

muito útil !!! obrigado

Emmanuel
27. 11. 2021 4:24 pm

excelente idéia ! obrigado

Emmanuel
27. 11. 2021 4:34 pm

Neste método, podemos recuperar estatísticas separadas para a parte SI e OOS", isto é importante de se saber.
Existe algum outro método como calcular onde não podemos obter SI e OOS?
Seria útil conhecer outras limitações em cada classe, como acesso a instrumentos de dados e outros

tomas262
Admin
Responder a  Emmanuel
29. 11. 2021 8:48 pm

Você pode olhar em nosso documento API para ver todos os métodos disponíveis https://strategyquant.com/sqxapi/

Cyber
20. 6. 2022 4:17 am

Isto funcionou em estratégias geradas por uma tarefa de Construção. Entretanto, está mostrando zero quando eu adicionei isto em um OVNI. há uma maneira diferente de fazê-lo funcionar em OVNI?