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

 
artmedia70:
//+------------------------------------------------------------------+
//|                                                    trendyxV1.mq5 |
//+------------------------------------------------------------------+
#include <Canvas\Canvas.mqh>
CCanvas LomLine;
int KoorX[4]={100,200,350,480};
int KoorY[4]={100,150,380,150};
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   LomLine.Destroy();
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
   LomLine.CreateBitmapLabel("trendyx",0,0,800,800,COLOR_FORMAT_ARGB_RAW);
   LomLine.PolylineAA(KoorX,KoorY,ColorToARGB(clrRed, 155),STYLE_SOLID);
   LomLine.Update();

  }
//+------------------------------------------------------------------+

,.

 
pako:

,.

 
Советник перестал открывать позиции, потому что "invalid integer number as parameter 9 for 'OrderSend' function". Кто-нибудь объясните, что это? Предположительно это произошло из-за обновления терминала МТ4.
 
Katerina:
Советник перестал открывать позиции, потому что "invalid integer number as parameter 9 for 'OrderSend' function". Кто-нибудь объясните, что это? Предположительно это произошло из-за обновления терминала МТ4.
Приложите, пожалуйста, код в котором вызывается функция "OrderSend". Предположительно неправильно задаётся магик номер.
 
А, ну я уже починила. Спасибо за отклик.
 
А вот интересно в MQl5  можно на график прикрутить анимацию? какого нибудь чувака  долбящего по хаю свечи , ну там по сигналу  индикатора или просто так
 
aleks557:
А вот интересно в MQl5  можно на график прикрутить анимацию? какого нибудь чувака  долбящего по хаю свечи , ну там по сигналу  индикатора или просто так
Анимацию нужно будет создавать вручную из многих сменяющих друг друга .bmp картинок. Или рисовать из массива точек на канвасе.
 
barabashkakvn:
Анимацию нужно будет создавать вручную из многих сменяющих друг друга .bmp картинок. Или рисовать из массива точек на канвасе.

Приветствую Вас, домовенок   а "на канвасе" это где? я знаю  что анимацию в фотошопе делают  а "на канвасе" не был ,как туда билет купить?

а то гугл вывел на какой то молокозавод 

 
aleks557:

Приветствую Вас, домовенок   а "на канвасе" это где? я знаю  что анимацию в фотошопе делают  а "на канвасе" не был ,как туда билет купить?

а то гугл вывел на какой то молокозавод 

CCanvas - Класс для создания пользовательской графики. 

Примеры применения, путь из MetaEditor'a: ...\MQL5\Scripts\Examples\Canvas\ 

 
aleks557:
А вот интересно в MQl5  можно на график прикрутить анимацию? какого нибудь чувака  долбящего по хаю свечи , ну там по сигналу  индикатора или просто так

Вот ещё нашел:

 

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

Вопросы от начинающих

Renat, 2012.10.20 14:30

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

У нас можно идеально, быстро и без артефактов рисовать кадры. Посмотрите на пример видео на основе генерации последовательности кадров в 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 и самой системой отрисовки терминала) и быстрой работы с отображением кадров.

Нужно пробовать.
Причина обращения: