Documentação

Aplicações

Última atualização em 28. 11. 2021 por clonex / Ivan Hudec

Análise do Comércio - Relação Avg Edge por hora

Gráficos de Análise Comercial é uma parte dos resultados do StrategQuant X que nos permite analisar visualmente algumas propriedades de uma estratégia. No tutorial a seguir, mostraremos como criar um snippet analítico que nos mostra visualmente a relação média da margem de uma estratégia em função da hora de abertura do comércio.

Você pode fazer o download do trecho acabado aqui.

 

 

Passo 1 - Editor de código aberto

Clique no ícone do editor de código para mudar para Editor.

 

 

Passo 2 - Criar nova coluna de Comércio

Abra CodeEditor, clique em Create new e escolha a opção Trade analysis chart - Name it AvgEdgeRatioByHour. Isto criará um novo snippet AvgEdgeRatioByHour.java em pasta Usuário/Snippets/SQ/TradeAnálise No construtor, definimos o nome a ser exibido.

 

classe pública AvgEdgeRatioByHour estende o TradeAnalysisChart {

    AvgEdgeRatioByHour() {
        this.name = L.tsq("Avg.Edge Ratio By Hour");
    }

 

 

Etapa 3 - Modificar o método de sorteio

Neste método, especificamos o tipo de gráfico que queremos criar. Podemos escolher entre as seguintes opções

  • BarChart
  • ScatterChart
  • Tabela de Preços

Em seguida, você cria uma matriz na qual você insere os dados da matriz de dados computados. Use o loop for para adicionar os valores calculados na matriz de dados computados ao gráfico.

@Override
    Sorteio público de Quadros de Ordens (OrdensLista de ordens, byte plType, byte tradePeriodo) {
        // criando nova instância de gráfico
        BarChart gráfico = novo BarChart();
        
        chart.invertIfNegativo(true);
        
        if(order===nulo) {
            gráfico de retorno;
        }
        // criando array aqui nós armazenamos dados computados no método computeData
        double[] hours = computeData(ordens, plType, tradePeriod);
        
        // preencher tabela com valores de matriz
        for(int hora=0; hora<hora.duração; hora++) {
            
            chart.addValue(L.tsq("Avg.Edge Ratio By Hour"), hora, horas[hora]/horaCount[hora])
        }

        gráfico de retorno;
    }

 

Passo 4 - Implementar a matriz de dados computacionais

computeData é uma matriz onde trabalhamos com Lista de pedidos. OrderList  é uma classe que armazena a lista de ofícios de uma estratégia e fornece métodos para manipular com a lista de ofícios. Você pode fazer loop troght inteiro OrderList  e obtenha dados para muito Ordem  usando o método obter(índice int).
private double[] computeData(Ordens OrdensListar ordens, byte plType, byte tradePeriodo) {
        duplo[] horas = novo duplo[24];
        
        for(int hora=0; hora<hora.duração; hora++) {
            horas[hora]=0;
        }
        
        hora int;
        // aqui trabalhamos com a lista de pedidos
        for(int i = 0; i < order.size(); i++) {
            Order order = ordens.get(i);
            
            hora = SQTime.getHour(order.getTimeByPeriodType(tradePeriod)); //0-23

            duplo mae = encomenda.PipsMAE; //get order MAE em pips
            duplo mfe = encomendar.PipsMFE; // obter encomenda MAE em pips
            duplo atrOnOpen = encomendar. ATROnOpen; // obter encomenda ATR em pips

            dupla normaMAE = mae/atrOnOpen; // normalizar MAE
            dupla normaMFE = mfe/atrOnOpen; // obter MFE normalizada

            eRTrade duplo = SQUtils.safeDivide(normMFE,normMAE); // SQUtils.safeDivide precede a exceção de divisão nula zero


            horas[hora]+= eRTrade;
            hoursCount[hora]+=1;
        }

 

Passo 5 - Utilização de Avg. Razão de Borda por Hora em Estratégia Quant X

Após compilar o snippet e reiniciar o Editor de Código e StrategyQUant X, podemos trabalhar com o recém-criado snippet.

Código comentado

pacote SQ.TradeAnálise;
import com.strategyquant.lib.*;
import com.strategyquant.datalib.*;
import com.strategyquant.tradinglib.*;

classe pública AvgEdgeRatioByHour estende o TradeAnalysisChart {
    // Construtor de classes onde definimos o nome do snippet
    AvgEdgeRatioByHour() {
        this.name = L.tsq("Avg.Edge Ratio By Hour");
    }
    
    @Override
    Sorteio público de Quadros de Ordens (OrdensLista de ordens, byte plType, byte tradePeriodo) {
        // criando nova instância de gráfico
        BarChart gráfico = novo BarChart();
        
        chart.invertIfNegativo(true);
        
        if(order===nulo) {
            gráfico de retorno;
        }
        // criar array onde armazenamos os dados computados no método computeData
        double[] hours = computeData(ordens, plType, tradePeriod);
        
        // preencher tabela com valores de matriz
        for(int hora=0; hora<hora.duração; hora++) {
            // horas[hora]/horasConta[hora] calculamos a média da relação de borda por hora
            chart.addValue(L.tsq("Avg.Edge Ratio By Hour"), hora, horas[hora]/horaCount[hora])
        }

        gráfico de retorno;
    }
    // criar matriz para a contagem de ofícios
    int [] horasContar = nova int[24];
     
    private double[] computeData(Ordens OrdensListar ordens, byte plType, byte tradePeriodo) {
        //criar matriz onde armazenamos os resultados computados
        duplo[] horas = novo duplo[24];
        // valores definidos como padrão 0
        for(int hora=0; hora<hora.duração; hora++) {
            horas[hora]=0;
        }
        
        hora int;
        // aqui trabalhamos com ordens OrdensLista de ordens
        for(int i = 0; i < order.size(); i++) {
            Order order = ordens.get(i);
            
            hora = SQTime.getHour(order.getTimeByPeriodType(tradePeriod)); //0-23

            duplo mae = encomenda.PipsMAE; //get order MAE em pips
            duplo mfe = encomendar.PipsMFE; // obter encomenda MAE em pips
            duplo atrOnOpen = encomendar. ATROnOpen; // obter encomenda ATR em pips

            dupla normaMAE = mae/atrOnOpen; // normalizar MAE
            dupla normaMFE = mfe/atrOnOpen; // obter MFE normalizada

            eRTrade duplo = SQUtils.safeDivide(normMFE,normMAE); // SQUtils.safeDivide precede a exceção de divisão nula zero

            // relação de borda da loja para cada hora
            horas[hora]+= eRTrade;
            // contar o número de negócios para cada hora
            horasContar[hora]+=1;
        }

        horas de retorno;
    }
}

 

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

Assine
Notificação de
0 Comentários
Feedbacks em linha
Ver todos os comentários