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

 

Не работает в подокне индикатора, что делаю не так?

  datetime dt =0; 
  double price =0; 
  int window= ChartWindowFind();
  ChartXYToTimePrice(0,5,34,window,dt,price);
  PrintFormat("Window=%d  =>  time=%s  Price=%G",window,TimeToString(dt),price);

2017.10.15 05:35:36.060	i-Stp EURCHF,M30: Window=0  =>  _Time=2017.09.29 22:00  _Price=0.904348
  datetime dt =0; 
  double price =0; 
  int window= ChartWindowFind();
// ChartXYToTimePrice(0,5,34,window,dt,price);
  PrintFormat("Window=%d  =>  _Time=%s  _Price=%G",window,TimeToString(dt),price); 

2017.10.15 05:37:13.997	i-Stp EURCHF,M30: Window=1  =>  _Time=1970.01.01 00:00  _Price=0
 
Yury Kulikov:

Параметры MouseMove(x, y, key) используются. Определяется положение курсора и нажатие кнопки мышки, основная линия перемещается средствами mql, а не возможностями интерфейса терминала, т.е. программа следит не за перемещением линии, а за положением курсора относительно линии. Одновременное движение линий обеспечивается тем, что синхронно изменяются координаты основной и зависимых линий.

Странно, я совсем не использую координаты мыши, лишь реагируют на id == CHARTEVENT_MOUSE_MOVE. И все отлично работает, что, собственно, и логично.

Для плавности кастомный DND не требуется. Если делать касмтоный DND, тогда и делать кастомные объекты через канвас. Уж там точно никакого лага быть не может, т.к. объект всегда один.

 
Vitaly Muzichenko:

Не работает в подокне индикатора, что делаю не так?

а что ожидалось и что именно не работает?
 
Kirill Belousov:
а что ожидалось и что именно не работает?

Ожидалось преобразовать координаты в подокне, и получить цену.

Работает в основном окне, в подокнах не работает, что и видно по принтам.

Так-же функция подменяет номер подокна на "0", то есть на главное:

Преобразует координаты  X и Y графика в значения время и цена.
bool  ChartXYToTimePrice(
   long           chart_id,     // идентификатор графика
   int            x,            // координата X на графике
   int            y,            // координата Y на графике
   int&           sub_window,   // номер подокна
   datetime&      time,         // время на графике
   double&        price         // цена на графике
   );
 

Ошибка при компиляции

int f() { return 1; }
void OnStart() export
{
        for   ( int i = f();           ;) {} //(1) нормально
        for   (            ;int i = f();) {} //(2) 'i' - unexpected token
        while (             int i = f() ) {} //(3) 'i' - unexpected token
}
 
Vitaly Muzichenko:

Ожидалось преобразовать координаты в подокне, и получить цену.

Работает в основном окне, в подокнах не работает, что и видно по принтам.

Так-же функция подменяет номер подокна на "0", то есть на главное:

Из справки по функции: X и Y - координаты отсчитываются от левого верхнего угла главного окна графика.

х=5, y=34 относится тоже к главному окну, поэтому на выходе window=0

Попробуй Y увеличить на высоту главного окна, чтобы "очутиться" в другом окне

 
A100:

Ошибка при компиляции

а что, внутри while(...) допустимо объявлять и присваивать вместо проверки условия?
 
Kirill Belousov:

Из справки по функции: X и Y - координаты отсчитываются от левого верхнего угла главного окна графика.

х=5, y=34 относится тоже к главному окну, поэтому на выходе window=0

Попробуй Y увеличить на высоту главного окна, чтобы "очутиться" в другом окне

Это совсем не ответ, и не выход.

Указываем номер подокна, а это может быть и 3 и 4, как тогда указывать координаты?

В функции явная ошибка.

 
Vitaly Muzichenko:

Это совсем не ответ, и не выход.

Указываем номер подокна, а это может быть и 3 и 4, как тогда указывать координаты?

В функции явная ошибка.

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

Пусть разработчики проверят. С++ компилирует, хотя в устаревших компиляторах строка (2) [но не (3)] может вызывать ошибку

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