MetaTrader本体(MT4、MT5)のウィンドウ位置とサイズが変更できる「320_MT_SetPosSize」


320_MT_SetPosSize.mqhは、MetaTrader本体(MT4、MT5)のウィンドウ位置やサイズを変更するための関数が定義されたインクルードファイルです。関数はインジケーターやスクリプト、EAから呼び出して使用します。

インジケーターのシグナルで音を鳴らすことはよくある話ですが、複数のMT4を起動しているとき、どのMT4からのシグナルかを区別するためには異なる音声ファイルを用意する必要があります。

このインクルードファイルに含まれる関数を使用した場合、MetaTrader本体を前面に移動したり、サブモニターからメインモニターに移動させたりできるので、どのMT4からのシグナルか判断しやすくなります。

なお、インクルードファイルは単体では動作しないのでお手持ちのインジケーターやスクリプトを修正する必要があります。
詳しくは後述の「使い方」やサンプルファイルを参照してください。

ファイルはMT4用のトップページからダウンロードできます。


導入方法(インストール)

ダウンロードしたZIPファイルを適当なフォルダに展開(解凍)後、通常のインクルードファイルと同様にMT4に導入してください。

  1. MT4のメニュー「ファイル」から「データフォルダを開く」をクリックする。
  2. エクスプローラーが表示されたら「MQL4」フォルダ内にある「Include」フォルダに当インクルードファイル「320_MT_SetPosSize.mqh」をコピーする。

削除方法(アンインストール)

通常のインクルードファイルと同様にMT4から削除してください。

  1. MT4のメニュー「ファイル」から「データフォルダを開く」をクリックする。
  2. エクスプローラーが表示されたら「MQL4」フォルダ→「Include」フォルダ内の「320_MT_SetPosSize.mqh」を削除する。

使い方

サンプルファイルを見ていただければわかると思いますが、インクルードファイル指定(#include <320_MT_SetPosSize.mqh>)を追加して、ウィンドウの位置やサイズを変更したいところで関数(MT_SetPosSize等)を呼び出すだけです。

スクリプトはサンプルファイル内の各引数を変更するだけで使用できると思います。
必要に応じてファイル名を変更して複数用意するのも良いでしょう。

他の人が作成したインジケーターやEAを修正する場合は難易度が高くなるかと思われますが、インジケーターのシグナルであればAlert関数やPlaySound関数、EAの約定であればOrderSend関数やOrderClose関数などを目印に当関数の記述場所を探したら良いと思います。
SendMail関数などを目印にしても良いかもしれません。
当然ですが他の人が作成したインジケーターやEAの場合、ソースが無ければ修正できません。

修正したインジケーター等を実行する際には「DLLの使用を許可する」にチェックを入れてください。


サンプルファイルについて

ダウンロードしたZIPファイルにはサンプルインジケーターとサンプルスクリプトが含まれています。
サンプルなので処理はテキトーです。(^_^;

320_MT_SetPosSize_Sample_Indicator.mq4

シグナル発生時や約定時、指定時間になったときにウィンドウの位置やサイズを変更するサンプルインジケーターです。

320_MT_SetPosSize_Sample_Script.mq4

あらかじめ指定した(スクリプト内に記述した)通りにウィンドウの位置やサイズを変更するサンプルスクリプトです。


スクリプトを使いやすくする

スクリプトをチャートに挿入する際、毎回設定画面が表示され、「DLLの使用を許可する」にチェックを入れてから「OK」ボタンを押すのは少し面倒です。
オプション画面の「エキスパートアドバイザ」タブにある「DLLの使用を許可する」にチェックを入れ、スクリプト内の「#property script_show_inputs」を削除すると、スクリプト挿入後、すぐにウィンドウ位置やサイズ変更が行われるので便利です。

注意:オプション画面で「DLLの使用を許可する」にチェックを入れることはリスクを伴います。
ネットなどから拾ってきたよく知らないスクリプトやインジケーター、EAを使用する方、特にソース本体が無い(ファイルの拡張子がmq4ではなくex4のもの)、またはソースを見ても何をしているか分からない場合は注意してください。


各関数について

インクルードファイルに含まれる関数は以下の通りです。各関数とも応答値は「void」です。

前面移動関数からサイズ変更関数までは目的別に用意したもので、内部で位置サイズ変更関数を呼び出しています。ソース修正時の利便性や可読性の向上を目的としたラッパー関数です。

位置サイズ変更関数:MT_SetPosSize

当インクルードのメインの関数です。すべての引数を個々に指定できます。引数は以下の通りです。
なお、「Maximize」が「true」の場合、「Pos」以降は無視されます。

bool TopMost trueの場合、位置やサイズ変更後、前面に移動します。
bool Maximize trueの場合、ウィンドウを最大化します。
bool Pos trueの場合、以下で指定した座標に移動します。
int Left 移動先のウィンドウのX座標を指定します。
int Top 移動先のウィンドウのY座標を指定します。
bool Size trueの場合、以下で指定したサイズに変更します。
int Width ウィンドウの幅を指定します。
int Height ウィンドウの高さを指定します。

前面移動関数:MT_SetTopMost

前面移動専用の関数です。引数はありません。

サイズ最大化関数:MT_SetMaximize

最大化表示専用の関数です。引数は以下の通りです。

bool TopMost trueの場合、位置やサイズ変更後、前面に移動します。

位置変更関数:MT_SetPos

位置変更専用の関数です。引数は以下の通りです。

bool TopMost trueの場合、位置やサイズ変更後、前面に移動します。
int Left 移動先のウィンドウのX座標を指定します。
int Top 移動先のウィンドウのY座標を指定します。

サイズ変更関数:MT_SetSize

サイズ変更専用の関数です。引数は以下の通りです。

bool TopMost trueの場合、位置やサイズ変更後、前面に移動します。
int Width ウィンドウの幅を指定します。
int Height ウィンドウの高さを指定します。

注意事項

Windowsの設定によって変わるかもしれませんが、指定した位置やサイズで表示されない場合があります。
例えばWindows10の場合、ウィンドウの外枠は数ドットだけ透明枠になっているので、見た感じが指定した位置より少し左にずれたり、サイズが少し小さくなって見えます。(透明分を加えると指定した位置、サイズになっている)
その場合は透明枠の分も加味して値を微調整してください。

私の環境では左右と下に7ドット分の透明枠があったのでウィンドウのX座標を「-7」にすることで画面の左端に隙間なくピッタリと表示されました。
ウィンドウの幅は左右の分を足して「1014」、ウィンドウの高さは下の分を足して「807」にすると見た目のサイズが幅「1000」、高さ「800」になりました。

蛇足ですが、最大化や「Windowsキー+方向キー(左右)」で画面半分に整列した場合は透明枠は無いようです。


制限事項

MT5の場合、第一引数の「TopMost(位置サイズ変更後、前面に移動する)」は正しく動作しないようです。
その他のサイズ変更に関する処理は正しく動作するようです。

チャートの外枠を消すインジケーター「320_WakuNasi.mq4」もMT5での使用ができなくなったり、MT4でも「枠を消す」だけ「true」にしても枠が消えなくなるなど、バージョンアップのたびに動かなくなる機能があります。
なので、この「320_MT_SetPosSize」もいずれは動作しなくなるかもしれません。


更新履歴

リリース日 バージョン 内容
2020/03/22 1.00 初リリース