Цена в пиксель - страница 2

 
tol64:

Можно. 

С помощью вот этого класса: Класс для создания пользовательской графики >>> 

Интересная заморочка. ) 

Вот и пришел ООП в мою жизнь)) А есть вариант как-нибудь по-проще, по процедурному?
 
Tapochun:
Вот и пришел ООП в мою жизнь)) А есть вариант как-нибудь по-проще, по процедурному?

Давайте лучше я порекомендую Вам статью, с помощью которой Вы сможете разобраться с ООП: Основы объектно-ориентированного программирования. Тем более воспользоваться готовым классом это не тоже самое, что и самому его реализовать.

И там заморочка даже не с этим. В общем, главное начать и всё "само" придёт. ))

Разберитесь, как переводить цену и время в координаты и наоборот:

ChartTimePriceToXY() >>>

ChartXYToTimePrice() >>>

А дальше уже совсем понятно...

 

Можно и попроще, но выглядеть будет коряво. А при масштабировании еще хуже.

 

Тут поверх DRAW_COLOR_CANDLES рисуется DRAW_HISTOGRAM2 с цветом фона. Стандартного способа задать цвет фона свечи нет.

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

Применяя канву, почти всегда приходиться обрабатывать все события связанные с графиком: масштабирование, сдвиг, изменение размера (например когда добавишь индикатор не в основное окно) и пр.

В общем дерзайте, а так то можно и гейму на канве замутить.
 

 
tol64:

Давайте лучше я порекомендую Вам статью, с помощью которой Вы сможете разобраться с ООП: Основы объектно-ориентированного программирования. Тем более воспользоваться готовым классом это не тоже самое, что и самому его реализовать.

И там заморочка даже не с этим. В общем, главное начать и всё "само" придёт. ))

Разберитесь, как переводить цену и время в координаты и наоборот:

ChartTimePriceToXY() >>>

ChartXYToTimePrice() >>>

А дальше уже совсем понятно...

Спасибо. Я так понял, идея такая:

1. "Обводим" свечу;

2. При образовании новой свечи/любой прокрутке сдвигаем обводку (привязываем к пикселям) вместе со смещением графика? 

Если я правильно понял, ради визуального эффекта, слишком много дел будет. Нужно чтобы обвел и забыл. Да, и вот интересный вопрос: чем обводить? Трендовая линия, как уже было сказано выше, "цепляется" к центру свечи. А нужно от центра по половинке в каждую сторону.

 

 
kPVT:

Можно и попроще, но выглядеть будет коряво. А при масштабировании еще хуже.

 

Тут поверх DRAW_COLOR_CANDLES рисуется DRAW_HISTOGRAM2 с цветом фона. Стандартного способа задать цвет фона свечи нет.

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

Применяя канву, почти всегда приходиться обрабатывать все события связанные с графиком: масштабирование, сдвиг, изменение размера (например когда добавишь индикатор не в основное окно) и пр.

В общем дерзайте, а так то можно и гейму на канве замутить.
 

Спасибо за ответ. Да, у меня была предложенная Вами идея. Про наложение на свечи гистограммы, подумал что будет криво. Жаль что нет других вариантов... простых. Раньше на МТ4 решал вопрос раскраски свечей построением трех трендовых вертикальных линий (тело - толстая, тени - тонкие). Теперь для этого есть графический стиль. Сейчас встала другая задача... может MQ и для ее решения стиль сделают. Чтобы без костылей.

 
Tapochun:

Спасибо. Я так понял, идея такая:

1. "Обводим" свечу;

2. При образовании новой свечи/любой прокрутке сдвигаем обводку (привязываем к пикселям) вместе со смещением графика? 

3. Если я правильно понял, ради визуального эффекта, слишком много дел будет. Нужно чтобы обвел и забыл. Да, и вот интересный вопрос: чем обводить? Трендовая линия, как уже было сказано выше, "цепляется" к центру свечи. А нужно от центра по половинке в каждую сторону.

1. Да.

2. Да.

3. Да, это заморочка. Но интересная и разобравшись один раз, может пригодиться потом для других задач. Обводить с помощью методов класса для создания пользовательской графики. Посмотрите группу Рисование примитивов. Там есть: LineVerticalLineHorizontal и т.д. 

P.S. Также нужно будет определять масштаб графика, чтобы определить длину линий по ширине свечи:

ChartGetInteger(0,CHART_SCALE);
 
Tapochun:

Да, и вот интересный вопрос: чем обводить? Трендовая линия, как уже было сказано выше, "цепляется" к центру свечи. А нужно от центра по половинке в каждую сторону.

При использовании канвы не нужны стандартные графические объекты: трендлайны  и пр. 

На канве по сути все рисуется попиксельно. Есть конечно для упрощения фигуры и линии, но внутри смысл тот же.

Создаешь "холст", с помощью придания цвета/прозрачности нужным пикселям создается картинка.

В нужный момент обновляешь/перерисовываешь весь холст или нужную часть. 

 
Tapochun:

...

Вот так это работает (подсветка линий с помощью обводки на канве):

 

//---

Обвести свечи немного сложнее. При скроллинге графика можно определять состояние левой кнопки мыши и обновлять только тогда, когда она отжата (видно на видео).

 
tol64:

Вот так это работает (подсветка линий с помощью обводки на канве):

Красиво.

А как при этом выглядит график загрузки процессора? Это ресурсоемко? 

 
komposter:

Красиво.

А как при этом выглядит график загрузки процессора? Это ресурсоемко? 

Готовлю тест. Сейчас загружу на полную и посмотрим (видео сделаю). ;)