Preço de abertura

 

Boa Tarde


Estou com dificuldade de obter o preço de abertura do pregão.

Eu uso o código abaixo, porem sempre está retornando zerado.

abertura = SymbolInfoDouble (ativo,SYMBOL_SESSION_OPEN);


Usei a mesma linha de raciocínio nos código  abaixo e funcionou perfeitamente

    ask = SymbolInfoDouble(ativo,SYMBOL_ASK);
    bid = SymbolInfoDouble(ativo,SYMBOL_BID);
    max = SymbolInfoDouble(ativo,SYMBOL_BIDHIGH);
    last = SymbolInfoDouble(ativo, SYMBOL_LAST);


Se alguém puder me ajudar, agradeço de coração. 

 
Renan Augusto:

Boa Tarde


Estou com dificuldade de obter o preço de abertura do pregão.

Eu uso o código abaixo, porem sempre está retornando zerado.

abertura = SymbolInfoDouble (ativo,SYMBOL_SESSION_OPEN);


Usei a mesma linha de raciocínio nos código  abaixo e funcionou perfeitamente

    ask = SymbolInfoDouble(ativo,SYMBOL_ASK);
    bid = SymbolInfoDouble(ativo,SYMBOL_BID);
    max = SymbolInfoDouble(ativo,SYMBOL_BIDHIGH);
    last = SymbolInfoDouble(ativo, SYMBOL_LAST);


Se alguém puder me ajudar, agradeço de coração. 

Convém alertar a corretora, pois SYMBOL_OPEN_SESSION deveria conter o preço de abertura e talvez isso seja um lapso na configuração do servidor MT5.

Enquanto o problema não estiver resolvido, uma forma alternativa de obter o preço de abertura seria usar a função CopyTicks()

Vc preenche no argumento "flags" a constante COPY_TICKS_TRADE, para capturar somente os ticks referentes a trades executados, e no argumento "from_msc" vc coloca 1000*86400*(TimeCurrent()/86400), para pegar ticks a partir da meia-noite da data atual.

Daí, o primeiro elemento de "tick_array" corresponderá ao primeiro negócio efetuado no dia e o campo "last" deste elemento conterá o valor deste primeiro negócio, ou seja, o preço de abertura.

Resumindo:

MqlTick tick_array[];
CopyTicks ( Symbol() , tick_array , COPY_TICKS_TRADE , 1000*86400*(TimeCurrent()/86400) );
double preco_abertura = tick_array[0].last;

Talvez haja algum jeito mais simples que esse de obter o preço de abertura sem usar SYMBOL_OPEN_SESSION, mas esse jeito que descrevi, embora meio complicado, certamente vai funcionar.

 
Renan Augusto:

Boa Tarde


Estou com dificuldade de obter o preço de abertura do pregão.

Eu uso o código abaixo, porem sempre está retornando zerado.

abertura = SymbolInfoDouble (ativo,SYMBOL_SESSION_OPEN);


Usei a mesma linha de raciocínio nos código  abaixo e funcionou perfeitamente

    ask = SymbolInfoDouble(ativo,SYMBOL_ASK);
    bid = SymbolInfoDouble(ativo,SYMBOL_BID);
    max = SymbolInfoDouble(ativo,SYMBOL_BIDHIGH);
    last = SymbolInfoDouble(ativo, SYMBOL_LAST);


Se alguém puder me ajudar, agradeço de coração. 

Qual sua corretora?

double abertura=SymbolInfoDouble(_Symbol,SYMBOL_SESSION_OPEN); 

Eu utilizo da forma acima e sempre retorna corretamente nas corretoras da B3.

As observacoes do @Trader_Patinhas foram pontuais.

Outra forma seria (se você utilizar TimeFrame Diário):

ArraySetAsSeries(candle,true);   
ResetLastError();
CopyRates(_Symbol,_Period,0,5,candle);
double abertura = candle[0].open;

[ ]'s

 
Joscelino Celso de Oliveira:

Qual sua corretora?

Eu utilizo da forma acima e sempre retorna corretamente nas corretoras da B3.

As observacoes do @Trader_Patinhas foram pontuais.

Outra forma seria (se você utilizar TimeFrame Diário):

[ ]'s

Na verdade eu também só utilizo SYMBOL_SESSION_OPEN, nunca fiz de outro jeito ... mas, como o OP relata que na corretora dele está retornando zero, pensei naquela forma alternativa pra ele contornar o problema.
 
