LINE Notifyとバッチファイルの併せ技
MT4のEAやインジケーターのサイン発生時等にLINEにチャート付きでメッセージを送れたら便利なのにな~って思ったことありませんか?
LINEにメッセージを送るだけなら他のサイトでも紹介されているのですが、チャート付きとなるとなかなか見つけられません。
「そんなことできないのかな?」と思ってしまうかもしれませんが、LINE Notifyとバッチファイルを組み合わせればできるんです!
当記事ではその方法を画像つきで丁寧に解説します。
手前味噌ですが、全容を手順レベルに落とし込んでいるのは結構貴重で、有料で販売している方もいらっしゃるぐらいです。
ですが、私は一般公開しちゃいます。持ってけドロボー!
LINE Notifyの設定(トークンの発行)
LINEにメッセージを送るためには、LINE Notifyと呼ばれるAPIを設定する必要があります。
まずはLINE Notifyにアクセスしてください。
画面右上の「ログイン」をクリックします。
LINEに登録しているメールアドレスとパスワードを入力して「ログイン」をクリックします。
PC画面に4桁の番号が表示されます。
スマホのLINEを開くと、番号入力画面になっているため、その4桁の番号を入力して「本人確認」をタップします。
「確認」をタップします。
PC画面に戻り、「マイページ」をクリックします。
「アクセストークンの発行(開発者向け)」欄で「トークンを発行する」をクリックします。
トークン名(通知の名前)と通知を送信するトークルームを選択して、「発行する」をクリックします。トークルームは通常、一番上の「1:1でLINE Notifyから通知を受け取る」でOKです。
長い文字列のトークンが発行されます。「コピー」をクリックしてトークンをコピーし、メモ帳等に貼り付けて保存してください。その後、「閉じる」をクリックします。
記載の通り、画面を閉じるとトークンは二度と確認できなくなってしまいますので、閉じる前に必ずコピーしてどこかに保存しておきましょう。
最悪、コピー前に画面を閉じてしまったり、保存した情報を紛失してしまった場合は、新しいトークンを作ればOKです。
先ほど発行したトークン情報が画面に表示されていれば完了です。
バッチファイルの作成と設置
次に、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の使用を許可する]にチェックしておきましょう。
ここにチェックを入れないとバッチファイルを起動するための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関数は外部ソフトを実行できる関数で汎用性がとても高いので、これを覚えておくだけでもやれることが増えるはずです。
ぜひお試しあれ!