FX-EA System Projectはこちら公式ラインに登録して
プレゼントをもらう

【MQL】LINE Notifyを活用してLINEに通知を送るEA【上級編】

MQL MT4 LINE 通知 EAMT4EA作成

LINE Notifyを活用してLINEに通知を送るEA

LINE Notifyとは、外部のwebサービスと連携させて、

LINEのトークルームで受信できる通信機能になります。

LINE NotifyのURLにメッセージを投げる(POSTする)ことで、

自分のLINEのトークルームにそのメッセージを送ることができるので、見逃すことが少なくなります。

LINE Notifyの設定

LINE Notifyにアクセスしましょう。

ログイン画面からLINEのアカウントでログインします。LINEのアカウントがあれば、新規登録などは不要です。

LINEログインした後の画面で、右上のニックネームをクリックしてマイページに移動します。

MQL言語 LINENotify MT4

マイページ内のトークンを発行するボタンをクリックすると、

MQL言語 LINENotify MT4

トークン名と通知の送信先を選択するページになります。MQL言語 LINENotify MT4

発行したトークンは後で必要なのでコピーしておきましょう。

MQL言語 LINENotify MT4

MT4の設定

MT4画面上部のツール→オプションを選択します。

表示されたウィンドウにてエキスパートアドバイザタブを選択します。

WebRequestを許可するURLリストにチェックを入れます。

MQL言語 LINENotify MT4

新しいURLを追加にをクリックし以下のURLを入力しましょう。

https://notify-api.line.me/api/notify
Copy

メタエディタ(MetaEditor)を立ち上げる

メタエディタ(MetaEditor)を立ち上げましょう。今回は名前を「LINE-EA」で作成します。

LINE Notify API Documentは以下に記載しておきます。

パラメーターを記述する

パラメーターを記述しましょう。

Line_tokenには取得したURLを貼り、Send_MassageにはLINEに送りたいメッセージを記載します。

input string Line_token = "";//LINEのアクセストークン
input string Send_Massage ="";//LINEに送りたいメッセージ
Copy

OnInit()関数の記述する

OnInit()関数の記述するしましょう。LineNotify関数はユーザー定義関数になります。

LineNotify()の関数を呼び出して引数をLine_tokenとSend_Massageを送ります。

LineNotify(Line_token,Send_Massage);//LineNotifyを呼び出し
Copy

LineNotify関数の記述する

LineNotify関数の記述しましょう。変数をまず設定します。

  string headers;
  char data[], result[];

headersの変数にコンテンツタイプを使用した単純なフォームを入れます。

  • Authorization: Bearer
  • Token
  • \r\n application/x-www-form-urlencoded\r\n

をheadersに代入します。

headers="Authorization: Bearer "+Token+"\r\n application/x-www-form-urlencoded\r\n";

ArrayResize()は最初の次元のサイズを新しく設定します。

StringToCharArray()は文字列をchar型配列にコピーする関数です。

StringToCharArray()は以下の引数になっています。

int  StringToCharArray(
string text_string, // コピー元の文字列
uchar &array[], // コピー先配列 ※参照渡し
int start = 0, // コピー開始する配列インデックス
int count = -1, // コピーする文字数
uint codepage = CP_ACP // コードページ
);

それらの情報を以下のように記載していきます。

ArrayResize(data,StringToCharArray("message="+Massage,data,0,WHOLE_ARRAY,CP_UTF8)-1);

WebRequest()関数は指定したサーバーにHTTPリクエストを送ります。

WebRequest()関数は以下の記事を参照してください。

【MQL】指定されたサーバーにHTTPリクエストを送信する『WebRequest関数』についてわかりやすく説明してみた
WebRequest関数 WebRequest関数とは、指定されたサーバーにHTTPリクエストを送信します。 WebRequest関数はLINEやDiscordなどに通知を送る際に使用するケースが多いですね。 WebRequest...
int res = WebRequest("POST", "https://notify-api.line.me/api/notify", headers, 0, data, data, headers);

resの値が-1であれば、

if(res==-1)

エラーコードを出します。

 Print("Error in WebRequest. Error code  =",GetLastError()); 
 MessageBox("Add the address 'https://notify-api.line.me' in the list of allowed URLs on tab 'Expert Advisors'","Error",MB_ICONINFORMATION);

これでOnInit()関数は完了です。

void LineNotify(string Token,string Massage)
{
   string headers;//ヘッダー
   char data[], result[];//データ、結果
   
   headers="Authorization: Bearer "+Token+"\r\n	application/x-www-form-urlencoded\r\n";
   ArrayResize(data,StringToCharArray("message="+Massage,data,0,WHOLE_ARRAY,CP_UTF8)-1);
   int res = WebRequest("POST", "https://notify-api.line.me/api/notify", headers, 0, data, data, headers);
   if(res==-1) //エラーの場合
     { 
      Print("Error in WebRequest. Error code  =",GetLastError()); 
      MessageBox("Add the address 'https://notify-api.line.me' in the list of allowed URLs on tab 'Expert Advisors'","Error",MB_ICONINFORMATION); 
     } 
}
Copy

コンパイルする

コンパイルしてMT4で起動してLINEに通知が飛んできたら完了です。

MQL言語 LINENotify MT4

ソースコード全体

//+------------------------------------------------------------------+
//|                                                      LINE-EA.mq4 |
//|                     Copyright 2020, FX-EA System Project Creator |
//|                        https://creator.fx-ea-system-project.com/ |
//+------------------------------------------------------------------+
#property copyright "Copyright 2020, FX-EA System Project Creator"
#property link      "https://creator.fx-ea-system-project.com/"
#property version   "1.00"
#property strict

/*パラメーター*/
input string Line_token = "";//LINEのアクセストークン
input string Send_Massage ="";//LINEに送りたいメッセージ

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
  LineNotify(Line_token,Send_Massage);//LineNotifyを呼び出し
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
  }
//+------------------------------------------------------------------+

void LineNotify(string Token,string Massage)
{
   string headers;//ヘッダー
   char data[], result[];//データ、結果
   
   headers="Authorization: Bearer "+Token+"\r\n	application/x-www-form-urlencoded\r\n";
   ArrayResize(data,StringToCharArray("message="+Massage,data,0,WHOLE_ARRAY,CP_UTF8)-1);
   int res = WebRequest("POST", "https://notify-api.line.me/api/notify", headers, 0, data, data, headers);
   if(res==-1) //エラーの場合
     { 
      Print("Error in WebRequest. Error code  =",GetLastError()); 
      MessageBox("Add the address 'https://notify-api.line.me' in the list of allowed URLs on tab 'Expert Advisors'","Error",MB_ICONINFORMATION); 
     } 
}
Copy

まとめ

今回はOnInit()関数内で初期時に送るようにしましたが、OnTick()関数で決められた条件内で

LineNotify()を呼び出せば条件時に通知が来るようになります。

これはぜひ自分でチャレンジして見てくださいね。

コメント

タイトルとURLをコピーしました