DirectX - страница 7

 
Aleksey Vyazmikin:

Симпатично. А что с загрузкой процессора при открытии биржи, ну там на Si если стакан поставить?

Есть ли на стакане графическое отображение открытой позиции? Мне вот этого в стандартном стакане очень не хватает.

Процессор грузит хорошо, на предыдущей картинке видно открытую позицию, рамка вокруг цены цвета мадженты, там позиция в минусе, на картинке ниже позиция в плюсе


 

всё на одном Canvas

 
Rafil Nurmukhametov:

Процессор грузит хорошо, на предыдущей картинке видно открытую позицию, рамка вокруг цены цвета мадженты, там позиция в минусе, на картинке ниже позиция в плюсе


А если просто сделать ограничение по частоте обновления - не более 10 раз за секунду? Тормоза же приведут к фризам торговой панели - нет?

Про индикацию состояния позиции вижу - выглядит удобно!

 
Aleksey Vyazmikin:

А если просто сделать ограничение по частоте обновления - не более 10 раз за секунду? Тормоза же приведут к фризам торговой панели - нет?

...

Не знаю, как именно реализовано у Рафиля, но если ячейки перерисовывать отдельно от всего канваса, это решит проблему с нагрузкой.

Для этого:

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

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

 
Реter Konow:

Не знаю, как именно реализовано у Рафиля, но если ячейки перерисовывать отдельно от всего канваса, это решит проблему с нагрузкой.

Для этого:

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

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

Суть стакана такова, что при движении цены ео придется перерисовывать целиком, а вот левую часть визуализации - да, там могут быть варианты, но думаю там отдельно объект кластера(свечи?) нарисован и он перерисовывается только при поступлении новой информации.

 
Aleksey Vyazmikin:

Суть стакана такова, что при движении цены ео придется перерисовывать целиком, а вот левую часть визуализации - да, там могут быть варианты, но думаю там отдельно объект кластера(свечи?) нарисован и он перерисовывается только при поступлении новой информации.

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

Тоже самое касается левой части. Хотя, там и так нет серьезной нагрузки. Если только на прокрутке графика и на текущем баре. Но, это не много.

 
Реter Konow:

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

Необязательно, но цена двигается, а значит и значение в ячейках меняется - как иначе? Другое дело, если менять координаты прямоугольника с ценой, но думаю это так же отрисовка в рамках канваса.

 
Aleksey Vyazmikin:

Необязательно, но цена двигается, а значит и значение в ячейках меняется - как иначе? Другое дело, если менять координаты прямоугольника с ценой, но думаю это так же отрисовка в рамках канваса.

Цена двигается, стакан централизуется и требуется перерисовка. Никто не спорит. Речь о площади перерисовки.

Многие ячейки простаивают и не меняют значения на каждом событии стакана. Например - объемы лимитников иногда меняются только в нескольких ячейках, а цена и объемы в остальных - неизменны. В этом случае, перерисовка всего канваса - пустой расход ресурсов. Необходимо контроллировать изменения в ячейках и рисовать их по отдельности на событии прихода нового значения.

Этот простой подход позволит снизить нагрузку в разы.

Также, можно снижать частоту вывода значений в ячейки. 

Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Виды заявок в стакане цен
Документация по MQL5: Константы, перечисления и структуры / Торговые константы / Виды заявок в стакане цен
  • www.mql5.com
Для биржевых инструментов доступно окно "Стакан цен", в котором можно посмотреть текущие заявки на покупку и продажу. Для каждой заявки указано желаемое направление торговой операции, требуемый объем и запрашиваемая цена. Для получения информации...
 
Реter Konow:

Цена двигается, стакан централизуется и требуется перерисовка. Никто не спорит. Речь о площади перерисовки.

Многие ячейки простаивают и не меняют значения на каждом событии стакана. Например - объемы лимитников иногда меняются только в нескольких ячейках, а цена и объемы в остальных - неизменны. В этом случае, перерисовка всего канваса - пустой расход ресурсов. Необходимо контроллировать изменения в ячейках и рисовать их по отдельности на событии прихода нового значения.

Этот простой подход позволит снизить нагрузку в разы.

Также, можно снижать частоту вывода значений в ячейки. 

Да я понимаю Вашу идею, но информация об изменении цены и объема может часто (предположение) приходить синхронно на открытии рынка.

Помню, вы хотели делать свой стакан - есть результат?

 
Aleksey Vyazmikin:

Да я понимаю Вашу идею, но информация об изменении цены и объема может часто (предположение) приходить синхронно на открытии рынка.

Помню, вы хотели делать свой стакан - есть результат?

Вот, слепил вчера пример стакана, ячейки которого перерисовываются независимо от канваса всего окна: https://www.mql5.com/ru/forum/333652/page4 

Показывается, что отдельная перерисовка ячеек держит нагрузку в пределах 20% (на видео больше из за записи видео), ДАЖЕ, если ячейки перерисовываются ВСЕ и на частоте 40 fps. Обычная динамика стакана при этом подходе будет грузить на 5-10% ориентировочно.

Нагрузка велика только в том случае, если перерисовка большой площади (~500*500 рх) на высокой частоте без пауз (~40+ fps). Любые задержки или уменьшение области перерисовки снижают нагрузку в разы.

DirectX
DirectX
  • 2020.03.13
  • www.mql5.com
Привет, кто-нибудь уже разобрался с directx, там есть DirectCompute...
Причина обращения: