Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 970

 
Други. Общими, нашими усилиями я всё-таки написал алгоритм советника который задумал, 
за что Вам огромное спасибо. Можно сказать всем миром писали)
Всё работает, результаты соответствуют ожидаемым можно двигаться дальше.
---
Вопрос по тестированию в режиме OHLC М1.
Реально ли запрограммировать советник так, что бы результаты тестов на "OHLC М1" были приближены к тестам "все тики"?
Я перерыл весь форум, есть вполне понятные объяснения, почему режим OHLC М1 с генерацией по 4-ём опорным точкам не совпадает
с по-тиковыми режимами. 

Но я не нашёл не одной рекомендации, примеров как запрограммировать это условие, на схожесть к OHLC М1, и возможно ли это вообще?

Режим OHLC М1, мне нравится исключительно из-за скорости расчётов.
Специфика советника. (если это вдруг важно)
Устанавливает стоп-ордера с фиксированным SL и TP, многократно модифицирует ордера на новые уровни цен в ожидании срабатывания.
Индикаторов нет. только счётчики цен. 
Если вдруг, невозможно качественно смоделировать режим "OHLC М1", то быть может, лучше взять за основу режим "По ценам открытия"?
В итоге, мне хотелось бы понять, какой режим целесообразно использовать, что бы и вычисления шли быстро и 
расхождения между режимом "все-тики" был минимальным. 

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

 "OHLC М1" ; 8 лет; 1681 трейдов. (изначально наладку делал на этот метод)

OHLC М1

"По ценам открытия"; 8 лет; 1655 тредов.

Только цены открытия

"Все тики" 8 лет; 1676 трейдов.

все тики

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

но пропадёт универсальность и появится избыточная подгонка. 




 
vladzeit:


Вкратце, как пример, если у вас TP buy позиций поставлена 1.16000, то "все тики" примерно по этой цене закроет. OHLC закроет по той цене что было выше 1.16000 это и может быть довольно большая разница, так всегда OHLC будет показывать лучше результаты. Та же самая история с "По ценам открытия".

 
Nauris Zukas:

Вкратце, как пример, если у вас TP buy позиций поставлена 1.16000, то "все тики" примерно по этой цене закроет. OHLC закроет по той цене что было выше 1.16000 это и может быть довольно большая разница, так всегда OHLC будет показывать лучше результаты. Та же самая история с "По ценам открытия".

Nauris, спасибо. Я понимаю (догадываюсь) почему результаты у разных методов отличаются. Но я хочу понять вот что:

Уж если тестер, смоделировал как то метод "OHLC М1", то как, этот же метод повторить в советнике программно.

Тестер то его как то воспроизвёл...

 
vladzeit:

Nauris, спасибо. Я понимаю (догадываюсь) почему результаты у разных методов отличаются. Но я хочу понять вот что:

Уж если тестер, смоделировал как то метод "OHLC М1", то как, этот же метод повторить в советнике программно.

Тестер то его как то воспроизвёл...

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

если у тебя не пипсовка в 3-4 пункта то большой разницы нет закрылось двумя пипсами больше или меньше...

а воспроизведение чего то там в самом советнике тебе не ускорит время, а наоборот его затянет...

 
xxz:

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

если у тебя не пипсовка в 3-4 пункта то большой разницы нет закрылось двумя пипсами больше или меньше...

а воспроизведение чего то там в самом советнике тебе не ускорит время, а наоборот его затянет...

Спасибо. Если ни кто не продолжит способа, как реализовать метод "OHLC М1", то я буду просто приговорён воспользоваться Вашим советом)))

 
vladzeit:

Спасибо. Если ни кто не продолжит способа, как реализовать метод "OHLC М1", то я буду просто приговорён воспользоваться Вашим советом)))

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

отсюда и расхождения... 

 
vladzeit:

Спасибо. Если ни кто не продолжит способа, как реализовать метод "OHLC М1", то я буду просто приговорён воспользоваться Вашим советом)))

Метод же говорит сам за себя. Используйте в советнике только цены OHLC всех минутных баров, входящих в текущий бар.
 
vladzeit:

Спасибо. Если ни кто не продолжит способа, как реализовать метод "OHLC М1", то я буду просто приговорён воспользоваться Вашим советом)))

Открытия/закрытия в эксперте не по уровням цены а по Open. Есть сигнал открытия/закрытия, дождитесь следующую 1М свечу и открывайте/закрывайте.

 
Artyom Trishkin:
Метод же говорит сам за себя. Используйте в советнике только цены OHLC всех минутных баров, входящих в текущий бар.

Артём, я попробовал. На все условия, открытия и модификации ордеров поставил условие "по рождению нового бара" через булеву функцию isNewBar()

примерно так:

if (Buys==true )
   {
   int count_buy_stops=0;   int count_pos_buy=0;
   CalOrders_Buy(count_buy_stops);   CalPosition_Buy(count_pos_buy);
   if(count_buy_stops==0 && count_pos_buy==0) && isNewBar())
   {
   BuyStop();
   }
   }

Сама функция isNewBar() из примеров и статей код.базы.

bool isNewBar()
  {
//--- в статической переменной будем помнить время открытия последнего бара
   static datetime last_time=0;
//--- текущее время
   datetime lastbar_time=(datetime)SeriesInfoInteger(Symbol(),Period(),SERIES_LASTBAR_DATE);
   if(last_time==0)//--- если это первый вызов функции
   {
   last_time=lastbar_time;    //--- установим время и выйдем 
   return(false);
   }
   if(last_time!=lastbar_time)//--- если время отличается
   {
   last_time=lastbar_time;    //--- запомним время и вернем true
   return(true);
   }
//--- дошли до этого места - значит бар не новый, вернем false
   return(false);
  }

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

между OHLC, на М1, который я применял без isNewBar() и "все тики" с функцией isNewBar(). 

Я ожидал, что применив isNewBar() на "все тики" я получу такой же результат как и OHLC по текущим ценам

Вот, я и не понимаю, то-ли я в условиях коде накосячил, то-ли я не правильно понимаю как осуществляется режим OHLC и ожидаю от него невозможного.

и откуда копать пока не соображу. 

Артём, подскажите ещё, если не трудно.

То, что ордер можно установить и модифицироваться по новому бару это понятно, но SL и TP (в тестере) сработают всё-равно внутри старого бара?  

 
Мучился мучился и ничего не получилось с попыткой перевести с фиксированного лота на лот в процентах. Может кто подскажет на полном коде?
Файлы:
Experiment.mq5  38 kb