Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Facebook!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Ansichten:
858
Rating:
(61)
Veröffentlicht:
2018.11.09 08:26
\MQL5\Indicators\ \MQL5\Include\Canvas\
iCanvas.mqh (31.88 KB) ansehen
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance
Die Bibliothek und die Klasse iCanvas vereinfachen das Programmschreiben beim Verwenden von Hintergründen.

Hier ist das Beispiel eines einfachen Indikators, der die Bibliothek verwendet.

In diesem Beispiel verwendet der Indikator nicht das Ereignis OnChartEvent. Aber es könnte doch vorhanden sein.

#property indicator_chart_window
#include <Canvas\iCanvas.mqh>

int OnInit()
  {
   EventSetMillisecondTimer(33);
   ChartSetInteger(0,CHART_SHOW,true);
   ChartSetInteger(0,CHART_CROSSHAIR_TOOL,false);  // Abschalten des Fadenkreuzes
   return(INIT_SUCCEEDED);
  }

void OnDeinit(const int reason) {if(reason<2) {ChartSetInteger(0,CHART_CROSSHAIR_TOOL,true); ChartRedraw();}}

void  OnTimer()
  {
   static int X=0;
   static int Y=0;
   if(X!=W.MouseX || Y!=W.MouseY)
     {
      Canvas.Erase(0);
      // Draw a blurry spot
      for(int ix=-20;ix<=20;ix++) for(int iy=-20;iy<=20;iy++)
        {
         double p=sqrt(ix*ix+iy*iy)/20.0;
         if(p>1) p=1;
         uchar P=(uchar)Round((1.0-p)*255.0);
         Canvas.PixelSet(W.MouseX+ix,W.MouseY+iy,ARGB(P,100,0,200));
        }
      //  Display the information block
      int Y1=(int)Canvas.Y(Canvas.Close(W.MouseX));
      Canvas.FillRectangle(W.MouseX,Y1,W.MouseX+140,Y1+67,0xA0808080);
      Canvas.TextOut(W.MouseX+5,Y1+2,"Close = "+DoubleToString(Canvas.Close(W.MouseX),_Digits),0xFFFFFFFF);
      Canvas.TextOut(W.MouseX+5,Y1+18,"Bar = "+DoubleToString(W.MouseBar,2),0xFFFFFFFF);
      Canvas.TextOut(W.MouseX+5,Y1+34,TimeToString(W.MouseTime,TIME_DATE|TIME_SECONDS),0xFFFFFFFF);
      Canvas.TextOut(W.MouseX+5,Y1+50,"SubWindow = "+string(W.MouseSubWin),0xFFFFFFFF);
      //  Fadenkreuz
      Canvas.LineHorizontal(0,W.Width-1,W.MouseY,~W.Color);
      Canvas.LineVertical(W.MouseX,0,W.Height-1,~W.Color);
      int Ym=(W.MouseY>16)?(W.MouseY-16):(W.MouseY+2);
      int Xm=(W.MouseX<(W.Width-140))?(W.MouseX+4):(W.MouseX-125);
      Canvas.TextOut(W.Width-76,Ym,DoubleToString(W.MousePrice,_Digits),~W.Color);
      Canvas.TextOut(Xm,W.Height-16,TimeToString(W.MouseTime,TIME_DATE|TIME_SECONDS),~W.Color);

      Canvas.Update();
      X=W.MouseX; Y=W.MouseY;
     }
  }

int OnCalculate(const int rates_total,
                const int prev_calculated,
                const int begin,
                const double &price[])
  {
   return(rates_total);
  }

Eigenschaften der Bibliothek:

  • Beim Einbinden der Bibliothek wird sofort eine Instanz mit dem Namen Canvas der von der CCanvas-Klasse abgeleiteten iCanvas-Klasse erstellt.
  • Die Größe dieser Instanz entspricht der des gesamten Fensters. Wenn die Größe des Fensters geändert wird, wird die Größe der Leinwand automatisch angepasst (außer bei Skripten).
  • Die Verwendung der Funktion zur Ereignisbehandlung OnChartEvent ist optional.
  • Innerhalb der Bibliothek gibt es auch eine Instanz der Fensterstruktur namens W. Die Fensterparameter (außer Skripte) werden innerhalb dieser Struktur lokalisiert und automatisch aktualisiert.

Struktur des Fensters:

struct Window
  {
   uint              Color;       // Hintergrundfarbe
   int               Width;       // Breite
   int               Height;      // Höhe
   int               Left_bar;    // Anzahl der Bars von links
   double            Right_bar;   // Anzahl der Bars von rechts
   double            Total_bars;  // Höchstzahl der Bars
   int               BarsInWind;  // Anzahl sichtbarer Bars
   double            Y_min;       // Tiefstpreis im Fenster
   double            Y_max;       // Höchstpreis im Fenster
   double            dy_pix;      // Preisänderung eines Pixels
   int               dx_pix;      // Änderung der Zahl der Bars eines Pixels
   int               MouseX;      // Koordinate X der aktuellen Position des Mauszeigers
   int               MouseY;      // Koordinate Y der aktuellen Position des Mauszeigers
   double            MouseBar;    // die aktuelle Position der Bar des Mauszeigers
   double            MousePrice;  // aktueller Preis des Mauszeigers
   datetime          MouseTime;   // die aktuelle Zeit des Mauszeiger
   int               MouseSubWin; // Nummer des Unterfensters in dem sich der Mauszeiger befindet
   int               WindowsTotal;// Gesamtzahl der Unterfenster einschl. des Hauptfensters
   int               SubWin;      // aktuelles Unterfenster
   datetime          time[];      // Array der Eröffnungszeiten aller Bars im Fenster
  };

iCanvas class:


class iCanvas : public CCanvas
  {
private:
   datetime          T[1];
   double            Pr[1];
   bool              FullWinCanvW; // Verwenden der ganzen Fensterleinwand mittels Breite
   bool              FullWinCanvH; // Verwenden der ganzen Fensterleinwand mittels Höhe
public:
                     iCanvas(int Xpos=0,int Ypos=0,string Name="iCanvas",int width=0,int height=0,ENUM_COLOR_FORMAT formatCF=COLOR_FORMAT_ARGB_NORMALIZE,int subwin=-1);
                    ~iCanvas() { Destroy();};
   double            X(double bar);
   double            X(datetime Time) {return X((double)Ceil(W.Right_bar)+iBarShift(NULL,0,Time));};
   double            Y(double Price)  {return((W.Y_max-Price)/W.dy_pix); };
   double            Bar(int x)       {return((double)W.Left_bar+1-(double)x/(double)W.dx_pix);};
   datetime          TimePos(int x)   {double B=Bar(x); CopyTime(_Symbol,_Period,Floor(B),1,T); return T[0]+int((double)PeriodSeconds()*(1-B+(int)B));};
   double            Close(int x)     {CopyClose(_Symbol,_Period,int(Bar(x)),1,Pr); return Pr[0];};
   double            Open(int x)      {CopyOpen(_Symbol,_Period,int(Bar(x)),1,Pr); return Pr[0];};
   double            High(int x)      {CopyHigh(_Symbol,_Period,int(Bar(x)),1,Pr); return Pr[0];};
   double            Low(int x)       {CopyLow(_Symbol,_Period,int(Bar(x)),1,Pr); return Pr[0];};
   bool              FullWinCanvWidth()  {return FullWinCanvW;}; // using full window canvas by width  
   bool              FullWinCanvHeight() {return FullWinCanvH;}; // using full window canvas by height             
   ENUM_PROGRAM_TYPE ProgType;
  };

Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/22164

TradeTransactions TradeTransactions

Zugriff auf die Daten von OnTradeTransaction an beliebiger Stelle innerhalb einer Anwendung

Skyscraper Skyscraper

Ein Trendindikator nach Art des NRTR mit einer zusätzlichen Mittellinie.

Previous Candle Breakdown 3 Previous Candle Breakdown 3

"Previous Candle Breakdown" Expert Advisor.

Rollback system Rollback system

Definiert die Kanalbreite des Vortags.