Индикатор, Нужна консультация по авто-управлению ДИСТАНЦИЕЙ между текстом (МТ-4)

 

Здравствуйте уважаемые програмисты!
Проконсультируйте пожалуйста:

Делаем советник в виде индикатора! его задача - искать на графике ПАТТЕРН, и над барами писать текст (многострочный (!), напр.:

строка #1 "название сигнала"
строка #2 "% вероятности"
строка #3 "значёк" (стрелока)

Проблема в том, что ЕСЛИ задавать ФИКСИРОВАННОЕ расстояние между строками = напр. 25 пипс, то на м5 всё красиво ... а на Н1 = строки налазят друг-ну-друга (в этом и проблема фиксированного текста (!!!)

  

Подскажите пожалуйста - КАК можно сделать "автоматическое вычисление" дистанции между строчек при изменении ТФ или "высоты" графика при смещении графика чучуть-влево , или по высоте (????!!!)

..... на ум приходит только одно:

1) "получить" текущую высоту графика (мин. и макс.цены) :


2) Макс цена - Мин.цена = "высота графика в pips" и её принимаем всегда за 100%

3) вместо "фиксированной дистанции между строками (25 pips) - задаём дистанцию В ПРОЦЕНТАХ (напр. 2% от высоты графика из п.2))


..... пообщался с одним програмистом - он говорит == НЕЛЬЗЯ ДВИГАТЬ ОБЪЕКТЫ ... НУ ВОТ НЕЛЬЗЯ ....... чтобы после перелистывания графика = по новой расположить многострочный текст ТАК, чтобы он не налазил друг-ну-друга == это нужно после перелистывания графика == УДАЛЯТЬ ВСЕ НАДПИСИ, И ПЕРЕРИСОВЫВАТЬ ИХ ПО-НОВОЙ С УЧЁТОМ НОВОЙ ВЫСОТЫ ГРАФИКА (п.2) (!)


..... тогда продолжаю кумекать == ОК, А ЧТО ЕСЛИ = делать отрисовку ТОЛЬКО В ЭКРАННОЙ ЧАСТИ ГРАФИКА ???!

Он говорит = ок, НОВЫЕ сигналы напишет КОРРЕКТНО, а те что остались == ИЛИ снова налезут друг-на-друга , ИЛИ наоборот = растянутся ещё шире (вверх и вниз друг-от-друга) ТАК КАК "НЕЛЬЗЯ ДВИГАТЬ УЖЕ НАРИСОВАННЫЕ ОБЪЕКТЫ", а нужно только их удалять , и перерисовать заново (!)


Вопрос к Вам = кто-нибудь уже сталкивался с подобным ??????? как решили эту задачу ??? )))
(чтобы при любом масштабе и высоте графика = многострочный текст возвращался к нормальному расстоянию между строк (если мерять  линейкой визуально == 3 мм на глазок ) ... т.е. меж-строчный интервал сделать ДИНАМИЧЕСКИМ) ????? )))))))))

Просто НЕ ХОЧЕТСЯ делать всю надпись В ОДНУ СТРОКУ , и под углом 45* (!) , так как ВИЗУАЛЬНО УДОБНЕЕ когда текст ГОРИЗОНТАЛЬНЫЙ, и в 2-3 строки :)

Подскажите пожалуйста (поделитесь опытом)


Благодарю ))

 
Vitaliy Kostrubko:


Изучите этот короткий код и он вам может поможет. Реализовано все на Canvas.

Плюс в канвас еще тот, что для МТ4 и МТ5 код будет практически одинаковым.

Файлы:
 
Vitaliy Kostrubko:

Здравствуйте уважаемые програмисты!
Проконсультируйте пожалуйста:

...


Благодарю ))

Рисуйте на канвасе:

Документация по MQL5: Стандартная библиотека / Пользовательская графика / CCanvas
Документация по MQL5: Стандартная библиотека / Пользовательская графика / CCanvas
  • www.mql5.com
Стандартная библиотека / Пользовательская графика / CCanvas - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Упс... Николай опередил...
 

Вы правильно думаете.

