Ошибки, баги, вопросы - страница 2041

 
Kirill Belousov:
Номер подокна не мы указываем, а нам сообщает функция (это выходной параметр, а не входной) - в каком подокне чарта с указанным ID находится ценовой график и сообщается какая цена и время соответствуют заданным нами координатам X,Y на том графике.

Это понятно, передача параметра по ссыкле. Но вопрос открыт: почему функция не видит, в каком номере подокна установлен индикатор, и не берёт с него данные?

 
Vitaly Muzichenko:

Это понятно, передача параметра по ссыкле. Но вопрос открыт: почему функция не видит, в каком номере подокна установлен индикатор, и не берёт с него данные?

CHART_HEIGHT_IN_PIXELS
 
fxsaber:
CHART_HEIGHT_IN_PIXELS

Это целая история с расчётами, если индикаторов в подокнах несколько, но всё-равно спасибо за уделённое время.

 
Vitaly Muzichenko:

Это целая история с расчётами, если индикаторов в подокнах несколько, но всё-равно спасибо за уделённое время.

https://www.mql5.com/ru/docs/chart_operations/chartwindowfind

Документация по MQL5: Операции с графиками / ChartWindowFind
Документация по MQL5: Операции с графиками / ChartWindowFind
  • www.mql5.com
1. Функция ищет на указанном графике подокно с указанным "коротким именем" индикатора (короткое имя выводится слева вверху подокна) и в случае удачи возвращает номер подокна. Не следует путать короткое имя индикатора и имя файла, которое указывается при создании индикатора функциями iCustom() и IndicatorCreate(). Если короткое наименование...
 

Да эти все функции Я знаю.

Задача стоит простая, нужно объект в 4-м подокне(выделено красным) привязать к цене, в данном случае это -0.02, а координата Y на графике 34


 
Vitaly Muzichenko:

Задача стоит простая, нужно объект в 4-м подокне(выделено красным) привязать к цене, в данном случае это -0.02, а координата Y на графике 34

#property indicator_separate_window

#property indicator_buffers 0 
#property indicator_plots 0

#define CHART_SUBWINDOW_BORDER_SIZE 2 // Размер разделителя подокон

void OnInit()
{
  int X = 0;
  int Y = 0;

  const int SubWindow = ChartWindowFind();
  
  for (int i = 0; i < SubWindow; i++)  
    Y += (int)ChartGetInteger(0, CHART_HEIGHT_IN_PIXELS, i) + CHART_SUBWINDOW_BORDER_SIZE;
  
  int SubWindow2;
  datetime time;
  double Price;
  
  if (ChartXYToTimePrice(0, X, Y, SubWindow2, time, Price))
    Print(SubWindow2);
}

int OnCalculate ( const int rates_total, const int, const int, const double &[] )
{ 
  return(rates_total);
}
 
fxsaber:

Спасибо за готовый вариант, попробую прикрутить к индикаторам.

P.S. Получилось, ещё раз спасибо!


Но остаётся вопрос, зачем в функции тогда вообще указывать номер подокна, если нужно плясать с бубном?

 
Vitaly Muzichenko:

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

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

Kirill Belousov, 2017.10.15 19:50

Номер подокна не мы указываем, а нам сообщает функция (это выходной параметр, а не входной) - в каком подокне чарта с указанным ID находится ценовой график и сообщается какая цена и время соответствуют заданным нами координатам X,Y на том графике.
 
Vitaly Muzichenko:

Спасибо за готовый вариант, попробую прикрутить к индикаторам.

P.S. Получилось, ещё раз спасибо!


Но остаётся вопрос, зачем в функции тогда вообще указывать номер подокна, если нужно плясать с бубном?

Танец можно сократить, используя ChartGetInteger() с вот этим параметром

CHART_WINDOW_YDISTANCE

Дистанция в пикселях по вертикальной оси Y между верхней рамкой подокна индикатора и верхней рамкой главного окна графика. При наступлении событий мыши координаты курсора передаются в координатах главного окна графика, в то время как координаты графических объектов в подокне индикатора задаются относительно верхнего левого угла подокна.

Значение требуется для перевода абсолютных координат главного графика в локальные координаты подокна для корректной работы с графическими объектами, у которых координаты задаются относительно верхнего левого угла рамки подокна.

int     r/o   модификатор - номер подокна

 
Kirill Belousov:

Танец можно сократить, используя ChartGetInteger() с вот этим параметром

CHART_WINDOW_YDISTANCE

Дистанция в пикселях по вертикальной оси Y между верхней рамкой подокна индикатора и верхней рамкой главного окна графика. При наступлении событий мыши координаты курсора передаются в координатах главного окна графика, в то время как координаты графических объектов в подокне индикатора задаются относительно верхнего левого угла подокна.

Значение требуется для перевода абсолютных координат главного графика в локальные координаты подокна для корректной работы с графическими объектами, у которых координаты задаются относительно верхнего левого угла рамки подокна.

int     r/o   модификатор - номер подокна

Спасибо, сократил, результат такой-же, но меньше кода!

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