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

 
Tapochun:
Добрый день. А Вы не в курсе, можно ли делать цветные свечи без заливки? То-есть, выделять разным цветом только границы свечей, а тело свечи, чтобы оставалось таким, как в настройках графика?

Цвет баров отвечает за обводку, цвет свечей отвечает за тела свечей, всё стандартными настройками чарта.

А вот если рисовать индикаторами то да, получается или кривовато или затратно (это если нужно отобразить свои данные). 

 
tol64:

1. Да.

2. Да.

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

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

Понял, спасибо. Теперь знаю что и для чего мне может пригодиться в будущем.
 
kPVT:

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

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

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

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

Ага, координаты всех точек в пикселях, понял. Спасибо!
 
tol64:

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

 

//---

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

Мощно...
 
Urain:

Цвет баров отвечает за обводку, цвет свечей отвечает за тела свечей, всё стандартными настройками чарта.

А вот если рисовать индикаторами то да, получается или кривовато или затратно (это если нужно отобразить свои данные). 

Про это мне известно. Вопрос стоял можно ли отразить рядом, скажем, красную, белую и синюю свечу (тело свечи), но, чтобы цвет баров (тени, границы тела) не был таким же, как цвет тени. Как я понял нет... если использовать стандартные графические построения MT5. Вот если бы было свойство а-ля "отображать обводку баров на переднем фоне" тогда можно было бы использовать DRAW_COLOR_CANDLES, ну, а так, он скрывает и "бары" и "свечи".
 

Canvas, как оказалось, при сдвиге графика остаётся на месте:

 

При перемещении мышки над канвасом в строке состояния отображаются все значения свечи: OHLC. Значит задача сводится к синхронизации ширины свечи на графике и ширины свечи на канвасе

 

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

Цена в пиксель

tol64, 2014.10.19 12:28

...

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

ChartGetInteger(0,CHART_SCALE);

и синхронизации отображения свечи на графике и на канвасе - чтобы не было смещения.

 
komposter:

Красиво.

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

Вот такой результат получился: 

Перерисовка графика производится в таймере через указанное во внешних параметрах количество миллисекунд. Начал от 240 мс и далее уменьшаю интервал каждый раз в 2 раза до 15 мс.

Так как запись видео тоже отнимает ресурсы, то вот скриншот, на котором видно насколько загружен процессор до включения записи видео. На скриншоте запечатлён момент, когда временной интервал для перерисовки равен 500 мс... :



...и 240 мс.



Размер массивов равен 50, а в конце видео я увеличиваю их в 10 раз (до 500 и затем до 1000).

Теперь видео (кстати, при включении записи, в диспетчере задач видно, насколько возросла нагрузка на процессор):

 


 
barabashkakvn:

...

и синхронизации отображения свечи на графике и на канвасе - чтобы не было смещения.

Или более экономный вариант, как показывал здесь:

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

Цена в пиксель

tol64, 2014.10.19 12:50

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

 

//---

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


То есть, перерисовка только в момент отжатия левой кнопки мыши.
 
Да. Для экономной перерисовки (обновления) графики, имеет смысл запускать таймер на обновление только при движении мыши и при нажатой левой клавише.
 
barabashkakvn:
Да. Для экономной перерисовки (обновления) графики, имеет смысл запускать таймер на обновление только при движении мыши и при нажатой левой клавише.
У меня реализовано в OnChartEvent(). Скроллинг графика генерирует событие CHARTEVENT_CHART_CHANGE. Состояние левой кнопки мыши проверяется в CHARTEVENT_MOUSE_MOVE.