Новая версия платформы MetaTrader 5 build 3620: улучшения веб-терминала, поддержка ONNX и ускоренное умножение матриц в MQL5 - страница 15
![MQL5 - Язык торговых стратегий для клиентского терминала MetaTrader 5](https://c.mql5.com/i/registerlandings/logo-2.png)
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Просьба к разработчикам - ещё бы ко всем наворотам добавить штатные функции New Bar и Market Close, тогда вообще бы цены не было!
С уважением, Владимир.
Не представляю себе реализацию штатной newBar. Лично у меня сразу возникает вопрос "вам на какой момент времени?/для какой копии данных?"
Полученные данные не зависят от предыдущих запросов.
В примере выше массивы time1 и time2 могут отличаться. Вероятность маленькая, но чисто технически это возможно даже без Sleep(). В таком случае для данных time1 newBar должна вернуть false, а для time2 - true.
Поэтому, как по мне, newBar() должна быть у каждого своя и вычисляться на собственноручно полученных данных. Тем более, это очень примитивная вещь, с которой справится любой
P.S. Пример кривой и для 4ки - извините. Но для 5ки суть не меняется.
P.S.2 Это как раз косвенно сопряжено с "Новая функция CopySeries для копирования синхронизированных таймсерий из MqlRates в отдельные массивы" - получить все необходимые синхронизированные данные, после чего их обрабатывать.
Не представляю себе реализацию штатной newBar. Лично у меня сразу возникает вопрос "вам на какой момент времени?/для какой копии данных?"
Полученные данные не зависят от предыдущих запросов.
В примере выше массивы time1 и time2 могут отличаться. Вероятность маленькая, но чисто технически это возможно даже без Sleep(). В таком случае для данных time1 newBar должна вернуть false, а для time2 - true.
Поэтому, как по мне, newBar() должна быть у каждого своя и вычисляться на собственноручно полученных данных. Тем более, это очень примитивная вещь, с которой справится любой
P.S. Пример кривой и для 4ки - извините. Но для 5ки суть не меняется.
Ничего супер сложного, Владислав.
Я, будь разработчиком, реализовал бы это событием терминала. Причем в параметрах, по типу как функция OnBookEvent(const string& symbol); передал бы Символ и Таймфрейм, где появился новый бар. Ну или хотя бы по текущему символу.
Ведь большое количество советников отрабатывает ряд условий только по событию появления нового бара.
Конечно, индикатор может быть ещё даже не успеет просчитать новый тик при вызове этой функции. Но это же не гарантирует и проверка значений на OnTick()
Поддерживаю Владимира. Так называемый "костыль" можно собрать практически всегда. Функции ArrayCopy(...) или ArrayMaximum(...), например, тоже можно заменить простым циклом. Но никто не призывает убрать их за ненадобностью. Функция NewBar тоже была бы полезна. Я бы предложил даже событие терминала NewBar с соответствующей функцией OnNewBar(). Но уважаемые эксперты форума почему то в большинстве случаев предлагают именно соорудить "костыль", вместо того чтобы поддержать идею улучшения языка MQL или исправления ошибок.
Уверен, что в большинстве случаев мы можем написать рабочий код и без предлагаемых нововведений и/или исправлений. Но цель наших постов, именно улучшение либо исправление ошибок языка MQL. А не просьба совета, как поступить.
P.S. Я и сам недавно написал костыль, чтобы советник правильно работал, используя функцию OnTradeTransaction. Но всё же надеюсь, разработчики проверят эту ошибку и исправят. Функция должна работать согласно документации, а не как ей захочется.
за одно Отменить проскальзывания и реджекты)
не понятно в чем ценность сейчас функции newbar, я вот вижу только не удобства, как минимум ловить срабатывания сигнала, обвешаться не нужными проверками,
сколько лопухов пропустит сигнал пока поймет это
кому действительно нужно новый бар использовать тому не составит труда сделать
Нашел закономерность в повторных ошибочных срабатываниях функции OnTradeTransaction.
Вот здесь описал всё подробно. По моим наблюдениям ошибка проявляется только при частичном срабатывании отложенного ордера, происходящем в крайне малый промежуток времени, исчисляемый несколькими миллисекундами. Проверялось мною на демо счёте брокера Открытие.
Нашел закономерность в повторных ошибочных срабатываниях функции OnTradeTransaction.
Вот здесь описал всё подробно. По моим наблюдениям ошибка проявляется только при частичном срабатывании отложенного ордера, происходящем в крайне малый промежуток времени, исчисляемый несколькими миллисекундами. Проверялось мною на демо счёте брокера Открытие.
это не совсем функция игнорируйте её она не для алготрейдинга а скорее высылать отчеты на почту и мессенджеры
это не совсем функция игнорируйте её она не для алготрейдинга а скорее высылать отчеты на почту и мессенджеры
У кого-то для только для отчётов, а у кого-то вся логика работы с ордерами и сделками на ней держится.
Не представляю себе реализацию штатной newBar. Лично у меня сразу возникает вопрос "вам на какой момент времени?/для какой копии данных?"
Здравствуйте, Владислав! Отвечаю на первую часть вопроса, которая выделена жёлтым цветом - на момент iTime(_Symbol, PERIOD_CURRENT,0). Вторая часть Вашего вопроса лично для меня не важна. Если у кого-то есть свои предпочтения по копиям данных, то пусть сами и озвучивают.
С уважением, Владимир.
...Я, будь разработчиком, реализовал бы это событием терминала. Причем в параметрах, по типу как функция OnBookEvent(const string& symbol); передал бы Символ и Таймфрейм, где появился новый бар. Ну или хотя бы по текущему символу.
Ведь большое количество советников отрабатывает ряд условий только по событию появления нового бара...
К примеру, у конкурирующей организации есть такая функция - OnBar().
К примеру, у конкурирующей организации есть такая функция - OnBar().
Да интересный вариант. Я даже и не задумывался о реализации в таком виде. Ведь действительно по приходу нового бара выполняются исключительно определённые действия, а основное по тику или по времени.
К примеру, у конкурирующей организации есть такая функция - OnBar().
Ну вот, украли мою идею (((