Joscelino Celso de Oliveira:

Qual sua corretora?

Eu utilizo da forma acima e sempre retorna corretamente nas corretoras da B3.

As observacoes do @Trader_Patinhas foram pontuais.

Outra forma seria (se você utilizar TimeFrame Diário):

[ ]'s

Eu uso a Rico para fazer backtest.Porém quando coloco na produção eu rodo na modal.

(como retornou zero, não achei por bem colocar para rodar na produção desta maneira na modal)


@Trader_Patinhas e @Joscelino Celso de Oliveira alguém de vcs usa modal?

Vou testar as duas soluções para implementar, ainda não consegui tempo, ai todo dia de manhã eu to colocando na mão rapidão.


Vcs acha melhor eu fazer backtest na mesma corretora que roda o robo?


Desde já agradeço a atenção.

 
Renan Augusto:

Eu uso a Rico para fazer backtest.Porém quando coloco na produção eu rodo na modal.

(como retornou zero, não achei por bem colocar para rodar na produção desta maneira na modal)


@Trader_Patinhas e @Joscelino Celso de Oliveira alguém de vcs usa modal?

Vou testar as duas soluções para implementar, ainda não consegui tempo, ai todo dia de manhã eu to colocando na mão rapidão.


Vcs acha melhor eu fazer backtest na mesma corretora que roda o robo?


Desde já agradeço a atenção.


Acabei de testar o script abaixo na Modal e funcionou perfeitamente:

void OnStart()
{
        double preco_abertura = SymbolInfoDouble (Symbol(),SYMBOL_SESSION_OPEN);
        printf( "Preço de abertura: %f", preco_abertura );   
}


Quanto ao backtest, acho que tanto faz, desde que ambas as corretoras tenham um histórico íntegro ... mas eu não uso a ferramenta de teste nativa do MT5, então melhor ouvir a opinião de quem usa, pode ter algum "bizú" que eu não saiba.

 
Trader_Patinhas:


Acabei de testar o script abaixo na Modal e funcionou perfeitamente:


Quanto ao backtest, acho que tanto faz, desde que ambas as corretoras tenham um histórico íntegro ... mas eu não uso a ferramenta de teste nativa do MT5, então melhor ouvir a opinião de quem usa, pode ter algum "bizú" que eu não saiba.

Bom Dia


@Trader_Patinhas vc testou com mercado em aberto na demo ou na real esse script?


Eu pergunto pq cara fiz tudo que era possível e aqui não rodou, contratei o meta demo da modal e nada de funcionar.

Percebi que desta lista do link abaixo, apenas os recursos do "tipo" session não funcionava no código, todos retornando com valor zero

https://www.mql5.com/pt/docs/constants/environment_state/marketinfoconstants

pesquisando no forum  sobre o tema "Session" encontrei um colega  com  um relato  interessante.

Ele faz  o mesmo questionamento, o diferente é que ele observou que só funcionava com ele em modo real ou demo, em backtest não funciona.

Vou testar se isso procede na segunda-feira com mercado aberto, mas como vc já testou isso no meio de semana, se vc puder informar como vc testou fico agradecido.

Segue o link abaixo do post em questão

https://www.mql5.com/pt/forum/92008


Agradeço a sua atenção.


att


Renan Augusto

 
Renan Augusto:

Bom Dia


@Trader_Patinhas vc testou com mercado em aberto na demo ou na real esse script?


Eu pergunto pq cara fiz tudo que era possível e aqui não rodou, contratei o meta demo da modal e nada de funcionar.

Percebi que desta lista do link abaixo, apenas os recursos do "tipo" session não funcionava no código, todos retornando com valor zero

https://www.mql5.com/pt/docs/constants/environment_state/marketinfoconstants

pesquisando no forum  sobre o tema "Session" encontrei um colega  com  um relato  interessante.

Ele faz  o mesmo questionamento, o diferente é que ele observou que só funcionava com ele em modo real ou demo, em backtest não funciona.

Vou testar se isso procede na segunda-feira com mercado aberto, mas como vc já testou isso no meio de semana, se vc puder informar como vc testou fico agradecido.

Segue o link abaixo do post em questão

https://www.mql5.com/pt/forum/92008


Agradeço a sua atenção.


att


Renan Augusto

Oi Renan.

Foi na conta real da Modal.

Repeti o teste agora (sábado), com o mercado fechado, e continua funcionando.

