EA que opera na abertura do preço

 

Bom dia pessoal, 

sou iniciante em programação de mql5, gostaria de pedir uma ajuda minha ideia /estratégia seria de uma EA que na abertura do preço por ex: H1 se o preço for maior que abertura da vela ele abre uma compra e só irá fecha se o preço vier abaixo da abertura ou seja se preço não voltar para abertura e irá até o fechamento da vela e só irá fechar na próxima vela que ao abrir  e o preço vier abaixo da abertura assim ele fecha a ordem, isso vale na venda também.

 
nixon pires:

Bom dia pessoal, 

sou iniciante em programação de mql5, gostaria de pedir uma ajuda minha ideia /estratégia seria de uma EA que na abertura do preço por ex: H1 se o preço for maior que abertura da vela ele abre uma compra e só irá fecha se o preço vier abaixo da abertura ou seja se preço não voltar para abertura e irá até o fechamento da vela e só irá fechar na próxima vela que ao abrir  e o preço vier abaixo da abertura assim ele fecha a ordem, isso vale na venda também.

Bom dia.

Minha sugestão é que você procure EAs já prontos (existem pagos mas também gratuitos) aqui no BR que sejam parametrizaveis. Mesmo os EAs pagos permitem backteste gratuito, então acredito ser a melhor solução.

Aí você configura e roda um backteste com sua estratégia.

Se ficar interessante você pode abrir um job aqui no freelancer para alguém fazer o EA para você (ou continuar usando no EA que você testou).

Espero ter ajudado.

Sucesso e bons trades.
 
nixon pires:

Bom dia pessoal, 

sou iniciante em programação de mql5, gostaria de pedir uma ajuda minha ideia /estratégia seria de uma EA que na abertura do preço por ex: H1 se o preço for maior que abertura da vela ele abre uma compra e só irá fecha se o preço vier abaixo da abertura ou seja se preço não voltar para abertura e irá até o fechamento da vela e só irá fechar na próxima vela que ao abrir  e o preço vier abaixo da abertura assim ele fecha a ordem, isso vale na venda também.

Ah, sem querer ser chato.... Você não pediu uma ajuda, certo? Pela postagem parece que você quer o EA pronto... Por isso a minha sugestão de contratar alguém ou usar um EA já pronto.
 
nixon pires:

Bom dia pessoal, 

sou iniciante em programação de mql5, gostaria de pedir uma ajuda minha ideia /estratégia seria de uma EA que na abertura do preço por ex: H1 se o preço for maior que abertura da vela ele abre uma compra e só irá fecha se o preço vier abaixo da abertura ou seja se preço não voltar para abertura e irá até o fechamento da vela e só irá fechar na próxima vela que ao abrir  e o preço vier abaixo da abertura assim ele fecha a ordem, isso vale na venda também.

Procura essa pagina aqui https://www.mql5.com/pt/docs/constants/structures/mqlrates para começar a estruturar sua EA.

grande abraço!

Documentação sobre MQL5: Constantes, Enumeradores e Estruturas / Estruturas de Dados / Estrutura de Dados Históricos
Documentação sobre MQL5: Constantes, Enumeradores e Estruturas / Estruturas de Dados / Estrutura de Dados Históricos
  • www.mql5.com
Estrutura de Dados Históricos - Estruturas de Dados - Constantes, Enumeradores e Estruturas - Referência MQL5 - Referência sobre algorítimo/automatização de negociação na linguagem para MetaTrader 5
 
Ricardo Branco #:
Ah, sem querer ser chato.... Você não pediu uma ajuda, certo? Pela postagem parece que você quer o EA pronto... Por isso a minha sugestão de contratar alguém ou usar um EA já pronto.
Vc pode ter se equivocado na interpretação!! Como eu disse não tenho conhecimento e estou começando a entender a linguagem mql5, a ajuda que estou pedindo é nesse ponto de declarar preço de abertura e enviar a ordem...desnecessário seu comentário quando não se de pode contribuir. Valeu 
 
Tem esse EA de domínio público... Faça uma revisão na função (objeto) Strategy dentro da classe... ele está escrito para pegar o segundo candle do dia e só funciona no mini índice; mas com pouca modificação vc consegue implementar sua ideia nele, eu acho. Talvez seja interessante especificar que ativo vc gostaria de operar, pois na B3 tem diferença a programação para cada ativo. Boa sorte. Entro pouco aqui, mas se puder ajudar de alguma forma mais pode contar comingo. A classe ClassExemplo.mqh e o arquivo de inclusão IncExemplo.mqh devem ser salvos na pasta include do seu Metatreder5, e o EA Exemplo.mq5 deve ser salvo na pasta Experts/Advisors. Procure entender tudo que foi feito e o pq de cada coisa nesse EA para fazer a modificação que atenda seu setup. Não esqueça de compilar todos antes de rodar e só coloque em conta real depois de, no mínimo, um mês de testes em conta demo. Tire suas dúvidas aqui >>>: https://www.mql5.com/pt/docs
/*
████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████
██████████████████████████████          ██████          ████████          ██████████████████████
█████████████████████████████  ██████  ███████████  ███████████  ███████████████████████████████
████████████████████████████  ██████  ███████████  ███████████  ████████████████████████████████
███████████████████████████  ██████  ███████████  ███████████  █████████████████████████████████
██████████████████████████          ███████████  ███████████          ██████████████████████████
█████████████████████████  ██████  ███████████  ███████████████████  ███████████████████████████
████████████████████████  ██████  ███████████  ███████████████████  ████████████████████████████
███████████████████████  ██████  ███████████  ███████████████████  █████████████████████████████
██████████████████████  ██████  ███████████  ███████████          ██████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████
██     █ ███ █     █     █ ███ █     █     █     █   ████     █    ██     █    ██ █ ███ █     ██
██ ███ █ ███ ███ ███ ███ █  █  █ ███ ███ ███ █████ ██ █████ ███ ███ █ ███ █ ███ █ █  ██ █ ██████
██     █ ███ ███ ███ ███ █ █ █ █     ███ ███    ██ ██ █████ ███   ███     █ ███ █ █ █ █ █ ██  ██
██ ███ █ ███ ███ ███ ███ █ ███ █ ███ ███ ███ █████ ██ █████ ███ ██ ██ ███ █ ███ █ █ ██  █ ███ ██
██ ███ █     ███ ███     █ ███ █ ███ ███ ███     █   ██████ ███ ███ █ ███ █    ██ █ ███ █     ██
████████████████████████████████████████████████████████████████████████████████████████████████
████████████████████████████████████████████████████████████████████████████████████████████████
+----------------------------------------------------------------------------------------------+
|                                                                                 Exemplo.mq5  |
|                                                             Copyright 2022, MetaQuotes Ltd.  |
|                                                                        https://www.mql5.com  |
+----------------------------------------------------------------------------------------------+
*/
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
#include <IncExemplo.mqh>
#include <ClassExemplo.mqh>
/**/      ClassExemplo Ex;
/*

+----------------------------------------------------------------------------------------------+
| Inputs                                                                                       |
+----------------------------------------------------------------------------------------------+
*/
input group   "SCHEDULES"
input H_EA    h_un_inic       = h550;  //Time start
input H_EA    h_un_fim        = h1065; //Time end
input group   "INDICATORS/STRATEGY"
input Y_N     Panel_look      = yes_;  //Show panel?
input z_100   Maximum_lots    = z5;    //Maximum lots
input R_10000 Warranty        = r3000; //Lot guarantee
input z_100   ping_           = z15;   //Update OnTimer (ping)
input group   "BREAKEVEN/TRAILINGSTOP"
input n_2020  Gatilho_Bk_Sl   = n65;   //Change/Walk SL points?
input z_100   Pts_no_Positivo = z5;    //How many profit points SL?
input z_100   Andar_SL        = z5;    //SL adjustment steps
input n_2020  max_rollback    = n300;  //Maximum rollback
/*

+----------------------------------------------------------------------------------------------+
| Expert initialization function                                                               |
+----------------------------------------------------------------------------------------------+
*/
int OnInit()
  {
//input validity check
   if(!Sets())
      return(INIT_FAILED);
//--- create timer
   EventSetTimer(ping_);
   if(Ex.p_AtsOnInit()!=0)
      return(INIT_FAILED);
   if(Panel_look==1)
      Ex.p_Panel();
   return(INIT_SUCCEEDED);
  }
/*

+----------------------------------------------------------------------------------------------+
| Expert deinitialization function                                                             |
+----------------------------------------------------------------------------------------------+
*/
void OnDeinit(const int reason)
  {
   Ex.p_AtsDeinitReason(reason);
  }
/*

+----------------------------------------------------------------------------------------------+
| Expert tick function                                                                         |
+----------------------------------------------------------------------------------------------+
*/
void OnTick()
  {
//Calc_();
   TimeLocal(dtime);
   h_loc_Atual=(dtime.hour*60)+dtime.min;//Current time in minutes acquired from PC.
   Ex.p_H_loc_Atual(h_loc_Atual);
//CopyRates(simbol_atual,periodo_atual,0,1,rt);
//if(!NewBar(rt[0].time))
//   return;
   if(positions_atual>0)
      Ex.p_MoverStopLoss();
   ontime_free=true;
   if(positions_atual==0)
      Ex.p_Strategy();
  }
/*
+----------------------------------------------------------------------------------------------+
| Timer function                                                                               |
+----------------------------------------------------------------------------------------------+
*/
void OnTimer()
  {
   if(ontime_free)
     {if(Panel_look==1) {Ex.p_Panel(); Ex.p_TimeControl();}}
   if(positions_atual>0)
     {Ex.p_Verific_reverse();}
   ontime_free=false;
  }
/*
+----------------------------------------------------------------------------------------------+
| OnTrade()                                                                                    |
+----------------------------------------------------------------------------------------------+
*/
void OnTrade(void)
  {
   positions_atual=PositionsTotal();
   Print("An OnTrade event has occurred <<<=======",IntegerToString(dtime.hour,0),
         ":",IntegerToString(dtime.min,0));
   Ex.p_EquityManagement();//Financial loss verification
  }
/*

+----------------------------------------------------------------------------------------------+
| Sets                                                                                         |
+----------------------------------------------------------------------------------------------+
*/
bool Sets()
  {
   bool resp=false;
   Ex.p_Setx(h_un_inic,
             h_un_fim,
             Maximum_lots,
             Warranty,
             max_rollback,
             Gatilho_Bk_Sl,
             Andar_SL);
//input validity check
   if(h_un_inic>=h_un_fim)
     {Alert("Verifique horários inseridos!"); resp=false;}
   else
      resp=true;
   return(resp);
  }
//End EA.
//+--------------------------------------------------------------------------------------------+


Dentro da classe vc precisa modificar essa parte;

//+------------------------------------------------------------------+
//| Strategy                                                         |
//+------------------------------------------------------------------+
void ClassExemplo::p_Strategy()
  {
   if(!CopyRates(_Symbol,_Period,0,2,rt))
     {Print("Copia Rates falhou!"); return;}
   m_newbar1=rt[0].time;
   m_vendeu=false;
   m_comprou=false;
//return;
   if(p_IsNewDay())
     {m_Candle=0; m_first_cand=false; m_secon_cand=false; m_tot_ordens_dia=0; m_ats_volume=0;}
   if(m_newbar1>m_newbar0)
     {m_newbar0=m_newbar1; m_Candle+=1;}
   if(m_Candle==1)
     {
      if(!SymbolInfoTick(_Symbol,m_tk))
        {Print("Copia Tick falhou!"); return;}
      double amp_c=(rt[1].close>rt[1].open)?rt[1].close-rt[1].open:rt[1].open-rt[1].close;//corpo
      double amp_t=rt[1].high-rt[1].low;//amplitude total
      //compra
      if((rt[1].open<rt[1].close)&&((amp_c>=50)&&(amp_t<=300))&&(m_first_cand==false))
         if(m_tk.last>rt[1].high)
           {
            p_CalcLote();
            //double sloss=sloss1-MathMod(sloss1,5.00);
            double sl1=m_tk.ask-(amp_t+20);
            m_sl=sl1-MathMod(sl1,5.00);
            double tp1=m_tk.ask+100;
            m_tp=tp1-MathMod(tp1,5.00);
            m_atsN.Buy(m_ats_volume,_Symbol,m_tk.ask,m_sl,m_tp,NULL);
            m_tot_ordens_dia+=1;
            m_comprou=true;
            m_vendeu=false;
            m_first_cand=true;
            m_semposicao=false;
            m_Moveu_comprado=false;
           }
      //venda
      if((rt[1].open>rt[1].close)&&((amp_c>=50)&&(amp_t<=300))&&(m_first_cand==false))
         if(m_tk.last<rt[1].low)
           {
            p_CalcLote();
            double sl1=m_tk.bid+(amp_t+20);
            m_sl=sl1-MathMod(sl1,5.00);
            double tp1=m_tk.bid-100;
            m_tp=tp1-MathMod(tp1,5.00);
            m_atsN.Sell(m_ats_volume,_Symbol,m_tk.bid,m_sl,m_tp,NULL);
            m_tot_ordens_dia+=1;
            m_vendeu=true;
            m_comprou=false;
            m_first_cand=true;
            m_semposicao=false;
            m_Moveu_vendido=false;
           }
     }
   if(m_Candle==3)
     {m_first_cand=true;}
  }
Referência MQL5 - Como usar um algorítimo/automatização para negociação na linguagem para MetaTrader 5
Referência MQL5 - Como usar um algorítimo/automatização para negociação na linguagem para MetaTrader 5
  • www.mql5.com
Referência MQL5 - Como usar um algorítimo/automatização para negociação na linguagem para MetaTrader 5
Arquivos anexados:
Exemplo.zip  99 kb
 
Milton Pereira Dos Santos #:
Tem esse EA de domínio público... Faça uma revisão na função (objeto) Strategy dentro da classe... ele está escrito para pegar o segundo candle do dia e só funciona no mini índice; mas com pouca modificação vc consegue implementar sua ideia nele, eu acho. Talvez seja interessante especificar que ativo vc gostaria de operar, pois na B3 tem diferença a programação para cada ativo. Boa sorte. Entro pouco aqui, mas se puder ajudar de alguma forma mais pode contar comingo. A classe ClassExemplo.mqh e o arquivo de inclusão IncExemplo.mqh devem ser salvos na pasta include do seu Metatreder5, e o EA Exemplo.mq5 deve ser salvo na pasta Experts/Advisors. Procure entender tudo que foi feito e o pq de cada coisa nesse EA para fazer a modificação que atenda seu setup. Não esqueça de compilar todos antes de rodar e só coloque em conta real depois de, no mínimo, um mês de testes em conta demo. Tire suas dúvidas aqui >>>: https://www.mql5.com/pt/docs.


Dentro da classe vc precisa modificar essa parte;

Poxa Milton muito obrigado, vou tentar sim ...valeu pela atenção 
Razão: