![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Enhanced-MQL4?
Никогда не слышал об этом.
Я тоже со вчерашнего дня ;) А правильное название, кажется,"Обновленный MQL4". MQ пишет:
(...) Начиная с билда 600, язык программирования MQL4 был полностью переработан и достиг уровня MQL5- теперь вы можете разрабатывать торговых роботов на MQL4/5, используя единую среду разработки MetaEditor, единый стиль, библиотеки и средства отладки.
(...) Поэтому мы решили реализовать в нем максимально возможное количество функций и возможностей языка MQL5, полностью сохранив функциональность MQL4. Другими словами, все мощные функции MQL5, включая ООС и компилятор нативного кода, станут доступны в MQL4. (...)
Для этого мы разработали унифицированный компилятор, который автоматически поддерживает оба языка MQL4 и MQL5. (...)
Проблема в определении заключается в слове "языки". Язык - это MQL, так же как C++ - это язык, а Basic - язык. Updated-MQL4/MQL5 - это просто специфические для платформы модификации MQL, не больше и не меньше, поэтому сравнение (родного) MQL4 и Updated-MQL4 практически такое же, как и в случае с C и C++. А миграция MQL4.com в MQL5.com только усилила путаницу. Как показывают эти сообщения, большинство людей не ассоциируют ООП с MQL4, как и я. Для меня это всегда был MQL5, который поддерживает обе платформы, MT4 и MT5.
Но в любом случае, это работает довольно хорошо, и MQLWhatever - далеко не самый лучший интерфейс по сравнению со всеми остальными дерьмовыми вещами вокруг.
@Lorentzos Roussos
Alain can correct me on this but you may find gaps in instances where on the time horizon of a bar there where no ticks , so no bar will be in place
Уппппсссс... Я еще не видел такого болтуна. (Что ничего не значит).
Я использую свой "NewBar-индикатор", чтобы автоматически натягивать стопы на максимум или минимум предыдущего бара.
(На самом деле, это немного сложнее, так как я считаю "Innenstaebe и Aussenstaebe" (eng. "внутренние и внешние движения" ???). Не знаю, какой правильный перевод.
Но я собираюсь использовать это только на ликвидных рынках, которые имеют по крайней мере двадцать - до нескольких сотен тиков в минуту.
Я не думаю, что найду период в десять минут без тиков.
В любом случае, программа должна уметь это обрабатывать.
Спасибо!
Willbur
@Lorentzos Roussos
Уппппсссс... Я еще не видел такого болтуна. (Что ничего не значит).
Я использую свой "NewBar-индикатор", чтобы автоматически натягивать стопы на максимум или минимум предыдущего бара.
(На самом деле, это немного сложнее, так как я считаю "Innenstaebe и Aussenstaebe" (eng. "внутренние и внешние движения" ???). Не знаю, какой правильный перевод.
Но я собираюсь использовать это только на ликвидных рынках, которые имеют по крайней мере двадцать - до нескольких сотен тиков в минуту.
Я не думаю, что найду период в десять минут без тиков.
В любом случае, программа должна уметь это обрабатывать.
Спасибо!
Willbur
Что вы имеете в виду под "Вы используете iTime"? Я так понял, что "iTime" - это просто переменная в вашей программе - вы можете назвать ее "Bert" или "Clarly", если хотите ?!!?
- - - - -
Сегодня я провел несколько тестов. И я обнаружил некоторые из упомянутых вами разрывов.
Например, S&P500 в 20:34 есть бар, за 20:35 и 20:36 я не получил ни тиков, ни баров от сервера (ActiveTrades). Следующие тики появились в 20:37.
Впоследствии на графике нет баров для этих периодов (см. прикрепленный график M1).
Я не проверял, но думаю, что в функции CopyRates() также нет баров для этого времени.
Думаю, вам стоит проверить свой код в этот момент.
Я бы предположил, что это будет указывать три первых тика бара 20:37 как новые бары.
(TimeCurrent() прыгает с 20:34 до 20:37! Вам нужно добавить PeriodeSeconds() три раза, чтобы достичь этого).
void OnTick()
{
//--- if(TimeCurrent()>=projection)
{Print("New Bar "+TimeToString(projection,TIME_DATE|TIME_MINUTES));
projection=projection+PeriodSeconds();
}
Willbur
Привет всем,
Если кто-то еще ищет... вот фрагмент моего кода для обеспечения открытия только одной сделки на бар.
ibars можно заменить на bars, а disabletrading = 1 означает ничего не делать. Часть с барами можно понять, используя то, что обычно публикуется. Поместите BarsCurr = 0 в части инициализации и BarsCurr = Bars в части кода ордера на покупку/продажу.
Однако у меня есть проблема, я пытаюсь реализовать закрытие ордера по обратному сигналу... есть идеи?
Поскольку дебаты о распознавании NewBars немного затянулись, я кратко подведу итоги.
Техническая среда:Если сервер обнаруживает изменение (новая сделка или новое определение цены), он посылает сигнал на терминал. Терминальная программа запускает процедуру OnTick ().
С помощью этого сигнала мы получаем следующую информацию:
Time Current () - время сервера, когда был отправлен тик.
Информация о последнем тике - SymbolInfoTick().
- Время сервера, когда возник тик
- Ask
- Ставка
- Последняя цена (не у всех провайдеров)
- флаг, указывающий на то, что было изменено.
Информация о текущем баре - CopyRates()
- "имя" бара, например, "10:20:00".
- Open-High-Low-Close
Распознавание нового бара (например, Period = M1).
Поскольку сервер посылает сигнал только в том случае, если что-то изменилось,
бары с именем "hh.mm:00" могут отображаться позже, чем "hh:mm:00".
Это может вызвать особые ситуации для символов с низкой ликвидностью.
Решения, работающие с длительностью периода, этого не обнаруживают:
TimeCurrent() bars "name"
Последний тик 10:10:07 10.10:00
Next Tick 10:11:30 10:11:00
Нет с этим (Ноль тиков в периоде):
TimeCurrent() bars "name"
Последний тик 10:10:30 10:10:00
Next Tick 10:13:40 10:13:00 Бар 10:12:00 отсутствует!
Очень редко я встречал ситуации (при очень высокой нагрузке на сервер?), когда время сервера уже перешло в следующий период, а бары - нет.
TimeCurrent() bars "name"
Последний тик 10:10:00 10:09:00
Следующий тик 10:10:00 10:10:00
Вывод:
Можно использовать TimeCurrent(), чтобы подавить ненужные CopyRates().
Когда TimeCurent() достигает нового периода, необходимо проверить, переключается ли бар.
Это возвращает меня к коду, который Ален привел в обсуждение очень рано:
https://www.mql5.com/en/forum/22983
Уиллбур
@emeka Mbanefo
В моем руководстве не упоминается функция с именем "iBars".
Вы уверены, что это код MQL5?
Willbur
@emeka Mbanefo
В моем руководстве не упоминается функция "iBars".
Вы уверены, что это код для MQL5?
Willbur
А, она не для mql5. Она для mql4, я думаю. Тем не менее, iBars - это я так, играючи. Его Bars - это общая функция, как я уже говорил ранее.
Все еще жду помощи с кодом разворота сигнала.
Спасибо.
А, это не для mql5. Это для mql4, я думаю. Тем не менее, iBars - это моя игра. Его Bars - это общая функция, как я уже говорил ранее.
Все еще жду помощи с кодом разворота сигнала.
Спасибо.