No teste que fiz agora ele mostra o preço da abertura do dia de ontem (sexta-feira), o que é o esperado, pois, como não deve ter havido nenhum tick no sábado, o tick mais recente que ele pega é de sexta-feira, daí ele trunca o horário inicial pra 00:00 e pega o valor do primeiro negócio da sexta-feira.

Quando você diz que "não roda", o que isso significa? Que mensagem de erro aparece? Se puder postar uma imagem da tela mostrando o que acontece quando vc tenta rodar, talvez consigamos descobrir o problema. 

 


Depende rsrsrs, ex: esse código abaixo com os parâmetros do backtest, inicia o backtest certinho, mas conforme o print abaixo retorna o valor 0.000


//+------------------------------------------------------------------+
//|                                                        teste.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---


   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

  double preco_abertura = SymbolInfoDouble (Symbol(),SYMBOL_SESSION_OPEN);
        printf( "Preço de abertura: %f", preco_abertura );  
   
  }
//+------------------------------------------------------------------+




Agora se eu uso dentro do OnStart igual no seu exemplo, o código compila, mas o backtest não executa

//+------------------------------------------------------------------+
//|                                                        teste.mq5 |
//|                        Copyright 2019, MetaQuotes Software Corp. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2019, MetaQuotes Software Corp."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---


   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {

 
   
  }
//+------------------------------------------------------------------+

void OnStart()
{
        double preco_abertura = SymbolInfoDouble (Symbol(),SYMBOL_SESSION_OPEN);
        printf( "Preço de abertura: %f", preco_abertura );   
}


Apresenta o seguinte erro abaixo



Posso gravar um vídeo tbm, sem problemas.

Abaixo print dos parâmetros que eu uso para rodar o backtest.


Descubra novos recursos para o MetaTrader 5 com a comunidade e os serviços MQL5
Descubra novos recursos para o MetaTrader 5 com a comunidade e os serviços MQL5
  • www.mql5.com
Tire dúvidas sobre análise técnica, fale com outros traders sobre sistemas de negociação e melhore suas habilidades de programação de estratégias em linguagem MQL5. Participe do fórum, compartilhe ideias com traders de todo o mundo e ajude com feedback os novatos — nossa comunidade está crescendo junto com você. Preço de abertura Boa Tarde...
 
Renan Augusto:


Depende rsrsrs, ex: esse código abaixo com os parâmetros do backtest, inicia o backtest certinho, mas conforme o print abaixo retorna o valor 0.000





Agora se eu uso dentro do OnStart igual no seu exemplo, o código compila, mas o backtest não executa


Apresenta o seguinte erro abaixo



Posso gravar um vídeo tbm, sem problemas.

Abaixo print dos parâmetros que eu uso para rodar o backtest.


Ah, agora que eu entendi o que está acontecendo com você.

Em primeiro lugar, o evento OnStart() só é válido para scripts. Eu testei num script, e não num EA. A ideia era você transplantar o código que lê o preço de abertura pra dentro do seu EA, no evento OnInit().

Um EA não pode ter OnStart(). É por isso que não carrega o executável.

Apaga o OnStart() e insere o comando dentro do OnInit() que vai funcionar na conta real e na conta demo.

Quanto ao backtest, pela imagem vejo que está retornando sempre zero. Talvez a ferramenta de teste não dê suporte à leitura dessas propriedades do terminal. Não tenho muito como te ajudar porque não uso a ferramenta de backtest nativa do MT5, faço meus backtests de outra forma.

Deixo pra alguém que conheça melhor a ferramenta te responder.

 
Trader_Patinhas:

Ah, agora que eu entendi o que está acontecendo com você.

Em primeiro lugar, o evento OnStart() só é válido para scripts. Eu testei num script, e não num EA. A ideia era você transplantar o código que lê o preço de abertura pra dentro do seu EA, no evento OnInit().

Um EA não pode ter OnStart(). É por isso que não carrega o executável.

Apaga o OnStart() e insere o comando dentro do OnInit() que vai funcionar na conta real e na conta demo.

Quanto ao backtest, pela imagem vejo que está retornando sempre zero. Talvez a ferramenta de teste não dê suporte à leitura dessas propriedades do terminal. Não tenho muito como te ajudar porque não uso a ferramenta de backtest nativa do MT5, faço meus backtests de outra forma.

Deixo pra alguém que conheça melhor a ferramenta te responder.


Trader_Patinhas, qual ferramenta você usa para fazer backtest ?

Razão: