Meu 1º EA, problemas horário, estratégia - página 4

 
Romeu Masselai:
Somente no input, como faço esse do oninit?

É apenas isso mesmo:


//--- conectamos a classe de operações de negociação 
#include <Trade\Trade.mqh> 

//--- variáveis globais
CTrade trade;   // para realizar operações de negociação 

. . . 

int OnInit(void) 
  { 
//--- inicializamos o objeto para o controle correto das posições 
   trade.SetExpertMagicNumber(EA_Magic_Number); 

. . .
 
Vinicius de Oliveira:

É apenas isso mesmo:


Funcionou perfeitamente, obrigado. 
 
Romeu Masselai:
Funcionou perfeitamente, obrigado. 

👍

 
Vinicius de Oliveira:

👍

Agora estou tentando resolver o problema dos stops que davam gains muito menores que o definido, estou com dificuldades nessas linhas, cujo objetivo seria que quando posicionado, o EA mandasse 2 ordens limits (gain e loss), e quando uma ordem fosse executada, cancelasse a outra.

   int num_positions = PositionsTotal();
   int num_orders = OrdersTotal();
   double priceposition = HistoryDealGetDouble(HistoryDealGetTicket(HistoryDealsTotal() - 1), DEAL_PRICE); 
   if (num_orders > 0 && num_positions == 0)
     {
      PendingOrderDelete();
     }
   if((PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_BUY) && num_orders == 0)
     {
      trade.SellLimit(Lote,NormalizePrice(priceposition + STG * _Point),_Symbol,0,0,ORDER_TIME_DAY,0);
      trade.SellLimit(Lote,NormalizePrice(priceposition - STL * _Point),_Symbol,0,0,ORDER_TIME_DAY,0);
     }
   if ((PositionGetInteger(POSITION_TYPE)==POSITION_TYPE_SELL) && num_orders == 0)
     {
      trade.BuyLimit(Lote,NormalizePrice(priceposition + STL * _Point),_Symbol,0,0,ORDER_TIME_DAY,0);
      trade.BuyLimit(Lote,NormalizePrice(priceposition - STG * _Point),_Symbol,0,0,ORDER_TIME_DAY,0);
     }
void PendingOrderDelete()
  {
   int o_total=OrdersTotal();
   for(int j=o_total-1; j>=0; j--)
     {
      ulong o_ticket = OrderGetTicket(j);
      if(o_ticket != 0)
        {
         // delete the pending order
         trade.OrderDelete(o_ticket);
         Print("Ordens não realizadas foram excluídas.");
        }
     }
  }



 

 
Romeu Masselai:

Agora estou tentando resolver o problema dos stops que davam gains muito menores que o definido, estou com dificuldades nessas linhas, cujo objetivo seria que quando posicionado, o EA mandasse 2 ordens limits (gain e loss), e quando uma ordem fosse executada, cancelasse a outra. 

Rogerio Giannetti Torres:

Boa noite, 

O  SL/TP que fica ligado a posição é um gatilho que dispara uma ordem a mercado. Para ter um stop gain com lucro desejado em ticks, você precisa emitir a saída com uma ordem a preço limite... exemplo: para um BUY deve ter uma SELL LIMIT na distância correta do preço de entrada. Infelizmente o stop loss tem que ser a mercado e a derrapagem é inevitável e as vezes machuca...


Olá Romeu!


Você testou a sugestão acima? O stop loss você informaria normalmente, porém já incluiria na sequência uma ordem limite na posição do take profit (SELL LIMIT para BUY; BUY LIMIT para SELL).

 
Vinicius de Oliveira:


Olá Romeu!


Você testou a sugestão acima? O stop loss você informaria normalmente, porém já incluiria na sequência uma ordem limite na posição do take profit (SELL LIMIT para BUY; BUY LIMIT para SELL).

Vou testar
 
Vinicius de Oliveira:


Olá Romeu!


Você testou a sugestão acima? O stop loss você informaria normalmente, porém já incluiria na sequência uma ordem limite na posição do take profit (SELL LIMIT para BUY; BUY LIMIT para SELL).

Funcionou!!! Porém a classe que vc indicou para controle de horário, parou funcionar corretamente, o EA não encerra as posições no horario definido.
 
Romeu Masselai:
Funcionou!!! Porém a classe que vc indicou para controle de horário, parou funcionar corretamente, o EA não encerra as posições no horario definido.

Beleza!!


O problema pode estar na função que você está utilizando para encerrar as posições. Poste essa função pra gente dar uma olhada . . .

 
Vinicius de Oliveira:

Beleza!!


O problema pode estar na função que você está utilizando para encerrar as posições. Poste essa função pra gente dar uma olhada . . .


Segue um exemplo:

//+--------------------------------------------------------------------------------------------------------------------+
//| Expert tick function                                                                                               |
//+--------------------------------------------------------------------------------------------------------------------+
void OnTick()
  {
   if(timeTrade.CheckTimeEndTrade())
     {
      PendingOrderDelete();
      ClosePositions("Horário de encerramento de ordens...");
      return;
     }

. . .




//+--------------------------------------------------------------------------------------------------------------------+
//| This function closes all positions                                                                                 |
//+--------------------------------------------------------------------------------------------------------------------+
bool ClosePositions(string Reason)
  {
   //--- Local variables
   ulong TICKET;
   int   Cnt;

   //--- Close positions
   for(Cnt = PositionsTotal() - 1; Cnt >= 0; Cnt--)
     {
      TICKET = PositionGetTicket(Cnt);
      if(TICKET > 0)
        {
         if(PositionGetString(POSITION_SYMBOL) == _Symbol && PositionGetInteger(POSITION_MAGIC) == EA_Magic_Number)
           {
            if(!trade.PositionClose(TICKET))
              {
               Print(_Symbol, " - ", trade.ResultRetcode(), " ", trade.ResultRetcodeDescription());
               return(false);
              }
            Print(_Symbol, " - ", trade.ResultRetcode(), " ", trade.ResultRetcodeDescription(), " - ", Reason);
           }
        }
     }

   //--- Closing succeeded
   return(true);
  }
 
Base de Dados - Como fazer para ter gráficos ajustados
Base de Dados - Como fazer para ter gráficos ajustados
  • 2021.04.25
  • www.mql5.com
Olá, eu opero e observei que os dados históricos dos ativos da BOVESPA estão sem os ajustes. Como faço para obter os gráficos ajustados...