前回のリンク
次回のリンク

今回はMQL5でシンプルな図を描く方法について書きます.
plot関数などで簡単に図を作成できる言語もありますがMQL5は図がチャート上にプロットされるなど少し癖が強めです.

今回のプログラムはスクリプトで作成しています.概要としてはsin(100x)を-1.2から1.2の範囲でプロットするプログラムです.

//+------------------------------------------------------------------+
//|                                          plot_figure20201205.mq5 |
//|                                         Copyright 2020, Sciotein |
//|                                            https://sciotein.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, Sciotein"
#property link      "https://sciotein.com/"
#property version   "1.00"
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
#include<Graphics\Graphic.mqh>
//---関数(ここを書きたい数式に変更してください)
double BlueFunction(double x)   { return(sin(100*x));      }
//+------------------------------------------------------------------+
//プログラム開始関数をスクリプト |
//+------------------------------------------------------------------+
int OnStart()
  {
   double from=-1.2;
   double to=1.2;
   double step=0.005;
   int chart_id = 0;
   int sub_window = 0;
   int hight = 1000;
   int width = 1000;
//---チャートのサイズを取得
   hight = ChartGetInteger(chart_id,CHART_HEIGHT_IN_PIXELS);
   width = ChartGetInteger(chart_id,CHART_WIDTH_IN_PIXELS);
//---図の枠の作成とチャートの除去
   CGraphic graphic;
   graphic.Create(chart_id,"G",sub_window,0,0,width,hight);
   ChartSetInteger(chart_id,CHART_SHOW,false);
   
//---色
   CColorGenerator generator;
   uint blue= generator.Next();

//---sin(x)のプロット
   graphic.CurveAdd(BlueFunction,from,to,step,blue,CURVE_LINES,"Blue");
   
   graphic.XAxis().Name("X - axis");      
   graphic.XAxis().NameSize(12);          
   graphic.YAxis().Name("Y - axis");      
   graphic.YAxis().NameSize(12);
   graphic.CurvePlotAll();
   graphic.Update();
   DebugBreak();
   return 0;
  }

実行すると以下のような図がかけます.

コードのポイント

CGraphicクラスを利用して図を描きます.
CGraphicクラスを利用するためには以下のようにGraphic.mqhを読み込む必要があります.

#include<Graphics\Graphic.mqh>

プロット用インスタンスの作成

図を作成するときにはまず,CGraphicクラスのCreateメソッドを使用して図の枠を作成します(上記コードのgraphic.Create).このときの引数は以下のようになっています.

bool  Create(
  const long    chart,      // チャートID
  const string  name,      // 名前
  const int    subwin,    // サブウィンドウインデックス
  const int    x1,        // x1座標
  const int    y1,        // y1座標
  const int    x2,        // x2座標
  const int    y2          // y1座標
  )

その後plotに使用しなかった残りの部分にはまだチャートが表示されているので以下のコードでチャートの表示をオフにしています.

ChartSetInteger(chart_id,CHART_SHOW,false);

図の枠が作成出来たら目的の関数をCurveAddメソッドでプロットします.

graphic.CurveAdd(BlueFunction,from,to,step,blue,CURVE_LINES,"Blue");

でsin関数をプロットしています.

これを図に反映させるためには

graphic.CurvePlotAll();
graphic.Update();//すぐに反映させたいとき

を使用してください.

まとめ|CGraphicクラスで図を作成した

今回,図をplotしてみてMQL5のトレードに特化しているがゆえの融通の利かなさを少し感じました.何かほかに良い方法ご存じの方は教えていただけましたら幸いです.

今後はストラテジーテスターの実行結果をうまく解析できるような環境を整えていきたいと思います.

次回のリンクはこちら


N

博士後期課程学生 研究中に気づいた事を中心に記事を作成していきます.研究内容は主にヒト運動計測と脳波解析.

0件のコメント

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA