Como pegar a data que a EA está rodando.

 

Galera,


Estou rodando uma EA na conta demo para um determinado período, com a intenção de validar uma estratégia de bandas de bolinger.

O problema eh que as bandas variam no dia a dia e eu fiz um código usando switch para variar as bandas inferiores e superiores de acordo com o dia, porém eu não consigo retornar a data que a EA está rodando.

Estou usando o TimeCurrent(), mas está retornando somente a data atual. Como faço para pegar a data que a EA está naquele momento dentro do período que eu selecionei?

Por exemplo: 02/01/2019, 03/01/2019 e assim sucessivamente até o fim do período que eu selecionei.


Segue o trecho do código que eu estou usando e não está funcionando.


void ParametrizaBandas()
{
   MqlDateTime DataAtual;
   datetime TesteData= ;
   TimeCurrent(DataAtual);
   TimeToStruct(TesteData, DataAtual);
         
   switch (DataAtual.day_of_year + 1)
   {   
      case 193:  dBandaSuperior = 1.053; dBandaInferior = 1.009; break; // 12/07/2019
      case 192:  dBandaSuperior = 1.054; dBandaInferior = 1.010; break;
      case 191:  dBandaSuperior = 1.057; dBandaInferior = 1.008; break;
      default: dBandaSuperior = 0; dBandaInferior = 0; dMedia = 0; break;
   }
}
 
LeandroCD:

Galera,


Estou rodando uma EA na conta demo para um determinado período, com a intenção de validar uma estratégia de bandas de bolinger.

O problema eh que as bandas variam no dia a dia e eu fiz um código usando switch para variar as bandas inferiores e superiores de acordo com o dia, porém eu não consigo retornar a data que a EA está rodando.

Estou usando o TimeCurrent(), mas está retornando somente a data atual. Como faço para pegar a data que a EA está naquele momento dentro do período que eu selecionei?

Por exemplo: 02/01/2019, 03/01/2019 e assim sucessivamente até o fim do período que eu selecionei.


Segue o trecho do código que eu estou usando e não está funcionando.


Oi. Já tentou olhar pela data do candle?

 
LeandroCD:

Galera,


Estou rodando uma EA na conta demo para um determinado período, com a intenção de validar uma estratégia de bandas de bolinger.

O problema eh que as bandas variam no dia a dia e eu fiz um código usando switch para variar as bandas inferiores e superiores de acordo com o dia, porém eu não consigo retornar a data que a EA está rodando.

Estou usando o TimeCurrent(), mas está retornando somente a data atual. Como faço para pegar a data que a EA está naquele momento dentro do período que eu selecionei?

Por exemplo: 02/01/2019, 03/01/2019 e assim sucessivamente até o fim do período que eu selecionei.


Segue o trecho do código que eu estou usando e não está funcionando.


Olá  LeandroCD, acredito que você está confundindo um pouco vários conceitos.

Por exemplo, em relação às funções relacionados ao tempo, você está partindo do tempo real e forçando um código com uma série de valores hard coded que provavelmente irão exigir você recompilar o programa constantemente.

Outro exemplo é que quando refere a variar as bandas, provavelmente o que você está querendo dizer é variar os seus gatilhos para os valores do indicador, afinal, quem varia as bandas é o mercado, dentro evidentemente do seu setup atual para o indicador.

Outro ponto relevante é que, independentemente de seu código estar sendo testado em conta demonstração, por backtesting ou conta real, não vejo lógica de que ele seja diferente ou engessado a uma condição ou ambiente operacional específico.

Dito isso, e agora em relação ao seu objetivo, problema e ponto principal, note que, apesar de ser possível, pode ser bem complexo você trabalhar com funções a partir da data atual, como a TimeCurrent(), com a última data do servidor, ou TimeLocal(), com a última data local, para fazer o que está buscando, que é analisar valores do indicador no passado, em determinadas faixas de tempo.

Recomendo para isso estudares a função CopyTime() em https://www.mql5.com/pt/docs/series/copytime , que me parece a mais apropriada para você fazer essa análise baseada em dados passados, cruzando valores do indicador com o tempo preciso, com um código que irá funcionar em qualquer período ou ambiente de testes (backtesting, demo ou real).

Se desejares estudar melhor esses conceitos, não apenas para melhorar seu código, deixando ele mais parametrizável, mas também futuros desenvolvimentos, recomendo também o artigo abaixo, que analisa várias funções relacionadas à gestão do tempo no MQL.

FUNDAMENTOS BÁSICOS DA PROGRAMAÇÃO MQL5: TEMPO
https://www.mql5.com/pt/articles/599

Espero ter ajudado, mas qualquer dificuldade a mais é só avisar.

Sds.,
Rogério Figurelli
Documentação sobre MQL5: Séries Temporais e Acesso a Indicadores / CopyTime
Documentação sobre MQL5: Séries Temporais e Acesso a Indicadores / CopyTime
  • www.mql5.com
A função obtém em time_array o histórico de dados da hora de abertura de barras para o par ativo-período especificado na quantidade especificada. Deve ser notado que a ordenação dos elementos Se você souber a quantidade de dados que você precisa para copiar, é melhor usar um buffer alocado estaticamente, a fim de evitar a alocação de memória...
Razão: