Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Вручную добавлять в OnInit()? Получается через Мастер никак не сделать того что хочу?
А какие проблемы? Вы ведь вносите дополнительный функционал и поэтому нужно немного поработать руками.
Да собственно никаких проблем но не соответствует это концепции, что все делает Мастер на основании пользовательских модулей сигналов, капитала и пр. А статья выходит устарела и это неправда:
Метод CheckCloseLong() производит генерацию сигнала закрытия длинной позиции с определением уровня выхода. Вызывается экспертом для определения необходимости закрытия длинной позиции. Необходимо переопределить метод в случае, если предполагается генерация сигнала закрытия длинной позиции.
Почти 6 лет прошло статья не устарела? просто уверенности нет так как почти каждую неделю терминал вижу обновляется.
Привет всем,
Меня интересует, как создать потомка CExpertSignal с двумя паттернами "выход" и "вход" в наблюдаемый торговый диапазон, используя подход, предложенный здесь, а также в Exploring Trading Strategy Classes of the Standard Library - Customizing Strategie by Harvester. Я считаю, что каждый класс сигналов может (должен) быть реализован путем перегрузки
и
Затем мы находим
результат которого проверяется на соответствие signal.m_threshold_open и signal.m_threshold_close в
Параметры, задающие уровни для входа в рынок и устанавливающие цены стоп-лосса и тейк-профита, будут возвращаться функциями
которые вызываются стандартной реализацией bool CExpertSignal::CheckOpenLong(...) и bool CExpertSignal::CheckOpenShort(...), как определено в базовом классе. Таким образом, достаточно перегрузить
для определения произвольного нового сигнала. Обратите внимание, что CExpertTrade содержит код для определения того, не слишком ли далека желаемая цена входа от текущей цены для размещения рыночных ордеров, и использует выбор цены входа для автоматического принятия решения о размещении стоп- или лимит-ордера.
Однако если торговый диапазон определяется как область между самым высоким максимумом (HH) и самым низким минимумом (LL) за последние n баров, то условие LL < цена < HH всегда истинно. Поэтому и int CExpertSignal::LongCondition(...), и int CExpertSignal::ShortCondition(...) должны всегда определять паттерн 0 "пробой", и какое бы значение мы ни связали с этим паттерном, функция int CExpertSignal::Direction() всегда будет возвращать ноль!
Естественный подход заключается в перегрузке
таким образом, чтобы первый проверял
вместо
пока не удалось превратить в удачную версию. Как уже отмечалось, было бы просто сделать так, чтобы bool CExpertSignal::OpenLongParams(...) возвращала цену входа HH, а bool CExpertSignal::OpenShortParams(...)возвращала цену входа LL для завершения сигнала, постоянно генерирующего 2 стоп-ордера.
На мой взгляд, желательно иметь пример, показывающий, как реализовать эту стандартную стратегию прорыва в терминах стандартной библиотеки и сделать ее достаточно гибкой, предоставив альтернативный паттерн "прорыв внутрь", который приводит к лимитным ордерам на LL и HH. Очевидно, что такой сигнал будет сочетать стратегии
предоставляя их в виде паттернов. Буду крайне признателен за помощь в доработке данного подхода.
Привет всем,
Меня интересует, как создать потомка CExpertSignal с двумя паттернами "выход" и "вход" в наблюдаемый торговый диапазон, используя подход, предложенный здесь, а также в Exploring Trading Strategy Classes of the Standard Library - Customizing Strategie by Harvester. Я считаю, что каждый класс сигналов может (должен) быть реализован путем перегрузки двух функций
Обратите внимание, что CExpertTrade содержит код для определения того, не слишком ли далека желаемая цена входа от текущей цены для размещения рыночных ордеров, и использует выбор цены входа для автоматического принятия решения о размещении стоп- или лимит-ордера.
[...]
На мой взгляд, желательно иметь пример, показывающий, как реализовать эту стандартную стратегию прорыва в терминах стандартной библиотеки и сделать ее достаточно гибкой, предоставив альтернативный паттерн "прорыв в", который приводит к лимитным ордерам на LL и HH. Я буду чрезвычайно благодарен за помощь в доработке этого подхода.
Я решил перефразировать свои опасения, чтобы сделать их как можно более понятными. На мой взгляд, две статьи
в целом демонстрируют, как написать собственные классы сигналов наиболее простым способом. Я собираюсь обобщить это свое восприятие ниже.
Однако все еще нужна идея для завершения реализации сигнала, использующего этот подход, чтобы предлагать покупку/продажу, когда цена становится выше/ниже самой высокой/самой низкой цены, наблюдаемой в течение последних n периодов. Это должно привести к размещению пары стоп-ордеров выше и ниже текущей цены. Я уже пытался добиться этого, заменив условие
но, похоже, это все равно не работает. Это не имеет никакого смысла, потому что я также перегрузил функции OpenLongParams(...) и OpenShortParams(...). Они определяют уровни, на которых нужно размещать желаемые стоп-ордера. Может ли кто-нибудь, кто лучше разбирается в идеях разработчиков MetaQuotes, объяснить, как бы они реализовали эту простейшую стратегию прорыва?
Поскольку исходный код часто рассматривается как лучшая документация к любому программному обеспечению, я потратил некоторое время на анализ класса CExpertSignal в MQL5\Include\Expert\ExpertSignal.mqh.
В результате оказалось, что функции, проверяющие торговые условия, сводятся, по сути, к проверке значения функции Direction() { return(LongCondition()-ShortCondition()); } следующим образом:
(Я удалил некоторый код, который кажется необходимым только для стабильного выполнения, но никак не для улучшения функциональности).
Это резюме показывает, что для любого класса стратегии достаточно перегрузить функции
а в статье Harvester 2. по ссылке выше объясняется, как использовать макрос IS_PATTERN_USAGE(x) в первых двух из них так, чтобы результирующий сигнал обнаруживал несколько предопределенных паттернов.
Я вижу такую проблему: условие, находится ли цена между самым высоким максимумом и самым низким минимумом за последние n баров, должно быть всегда истинным. Поэтому и LongCondition(...), и ShortCondition(...) возвращают одно и то же значение, связанное с паттерном для торговли на прорывах, а значение Direction() обязательно равно нулю, если только условия в CheckOpenLong(...) и CheckOpenShort(...) не изменены.
Но почему не достаточно использовать LongCondition()>=m_threshold_open и ShortCondition()>=m_threshold_open?
Когда я использую файл, который вы прикрепили к статье, что-то не так.
Я нахожу, что комментарий о Type должен быть следующим:
//| Type=SignalAdvanced |
Спасибо за ваше сообщение. Ваше сообщение решило мою проблему. Будьте здоровы!
Джордж
Здравствуйте,
Когда я скомпилировал код, я получил три предупреждения
объявление 'm_open' скрывает член samplesignal.mqh 42 23
Объявление 'm_close' скрывает члена samplesignal.mqh 43 23
m_open и m_close были определены в ExpertBase.mqh, но с разным типом.
m_expiratin был определен в ExpertSignal.mqh.
Закомментируйте три вышеприведенные строки. Предупреждения исчезли.
Джордж
Если есть возможность переписать точный, полный и исполняемый код этой программы, исправить ошибки и выложить его здесь
Вот, пожалуйста!
Будьте здоровы, Зарик