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

