Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
спасибо за совет, вот очень простая версия моего кода, это не мой реальный код, но я надеюсь, что это будет более понятно.
Как я уже сказал, это не настоящий код, поиск паттерна и т.д. - это просто пример. причина, по которой я открыл эту тему - этофункция DetectExistingPattern()
Я уже дал вам пример кода, как запускать код при первом запуске OnTick(), так что теперь обновите свой пост кода соответствующим образом, чтобы ваш DetectExistingPattern() запускался в первом вызове OnTick(), а не в OnInit().
Кроме того, вы не можете использовать "Bars" для обнаружения нового бара. Это неверно. Вы должны использовать либо "Time[0]", либо "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )". Вот пример:
Я уже дал вам пример кода, как запускать код при первом запуске OnTick(), так что теперь обновите свой пост кода соответствующим образом, чтобы ваш DetectExistingPattern() запускался при первом вызове OnTick(), а не в OnInit().
Кроме того, вы не можете использовать "Bars" для обнаружения нового бара. Это неверно. Вы должны использовать либо "Time[0]", либо "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )". Вот пример:
Спасибо @FMIC, я добавил простой код, потому что @jjc попросил об этом. Кстати, я научился использовать Bars с самого начала, насколько я помню, все писали так, вот и я так написал. Почему это неправильно? Может ли это работать неправильно ?
ps: Я использую metatrader 4, так что это mql4 правильно?
спасибо @FMIC, я добавил простой код, потому что @jjc попросил об этом. Кстати, я научился использовать Bars с самого начала, насколько я помню, все писали так, и я тоже. Почему это неправильно? Может ли это работать неправильно ?
ps: Я использую metatrader 4, так что это mql4 правильно?
FMIC:
No! On the forum, you will find that many users have shown that the "Bars" method is very old and unreliable because the number of bars can be changed by the "Options" for charts or it can be constant when the maximum number of bars per chart has been reached. So, it is wrong to use it. Use either "Time[0]" or if you want it to be compatible with MQL5 as well, use "SeriesInfoInteger( _Symbol, _Period, SERIES_LASTBAR_DATE )". Please see my example.
как я уже сказал, это не настоящий код, поиск паттерна и т.д. - это просто пример. причина, по которой я открыл эту тему -функция DetectExistingPattern().
Возвращаясь к вашему первоначальному вопросу... В этом примере одним из вариантов может быть изменение функции CheckTrendPattern() таким образом, чтобы ей можно было указать начать с определенного бара. Вместо того чтобы использовать фиксированный диапазон баров от 1 до 10, вы вместо этого используете смещение от 1 до 10 от указанной начальной точки.
Когда нет существующего ордера, и вы хотите проверить, выполняется ли в данный момент паттерн, вы используете CheckTrendPattern(0) вместо CheckTrendPattern().
При запуске, если у вас есть существующий ордер, вы можете искать паттерн, который его вызвал, следующим образом. Это то же самое предложение, которое я сделал в самом начале: вы получаете индекс бара, который эквивалентен времени открытия существующего ордера, и начинаете искать в обратном направлении.
Однако, как говорит FMIC, предпочтительнее делать эту проверку в первом вызове OnTick(), а не в OnInit(). Мои собственные причины для такого предложения не имеют ничего общего с "задержкой инициализации". Напротив, меня бы беспокоило то, что при повторном запуске MT4 с советником, уже прикрепленным к графику, у вас еще нет на 100% надежного списка ордеров от брокера или обновленной истории баров.
Еще одно соображение, которое вы, возможно, захотите принять во внимание, заключается в следующем сценарии, происходящем в течение времени, охватываемого одним баром:
Для предотвращения этого вы можете проверить закрытые ордера так же, как и открытые.
Возвращаясь к вашему первоначальному вопросу... В данном примере одним из вариантов может быть изменение функции CheckTrendPattern() таким образом, чтобы ей можно было указать начать с определенного бара. Вместо того чтобы использовать фиксированный диапазон баров от 1 до 10, вы вместо этого используете смещение от 1 до 10 от указанной начальной точки.
Когда нет существующего ордера, и вы хотите проверить, выполняется ли в данный момент паттерн, вы используете CheckTrendPattern(0) вместо CheckTrendPattern().
При запуске, если у вас есть существующий ордер, вы можете искать паттерн, который его вызвал, следующим образом. Это то же самое предложение, которое я сделал в самом начале: вы получаете индекс бара, который эквивалентен времени открытия существующего ордера, и начинаете поиск в обратном направлении. Однако, как говорит FMIC, предпочтительнее делать эту проверку в первом вызове OnTick(), а не в OnInit(). Мои собственные причины для такого предложения не имеют ничего общего с "задержкой инициализации". Напротив, меня бы беспокоило то, что при повторном запуске MT4 с советником, уже прикрепленным к графику, у вас еще нет на 100% надежного списка ордеров от брокера или обновленной истории баров.
Еще одно соображение, которое вы, возможно, захотите принять во внимание, заключается в следующем сценарии, происходящем в течение времени, охватываемого одним баром:
Теперь более понятно, почему я должен делать это в OnInit, надежность, конечно, самый важный момент, и я не подумал о вашем предупреждении. эта часть действительно важна, я могу открыть избыточные ордера, может быть редко, но возможно. Я должен это как-то уладить. большое спасибо.
@WHRoeder Ваш новый контроль проверки бара так прост и красив. Я добавил ваш метод в свой код, спасибо.
Привет всем,
Как советовал @FMIC, я написал индикатор, который находит мой паттерн, дает сигнал и еще несколько данных, которые будут использоваться для моих ордеров (я могу открыть несколько ордеров по разным ценам). Теперь я хочу использовать его в своем советнике, но у меня есть вопрос, мне нужен ваш опыт. Когда я получаю сигнал от моего индикатора, я открываю ордер или выставляю ордер (лимит на продажу или лимит на покупку и т.д.), если мой mt4 падает по какой-либо причине, когда я открываю его снова, как я могу определить, что открытый ордер принадлежит какому сигналу в моем индикаторе. нормально ли использовать сдвиг бара для этого? как мы говорили ранее, я могу найти время создания ордера, затем найти сдвиг бара и я должен попытаться получить значение индикатора, используя этот сдвиг? Как я могу сопоставить этот ордер и сдвиг индикатора?
спасибо.
Да, вы можете использовать iBarShift(), как jjc объяснил вам в предыдущем сообщении, чтобы затем ссылаться на данные вашего индикатора через функцию iCustom().