【MQL4】MT4からLINEにチャート付きでメッセージを送る方法

LINE Notifyとバッチファイルの併せ技

MT4のEAやインジケーターのサイン発生時等にLINEにチャート付きでメッセージを送れたら便利なのにな~って思ったことありませんか?

LINEにメッセージを送るだけなら他のサイトでも紹介されているのですが、チャート付きとなるとなかなか見つけられません。

「そんなことできないのかな?」と思ってしまうかもしれませんが、LINE Notifyとバッチファイルを組み合わせればできるんです!

当記事ではその方法を画像つきで丁寧に解説します。

手前味噌ですが、全容を手順レベルに落とし込んでいるのは結構貴重で、有料で販売している方もいらっしゃるぐらいです。

ですが、私は一般公開しちゃいます。持ってけドロボー!

LINE Notifyの設定(トークンの発行)

LINEにメッセージを送るためには、LINE Notifyと呼ばれるAPIを設定する必要があります。

まずはLINE Notifyにアクセスしてください。

画面右上の「ログイン」をクリックします。

LINE通知01

LINEに登録しているメールアドレスとパスワードを入力して「ログイン」をクリックします。

LINE通知02

PC画面に4桁の番号が表示されます。

LINE通知03

スマホのLINEを開くと、番号入力画面になっているため、その4桁の番号を入力して「本人確認」をタップします。

LINE通知04

「確認」をタップします。

LINE通知05

PC画面に戻り、「マイページ」をクリックします。

LINE通知06

「アクセストークンの発行(開発者向け)」欄で「トークンを発行する」をクリックします。

LINE通知07

トークン名(通知の名前)と通知を送信するトークルームを選択して、「発行する」をクリックします。トークルームは通常、一番上の「1:1でLINE Notifyから通知を受け取る」でOKです。

LINE通知08

長い文字列のトークンが発行されます。「コピー」をクリックしてトークンをコピーし、メモ帳等に貼り付けて保存してください。その後、「閉じる」をクリックします。

LINE通知09

記載の通り、画面を閉じるとトークンは二度と確認できなくなってしまいますので、閉じる前に必ずコピーしてどこかに保存しておきましょう。

最悪、コピー前に画面を閉じてしまったり、保存した情報を紛失してしまった場合は、新しいトークンを作ればOKです。

先ほど発行したトークン情報が画面に表示されていれば完了です。

LINE通知10

バッチファイルの作成と設置

次に、LINEにメッセージを送るコマンドを実行するバッチファイルを用意します。

適当なテキストファイルを作成後、中身を開き、以下の通り入力して保存します。

curl -X POST -H "Authorization: Bearer %1" -F "message = %~2" -F "imageFile=@%3" https://notify-api.line.me/api/notify

上記内容を保存したテキストファイル名を「LineNotify.bat」に変更します。その際、Windowsの設定で拡張子を表示するようにしておきましょう。拡張子を表示させる手順はこちら

「LineNotify.bat.txt」にならないようにご注意ください。

これでバッチファイルが完成です。MT4のデータフォルダ(長い文字列)\MQL4\Filesに設置します。

MQL4コード

あとは上記バッチを実行するMQL4のソースコードを書けば完成です。

と、その前にMT4の[ツール]-[オプション]の[エキスパート]タブを開き、[DLLの使用を許可する]にチェックしておきましょう。

DLLの使用を許可するにチェック

ここにチェックを入れないとバッチファイルを起動するためのShellExecuteW関数を実行することができません。

//+------------------------------------------------------------------+
//| インポート                                                       |
//+------------------------------------------------------------------+
#import "shell32.dll"
  int ShellExecuteW(int hWnd, string lpVerb, string lpFile, string lpParameters, string lpDirectory, int nCmdShow);
#import

//+------------------------------------------------------------------+
//| パラメータ                                                       |
//+------------------------------------------------------------------+
extern string LineToken = "ZANrK*****9Y4EZ"; // LINEトークン

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
{
  string message = MQLInfoString(MQL_PROGRAM_NAME) + " " + Symbol() + " Alert";
  LineNotify(LineToken, message);

  return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
}

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
}

//+------------------------------------------------------------------+
//| LINE通知                                                         |
//+------------------------------------------------------------------+
void LineNotify(string aLineToken, string aMessage){
  // チャートのスクリーンショット画像(Filesフォルダに格納される)
  string imgFileName = "screenshot_" + (string)ChartID() + ".png";

  // size: 600x400 (変更可能)
  ChartScreenShot(0, imgFileName, 600, 400, ALIGN_RIGHT);

  // .batの起動
  int res = ShellExecuteW(NULL
                          ,"open"
                          ,TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL4\\Files\\" + "LineNotify.bat"
                          ,aLineToken + " " 
                            + "\"" + aMessage + "\"" + " "
                            + TerminalInfoString(TERMINAL_DATA_PATH) + "\\MQL4\\Files\\" + imgFileName
                          ,NULL
                          ,0);
}

LineTokenパラメータにご自身のLINEのトークンをセットします。message変数にはLINE通知したい文章を格納しましょう。

そして、それらをLineNotify関数に渡せばLINE通知してくれます。

以前も書きましたが、ShellExecuteW関数のようなWindows 32 APIを使えるようになるとMT4で実現できることがグンと広がります。

とはいえ、Windows 32 APIを分かりやすくまとめているサイトはないので、初心者の方には難しいかもしれません。

ただ、ShellExecuteW関数は外部ソフトを実行できる関数で汎用性がとても高いので、これを覚えておくだけでもやれることが増えるはずです。

ぜひお試しあれ!

MT4の無料プログラミング講座

LINE公式アカウントを友だち追加して、MT4のプログラミング講座を無料で受けちゃおう!

超豪華プレゼントも盛りだくさん♪

MT4プログラミングを習得すると、オリジナルEA運用、作成代行、商品販売等、複数の収入源を手に入れられるよ。副業に最適だね!

↓↓↓ 詳細はこちら ↓↓↓

アイキャッチ

>

エターナル・パートナーPRO ~MT4裁量トレード支援ツール~ 「MT4は裁量トレーダーに優しくない」そう思ったことありませんか?もっと快適にトレードするための強力な売買ツールが必要だと考え、開発したのが「エターナル・パートナーPRO」です。元々は自分自身のために開発したツールですので、手抜き無しのガチものです。既に200名近い方に手に取っていただき、喜びの声が続々と届いております。ぜひご覧ください!

CTR IMG