Советники: Flat Channel

 

Flat Channel:

Краткое описание

Flat Channel

Автор: Vladimir Karputov

 

Авторы молодцы! Добротная работа, достигли цели - прибыльный флетовый советник. Сейчас протестил на нашем рынке, в частности на Si-12.18, хороший профит дает! Давно искал такой.

Есть пара замечаний: 1. Слишком долго отрисовывает, вся логика в OnTick, он же ведь не тиковый, можно применить типа CBarDetector c периодом М1 или М5. Я сделал с М5 - гораздо веселее стал работать. 2. Хотелось бы иметь мин.-макс. ширину канала в динамике в зависимости от текущей волатильности рынка.

 
Rashit Ibatullin:

Авторы молодцы! Добротная работа, достигли цели - прибыльный флетовый советник. Сейчас протестил на нашем рынке, в частности на Si-12.18, хороший профит дает! Давно искал такой.

Есть пара замечаний: 1. Слишком долго отрисовывает, вся логика в OnTick, он же ведь не тиковый, можно применить типа CBarDetector c периодом М1 или М5. Я сделал с М5 - гораздо веселее стал работать. 2. Хотелось бы иметь мин.-макс. ширину канала в динамике в зависимости от текущей волатильности рынка.

Чтобы быстро тестировало в визуальном режиме нужно отключить в коде вывод комментариев:

/*   Comment("\nСоветник "+__FILE__+" весь в работе:  ",TimeControl(),
           "\nДень:  ",Dayof(STimeCurrent),
           "\nТорговый счёт:  ",m_account.Login(),
           "\nCompany:  ",m_account.Company(),
           "\nEquity:  ",m_account.Equity(),
           "\nВремя по GMT:  "+TimeToString(TimeGMT(),TIME_DATE|TIME_SECONDS),
           "\nSpread:  ",m_symbol.Spread(),
           "\nStopLevel:  ",m_symbol.StopsLevel(),
           "\nПлечо:  ",m_account.Leverage()
           );*/
//--- we work only at the time of the birth of new bar
 

Спасибо тем кто реализовал данный советник!

Я по строчкам разбираю этого советника, чтобы адаптировать под moex (он же все таки заточен под forex), так вот у меня вопрос  по коду

//--- FreezeLevel -> for pending order and modification

   double freeze_level=m_symbol.FreezeLevel()*m_symbol.Point();
   if(freeze_level==0.0)
      freeze_level=(m_symbol.Ask()-m_symbol.Bid())*3.0;
   freeze_level*=1.1;
   
   
   
   
//--- StopsLevel -> for TakeProfit and StopLoss
   double stop_level=m_symbol.StopsLevel()*m_symbol.Point();
   if(stop_level==0.0)
      stop_level=(m_symbol.Ask()-m_symbol.Bid())*3.0;
   stop_level*=1.1;
   

зачем идет умножение, именно на 3 и потом еще на 1.1?

 
refounder83:

Спасибо тем кто реализовал данный советник!

Я по строчкам разбираю этого советника, чтобы адаптировать под moex (он же все таки заточен под forex), так вот у меня вопрос  по коду

зачем идет умножение, именно на 3 и потом еще на 1.1?

Forex знаю, биржа - знаю. А что такое за зверь лютый такой moex - не знаю.

 
Вы же сами вчера создали тему под названием ---- Советник для moex. Получение цены ?
 
я просто хочу разобраться в логике кода и адаптировать его под биржу
 
refounder83:
я просто хочу разобраться в логике кода и адаптировать его под биржу

1. Обратите внимание: если я отвечаю кому-то, я использую кнопку "Ответить".

2.Чтобы точно писать код, для начала выясните в техподдержке брокера всё об уровнях SYMBOL_TRADE_STOPS_LEVEL и SYMBOL_TRADE_FREEZE_LEVEL: на всех символах эти уровни ноль? что означает "ноль" - это плавающий уровень или действительно уровня просто нет.

 
Vladimir Karputov:

1. Обратите внимание: если я отвечаю кому-то, я использую кнопку "Ответить".

2.Чтобы точно писать код, для начала выясните в техподдержке брокера всё об уровнях SYMBOL_TRADE_STOPS_LEVEL и SYMBOL_TRADE_FREEZE_LEVEL: на всех символах эти уровни ноль? что означает "ноль" - это плавающий уровень или действительно уровня просто нет.

техподдержке брокера написала что данные уровни не транслируются.

 
refounder83:

техподдержке брокера написала что данные уровни не транслируются.

Тогда просто не учитывайте их (временно закомментируйте строки, где выучивается эти уровни). 

 
Vladimir Karputov:

Тогда просто не учитывайте их (временно закомментируйте строки, где выучивается эти уровни).

Подскажите, а временной контроль, в данном советнике, не работает? в процедуре  TimeControl  есть строчки

  if(!InpTimeControl)
      return(true);

т.е. если значение InpTimeControl равно false, то возвращает, процедуре  TimeControl,  все равно true?

bool TimeControl(void)
  {
   if(!InpTimeControl)
      return(true);
      
   MqlDateTime STimeCurrent;
   datetime time_current=TimeCurrent();
   if(time_current==D'1970.01.01 00:00')
      return(false);
   TimeToStruct(time_current,STimeCurrent);
   if(InpStartHour<InpEndHour) // intraday time interval
     {

      if(STimeCurrent.hour>=InpStartHour && STimeCurrent.hour<InpEndHour)
         return(true);
     }
   else if(InpStartHour>InpEndHour) // time interval with the transition in a day
     {

      if(STimeCurrent.hour>=InpStartHour || STimeCurrent.hour<InpEndHour)
         return(true);
     }
   else
      return(false);
//---
   return(false);
  }
Причина обращения: