Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Facebook!
und werden Sie Mitglied unserer Fangruppe
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
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
Bewerten Sie es im Terminal MetaTrader 5
Easy Canvas - Bibliothek für den MetaTrader 5
- Ansichten:
- 858
- Rating:
- Veröffentlicht:
- 2018.11.09 08:26
- 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
Zugriff auf die Daten von OnTradeTransaction an beliebiger Stelle innerhalb einer Anwendung
SkyscraperEin Trendindikator nach Art des NRTR mit einer zusätzlichen Mittellinie.
Previous Candle Breakdown 3
"Previous Candle Breakdown" Expert Advisor.
Rollback systemDefiniert die Kanalbreite des Vortags.