【MQL4テクニック】インジケータから自動でチャートを整列する方法。標準で用意されていない?今すぐに実装できます!
mql4にはチャートを操作するための関数が充実していますが、実はチャートを整列する関数は用意されていません。
ではどのように実装するのか。たった数行のコードで実現可能です。
目次
ショートカットキーを送信する
MT4にはショートカット機能が備えられており、[Alt] + [R] キーを押すことでチャートを整列することができます。
つまり、プログラムから[Alt] + [R]キーを押してあげれば簡単に実装することができます。
実装してみる (DLLを使用を許可するにチェック)
ライブラリの読み込み
まずは標準ライブラリのWinUser32.mqhをincludeします。
#include <WinUser32.mqh>
ショートカットを送信する関数を定義
以下の関数を定義してください。
void ArrangeWindows(){
keybd_event(18, 0, 0, 0); //Altキーを押す
keybd_event(82, 0, 0, 0); //Rキーを押す
keybd_event(18, 0, KEYEVENTF_KEYUP, 0); //Altキーを離す
keybd_event(82, 0, KEYEVENTF_KEYUP, 0); //Rキーを離す
}
keybd_event()
関数を使用することで、キーを押したり離したりの動作を送信することができます。
18はAltキー、82はRキーが割り当てられています。
その他のキーコードはこちらから確認してください。
関数を実行
あとはこの関数を実行するだけで、任意のタイミングでチャートを整列することができます。
今回はインジケータの挿入時に実行してみます。
int OnInit(){
ArrangeWindows(); //関数を実行して[Alt] + [R]を送信
return(INIT_SUCCEEDED);
}
ソースコード全体
#property strict
#property indicator_chart_window
#include <WinUser32.mqh> //ライブラリを読み込む
int OnInit(){
ArrangeWindows();//[Alt] + [R]を送信
return(INIT_SUCCEEDED);
}
int OnCalculate(const int rates_total,
const int prev_calculated,
const datetime &time[],
const double &open[],
const double &high[],
const double &low[],
const double &close[],
const long &tick_volume[],
const long &volume[],
const int &spread[])
{
return(rates_total);
}
//[Alt] + [R]を送信する関数を定義
void ArrangeWindows(){
keybd_event(18, 0, 0, 0);
keybd_event(82, 0, 0, 0);
keybd_event(18, 0, KEYEVENTF_KEYUP, 0);
keybd_event(82, 0, KEYEVENTF_KEYUP, 0);
}
注意
[Alt] + [R]キーのショートカットが他のソフトウェアなどで使用されている場合、正常に動作しない可能性があります。
例として、NVIDIAから提供されている「GeForce Experience」がインストールされている場合、ショートカットキーが既に割り当てられてしまっているため動作不良を起こします。
対策として各自でショートカットキーを変更していただければ問題ありません。
以上のことを注意すれば、あとは簡単なプログラムで実装が可能なので是非活用してください。