Новая версия платформы MetaTrader 5 build 3620: улучшения веб-терминала, поддержка ONNX и ускоренное умножение матриц в MQL5 - страница 15

 
MrBrooklin #:

Просьба к разработчикам - ещё бы ко всем наворотам добавить штатные функции New Bar и Market Close, тогда вообще бы цены не было!

С уважением, Владимир.

Не представляю себе реализацию штатной newBar. Лично у меня сразу возникает вопрос "вам на какой момент времени?/для какой копии данных?"

Полученные данные не зависят от предыдущих запросов.

void OnTick()
  {
   datetime time1[10];
   datetime time2[10];
   CopyTime(_Symbol, PERIOD_M1, 0, 10, time1[]);
   Sleep(1000);
   CopyTime(_Symbol, PERIOD_M1, 0, 10, time2[]);
  }

В примере выше массивы time1 и time2 могут отличаться. Вероятность маленькая, но чисто технически это возможно даже без Sleep(). В таком случае для данных time1 newBar должна вернуть false, а для time2 - true.

Поэтому, как по мне, newBar() должна быть у каждого своя и вычисляться на собственноручно полученных данных. Тем более, это очень примитивная вещь, с которой справится любой


P.S. Пример кривой и для 4ки - извините. Но для 5ки суть не меняется.

P.S.2 Это как раз косвенно сопряжено с "Новая функция CopySeries для копирования синхронизированных таймсерий из MqlRates в отдельные массивы" - получить все необходимые синхронизированные данные, после чего их обрабатывать.

 
Vladislav Boyko #:

Не представляю себе реализацию штатной newBar. Лично у меня сразу возникает вопрос "вам на какой момент времени?/для какой копии данных?"

Полученные данные не зависят от предыдущих запросов.

В примере выше массивы time1 и time2 могут отличаться. Вероятность маленькая, но чисто технически это возможно даже без Sleep(). В таком случае для данных time1 newBar должна вернуть false, а для time2 - true.

Поэтому, как по мне, newBar() должна быть у каждого своя и вычисляться на собственноручно полученных данных. Тем более, это очень примитивная вещь, с которой справится любой


P.S. Пример кривой и для 4ки - извините. Но для 5ки суть не меняется.

Ничего супер сложного, Владислав.

Я, будь разработчиком, реализовал бы это событием терминала. Причем в параметрах, по типу как функция OnBookEvent(const string&  symbol);  передал бы Символ и Таймфрейм, где появился новый бар. Ну или хотя бы по текущему символу.

void  OnNewBar(
   const string&              symbol             // символ
   const ENUM_TIMEFRAMES&     timeframes         // таймфрейм
);

Ведь большое количество советников отрабатывает ряд условий только по событию появления нового бара.

Конечно, индикатор может быть ещё даже не успеет просчитать новый тик при вызове этой функции. Но это же не гарантирует и проверка значений на OnTick()

 
Andrey Kaunov #:

Поддерживаю Владимира. Так называемый "костыль" можно собрать практически всегда. Функции ArrayCopy(...) или ArrayMaximum(...), например, тоже можно заменить простым циклом. Но никто не призывает убрать их за ненадобностью. Функция NewBar тоже была бы полезна. Я бы предложил даже событие терминала NewBar с соответствующей функцией OnNewBar(). Но уважаемые эксперты форума почему то в большинстве случаев предлагают именно соорудить "костыль", вместо того чтобы поддержать идею улучшения языка MQL или исправления ошибок.

Уверен, что в большинстве случаев мы можем написать рабочий код и без предлагаемых нововведений и/или исправлений. Но цель наших постов, именно улучшение либо исправление ошибок языка MQL. А не просьба совета, как поступить. 

P.S. Я и сам недавно написал костыль, чтобы советник правильно работал, используя функцию OnTradeTransaction. Но всё же надеюсь, разработчики проверят эту ошибку и исправят. Функция должна работать согласно документации, а не как ей захочется.

за одно Отменить проскальзывания и реджекты)

не понятно в чем ценность сейчас функции newbar, я вот вижу только не удобства, как минимум ловить срабатывания сигнала, обвешаться не нужными проверками,

сколько лопухов пропустит сигнал пока поймет это

кому действительно нужно новый бар использовать тому не составит труда сделать

 

Нашел закономерность в повторных ошибочных срабатываниях функции OnTradeTransaction.

Вот здесь описал всё подробно. По моим наблюдениям ошибка проявляется только при частичном срабатывании отложенного ордера, происходящем в крайне малый промежуток времени, исчисляемый несколькими миллисекундами. Проверялось мною на демо счёте брокера Открытие.

Вопрос о функции OnTradeTransaction
Вопрос о функции OnTradeTransaction
  • 2023.03.20
  • www.mql5.com
Вот и вытекает вопрос: А для чего тогда нужна эта функция обработки события?
 
Andrey Kaunov #:

Нашел закономерность в повторных ошибочных срабатываниях функции OnTradeTransaction.

Вот здесь описал всё подробно. По моим наблюдениям ошибка проявляется только при частичном срабатывании отложенного ордера, происходящем в крайне малый промежуток времени, исчисляемый несколькими миллисекундами. Проверялось мною на демо счёте брокера Открытие.

это не совсем функция игнорируйте её она не для алготрейдинга а скорее высылать отчеты на почту и мессенджеры 

 
BillionerClub #:

это не совсем функция игнорируйте её она не для алготрейдинга а скорее высылать отчеты на почту и мессенджеры 

У кого-то для только для отчётов, а у кого-то вся логика работы с ордерами и сделками на ней держится.

 
Vladislav Boyko #:

Не представляю себе реализацию штатной newBar. Лично у меня сразу возникает вопрос "вам на какой момент времени?/для какой копии данных?"

Здравствуйте, Владислав! Отвечаю на первую часть вопроса, которая выделена жёлтым цветом - на момент iTime(_Symbol, PERIOD_CURRENT,0). Вторая часть Вашего вопроса лично для меня не важна. Если у кого-то есть свои предпочтения по копиям данных, то пусть сами и озвучивают.

С уважением, Владимир.

 
Andrey Kaunov #:

...Я, будь разработчиком, реализовал бы это событием терминала. Причем в параметрах, по типу как функция OnBookEvent(const string&  symbol);  передал бы Символ и Таймфрейм, где появился новый бар. Ну или хотя бы по текущему символу.

Ведь большое количество советников отрабатывает ряд условий только по событию появления нового бара...

К примеру, у конкурирующей организации есть такая функция - OnBar().


 
Denis Kirichenko #:

К примеру, у конкурирующей организации есть такая функция - OnBar().


Да интересный вариант. Я даже и не задумывался о реализации в таком виде. Ведь действительно по приходу нового бара выполняются исключительно определённые действия, а основное по тику или по времени.

 
Denis Kirichenko #:

К примеру, у конкурирующей организации есть такая функция - OnBar().


Ну вот, украли мою идею (((