無料でロボットをダウンロードする方法を見る
Twitter上で私たちを見つけてください。
私たちのファンページに参加してください
私たちのファンページに参加してください
記事を気に入りましたか?MetaTrader 5ターミナルの中でそれを試してみてください。
- ビュー:
- 1113
- 評価:
- パブリッシュ済み:
- 2018.11.05 08:46
-
このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動
このライブラリと iCanvas クラスは、キャンバスを使用したプログラムの作成を簡略化します。
このライブラリを使用したシンプルなインジケータの例を次に示します。
この例では、インジケータ本体は OnChartEvent イベントを処理する関数を備えていません。 しかし、存在する場合もあります。
#property indicator_chart_window #include <Canvas\iCanvas.mqh> int OnInit() { EventSetMillisecondTimer(33); ChartSetInteger(0,CHART_SHOW,true); ChartSetInteger(0,CHART_CROSSHAIR_TOOL,false); //十字をオフにする 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); //ぼやけたスポットを描画する 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)); } //情報ブロックを表示する 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); //クロスヘア 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); }
ライブラリの関数:
- ライブラリを接続すると、CCanvas クラスから派生した iCanvas クラスの名前キャンバスを持つ1つのインスタンスがすぐに作成されます。
- このインスタンスのサイズは、ウィンドウ全体に一致します。 さらに、ウィンドウのサイズが変更されると、キャンバスは自動的にサイズ変更されます (スクリプトを除く)。
- OnChartEvent イベントハンドラ関数の使用はオプションです。
- ライブラリ内には、W という名前のウィンドウ構造のインスタンスもあります。ウィンドウのパラメータ (スクリプトを除く) が配置され、この構造内で自動的に更新されます。
ウィンドウ構造:
struct Window { uint Color; //ウィンドウの背景色 int Width; //ウィンドウの幅 int Height; //ウィンドウの高さ int Left_bar; //ウィンドウ内の左端の足の数 double Right_bar; //ウィンドウ内の右端の足の数 double Total_bars; //ウィンドウ内の足の最大数 int BarsInWind; //ウィンドウ内の表示足の数 double Y_min; //ウィンドウ内の価格の最小値 double Y_max; //ウィンドウ内の価格の最大値 double dy_pix; //1ピクセルの価格変更 int dx_pix; //1ピクセルあたりの足数の変更 int MouseX; //マウスポインタの現在ポジションの座標 X int MouseY; //マウスポインタの現在ポジションの座標 Y double MouseBar; //マウスポインタの現在の足ポジション double MousePrice; //マウスポインタの現在の価格 datetime MouseTime; //マウスポインタの現在の時刻 int MouseSubWin; //マウスポインタが置かれているセーフサブウィンドウの数 int WindowsTotal;//メインウィンドウを含む合計サブウィンドウ int SubWin; //現在のセーフサブウィンドウ datetime time[]; //ウィンドウ内のすべての見えている足の開始時刻の配列 };
iCanvas class:
class iCanvas : public CCanvas { private: datetime T[1]; double Pr[1]; bool FullWinCanvW; //幅によるフルウィンドウキャンバスの使用 bool FullWinCanvH; //高さによるフルウィンドウキャンバスの使用 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;}; //幅によるフルウィンドウキャンバスの使用 bool FullWinCanvHeight() {return FullWinCanvH;}; //高さによるフルウィンドウキャンバスの使用 ENUM_PROGRAM_TYPE ProgType; };
MetaQuotes Ltdによってロシア語から翻訳されました。
元のコード: https://www.mql5.com/ru/code/22164

アプリケーション内の任意の場所に OnTradeTransaction データのアクセス

中間線を追加した NRTR 型のトレンドインジケータ