Пожелания к MQL5 - страница 99

 
Henry_White >>:

Что хотелось бы увидеть в следующих релизах:

  1. Возможность выполнять свои процедуры вне контента обработчика тиков (для МТ4 это start()) (например, в отдельном треде, для расчета статистики, оптимизации и пр.),
  2. простейшие функции по обработке мыши. Например, на событие "OnClick" возможность получить координаты указателя в размерности МТ (по Х - индекс бара, по У - У-координату текущего окна.

1. Что сейчас мешает?

2. В MQL5 советники будут иметь возможность обрабатывать события окна (ЕМНИП).

 
TheXpert >>:

1. Что сейчас мешает?

Ну если Вы знаете как, буду очень признателен, если поделитесь этим умением/знанием.

 
TheXpert >>:

2. В MQL5 советники будут иметь возможность обрабатывать события окна (ЕМНИП).

Обработчик события ChartEvent будет доступен только в экспертах, кстати... Довольно странная дискриминация )) Имхо в индикаторах эта потребность ничуть не меньше (в экспертах, по мне, это как раз нафиг не нужно).

 
Henry_White >>:

Ну если Вы знаете как, буду очень признателен, если поделитесь этим умением/знанием.

Не как два пальца об асвальт, но можно. Подключить длл, расчеты вызывать в новом потоке -- здесь WinAPI поможет, окончание по таймеру или коллбэку.

Henry_White >>:

Обработчик события ChartEvent будет доступен только в экспертах, кстати... Довольно странная дискриминация ))

Мне тоже не нравится. Но сейчас индюки не привязаны к графику.

 
TheXpert >>:

Не как два пальца об асвальт, но можно. Подключить длл, расчеты вызывать в новом потоке -- здесь WinAPI поможет, окончание по таймеру или коллбэку.

Я думал о варианте c DLL, но мне не совсем понятно как из длл получить КОРРЕКТНО доступ к тайм-сериям, плюс к еще к значениям более чем 10 различных индикаторов, и все это на приличную глубину по истории. А если учесть, что время обсчета занимает более минуты (работаю на минутках), то совершенно непонятно, куда будут ссылаться указатели DLL после добавления нового бара в терминале. А еще ведь нужно вернуть пару десятков рассчитанных параметров, а где-то еще и всякой графики накидать на ценовой ряд. Нетривиально, в общем, получается...

Посмотрев на все это и прикинув, сколько времени у меня уйдет на эксперименты и различные проверки и отладку, я написал тайм-кластерную обработку в MQL... Это работает, но... Некрасиво это. А душа то просит! ))) Да и на дворе уже 21 век... А хочется же соответствовать эпохе ))

 

Предлагаю уточнить (определить) понятие "пункт".

Пункт - это 5я значащая цифра: 1.2345.

Если котировка представлена ещё одним разрядом (1.23456) и спред = 0.00018, то спред в пунктах составляет 1.8 п, а не 18 п.

Это позволит внсти единообразие в терминологию и избегать путаницы.

 
SK. >>:

Предлагаю уточнить (определить) понятие "пункт".

Пункт - это 5я значащая цифра: 1.2345.

Если котировка представлена ещё одним разрядом (1.23456) и спред = 0.00018, то спред в пунктах составляет 1.8 п, а не 18 п.

Это позволит внсти единообразие в терминологию и избегать путаницы.

Совершенно верно - брокеры на своих сайтах пишут "spread 1.8", а не 18 - уж они то точно знают что делают :)

 

Функция OnCalculate() вызывается только в пользовательских индикаторах
при необходимости произвести расчет значений индикатора по событию Calculate.

Я пока не представляю, как мне сделать индикатор с объектами да еще без знания количества измененных баров

 

Вижу есть функция printf

а как было бы здорово получить еще sprintf



 
Roffild >>:

Я пока не представляю, как мне сделать индикатор с объектами да еще без знания количества измененных баров

В справке по MQL5 указано:

int OnCalculate (const int rates_total, // размер входных таймсерий
const int prev_calculated, // обработано баров на предыдущем вызове
const datetime& time[], // Time
const double& open[], // Open
const double& high[], // High
const double& low[], // Low
const double& close[], // Close
const long& tick_volume[], // Tick Volume
const long& volume[], // Real Volume
const int& spread[] // Spread
);

Необходимо отметить связь между значением, возвращаемым функцией OnCalculate() и вторым входным параметром prev_calculated. Параметр prev_calculated при вызове функции содержит значение, которое вернула функция OnCalculate() на предыдущем вызове. Это позволяет реализовать экономные алгоритмы расчета пользовательского индикатора с тем, чтобы избежать повторных расчетов для тех баров, которые не изменились с предыдущего запуска этой функции.

Для этого обычно достаточно вернуть значение параметра rates_total, которое содержит количество баров при текущем вызове функции. Если с момента последнего вызова функции OnCalculate() ценовые данные были изменены (подкачана более глубокая история или были заполнены пропуски истории), то значение входного параметра prev_calculated будет установлено в нулевое значение самим терминалом.

Причина обращения: