今回は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のトレードに特化しているがゆえの融通の利かなさを少し感じました.何かほかに良い方法ご存じの方は教えていただけましたら幸いです.
今後はストラテジーテスターの実行結果をうまく解析できるような環境を整えていきたいと思います.
次回のリンクはこちら.
コメント