Советники: Cidomo

 

Cidomo:

Работа отложенными Buy stop и Sell stop ордерами.

Cidomo

Автор: Vladimir Karputov

 
Где находится эа

 
Habibur Rohman :
Где находится эа

Советник никуда не делся. Советник находится на своем месте:


 

Хочу доработать советник под себя, но чтобы это сделать нужно во многом разобраться! (многое не понимаю). Буду спрашивать по частям.

Есть код:

   if(m_need_delete_buy_stop || m_need_delete_sell_stop)
     {
      int count_buy_stops=0,count_sell_stops=0;
      CalculateAllPendingOrders(count_buy_stops,count_sell_stops);

      if(m_need_delete_buy_stop)
        {
         if(count_buy_stops>0)
           {
            DeleteOrders(ORDER_TYPE_BUY_STOP);
            return;
           }
         else
           {
            m_need_delete_buy_stop=false;
            return;
           }
        }
      if(m_need_delete_sell_stop)
        {
         if(count_sell_stops>0)
           {
            DeleteOrders(ORDER_TYPE_SELL_STOP);
            return;
           }
         else
           {
            m_need_delete_sell_stop=false;
            return;
           }
        }
     }

Что он делает?

 
Sysmart:

Хочу доработать советник под себя, но чтобы это сделать нужно во многом разобраться! (многое не понимаю). Буду спрашивать по частям.

Есть код:

Что он делает?

Если взведён флаг 'm_need_delete_buy_stop' ('необходимо удалить отложенные ордера buy stop') или m_need_delete_sell_stop' ('необходимо удалить отложенные ордера sell stop')

   if(m_need_delete_buy_stop || m_need_delete_sell_stop)
     {

приступаем к удалению.


Подсчитываем - сколь-же у нас советник разместил отложенных ордеров на данный момент:

      int count_buy_stops=0,count_sell_stops=0;
      CalculateAllPendingOrders(count_buy_stops,count_sell_stops);


Если 'необходимо удалить отложенные ордера buy stop':

      if(m_need_delete_buy_stop)
        {
         if(count_buy_stops>0)
           {
            DeleteOrders(ORDER_TYPE_BUY_STOP);
            return;
           }
         else
           {
            m_need_delete_buy_stop=false;
            return;
           }
        }

и количество размещённых buy stop больше нуля ('count_buy_stops') - удаляем их. Если же количество равно нулю - сбрасываем флаг 'm_need_delete_buy_stop'.


Аналогично поступаем если 'необходимо удалить отложенные ордера sell stop' ...

Совершение сделок - Торговые операции - Справка по MetaTrader 5
Совершение сделок - Торговые операции - Справка по MetaTrader 5
  • www.metatrader5.com
Торговая деятельность в платформе связана с формированием и отсылкой рыночных и отложенных ордеров для исполнения брокером, а также с управлением текущими позициями путем их модификации или закрытия. Платформа позволяет удобно просматривать торговую историю на счете, настраивать оповещения о событиях на рынке и многое другое. Открытие позиций...
 

Спасибо!

Еще код, который не понимаю:

//--- we work only at the time of the birth of new bar
   static datetime PrevBars=0;
   datetime time_0=iTime(m_symbol.Name(),InpWorkTimeFrame,0);
   if(time_0==PrevBars)
      return;
   PrevBars=time_0;
   if(!RefreshRates())
     {
      PrevBars=0;
      return;
     }
 
Sysmart:

Спасибо!

Еще код, который не понимаю:

Этот код делает следующее: работает только один раз - в момент рождения нового бара.

 
Vladimir Karputov:

Этот код делает следующее: работает только один раз - в момент рождения нового бара.

Спасибо. Вот что я понял в итоге:

//--- we work only at the time of the birth of new bar
   // в статической переменной будем помнить время открытия последнего бара
   static datetime PrevBars=0;
   // текущее время (iTime - возвращает значение времени открытия бара)
   datetime time_0=iTime(m_symbol.Name(),InpWorkTimeFrame,0);
   if(time_0==PrevBars)
      return;
   // если время отличается, т.к. прошли условие if(time_0==PrevBars)
   // запомним время
   PrevBars=time_0;
   // если котировки не обновляли, то обнуляем время открытия последнего бара
   if(!RefreshRates())
     {
      PrevBars=0;
      return;
     }
   // дошли до этого места - значит бар не новый

Без вашей ссылочки я бы не разобрался)

 
Sysmart:

Спасибо. Вот что я понял в итоге:

Без вашей ссылочки я бы не разобрался)

Небольшая поправка. Это

 // дошли до этого места - значит бар не новый

неверно. Правильно так:

 // дошли до этого места - значит бар новый
 

Кстати сразу ниже идет код:

   if(!RefreshRates() || !m_symbol.Refresh())
     {
      PrevBars=0;
      return;
     }

Мне кажется он частично дублирует код, который обсуждали выше:

   if(!RefreshRates())
     {
      PrevBars=0;
      return;
     }

Мне кажется его можно удалить

 
Vladimir Karputov:

Небольшая поправка. Это

неверно. Правильно так:

Спасибо)!