Я тоже со вчерашнего дня ;) А правильное название, кажется,"Обновленный 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 - далеко не самый лучший интерфейс по сравнению со всеми остальными дерьмовыми вещами вокруг.
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. "внутренние и внешние движения" ???). Не знаю, какой правильный перевод.
Но я собираюсь использовать это только на ликвидных рынках, которые имеют по крайней мере двадцать - до нескольких сотен тиков в минуту.
Я не думаю, что найду период в десять минут без тиков.
В любом случае, программа должна уметь это обрабатывать.
Уппппсссс... Я еще не видел такого болтуна. (Что ничего не значит).
Я использую свой "NewBar-индикатор", чтобы автоматически натягивать стопы на максимум или минимум предыдущего бара.
(На самом деле, это немного сложнее, так как я считаю "Innenstaebe и Aussenstaebe" (eng. "внутренние и внешние движения" ???). Не знаю, какой правильный перевод.
Но я собираюсь использовать это только на ликвидных рынках, которые имеют по крайней мере двадцать - до нескольких сотен тиков в минуту.
Я не думаю, что найду период в десять минут без тиков.
В любом случае, программа должна уметь это обрабатывать.
Спасибо!
Willbur
Вы используете iTime, если нет нового бара, он все равно не сработает. Вы в безопасности.
Вы используете iTime, если нет нового бара, он все равно не сработает. Вы в безопасности <br / translate="no">
Что вы имеете в виду под "Вы используете 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(); }
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() достигает нового периода, необходимо проверить, переключается ли бар.
Это возвращает меня к коду, который Ален привел в обсуждение очень рано:
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 - это общая функция, как я уже говорил ранее.
Все еще жду помощи с кодом разворота сигнала.
Спасибо.