Закрытие - открытие позиций

 

Хочется чтобы советник после закрытия позиции, если закрылась селл - то открывалась еще пара позиций ну и в таком духе.

Подскажите как реализовать, чуть ниже то что я хочу делать после того как у меня открывается пара позиций бай и селл.

 

Всего 3 развития событий по этим картинкам, покажите на примере одной, остальное я сам допишу.  

 

Посмотрите пример Советники: New Martin.

В OnTradeTransaction ловим только транзакции типа TRADE_TRANSACTION_DEAL_ADD - добавление сделки в историю.

  • Если словили - смотрим чтобы был наш символ и наш магик. 
  • Далее смотрим на тип сделки - вход или выход. Нас будет интересовать выход (DEAL_ENTRY_OUT).
  • Если хотим поймать ЗАКРЫТИЕ SELL позиции, значит нужна сделка BUY.
  • После этого просто выставляем флаг "нуна открыть позицию"
  • В OnTick, как только поймали флаг "нуна открыть позицию"==true - открываем позицию

 
Vladimir Karputov:

Посмотрите пример Советники: New Martin.

В OnTradeTransaction ловим только транзакции типа TRADE_TRANSACTION_DEAL_ADD - добавление сделки в историю.

  • Если словили - смотрим чтобы был наш символ и наш магик. 
  • Далее смотрим на тип сделки - вход или выход. Нас будет интересовать выход (DEAL_ENTRY_OUT).
  • Если хотим поймать ЗАКРЫТИЕ SELL позиции, значит нужна сделка BUY.
  • После этого просто выставляем флаг "нуна открыть позицию"
  • В OnTick, как только поймали флаг "нуна открыть позицию"==true - открываем позицию

так , буду пробовать. Пока все выглядит легко) 
 
Kirill Andreev:
так , буду пробовать. Пока все выглядит легко) 
:) Ага, а потом всегда "чем больше дров, тем темнее лес".
 
Vladimir Karputov:
:) Ага, а потом всегда "чем больше дров, тем темнее лес".
   Если хотим поймать ЗАКРЫТИЕ SELL позиции, значит нужна сделка BUY  -  не совсем понял почему так?
 
Kirill Andreev:
   Если хотим поймать ЗАКРЫТИЕ SELL позиции, значит нужна сделка BUY  -  не совсем понял почему так?

Есть позиция SELL. Что бы её закрыть нужно совершить BUY. В рынке все покоится на равновесии. 

По другому никак :)

 
Vladimir Karputov:

Есть позиция SELL. Что бы её закрыть нужно совершить BUY. В рынке все покоится на равновесии. 

По другому никак :)

   Но у меня условия такие, если закрылась селл по 0,03 закрылся по стоплосс  то открываем  еще пару позиций 1 селл и 1 бай увеличенным обьемом...или я что то не догоняю похоже 

   Нужно еще получается мне проверить если закрылся бай, то узнать какого он обьма 

 
Kirill Andreev:

   Но у меня условия такие, если закрылась селл по 0,03 закрылся по стоплосс  то открываем  еще пару позиций 1 селл и 1 бай увеличенным обьемом...или я что то не догоняю похоже 

   Нужно еще получается мне проверить если закрылся бай, то узнать какого он обьма 

Да. Закрытие позиции - это тип сделки DEAL_ENTRY_OUT. Дальше смотрим тип - это должна быть сделка DEAL_TYPE_BUY. Дальше смотрим её объём.
 
Vladimir Karputov:
Да. Закрытие позиции - это тип сделки DEAL_ENTRY_OUT. Дальше смотрим тип - это должна быть сделка DEAL_TYPE_BUY. Дальше смотрим её объём.

    сделал так

if(deal_symbol==Symbol() && deal_magic==Magic)
         if(deal_entry==DEAL_ENTRY_OUT)
           {
            if(deal_profit>0)
              {
               //--- есть шанс, что это было закрытие по TakeProfit
               if(StringFind(deal_comment,"tp",0)==-1)
                  return;
               //--- если закрыли BUY
               if(deal_type==DEAL_TYPE_SELL)
                 {
                  if((deal_volume==DEAL_TYPE_SELL)>(deal_volume==DEAL_TYPE_BUY))
                    if(trade_sell())
                    
                  //--- обнуление для BUY
                  bln_buy=false;
                 }
               //--- если закрыли SELL
               if(deal_type==DEAL_TYPE_BUY)
                 {
                 if((deal_volume==DEAL_TYPE_SELL)<(deal_volume==DEAL_TYPE_BUY))
                    if(trade_buy())
                  //--- обнуление для SELL
                  bln_sell=false;
                 }
              }
           }
     }
  }

чуть ниже так 

bool trade_buy()
  {
   int trade_BUY=true;

   if(trade_BUY==true)
     {
      trade.Sell(lot_sell,_Symbol,0,0,0,CommentOrder);
      trade.Buy(Volume,_Symbol,0,0,0,CommentOrder);
     }
   return(trade_BUY);
  }
//+------------------------------------------------------------------+
bool trade_sell()
  {
   int trade_SELL=true;

   if(trade_SELL==true)
     {
      trade.Buy(lot_buy,_Symbol,0,0,0,CommentOrder);
      trade.Sell(Volume,_Symbol,0,0,0,CommentOrder);
     }
   return(trade_SELL);
  }
//+------------------------------------------------------------------+


  что не так?
 

Причина обращения: