MT4で約定時にメール送信するインジケーター「320_YakujoML」


新規注文と決済注文が約定したときにメールを送信するインジケーターです。

MT4には約定時に自動的にメールを送信する機能がありません。
自作のEAや他作でもソースが入手できるEAであれば新規注文や決済注文のタイミングでメール送信(SendMail関数)を追加することができますが、それでもIFDやOCO注文による約定ではメール送信できません。

そのような場合、このインジケーターを使用すればメールによる約定通知を受けることができます。

メール送信間隔を指定できるので、送信間隔を「1秒」にした場合、ほぼリアルタイムで受信することが可能です。
また、送信間隔を「1日(86400秒)」にした場合、複数の売買情報をまとめて一回(1通のメール)で受信することも可能です。

MT4を再起動しても前回のメール送信後に売買したポジションの分だけがメール送信されます。例えば、MT4が起動していないときにIFD注文などで約定したポジションがあった場合、MT4再起動後、そのポジションの分もメール送信されます。


メールのサンプル

新規注文情報、決済注文情報、口座情報のサンプルです。

新規注文情報と決済注文情報は前回のメール送信の後に売買されたポジションの分だけ記載されます。
ヘッダ部(FX業者名~注文件数)と口座情報は1つです。

なお、以下のサンプルではパラメーターの「時間調整」で「7」を指定しているので調整後と調整前の日時が記載されています。

↓↓↓ここから↓↓↓ FX業者名:OANDA Corporation 作成日時:2019.01.09 20:00:00 注文件数:新規1件、決済1件 ■新規注文情報■ 新規注文日時:2019.01.09 19:18:06 (2019.01.09 12:18:06) 通貨ペア名 :USDJPY 注文種別  :買→売 注文ロット数: 1.00 注文通貨枚数: 100,000 新規注文価格: 108.914 ストップ価格: 108.890 リミット価格: 108.930 マジック番号: 123456 チケット番号: 172325289 コメント  :SampleEA ■決済注文情報■ 新規注文日時:2019.01.09 19:18:06 (2019.01.09 12:18:06) 決済注文日時:2019.01.09 19:21:34 (2019.01.09 12:21:34) 通貨ペア名 :USDJPY 注文種別  :買→売 注文ロット数: 1.00 注文通貨枚数: 100,000 新規注文価格: 108.914 決済注文価格: 108.930 損益額   : 1,600  (スワップ): 0 ストップ価格: 108.890 リミット価格: 108.930 マジック番号: 123456 チケット番号: 172325289 コメント  :SampleEA ■口座情報■ 口座残高  : 2,538,599 評価損益  : -7,886 有効証拠金 : 2,530,713 必要証拠金 : 217,585 余剰証拠金 : 2,313,128 証拠金維持率: 1,163.09% レバレッジ : 0.97倍 ポジション数: 3 --- Author by 320_YakujoML ↑↑↑ここまで↑↑↑

補足:欲しい情報の追加、不要な情報の削除はインジケーターのソースを直接修正してください。
ソースは利用許諾の範囲内で自由に改変してご使用いただけます。

当インジケーターを使用する上での注意事項(免責事項等は別途MT4用のトップページを参照)

  1. 当インジケーターは複数のチャートに挿入できません。表示されているチャートのいずれか1つのチャートに挿入してください。
    組表示を切り替えた場合は組ごとに1つ挿入できます。切り替え後もメール送信したい場合は組ごとに挿入してください。
  2. OANDAのデモ口座でのみ動作確認を行っており、他のFX業者やリアル口座でも同じ結果になるかは不明です。
    (問題ないと思うけど、今はOANDA以外は売買できない状態なので確認できません。リアル口座も持ってないし…(^_^;)…)
  3. 注文変更や取消に対するメール送信は行われません。
  4. レバレッジの値は適当に計算したものなので間違っているかもしれません。
  5. サマータイムの判断を行っていますが、現在(当インジケーター作成時点)は冬時間なので動作確認できてません。
  6. メールを受信する環境によっては金額等の文字位置がずれる場合があります。(金額等の位置ズレについてを参照)

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

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

  1. MT4のメニュー「ファイル」から「データフォルダを開く」をクリックする。
  2. エクスプローラーが表示されたら「MQL4」フォルダ内にある「Indicators」フォルダに当インジケーター「320_YakujoML.mq4」をコピーする。
  3. MT4のナビゲーターウィンドウで右クリックして「更新」をクリックする。またはMT4を再起動する。
  4. ナビゲーターウィンドウに当インジケーターが表示されたらチャートに挿入する。
  5. 必要に応じてパラメーターを変更する。

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


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

通常のインジケーターと同様にMT4から削除してください。
インジケーターを削除したら「Files」フォルダにある「YakujoML.dat」も削除してください。

  1. チャートから当インジケーターを削除する。
  2. MT4のメニュー「ファイル」から「データフォルダを開く」をクリックする。
  3. エクスプローラーが表示されたら「MQL4」フォルダ→「Indicators」フォルダ内の「320_YakujoML.ex4」や「320_YakujoML.mq4」を削除する。
  4. MT4のナビゲーターウィンドウで右クリックして「更新」をクリックする。またはMT4を再起動する。

補足:「Files」フォルダはMT4のメニュー「ファイル」から「データフォルダを開く」をクリックし、表示されたエクスプローラーの「MQL4」フォルダ内にあります。


パラメータの説明

Custom Indicatorの「パラメーターの入力」の画面イメージ
パラメーターの入力画面

補足:「■」で始まる項目について

当サイトのインジケーターではパラメーターの仕切りとして使用したり、コメント(注記など)を記載するために使用しています。なので値を変更しても何も変わりません。

メールタイトル

メールのタイトルを指定します。
指定しない場合(空文字の場合)は「約定通知」になります。

なお、「メールタイトルとして使用できる文字か?」などのチェックは行っていません。
特殊文字などは使用しないほうが良いと思います。

メール送信最短間隔(秒)

メールを送信する最短の間隔を秒単位で指定します。
ここで指定した間隔でポジションを確認し、新規注文や決済注文があればメールを送信します。無い場合は送信しません。

1時間間隔でまとめてメールを送信したいなら「3600」、1日1回だけ送信したいなら「86400」を指定してください。
ただし、送信するタイミング(時間)は当インジケーターが起動した(挿入された)時間になります。(挿入されてから3600秒後など)
ソース修正ができる人なら決まった時刻に送信させることができます。(決まった時刻にメールを送信したい場合を参照)

新規注文(true=送信する)

新規注文がある場合、その注文内容をメール送信します。「false」の場合は送信しません。

決済注文(true=送信する)

決済注文がある場合、その注文内容をメール送信します。「false」の場合は送信しません。

口座情報(true=送信する)

新規注文または決済注文のメールを送信する場合、口座情報も付与して送信します。
メールを送信しない場合は口座情報は送信されません。(口座情報のみが送信されることはありません)

両建てマックス方式(=true)

口座情報に含まれる「レバレッジ」を両建てマックス方式で計算するか積み上げ方式で計算するかを指定します。
両建てマックス方式の場合は「true」、積み上げ方式の場合は「false」を指定してください。

時間調整

メールに記載される新規注文日時および決済注文日時に対して時間調整を行いたい場合に指定します。

新規注文日時等はサーバ時間になります。そのため、例えばOANDAの場合、日本時間と比べて7時間前の日時になります。
ターミナル画面の取引タブや口座履歴タブに表示されている時間はサーバ時間なのでMT4の画面と見比べる場合はそのままでも良いのですが、日本時間で「何時何分に約定したか」を知りたい場合は時間調整したほうが見やすいと思います。

なお、時間調整した場合、メールには調整後の日時と調整前の日時が両方記載されます。(カッコ内の日時が調整前)

サマータイムを判断する(=true)

メールに記載される新規注文日時および決済注文日時に対してサマータイムを反映させたい場合に指定します。
上記の時間調整と同様にメールに記載される日時を調整する(日本時間に合わせる)ための機能です。


決まった時刻にメールを送信したい場合

当インジケーターは指定された間隔(秒数)ごとにポジションを確認してメールを送信します。
そのため、「3600(1時間ごと)」を指定しても送信される時間を「毎時0分ちょうど」にするのはちょっと面倒です。(当インジケーターを挿入するタイミングを0分ちょうどにする必要がある)

そこで、当インジケーターの修正が必要ですが、以下の方法で「毎時0分」とか「毎日午前8時」にメール送信することができます。

まず、ソース内にある「定時送信」という文字を探してください。
その中に「毎時0分に送信する」と「毎日午前8時に送信する」の2つのサンプルソースがコメント化された状態で記述されていますので、それを参考にソースを修正してください。

修正したらコンパイルしてエラーが発生していないか確認してください。
その後、当インジケーターをチャートに挿入します。
その際、パラメーター「メール送信最短間隔(秒)」には必ず「1」を指定してください。
あとは思った通りにメールが送られてくるのを待つだけです。

※ソースは利用許諾の範囲内で自由に改変してご使用いただけます。


金額等の位置ズレについて

Yahooのメールアドレス(xxx@yahoo.co.jp)に送信した場合、一部の金額等が1桁左にずれる現象が発生しました。
どうも数字等の桁数が偶数の場合に1桁左にずれるようです。(全角コロン(:)と金額等の間の半角空白が1文字無くなる)
もしくは、連続した半角空白は偶数個になるようにも見えます。(例えば半角空白が3つの場合、2つになる等)

SendMail関数の前にメールの内容をテキストファイルに出力する処理を追加して内容を確認しましたが問題ありませんでした。
また、別のメールアドレスに送信した場合は桁ズレは発生しませんでした。でも、そのメールをYahooに転送すると桁ズレしました。

Yahoo側の問題なのかは不明ですが、メールを受信する環境によっては桁ズレが起きるかもしれません。


更新履歴

日付 バージョン 内容
2019/01/15 1.00 初リリース