Советники: cheduecoglioni

 

cheduecoglioni:

Мы ждем, когда TP или SL сработают, и после этого открываем позицию в противоположном направлении. Проверка на достаточность средств перед отсылкой торгового приказа. OnTradeTransaction.

Автор: Vladimir Karputov

 

Здравствуй, мой друг, Владимир.

Условие было очень интересным для меня:

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

Следующие условия являются правильными для функции OrderSendAsync() или отложенного ордера?

            if( m_trade.ResultDeal()==0  ||  m_trade.ResultOrder()==0 )
              {
               Print("Buy -> false. Result Retcode: ",m_trade.ResultRetcode(),
                     ", description of result: ",m_trade.ResultRetcodeDescription());
              }
 
Очень хорошо, а как использовать этот E A? Мне понравились ваши рассуждения, я всегда хотел робота в этом параметре описанного

 
sztusz1 :
Очень хорошо, как мне использовать этот E A? Мне нравятся ваши рассуждения, я всегда хотел робота в этом описанном параметре

Прикрепите индикатор к графику символа. Вот и все.

 
Победа - это хорошо, но было бы лучше, если бы мы добавили Мартина!
 
Каково условие открытия первой позиции? Или вы должны открыть ее вручную?
 
284954 #:
Каково условие открытия первой позиции? Или вы должны открыть ее вручную?

Советник ждет срабатывания TP или SL, а затем открывает позицию в противоположном направлении. Перед отправкой торгового запроса он проверяет, достаточно ли денег. OnTradeTransaction.

Например, у нас есть открытая позиция на покупку. Как только срабатывает TP или SL, открывается новая позиция на продажу. Затем, после срабатывания TP или SL, открывается новая позиция на покупку.

Закрытие сделки отслеживается в"OnTradeTransaction":

//+------------------------------------------------------------------+
//| Функция TradeTransaction|
//+------------------------------------------------------------------+
void OnTradeTransaction(const MqlTradeTransaction &trans,
                        const MqlTradeRequest &request,
                        const MqlTradeResult &result)
  {
//--- получаем тип транзакции в виде значения перечисления 
   ENUM_TRADE_TRANSACTION_TYPE type=trans.type;
//--- если транзакция является результатом добавления транзакции в историю
   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;
           }
        }
     }
  }