MQL4: Работа функции ChartSetSymbolPeriod

 

Добрый день.

Проблема следующая: функция ChartSetSymbolPeriod отлично работает с онлайн чартами, но она не хочет менять таймфрейм на оффлайновый, например, Н2. 

Если ли способ изменить таймфрейм открытого оффлайн чарта?

 
Boris.Kurbin:

Добрый день.

Проблема следующая: функция ChartSetSymbolPeriod отлично работает с онлайн чартами, но она не хочет менять таймфрейм на оффлайновый, например, Н2. 

Если ли способ изменить таймфрейм открытого оффлайн чарта?

  1. Закрыть чарт.
  2. Открыть новый.
Соответственно, для этого управляющее воздействие должно исходить от программы, расположенной на другом чарте.

 
Ihor Herasko:

  1. Закрыть чарт.
  2. Открыть новый.
Соответственно, для этого управляющее воздействие должно исходить от программы, расположенной на другом чарте.

Сейчас я так и делаю.

Но это не удобно тем, что мешает работать на других чартах, фокус постоянно перемещается на новый открывающийся чарт.

При смене таймфрейма или инструмента у уже открытого чарта такого не происходит.

 
Boris.Kurbin:

Сейчас я так и делаю.

Но это не удобно тем, что мешает работать на других чартах, фокус постоянно перемещается на новый открывающийся чарт.

При смене таймфрейма или инструмента у уже открытого чарта такого не происходит.

Фокус можно вернуть при помощи WinAPI. Ведь, если работаете с оффлайн-чартами, то в любом случае требуется разрешение на вызов функций из DLL.

 
Ihor Herasko:

Фокус можно вернуть при помощи WinAPI. Ведь, если работаете с оффлайн-чартами, то в любом случае требуется разрешение на вызов функций из DLL.

Подскажите, пожалуйста, как вернуть фокус с помощью WinAPI.

 
Boris.Kurbin:

Подскажите, пожалуйста, как вернуть фокус с помощью WinAPI.

Оказалось, что даже WinAPI не нужно )) Все есть в MQL:

   ChartSetInteger(0, CHART_BRING_TO_TOP, true);
 
Ihor Herasko:

Оказалось, что даже WinAPI не нужно )) Все есть в MQL:

Спасибо, но даже кратковременная потеря фокуса с текущего чарта очень неудобна.

Возвращаясь к начальному вопросу: может быть кто-то знает почему функция ChartSetSymbolPeriod не меняет таймфрейм у оффлайн чарта?

В описании к функции ничего про такую ее особенность не написано.

Может быть я что-то неправильно делаю?

 
Boris.Kurbin:

Спасибо, но даже кратковременная потеря фокуса с текущего чарта очень неудобна.

Возвращаясь к начальному вопросу: может быть кто-то знает почему функция ChartSetSymbolPeriod не меняет таймфрейм у оффлайн чарта?

Оффлайн-чарт - это не полноценный чарт, т. к. он не имеет подключения к потоку котировок. Это что-то вроде кастомного символа в МТ5. А потому для такого чарта нет возможности переключения ТФ. Такой возможности нет даже у пользователя:


 

Мне кажется все немного хитрее.

В описании функции ChartSetSymbolPeriod написано: Функция работает асинхронно, то есть отдает команду и не ждет окончания ее выполнения. Отданная команда поступает в очередь сообщений графика и выполняется только после обработки всех предыдущих команд.

Возвращает true в случае удачного помещения команды в очередь графика, иначе false.

При выполнении на оффлайн чарте функция возвращает true, т.е. команда успешно помещается в очередь. Но вот видимо эта очередь не обрабатывается для оффлайн чарта. К сожалению подобные вещи нигде не описаны.

 
Ihor Herasko:

Оффлайн-чарт - это не полноценный чарт, т. к. он не имеет подключения к потоку котировок. Это что-то вроде кастомного символа в МТ5. А потому для такого чарта нет возможности переключения ТФ. Такой возможности нет даже у пользователя:


в настройках панели

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