//подсчитывает количество пунктов цены в одном пикселе
double GetPointsInPixel(long eChartId, int eWindow)
   {
   double eMin=EMPTY_VALUE;
   ChartGetDouble(eChartId,CHART_PRICE_MIN,eWindow,eMin);
   if(eMin==EMPTY_VALUE) return(0);
   double eMax=EMPTY_VALUE;
   ChartGetDouble(eChartId,CHART_PRICE_MAX,eWindow,eMax);
   if(eMax==EMPTY_VALUE) return(0);
   long ePixels=-1;
   ChartGetInteger(eChartId,CHART_HEIGHT_IN_PIXELS,eWindow,ePixels);
   if(ePixels<=0) return(0);
   return(double(eMax-eMin)/ePixels);
   }

double eIndent=GetPointsInPixel(eChartId,eWindow);

Дальше эту величину прибавлять/отнимать к необходимой цене, при изменении событий:

-смены таймфрейма,

-увеличения/уменьшения графика,

-сжимания шкалы цены.

 
Nikolai Semko:

Изучите этот короткий код и он вам может поможет. Реализовано все на Canvas.

Плюс в канвас еще тот, что для МТ4 и МТ5 код будет практически одинаковым.

Ок, Благодарю )

 
Artyom Trishkin:
Упс... Николай опередил...

... ))))))Главное, что мысли совпали ))))
Благодарю )))))

 
Aleksei Stepanenko:

Вы правильно думаете.

double eIndent=GetPointsInPixel(eChartId,eWindow);

Дальше эту величину прибавлять/отнимать к необходимой цене, при изменении событий:

-смены таймфрейма,

-увеличения/уменьшения графика,

-сжимания шкалы цены.

Благодарю ))))))))

 

Vitaliy Kostrubko:

Aleksei Stepanenko:

Вы правильно думаете.

double eIndent=GetPointsInPixel(eChartId,eWindow);

Дальше эту величину прибавлять/отнимать к необходимой цене, при изменении событий:

-смены таймфрейма,

-увеличения/уменьшения графика,

-сжимания шкалы цены.

Благодарю ))))))))

И передайте тому горе-консультанту, что ему надо начать изучать язык, а не примеры ****кодеров.

 
Alexey Viktorov:

И передайте тому горе-консультанту, что ему надо начать изучать язык, а не примеры ****кодеров.

Принял )))))
... Время показывает, что даже за 10 лет опыта програмирования самых разных советникоа (разные уровни сложности) == один фиг НЕДОСТАТОЧНО, чтобы знать ВСЮ сферу  кодинга )
так как  за эти 10 лет - можно стать супер-профи в 2/3 всего языка програмирования ... и 1/3 вообще незнать )) 
поэтому обижаться  - эт лишнее )) , а вот ДОИЗУЧИТЬ эту 1/3 == дело индивидуальное )).

.... просто он больше заинтересован в "ХИТРЫХ АЛГОРИТМАХ, приносящих ПРОФИТ ... а "мультики" писать - не его интерес ... 

Но ваш пример ПОКАЖУ ему обязательно ))
Благодарю )))

 
Vitaliy Kostrubko:

Принял )))))
... Время показывает, что даже за 10 лет опыта програмирования самых разных советникоа (разные уровни сложности) == один фиг НЕДОСТАТОЧНО, чтобы знать ВСЮ сферу  кодинга )
так как  за эти 10 лет - можно стать супер-профи в 2/3 всего языка програмирования ... и 1/3 вообще незнать )) 
поэтому обижаться  - эт лишнее )) , а вот ДОИЗУЧИТЬ эту 1/3 == дело индивидуальное )).

.... просто он больше заинтересован в "ХИТРЫХ АЛГОРИТМАХ, приносящих ПРОФИТ ... а "мультики" писать - не его интерес ... 

Но ваш пример ПОКАЖУ ему обязательно ))
Благодарю )))

Не надо ссылаться на меня. Этот вариант, хоть я и использовал, озвучил его не я. Я только поддержал тёзку в его мнении.

А если "программист" говорит о невозможности переместить графический объект, то это вообще не программист и даже не пародия на программиста, а просто ****кодер.
Причина обращения: