Вопросы от начинающих MQL5 MT5 MetaTrader 5 - страница 47

 
Скажите пожалуста, визуализация на удалённых агентах, я догадываюсь, категарически не возможна? Или возможна?
 
Dimka-novitsek:
Скажите пожалуста, визуализация на удалённых агентах, я догадываюсь, категарически не возможна? Или возможна?

Невозможна потому как нафик не нужна, удалённый агент работает в режиме процесса, у него нет окна (кроме окна настроек).

его можно увидеть лишь через диспетчер задачь (но только процесс, а не что он делает).

 
Вот принты я прямо прочёл, что не выводятся.. Эт очень плохо..     Вообще, если за достаточно большой промижеток времени на серой линии ход оптимизации- нет даже зилёной точки, то о чём это говорит, что просто нет положтельных результатов? Тогда тим более надо и принты, и визуализацию! Но почему она не идёт? Танки едут, и корабли воюют, и памяти оперативной вроде 4 гига, и видеокарта супер, 1375 МГц чего то там, а тестировать полностью не может!! Хотя бы медленно... Компьютер сразу падает в нокдаун включяя погасший экран.
 
Urain:
 Невозможна потому как нафик не нужна, удалённый агент работает в режиме процесса, у него нет окна (кроме окна настроек).Спасибо! Понял! Действительно!
 
Vladon:
Для часов хотелось бы использовать шрифт не стандартный, если была бы возможность его непосредственно хранить в ресурсах например. 
sergeev:
по тексту имеется ввиду, чтоб не таскать с собой отдельный ttf файл, а встраивать его сразу в ex5 как ресурс.

То есть, исключительно для рисования в графическом битмапе/канвасе?

Шрифты точно встраивать не будем, но можем дать возможность использовать штатные Windows шрифты для рисования в канвасе.

 
Renat:

То есть, исключительно для рисования в графическом битмапе/канвасе?

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

То есть, исключительно для рисования в графическом битмапе/канвасе?

Шрифты точно встраивать не будем, но можем дать возможность использовать штатные Windows шрифты для рисования в канвасе.

текущие задумки для канваса это хорошо. я так понимаю вы откроете немного GDI для него. Это замечательно.

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

Объясню на двух примерах.

Чтоб активней использовать канвас необходима смена кадров. А у нас в терминале любой объект не отрисовывается, пока он скрыт со всех таймфреймов (OBJ_NO_PERIODS).  Это приводит к тому, что я не могу подготовить расположение объекта и узнать его размеры, если он еще не отрисовался.

Я поднимал эту тему и для размера выводимого статик текста и для выводимых размеров bmp - ответ был дан такой - вы отрисуйте со значениями ширины =-1, а потом запрашивайте размер у самого объекта и будете знать точно. А добавьте сюда минимальную паузу и необходимость вызывать ChartRedraw... согласитесь это костылек.

А нам ведь нужно плюхать на чарт не один такой статик или bmp, а десятки. И если имеется большая активность - то приходится наблюдать паузы в отрисовке.

--------------------

Что касается повсеместного канваса как альтернатива имеющимся объектам  - это утопия // хоть и приятная в идеале

Никто в здравом подходе не будет рисовать 10мегабайтный битмап и с тормозом выводить его на чарт только ради диагональной линии через весь чарт 2096 х 1080 пикселей


Я полностью поддерживаю развитие канваса // и вообще любое развитие поддерживаю

но имеющиеся объекты на 95% покрывают все бизнес-потребности интерфейса.  Канвас идет приложением к сложным бизнес построениям // очень хорошо продемонстрированным на примере Карт Кохонена. Но полностью заменить объекты им не хотелось бы.

( -5% - это усилия разработчиков по недопущению внедрения координатной линии. :) // но  уже начался диалог, надеюсь придем к консенсусу)

Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Свойства объектов
Документация по MQL5: Стандартные константы, перечисления и структуры / Константы объектов / Свойства объектов
  • www.mql5.com
Стандартные константы, перечисления и структуры / Константы объектов / Свойства объектов - Документация по MQL5
 

