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

Хочу доработать советник под себя, но чтобы это сделать нужно во многом разобраться! (многое не понимаю). Буду спрашивать по частям.
Есть код:
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; } } }
Что он делает?
Хочу доработать советник под себя, но чтобы это сделать нужно во многом разобраться! (многое не понимаю). Буду спрашивать по частям.
Есть код:
Что он делает?
Если взведён флаг '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' ...
- 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; }
Спасибо!
Еще код, который не понимаю:
Этот код делает следующее: работает только один раз - в момент рождения нового бара.
Этот код делает следующее: работает только один раз - в момент рождения нового бара.
Спасибо. Вот что я понял в итоге:
//--- 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; } // дошли до этого места - значит бар не новый
Без вашей ссылочки я бы не разобрался)
Спасибо. Вот что я понял в итоге:
Без вашей ссылочки я бы не разобрался)
Небольшая поправка. Это
// дошли до этого места - значит бар не новый неверно. Правильно так:
// дошли до этого места - значит бар новый
Кстати сразу ниже идет код:
if(!RefreshRates() || !m_symbol.Refresh()) { PrevBars=0; return; }
Мне кажется он частично дублирует код, который обсуждали выше:
if(!RefreshRates()) { PrevBars=0; return; }
Мне кажется его можно удалить
Небольшая поправка. Это
неверно. Правильно так:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Cidomo:
Работа отложенными Buy stop и Sell stop ордерами.
Автор: Vladimir Karputov