О наконец-то хорошая статья!
А то я на пару лет забросил программирование для форекса. А сейчас хочется выставить робота на чемпионат. И я всю голову изломал пытаясь программировать на mql5. А с не привычки он мне кажется настолько сложным для понимания в отличии от mql4, просто ужас.
:-(
С уважением, Андрей.
О наконец-то хорошая статья!
ПОДДЕРЖИВАЮ!)
Да, но данный шаблон не подходит для мультивалютных и(или) работающих по таймеру советников.
спасибо !!!
а хлопцам разработчикам - месяца на 3 раньше такую статью слабо ?
а чем работа по таймеру отличается от работы по по тикам?
Не стоит смешивать мух с котлетами, для работы нужен и таймер и тики (главное правильно их использовать).
Таймер нужен для выполнения периодических действий, еще там желательно выполнять часть кода мультивалютника (второе рекомендуется, но не обязательно).
PS
Таймер также интересно использовать для отслеживания состояния терминала. К примеру наличие коннекта...
- www.mql5.com
Рекомендую уйти вот от такой конструкции
//------------------------------------------------------------------ CheckNewBar bool CExpertAdvisor::CheckNewBar() // функция проверки появления нового бара { MqlRates rt[2]; if(CopyRates(m_smb,m_tf,0,2,rt)!=2) // копируем бары { Print("CopyRates of ",m_smb," failed, no history"); return(false); } if(rt[1].tick_volume>1) return(false); // проверяем объем return(true); }
так как обработка предыдущего тика может занять достаточное количество времени чтобы пропустить приход первого тика нового бара
соответственно возможно пропустить открытие.
Лучше привязываться к времени открытия бара, но для этого нужно где то сохранять предыдущее время к примеру нулевого бара чтобы потом сравнивать его с текущем временем нулевого бара
Если одинаковое - нового бара нет
Если отличается то в большую сторону то как минимум открыт новый (следующий) бар после чего сохраненное время нулевого бара инициализируем текущем временем нулевого бара.
Такая конструкция более надежная.
- www.mql5.com
Рекомендую уйти вот от такой конструкции
так как обработка предыдущего тика может занять достаточное количество времени чтобы пропустить приход первого тика нового бара
соответственно возможно пропустить открытие.
Лучше привязываться к времени открытия бара, но для этого нужно где то сохранять предыдущее время к примеру нулевого бара чтобы потом сравнивать его с текущем временем нулевого бара
Если одинаковое - нового бара нет
Если отличается то в большую сторону то как минимум открыт новый (следующий) бар после чего сохраненное время нулевого бара инициализируем текущем временем нулевого бара.
Такая конструкция более надежная.
Я у себя так делал:
bool CUniexp::checkNewBar(void) { static datetime prevTime[1]; datetime currentTime[0]; CopyTime(_Symbol,_Period,0,1,currentTime); if (currentTime[0]==prevTime[0]) {return (false);} else { prevTime[0] = currentTime[0]; return (true); } }
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
Опубликована статья Прототип торгового робота:
Целью данной статьи является обобщение и систематизация принципов создания алгоритмов и элементов торговых систем. В статье рассматривается вопрос проектирования алгоритма работы эксперта, в качестве примера представлен класс CExpertAdvisor, который может быть использован для быстрой и удобной разработки торговых систем.
Автор: Алексей Сергеев