Как вывести значение цены в пользовательском TOOLTIP - страница 5

 
Eugeni Neumoin:

Это помогло:

Об этом Игорь говорил в шестом посте этой темы.

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

Как вывести значение цены в пользовательском TOOLTIP

Ihor Herasko, 2017.08.12 11:32

Так и скажите, что речь идет об объектах, которые создаются программно. В этом случае, как и сказали сами же выше - заполняйте ToolTip нужного объекта при каждом перемещении мыши. Чтобы его отлеживать, используйте событие ChartEvent. В обработчике отлавливайте CHART_EVENT_MOUSE_MOVE (на него нужно подписаться). Полученные координаты затем перевести во время и цену при помощи ChartXYToTimePrice и записать в нужный объект.

И ничего нового.
 

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

Потом при выводе тултипа проводится проверка на присутствие внесенных контрольных символов, например ":: ". Это все равно надо делать, так как предполагается дописывание к имеющемуся тултипу информации о цене.

 
Alexey Viktorov:
Об этом Игорь говорил в шестом посте этой темы.
И ничего нового.

У Игоря слишком напряжно сделано - организуется массив объектов.

 
Eugeni Neumoin:

У Игоря слишком напряжно сделано - организуется массив объектов.

А разве список объектов ObjectsTotal() чем-то сильно отличается от массива?

А отфильтровать объекты можно такой строкой

 for(int i = 0; i < ObjectsTotal(0, 0, OBJ_TREND); i++)

или в теле цикла условие, если не нужный нам объект по типу, continue;

или наоборот, если нужный объект, назначаем тултип.

Зависит от количества встречаемых объектов. Если легче перечислить ненужные, то первый вариант. Если легче перечислить нужные, то второй.

 
Alexey Viktorov:

А разве список объектов ObjectsTotal() чем-то сильно отличается от массива?


У Игоря, наверное, массив еще с какими-то целями организуется. Мне хватит и массива, определяемого через ObjectsTotal().

У меня же выше был именно такой код с использованием ObjectsTotal().

А фильтрация объектов - зависит от поставленной задачи.

 

Решение может быть следующим. (Схематично)

Разрешаем обработку перемещения мыши:

   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true); 


В OnChartEvent()

   if (id==CHARTEVENT_MOUSE_MOVE)  // id = 10 // перемещение мыши

     {

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

     }

Cоздаем функцию, например :

string  price(string xxx)

 {

 double cena=0;

// xxx - имя линии, у которой во всплывающей подсказке должно быть выведено значение 

// По точкам привзки линии и по значению времени из глобальной переменной вычисляем значение цены в месте положения курсора мыши  и присваиваем полученное значение переменной cena

 return (string(cena));

}

Вызов всплывающей подсказки :

ObjectSetString(0,nameLine,OBJPROP_TOOLTIP, nameLine +"\n"+price( nameLine ));



 
Eugeni Neumoin #:

Решение может быть следующим.

Разрешаем обработку перемещения мыши:

   ChartSetInteger(0,CHART_EVENT_MOUSE_MOVE,true); 


В OnChartEvent()

   if (id==CHARTEVENT_MOUSE_MOVE)  // id = 10 // перемещение мыши

     {

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

     }

Cоздаем функцию, например :

string  price(string xxx)

 {

 string tmp="";

double cena=0;

// xxx - имя линии, у которой во всплывающей подсказке должно быть выведено значение 

// По точкам привзки линии и по значению времени из глобальной переменной вычисляем значение цены в месте положения курсора мыши  cena

 return (string(cena));

}

Вызов всплывающей подсказки :

ObjectSetString(0,nameLine,OBJPROP_TOOLTIP, nameLine +"\n"+price( nameLine ));



Офигеть… А я ПЯТЬ ЛЕТ всю думалку истерзал и ничего не придумал……………………………

 
Alexey Viktorov #:

Офигеть… А я ПЯТЬ ЛЕТ всю думалку истерзал и ничего не придумал……………………………

Программисты компании Метаквотес как-то решили эту задачу. А раз они это сделали, то решение существует. 

Надеюсь предложенное решение будет работать. 

 
Alexey Viktorov #:

Офигеть… А я ПЯТЬ ЛЕТ всю думалку истерзал и ничего не придумал……………………………

Чуть выше схема алгоритма работает неправильно. ТОчнее, она не работает. 

Стал смотреть, как у меня решена похожая задача с тултипами в программе. И напрашивается достаточно громоздкий вариант.

1) создается массив с названиями линий, выведенных на график, для которых необходимо в тултипах выводить цену.

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

3) Читается тултип вычисленной линии и заменяется текст в тултипе для данной линии. По другому никак.

4) Если через  точку нахождения курсора проходит несколько линий, то для всех этих линий меняем текст тултипа.

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