1,000人限定!!企画に参加してEAをGetする公式ラインに登録して
プレゼントをもらう

【MQL】指定の証拠金維持率以下になった時にLINEとアラートで通知するEA【上級編】

MQL 証拠金維持率 LINE アラート 通知MT4EA作成

指定の証拠金維持率以下になった時にLINEとアラートで通知するEA

今回は、指定の証拠金維持率以下になった場合にLINEとアラートで通知するEAを作っていきたいと思います。

基本的には過去のソースコードを組み合わせてしまえばできてしまいます。

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

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

パラメーターを記述する

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

LINEに通知するためのアクセストークンを記述します。

input string Line_token = "";//LINEのアクセストークン

LINE Notifyの設定は以下の記事を参照してください。

【MQL】LINE Notifyを活用してLINEに通知を送るEA【上級編】
LINE Notifyを活用してLINEに通知を送るEA LINE Notifyとは、外部のwebサービスと連携させて、 LINEのトークルームで受信できる通信機能になります。 LINE NotifyのURLにメッセージを投げ...

次に証拠金維持率以下になった場合にLINEに送りたいメッセージを記入しましょう。

input string Send_Massage = "";//LINEに送りたいメッセージ

次にアラートとLINE通知のON/OFFを記述します。

input bool MarginAlert = True;//アラートのオン・オフ
input bool MarginLine = True;//LINE通知のオン・オフ

最後に証拠金維持率の基準を設定しておきましょう。

input int MarginAlertPer = 300;//証拠金維持率の基準

これでパラメーターを記述は完了です。

input string Line_token = "";//LINEのアクセストークン
input string Send_Massage = "";//LINEに送りたいメッセージ
input bool MarginAlert = True;//アラートのオン・オフ
input bool MarginLine = True;//LINE通知のオン・オフ
input int MarginAlertPer = 300;//証拠金維持率の基準
Copy

OnTick()関数を記述する

OnTick()関数を記述していきましょう。まずはマージンコールの変数を用意します。

double MarginPer = 0;//マージンコールの変数

次に証拠金維持率を計算します。

証拠金維持率の計算式は、「(純資産額-注文証拠金)÷ポジション必要証拠金×100」で算出します。

AccountEquity()の関数は、現在アカウントの有効証拠金の関数です。

AccountMargin()の関数は、取引口座の現在の必要証拠金額である、

現在の保有ポジションを維持するために必要な金額を取得するための関数です。

現在アカウントの有効証拠金/必要証拠金額*100で証拠金維持率を計算します。

MarginPer = AccountEquity()/AccountMargin()*100;//現在の証拠金維持率の計算

アラートがONで証拠金維持率以下の場合に

if(MarginAlert && MarginAlertPer>=MarginPer)//アラートがONで証拠金維持率以下の場合

アラートを鳴らします。

Alert(DoubleToStr(MarginPer, Digits) + "(%)");//アラートを鳴らす

同様にLINE通知がONで証拠金維持率以下の場合に

if(MarginLine && MarginAlertPer>=MarginPer)//LINE通知がONで証拠金維持率以下の場合

LINEに通知を送ります。

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

これでOnTick()関数を記述は完了です。

  double MarginPer = 0;//マージンコールの変数
  MarginPer = AccountEquity()/AccountMargin()*100;//現在の証拠金維持率の計算
  if(MarginAlert && MarginAlertPer>=MarginPer)//アラートがONで証拠金維持率以下の場合
  {
    Alert(DoubleToStr(MarginPer, Digits) + "(%)");//アラートを鳴らす
  }
  if(MarginLine && MarginAlertPer>=MarginPer)//LINE通知がONで証拠金維持率以下の場合
  {
    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);

これでLineNotify関数を記述は完了です。

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);
     }
}

コンパイルする

コンパイルして実際の動きを確認して動いていたら完了です。

ちなみにこれはリアルトレードの場合は使えますが、バックテスト時には使えません。

なので、バックテスト時にはコメントアウトなどしてリアルトレード時のみ使うようにしてください。

ソースコード全体

//+------------------------------------------------------------------+
//|                                        MagineCole-Alert-LINE.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に送りたいメッセージ
input bool MarginAlert = True;//アラートのオン・オフ
input bool MarginLine = True;//LINE通知のオン・オフ
input int MarginAlertPer = 300;//証拠金維持率の基準

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

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

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
//---
  double MarginPer = 0;//マージンコールの変数
  MarginPer = AccountEquity()/AccountMargin()*100;//現在の証拠金維持率の計算
  if(MarginAlert && MarginAlertPer>=MarginPer)//アラートがONで証拠金維持率以下の場合
  {
    Alert(DoubleToStr(MarginPer, Digits) + "(%)");//アラートを鳴らす
  }
  if(MarginLine && MarginAlertPer>=MarginPer)//LINE通知がONで証拠金維持率以下の場合
  {
    LineNotify(Line_token,Send_Massage);//LineNotifyを呼び出し
  }
}
//+------------------------------------------------------------------+

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

まとめ

今回はアラートとLINEに通知を送るという2つの行いましたが、

これにメールアドレスに送信したりなども追加で改良することが可能です。

1,000人限定でFXの自動売買のEAを無料で配布中!!

FX-EA System Projectでは、

【1,000人限定で無料でFXの自動売買のEAを配布中】

です!!

・毎日チャートを見てるのに全く稼げなかった

・コンサルや塾に入ったけど全く稼げなかった

・裁量トレードは難しくて挫折した

・ツールやシステムを購入したが全く稼げなかった

・時間がなくて裁量トレードを行える時間がない

・自動で楽に稼ぎたい

という風に思っている方はこの企画はおすすめです。

フォワードテスト・バックテストを

しっかり行ったパフォーマンスの良いEAを提供中です!!

また、どんどん新しいEAも随時無料配布します!!

人数限定なので早いものがちです!!

もしFX-EA System Projectに興味があれば

是非参加してください。

MT4EA作成 上級編
\記事が役に立ったらシェアしてね/
FX-EA System Projectをフォローする
FX-EA System Project Creator

コメント

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