Что не так с canvas в мт5? - страница 4

 
Alexandr Gavrilin #:
Кроме каныас да используются и другие объекты 
Могу только посоветовать избавиться от всех объектов кроме канваса, и забыть о них, как о страшном сне. 
Что я давно и сделал.
 

Вот что интересно и непонятно - в терминале такие огромные и широкие возможности по созданию индикаторов и графических объектов... но нет - люди пилят самопилы, мучаются и пилят... пилят и мучаются...

Ну не задумывался канвас разработчиками для такого применения. Информационную панельку нарисовать красивую - да. 

 
Dmitry Fedoseev #:

Вот что интересно и непонятно - в терминале такие огромные и широкие возможности по созданию индикаторов и графических объектов... но нет - люди пилят самопилы, мучаются и пилят... пилят и мучаются...

Ну не задумывался канвас разработчиками для такого применения. Информационную панельку нарисовать красивую - да. 

очень архаичное мнение

 
Dmitry Fedoseev #:

Вот что интересно и непонятно - в терминале такие огромные и широкие возможности по созданию индикаторов и графических объектов... но нет - люди пилят самопилы, мучаются и пилят... пилят и мучаются...

Ну не задумывался канвас разработчиками для такого применения. Информационную панельку нарисовать красивую - да. 

И даже красивую панельку, на самом деле, можно обойтись и без канваса ;)

 
Alexander Voronkov #:

И даже красивую панельку, на самом деле, можно обойтись и без канваса ;)

Конечно можно. Красивую для 90-х.
Можно с Питера до Москвы добраться на лошадях, даже с ветерком.
 
Nikolai Semko #:
Конечно можно. Красивую для 90-х.
Можно с Питера до Москвы добраться на лошадях, даже с ветерком.

До Питера можно и пешком, при этом и Грету Тунберг не побеспокоишь...)

 
Alexander Voronkov #:

До Питера можно и пешком, при этом и Грету Тунберг не побеспокоишь...)

Вы, кстати, зря хихикаете.
Вот сейчас, например, мне нужно было посмотреть за последние 15 недель поведение спреда, каждую неделю отдельно и вместе как результирующий средний результат.
Я бы над вами похихикал, как бы это визуализировали на объектах, которые не поддерживают прозрачность, и когда общее количество вертикальных полупрозрачных линий - 151200 штук.
Я же это сделал за один час и общее колличество строк в скрипте - 59


#include <Canvas\iCanvas.mqh> //https://www.mql5.com/ru/code/22164
#define WEEKS 15
//+------------------------------------------------------------------+
void OnStart() {
   ulong t = GetMicrosecondCount();
   MqlTick ticks[];
   ulong to = 1000*(TimeCurrent()-TimeCurrent()%(7*24*60*60) - 3*24*60*60);
   ulong from = to-(ulong)1000*WEEKS*7*24*60*60;
   int total = CopyTicksRange(_Symbol,ticks,COPY_TICKS_ALL,from,to);
   string str = "", str1 = "";
   int arr[WEEKS*7*24*60];
   int n[WEEKS*7*24*60];
   float sp[7*24*60];
   ArrayInitialize(arr,0);
   ArrayInitialize(n,0);
   for(int i = 0; i<total; i++) {
      int spred = int((ticks[i].ask-ticks[i].bid)/_Point);
      uint j = uint((ticks[i].time_msc-from)/(1000.0*60));
      arr[j]+=spred;
      n[j]++;
   }
   t = GetMicrosecondCount()-t;

   if (total < 1)  str = "нет тиков";
   else {
      str = TimeToString(ticks[total-1].time);
      str1 = TimeToString(ticks[0].time);
   }
   Comment("TimeCurrent = " +TimeToString(TimeCurrent()) + "\nВремя последнего тика = " + str + "\nВремя первого тика = " + str1 + "\nСкопировано тиков: " + string(total)+" за " + string(t)+ " микросекунд");

   double d = 0;
   while(!IsStopped()) {
      double dd = pow((cos(d)+1)/2.0,2);
      d+=0.02;
      Canvas.Erase(0x00FFFFFF);
      float max=0;

      for(int j=0; j<WEEKS; j++) {
         max=0;
         for(int i = 0; i<7*24*60; i++) {
            float sum =0;
            if(n[i+j*7*24*60]>0) sum+=float(arr[i+j*7*24*60])/n[i+j*7*24*60];
            sp[i] = float(sum);
            if(sp[i]>max) max = sp[i];
         }
         DrawChart(0,int(100+j*(W.Height*dd)/(WEEKS+1)),sp);
      }
      Canvas.Update();
      Sleep(20);
   }
   Sleep(30000);
}
//+------------------------------------------------------------------+
void DrawChart(int x, int y, float &arr[]) {
   double step = W.Width/(7*24*60.0);
   for (int i =0; i<7*24*60; i++) {
      Canvas.iLine(x+i*step,y,x+i*step,y-arr[i],0x0AFF0000,1,0.707,false);
   }
}


Даже если бы вам это удалось, то это было бы сделано далеко не за час, убого бы выглядело и жутко лагало.


Поэтому речь не о панельках, а о визуализации 

Панельки - это бонус. Особенно если еще использовать библиотеку PNG вместе с канвасом. Рисуем любое в любом редакторе с прозрачным фоном, сохраняем через PNG, и манипулируем с этим, как с объектом, в MT5 с возможностью масштабирования

PNG
PNG
  • www.mql5.com
Forget about BMP files like a bad dream. With this library, you will now be able to use the more advanced and compact PNG image format for your programs.
 
Nikolai Semko #:

Вы, кстати, зря хихикаете.

Никто не ставит под сомнения ваши компетентность и способность по работе с Canvas, компактность кода и быстрота реализации, так же на высоте.

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

 
Nikolai Semko #:

А Canvas.iLine где брать?