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
Conteúdo da página
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
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