2012.10.20 14:21:46 Tester expert file C:\Users\Миха\AppData\Roaming\MetaQuotes\Terminal\FF783873B20D7FA177754FFAFD85AFB6\MQL5\Experts\Окончательный вариант.ex5 allocate error

2012.10.20 14:21:31 Core 2 authorized (agent build 695)

2012.10.20 14:21:16 Core 2 connecting to 127.0.0.1:3001

2012.10.20 14:11:10 Core 1 OpenCL device: GPU NVIDIA Corporation GeForce 9600 GSO 1GB with OpenCL 1.0 (12 units, 1375 MHz, 2048MB, version 301.42)

 

 

Прошу прощения, что здесь написано???  Понимаю, что єррор- єто ошибка.    Что вообще ему не хватает? ??

 

Вообще, при тесте виснет почти полностью!! Часто самовырубается..   Но тем же вечером тут же ведь идут очень живо и красиво игры- танки ворлд, сталкер и т.п. !


 

 
sergeev:

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

Чтоб активней использовать канвас необходима смена кадров. А у нас в терминале любой объект не отрисовывается, пока он скрыт со всех таймфреймов (OBJ_NO_PERIODS).  Это приводит к тому, что я не могу подготовить расположение объекта и узнать его размеры, если он еще не отрисовался.

А Вы знаете про идеальный хинт бэкбуферинга в наших канвасах и привязке к объекту на экране?

У нас можно идеально, быстро и без артефактов рисовать кадры. Посмотрите на пример видео на основе генерации последовательности кадров в OpenCL Test.

Используйте красивую тактику:

  1. Создайте графический объект Bitmap Label на чарте

       string objname ="OpenCL_"+IntegerToString(ChartID());
       string resname ="::Mandelbrot_"+IntegerToString(ChartID());
    //--- creating the object for graphics display
       ObjectCreate(0,objname,OBJ_BITMAP_LABEL,0,0,0);
       ObjectSetInteger(0,objname,OBJPROP_XDISTANCE,4);
       ObjectSetInteger(0,objname,OBJPROP_YDISTANCE,26);
    

  2. Создайте пустой графический ресурс в памяти и привяжите его к ранее созданному объекту:

    //--- create initial empty picture
       uint buf[];
    
       ArrayResize(buf,SIZE_X*SIZE_Y);
       ResourceCreate(resname,buf,SIZE_X,SIZE_Y,0,0,SIZE_X,COLOR_FORMAT_XRGB_NOALPHA);
       ObjectSetString(0,objname,OBJPROP_BMPFILE,resname);
    
    Именно в этом месте происходит магия. Графический объект получает прямую привязку к графическому ресурсу. Причем эта привязка интеллектуальная с кешированием, так как специально создавалась для быстрого пейджинга и работы с бэкбуферами.

  3. Теперь вы можете легко рисовать в своем буфере, не заботясь об связи с объектом на экране

    //--- рисуем что хотим в buf
    ....
    
  4. А теперь пришла пора отобразить этот обновленный битмап на экране

          //--- saving the frame in memory and drawing it
          ResourceCreate(resname,buf,SIZE_X,SIZE_Y,0,0,SIZE_X,COLOR_FORMAT_XRGB_NOALPHA);
          ChartRedraw();
    
    Для этого мы заново "перестраиваем" ресурс (на самом деле перестройка не происходит, так как все размеры совпадают), копируем в него новый битмап и счетчики изменений этого ресурса увеличиваются.

    Обратите внимание, что тут сам графический объект objname никак не трогается, так как он и так связан с ресурсом.

    Далее вызываем перерисовку экрана через ChartRedraw, что приводит к необходимости отрисовать графический объект. А тот имеет привязку к нашему ресурсу, который он контролирует по счетчику измененности битмапа. Если сохраненный у графического объекта счетчик измененности не совпадает со счетчиком у ресурса, то происходит автоматическое защищенное копирование битмапа в графический объект и его визуализация. Если же счетчики совпадают, то картинка показывается без изменений.

Вот такой простой метод безопасной (от одновременного доступа из MQL5 и самой системой отрисовки терминала) и быстрой работы с отображением кадров.