Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Спасибо большое автору за статью и код. Сегодня переделал код простенького советника под класс модели. После некоторых усилий получилось добиться параллельной работы на разных парах и таймфреймах.
Единственное, что пришлось поправить в коде - слегка модернизировать функцию GetMyPosition(), чтобы она считала объем только по символу, переданному в качестве параметра. В противном случае модель, работающая по связке двух и более пар при вызове GetMyPosition() получает совокупный объем по нескольким парам вместо необходимого отдельного объема по каждой. Ну и еще добавил метод в класс CTableOrders для получения символа ордера.
Еще раз спасибо!
Спасибо друзья, за высокую оценку моего труда! Приятно осознавать, что рассматриваемые мною вопросы актуальны и нужны. Не будем вступать в полемику с малограмотными критиканами. Они будут всегда и их не переубедить даже в очевидном.
З.Ы. метод double GetMyPosition() лучше перегрузить соответствующим образом: double GetMyPosition(string Symbol). Это придаст больше гибкости и универсальности.
Бесспорно, со временем код будет совершенствоваться и изменяться, ведь учесть сразу все возможные области его применения невозможно.
Еще раз спасибо, и с наступающим Новым 2011 годом! Счастья и удачи!
Спасибо Василию за статью - на мой взгляд это пока что самый лучший подход. Просто неимоверно как можно было отладить этот код.
Василий - как вы отладили этот код без отладчика в тестере ? Мне очень сложно работать без отладчика в тестере - ведь сигналы бывают разные и по разным условиям.
Поделитесь опытом отладки.
После последних обновлений терминала модель перестала работать. Может кто ни будь объяснить, что случилось?
Аналогично. Уже неделю разбираю по запятым код. Стратегия выставляет ордера на продажу, но функция GetNumberOrders() возвращает всего ордеров на продажу = 0, а вот на покупку = 1.
Просьба к Василию, как разработчику данного кода, помочь. Я пока не могу выловить в чем причина.
После последних обновлений терминала модель перестала работать. Может кто ни будь объяснить, что случилось?
Кажеться разобрался. В коде необходимо изменить :
MetaTrader 5 Client Terminal build 381
...
MQL5: Обновлена стандартная библиотека: методы Type() классов CDealInfo, CHistoryOrderInfo, COrderInfo и CPositionInfo переименованы соответственно в DealType(), OrderType() и PositionType().
...
В виду того, что модель опирается на базовые торговые классы, любые, даже не значительные изменения в их интерфейсах, оказываются критичными. В данном случае, ошибку легко исправить, просто изменив метод Type(), на соответствующий OrderType() в файле TableOrders.mqh.
В ближайшее время будет выполнена актуализация кодов прилагаемых к статье, для правильной работы на последних билдах компилятора и терминала.
"Отдельно стоит описать переменную m_timing. В процессе работы эксперта требуется вызывать определенные события через определенные промежутки времени. Функция OnTimer() для этого не подходит, так как для разных моделей могут существовать разные временные интервалы.
Например, некоторые события нужно вызывать каждый новый бар. Для модели, торгующей на часовой графике, такие события должны вызываться каждый час, для модели, торгующей на дневной графике – каждый новый дневной бар. Ясно, что у этих моделей разные временные настройки и каждая должна храниться соответственно в своей модели. Структура t_period, включенная в класс CModel, позволяет хранить эти настройки отдельно, каждую в своей модели.
Вот как выглядит эта структура:
struct t_period { большая структура };
Как видно, она включает в себя обычное перечисление таймфреймов. Для того чтобы узнать, наступил ли новый бар, нужно сравнить время последнего бара, с тем временем, что было записано в структуру t_period. Если время не совпадает, то наступил новый бар, время в структуре надо обновить на время текущего бара и вернуть положительный результат (true). Если время последнего бара и структуры совпадает, это означает, что новый бар еще не наступил и необходимо просто вернуть отрицательный результат (false).
Вот функция, которая работает по описанному алгоритму:
"
Я , конечно, только начинающий программист, но может возможно для определения наступления нового бара делать так(при этом переменную m_timing сделать просто datetime):
Если я ошибся с выводами, заранее извиняюсь, и прошу меня поправить. Если не ошибся - То спасибо этому сайту и в частности всем кто тут работает- статьи, документацию пишет - я начал в чем-то разбираться.
P.S.:Кстати спасибо за отличную статью.
Попробовал откломпилировать, получил ошибки
Планируется исправить код?