Bom dia! Uma vela está faltando hoje (13/09/2021), para ser mais preciso a de 00:52 no gráfico de M1.
Não deveria ter ao menos um Doji ali? Observei que esse fenômeno é mais comum de segunda-feira nos primeiros 30 minutos. Mas porque isso foi acontecer com o mercado já em movimento? Porque não colocar apenas um doji para representar ausência de negociação? (um tracinho que seja) Isso quebra as minhas pernas no meu EA.
Coloquei linhas verticais separando de 5 em cinco minutos para ilustrar:
Meu EA separa as velas em grupos de 5. Minha matriz deveria considerar um doji (mesmo que o servidor não considere nada) nesses casos.
Alguma sugestão de como contornar isso?
Isto é em qual ativo?
É backtest, DEMO ou conta Real?
O ativo é líquido?
Momentos onde não há negociação deveria ter um buraco em branco, pois o MT5 preserva a escala de tempo.
;)
Isto é em qual ativo?
É backtest, DEMO ou conta Real?
O ativo é líquido?
Momentos onde não há negociação deveria ter um buraco em branco, pois o MT5 preserva a escala de tempo.
;)
- NZDUSD
- DEMO (MT5 da Metaquotes)
- Bem ele é um dos majors.
- Eu imaginei que isso se referia a um "mercado de balcão" (não sei se isso se aplica ao Forex) e portanto antecedendo a primeira vela do gráfico. Imaginei que quando o mercado já está rolando e NÃO há negociações, o MT5 colocava Doji. Se não é o caso, tenho de compensar isso com alguma função.
Resolvi aqu criando uma função que substitui a data ausente por uma data fake (uma totalmente irrelevante) usando contadores. Valeu pessoal!
Um exemplo aqui representando dojis e velas ausentes por 0, velas verdes por 1 e velas vermelhas por 2. O problema aqui é resolvido para as velas de segunda feira à 00:00 (elas estão ausentes em alguns pares, senão todos, não conferi):
//+------------------------------------------------------------------+ //| completaData.mq5 | //| Israel Teixeira de Andrade | //| tradermoderado.weebly.com | //+------------------------------------------------------------------+ #property copyright "Israel Teixeira de Andrade" #property link "tradermoderado.weebly.com" #property version "1.00" //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { datetime dataInicial = D'2021.01.18 00:00'; datetime dataFinal = D'2021.01.18 00:10'; datetime dataFake = D'1984.04.01 00:30'; MqlRates dadosVelas[]; int diferencaSegundos; int divisorPeriodo = 60; int diferencaVelas; int direcaoVelas[]; //--- Estabelece o divisor dos segundos de acordo com o timeframe if(Period() == PERIOD_M1) { divisorPeriodo = 60; } else if(Period() == PERIOD_M5) { divisorPeriodo = 300; } else if(Period() == PERIOD_M15) { divisorPeriodo = 900; } //--- Copia os dados das velas de acordo com o que é disponibilizado no servidor e isola o horário das mesmas CopyRates(Symbol(), Period(), dataInicial, dataFinal, dadosVelas); Print("Vetor Original:"); ArrayPrint(dadosVelas); //--- Confirma se o primeiro horário copiado é diferente do proposto e calcula a diferença em segundos if(dadosVelas[0].time > dataInicial) { Print("Diferença de horários! Ajustando..."); diferencaSegundos = (int) dadosVelas[0].time - (int) dataInicial; } else if(dadosVelas[0].time < dataInicial) { Print("Diferença de horários! Ajustando..."); diferencaSegundos = (int) dataInicial - (int) dadosVelas[0].time; } else { Print("Tudo ok, não há necessidade de ajuste."); diferencaSegundos = 0; } Print("diferencaSegundos: ", diferencaSegundos); //--- Cálculo da diferença em número de velas: diferencaVelas = diferencaSegundos / divisorPeriodo; Print("diferencaVelas: ", diferencaVelas); //--- Aumenta o tamanho do vetor de acordo com o número de elementos faltantes ArrayResize(dadosVelas, (ArraySize(dadosVelas) + diferencaVelas), 0); Print("Vetor Aumentado:"); ArrayPrint(dadosVelas); //--- Move os elementos da vetor para a direita (liberando os espaços iniciais) for(int i = ArraySize(dadosVelas) - 1; i - diferencaVelas >= 0; i--) { dadosVelas[i] = dadosVelas[i - diferencaVelas]; } Print("Vetor Deslocado:"); ArrayPrint(dadosVelas); //--- Substitui os primeiros elementos por uma data falsa for(int i = 0; i < diferencaVelas; i++) { dadosVelas[i].time = dataFake; } Print("Vetor editado com data falsa nos primeiros índices:"); ArrayPrint(dadosVelas); ArrayResize(direcaoVelas, ArrayRange(dadosVelas, 0), 0); //--- Estabelece a direção das velas for(int i = 0; i < ArraySize(dadosVelas); i++) { if(dadosVelas[i].time != dataFake) { if(dadosVelas[i].close > dadosVelas[i].open) { direcaoVelas[i] = 1; } else if(dadosVelas[i].close < dadosVelas[i].open) { direcaoVelas[i] = 2; } else if(dadosVelas[i].close == dadosVelas[i].open) { direcaoVelas[i] = 0; } } else { direcaoVelas[i] = 0; } } //--- Substitui os primeiros dados por datas reais for(int i = diferencaVelas - 1; i >= 0 ; i--) { dadosVelas[i].time = dadosVelas[i + 1].time - divisorPeriodo; } Print("dadosVelas:"); ArrayPrint(dadosVelas); Print("direcaoVelas:"); ArrayPrint(direcaoVelas); } //+------------------------------------------------------------------+Mereço publicar um artigo? :P
Note que isso resolve as datas faltantes no começo e cria um vetor com a direção de velas "fantasmas". Criei um outro script/função que resolve caso o problemas seja no meio (como no exemplo inicial), se alguém tiver interesse em conferir posto aqui também, um abraço!
![MQL5 - Linguagem para estratégias de negociação inseridas no terminal do cliente MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso
Bom dia! Uma vela está faltando hoje (13/09/2021), para ser mais preciso a de 00:52 no gráfico de M1.
Não deveria ter ao menos um Doji ali? Observei que esse fenômeno é mais comum de segunda-feira nos primeiros 30 minutos. Mas porque isso foi acontecer com o mercado já em movimento? Porque não colocar apenas um doji para representar ausência de negociação? (um tracinho que seja) Isso quebra as minhas pernas no meu EA.
Coloquei linhas verticais separando de 5 em cinco minutos para ilustrar:
Meu EA separa as velas em grupos de 5. Minha matriz deveria considerar um doji (mesmo que o servidor não considere nada) nesses casos.
Alguma sugestão de como contornar isso?