Especialistas: cheduecoglioni

 

cheduecoglioni:

Esperamos que TP ou SL se executem, e, após isto, abrimos uma posição na direção oposta. Verifica se há fundos suficientes antes da abertura de posição. OnTradeTransaction.

Autor: Vladimir Karputov

 

Olá, meu amigo Vladimir.

A condição foi muito interessante para mim:

            if( m_trade.ResultDeal()==0 )
              {
               Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
                     ", description of result: ",m_trade.ResultRetcodeDescription());
              }

As condições a seguir são adequadas para a função OrderSendAsync() oupara a ordem pendente?

            if( m_trade.ResultDeal()==0  ||  m_trade.ResultOrder()==0 )
              {
               Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
                     ", description of result: ",m_trade.ResultRetcodeDescription());
              }
 
Automated-Trading:

cheduecoglioni:

Autor: Vladimir Karputov

Muito bom, como faço para usar este E A?  Amei seu raciocínio,  sempre quis um robô nesse parâmetro descrito

 
sztusz1 :
Muito bom, como faço para usar este E A?  Amei seu raciocínio,  sempre quis um robô nesse parâmetro descrito

Attach the indicator to the symbol graphics. It's all.

 
As vitórias são boas, e seria melhor se pudéssemos adicionar o Martin!
 
Qual é a condição para abrir a primeira posição? Ou você precisa abri-la manualmente?
 
284954 #:
Qual é a condição para abrir a primeira posição? Ou você precisa abri-la manualmente?

O EA aguarda o acionamento de um TP ou SL e, em seguida, abre uma posição na direção oposta. Ele verifica se há dinheiro suficiente antes de enviar uma solicitação de negociação. OnTradeTransaction.

Por exemplo, temos uma posição de compra aberta. Quando a TP ou o SL é acionado, uma nova posição de venda é aberta. Em seguida, após o acionamento da TP ou SL, uma nova posição de compra é aberta.

O fechamento de uma transação é monitorado em"OnTradeTransaction":

//+------------------------------------------------------------------+
//| Função TradeTransaction|
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- obter o tipo de transação como um valor de enumeração 
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- se a transação for resultado da adição da transação no histórico
   if(type==TRADE_TRANSACTION_DEAL_ADD)
     {
      long     deal_entry        =0;
      long     deal_type         =0;
      string   deal_symbol       ="";
      long     deal_magic        =0;
      long     deal_time         =0;
      if(HistoryDealSelect(trans.deal))
        {
         deal_entry=HistoryDealGetInteger(trans.deal,DEAL_ENTRY);
         deal_type=HistoryDealGetInteger(trans.deal,DEAL_TYPE);
         deal_symbol=HistoryDealGetString(trans.deal,DEAL_SYMBOL);
         deal_magic=HistoryDealGetInteger(trans.deal,DEAL_MAGIC);
         deal_time=HistoryDealGetInteger(trans.deal,DEAL_TIME);
        }
      else
         return;
      if(deal_symbol==m_symbol.Name() && deal_magic==m_magic)
        {
         if(deal_entry==DEAL_ENTRY_OUT)
           {
            if(deal_type==DEAL_TYPE_BUY || deal_type==DEAL_TYPE_SELL)
              {
               if(deal_type==DEAL_TYPE_BUY)
                  m_close_pos_type=POSITION_TYPE_SELL;
               else if(deal_type==DEAL_TYPE_SELL)
                  m_close_pos_type=POSITION_TYPE_BUY;
               else
                  return;
               m_is_trade=true;
              }
           }
         else if(deal_entry==DEAL_ENTRY_IN)
           {
            m_is_trade=false;
           }
        }
     }
  }