Fala pessoal, tudo bem?
Sou iniciantíssimo na linguagem MQL5 e até cheguei a achar algumas respostas no fórum só que não consegui encaixar na minha programação.
O que procuro é uma forma de marcar o primeiro candle de 6 minutos do dia. Li muitos artigos mas confesso estar sendo bem complexo pra mim.
Se alguém conseguir destrinchar bem a respeito eu agradeço muito.
Se você não sabe programar, te aconselho o Marketplace...
Fala pessoal, tudo bem?
Sou iniciantíssimo na linguagem MQL5 e até cheguei a achar algumas respostas no fórum só que não consegui encaixar na minha programação.
O que procuro é uma forma de marcar o primeiro candle de 6 minutos do dia. Li muitos artigos mas confesso estar sendo bem complexo pra mim.
Se alguém conseguir destrinchar bem a respeito eu agradeço muito.
Angelo,
Sua busca no fórum precisa ser dividido em duas partes dai você vai conseguir alcançar o que deseja:
1o parte: Procure como pegar o primeiro candle do dia, independente do timeframe dele, mas ignore os exemplos que pegam com timeframe D1 pois esse não precisa de lógica alguma, se só tem 1 candle então só pode ser ele. Dica: Você achará vários exemplos usando datetime start = (datetime) (86400*(((ulong)TimeCurrent())/86400));. Veja os exemplos, teste e coloque em prática para o seu gráfico de timeline de M6.
2o. parte: é então usar o MQLRates ou iClose, iOpen, etc para pegar a informação do candle inicial.
Esse foi um dos exemplos, mas ainda teria outras formas, tem vários e vários exemplos no fórum precisa só pesquisar mais, abrir o MetaEditor e começar a testá-los.
O que fiz, porém não retornou bem o que eu queria:
void OnTick(){ datetime start1 = StringToTime("10:00"); datetime stop1 = start1 + PeriodSeconds(PERIOD_M6); CopyRates(Symbol(), PERIOD_M6, stop1, 3, rates1); // Fixar primeiro candle de M6 datetime start = StringToTime("09:00"); datetime stop = start + PeriodSeconds(PERIOD_M6); CopyRates(Symbol(), PERIOD_M6, start, stop, rates); static double maxima = rates[0].high; static double fechamento = rates[0].close; static double abertura = rates[0].open; static double minima = rates[0].low; static double media = (MathAbs(fechamento + abertura)/2) * _Point; static double amplitudecorpo = MathAbs(abertura - fechamento); static double amplitudetotal = MathAbs(minima - maxima);
Fala pessoal, tudo bem?
Sou iniciantíssimo na linguagem MQL5 e até cheguei a achar algumas respostas no fórum só que não consegui encaixar na minha programação.
O que procuro é uma forma de marcar o primeiro candle de 6 minutos do dia. Li muitos artigos mas confesso estar sendo bem complexo pra mim.
Se alguém conseguir destrinchar bem a respeito eu agradeço muito.
Tenho um código aqui que faz o que você está caçando. Esse método verifica o primeiro candle do dia não importa o time frame.
Se o dia anterior for menor que agora, então hoje é um novo dia.
// VERIFICA SE HOJE É UM NOVO DIA. bool EhHojeUmNovoDia() { static datetime DiaAnterior; if(DiaAnterior < iTime(NULL, PERIOD_D1, 0)) { DiaAnterior = iTime(NULL, PERIOD_D1, 0); return(true); } else { return(false); } }
Mas seguindo a linha do gerar conteudo util aos futuros usuarios, segue alguma coisa que fiz que funcionou aqui. Esse modelo rapido que fiz ai, achei que ainda tem algo pra melhorar, primeiro no backtest ele pega certinho o horario inicio do dia, pois o candle do dia comeca as 9 da manha, mas o REAL ele retorna horario 00:00. Lembrando que esse modelo que fiz tem o objetivo de pegar o GAP de virada, e o horario inicio do dia pois se houver algum feriado de meio periodo como o Carnaval, o inicio do dia sera 13 horas e com isso quero ver se pego esse horario corretamente para fazer um delay de abertura para o sistema baseado no GAP de abertura. Quanto maior o GAP maior o delay para previnir ruidos nos indicadores. Segundo problema eh que se eu abrir sistema no meio do dia, ele pega essa data inicio tambem errada apesar que o candle do dia seria do inicio ao fim (data atual). Alguma ideia por ai pessoal? Tava pensando mais como poderiamos resolver onde o codigo nao seja um FOR navegando pelos candles ou qualquer coisa similar.
//+------------------------------------------------------------------+ //| RETORNA O TAMANHO DO GAP DE ABERTURA DO DIA CORRENTE | //+------------------------------------------------------------------+ double getGAPAberturaEmPips() { // SE AINDA NAO CALCULOU O GAP DE ABERTURA - DATA DO CALCULO DE GAP DIFERENTE DA DATA DO DIA ATUAL if (TimeToString(dataCalculoGAPAbertura, TIME_DATE) != TimeToString(TimeCurrent(), TIME_DATE)) { // LOCAL PARA ARMAZENAR OS DADOS PARA LEITURA POSTERIOR MqlRates rates[]; // COPIA DADOS DOS CANDLES DE 1 DIA, O ATUAL E ANTERIOR CopyRates(Symbol(), PERIOD_D1, 0, 2, rates); // VALIDA DIFERENCA DE VALORES PARA SEMPRE RETORNAR POSITIVO if (rates[1].open > rates[0].close) gapAbertura = rates[1].open - rates[0].close; else gapAbertura = rates[0].close - rates[1].open; dataCalculoGAPAbertura = TimeCurrent(); horaInicioDia = rates[1].time; } return gapAbertura; }
- 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
Fala pessoal, tudo bem?
Sou iniciantíssimo na linguagem MQL5 e até cheguei a achar algumas respostas no fórum só que não consegui encaixar na minha programação.
O que procuro é uma forma de marcar o primeiro candle de 6 minutos do dia. Li muitos artigos mas confesso estar sendo bem complexo pra mim.
Se alguém conseguir destrinchar bem a respeito eu agradeço muito.