無料でロボットをダウンロードする方法を見る
Telegram上で私たちを見つけてください。
私たちのファンページに参加してください
興味深いスクリプト?
それではリンクにそれを投稿してください。-
他の人にそれを評価してもらいます
記事を気に入りましたか?MetaTrader 5ターミナルの中でそれを試してみてください。
ライブラリ

イージーキャンバス - MetaTrader 5のためのライブラリ

ビュー:
997
評価:
(61)
パブリッシュ済み:
2018.11.05 08:46
\MQL5\Indicators\ \MQL5\Include\Canvas\
iCanvas.mqh (31.88 KB) ビュー
このコードに基づいたロボットまたはインジケーターが必要なら、フリーランスでご注文ください フリーランスに移動
このライブラリと 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

TradeTransactions TradeTransactions

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

Skyscraper Skyscraper

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

前のロウソク足ブレイクダウン3 前のロウソク足ブレイクダウン3

"前のロウソクのブレイクダウン " EA

ロールバックシステム ロールバックシステム

前日のチャネル幅を定義します。