Советники: Alexav SpeedUp M1

 

Alexav SpeedUp M1:

Советник в момент формирования нового бара открывает две противоположные позиции.

Расчет на то, что одна из позиций закроется по Stop Loss, а вторая при помощи трейлинга выйдет в прибыль.

При тестировании не ленитесь проверить параметры в двух режимах генерации тиков ("Каждый тик на основе реальных тиков" и "Каждый тик"), так как открытие позиций осуществляется только на новом баре, но Trailing позиций идет на каждом тике (точнее проверяется возможность трейлинга на каждом тике). Пример такого казуса при тестировании на EURUSD,M1:

Автор: Vladimir Karputov

 
зачем добавили реальные тики, которые портят все стратегии?? ))
 
Maxim Dmitrievsky:
зачем добавили реальные тики, которые портят все стратегии?? ))

Наверное для того, чтоб маркет не кишил тестерными граалями =)

 
Vitaly Muzichenko:

Наверное для того, чтоб маркет не кишил тестерными граалями =)

Да!!!

 
Объяснения такого расхождения так и не прозвучало. В каком именно месте идет заглядывание в будущее у сгенерированных тиков?
 
//+------------------------------------------------------------------+
//| Trailing                                                         |
//+------------------------------------------------------------------+
void Trailing()
  {
   if(InpTrailingStop==0)
      return;
   for(int i=PositionsTotal()-1;i>=0;i--) // returns the number of open positions
      if(m_position.SelectByIndex(i))
         if(m_position.Symbol()==m_symbol.Name() && m_position.Magic()==m_magic)
           {
            if(m_position.PositionType()==POSITION_TYPE_BUY)
              {
               if(m_position.PriceCurrent()-m_position.PriceOpen()>ExtTrailingStop+ExtTrailingStep)
                  if(m_position.StopLoss()<m_position.PriceCurrent()-(ExtTrailingStop+ExtTrailingStep))
                    {
                     if(!m_trade.PositionModify(m_position.Ticket(),
                        m_symbol.NormalizePrice(m_position.PriceCurrent()-ExtTrailingStop),
                        m_position.TakeProfit()))
                        Print("Modify ",m_position.Ticket(),
                              " Position -> false. Result Retcode: ",m_trade.ResultRetcode(),
                              ", description of result: ",m_trade.ResultRetcodeDescription());
                     continue;
                    }
              }
            else
              {
               if(m_position.PriceOpen()-m_position.PriceCurrent()>ExtTrailingStop+ExtTrailingStep)
                  if((m_position.StopLoss()>(m_position.PriceCurrent()+(ExtTrailingStop+ExtTrailingStep))) || 
                     (m_position.StopLoss()==0))
                    {
                     if(!m_trade.PositionModify(m_position.Ticket(),
                        m_symbol.NormalizePrice(m_position.PriceCurrent()+ExtTrailingStop),
                        m_position.TakeProfit()))
                        Print("Modify ",m_position.Ticket(),
                              " Position -> false. Result Retcode: ",m_trade.ResultRetcode(),
                              ", description of result: ",m_trade.ResultRetcodeDescription());
                    }
              }

           }
  }

Какой смысл в выделенном?

Когда писался оригинал (2007 год), не было MQL5 и, соответственно, strict-директивы в MQL4. Поэтому там наблюдается много вложенная конструкция из if. На настоящий момент это давно является рудиментом. И раз КБ несет в себе и обучающие функции, не нужно тащить в MQL5 этот пережиток, дабы и не вызывать усмешек у программистов других языков.


Если оригинал переписать на текущий strcit-MQL4, то его исходник сократится раза в 1.5-2. В этом смысле ***смотрится MT5-вариант - в 4 раза больше по размеру, чем оригинал (это еще на старом MQL4). Зачем упорно проводить такую антирекламу MT5?!

 
fxsaber:
Объяснения такого расхождения так и не прозвучало. В каком именно месте идет заглядывание в будущее у сгенерированных тиков?

Давно прозвучало, вот, раздел "Опорные точки".

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