アップデートのお知らせとは?
EAをアップデートするとこのようにMT4上にアラートが自動で表示されます
MQLAuth管理画面でバージョンは管理します
今回解説機能は、MQLAuthに登録したバージョン番号を変えるだけで、配布したEAやインジケーターのMT4アラート画面から利用者様にアップデートをしたことをお知らせする機能です。
この際にお好きなメッセージやダウンロードURLなども合わせて表示することが出来ます。
管理画面設定からメッセージの設定をおこなう
MQLAuthのマイページより【ユーザー管理】から変更したいEAの【編集】をクリックします
【EA・インジケーター利用者全員に表示することのできるメッセージの設定】欄でアップデート時に自動で配信されるメッセージと期限を入力してください。
コードを書いていきましょう
#define MQLAUTH_ID ""
#define APPLICATION_NAME ""
#define VERSION "1.00" // 追加した行
#define HTTP_QUERY_FLAG -2147483648
#include <MQLAuth.mqh>
#property copyright "©2020 MT4ツール製作【シストレファクトリー】"
#property link "https://interactivebrokers.work/"
//#property version "1.00" // 削除した行
#property version VERSION // 追加した行
#property strict
#property versionで指定したバージョン番号は、EA内で利用することができません。そのため、defineでVERSIONという定義を宣言し、これを利用することにします。
#property versionにはVERSIONを入れておけば、バージョンアップした際に#define VERSIONを書き換えるだけで#propertyのほうにも適用されます。
あとMQLAUTH_IDにはご自分のMQLAuthID、APPLICATION_NAMEには登録してあるインジケーター名を入力してくださいね。
int OnInit() {
//--- create timer
EventSetTimer(1);
string downloadurl; // 追加した行
//---
return(INIT_SUCCEEDED);
}
URLを格納する変数を用意します。URL通知を使わない場合でも用意してください。
int OnInit() {
//--- create timer
EventSetTimer(1);
string downloadurl;
string newestVersion = Auth_GetNewestVersion(MQLAUTH_ID, APPLICATION_NAME, downloadurl); // 追加した行
//---
return(INIT_SUCCEEDED);
}
バージョン番号を格納する変数を用意し、MQLAuthに登録されたEAのバージョンを取得します。この時、同時に変数downloadurlにURLを格納しています。
int OnInit() {
if(IsTesting()) {
// 省略
}
EventSetTimer(1);
string downloadurl;
string newestVersion = Auth_GetNewestVersion(MQLAUTH_ID, APPLICATION_NAME, downloadurl);
if(VERSION != newestVersion) {
Alert("最新バージョンは " + newestVersion + " です。\r\n"
+ "最新バージョンのファイルは " + downloadurl + " からダウンロードすることができます。");
}
return(INIT_SUCCEEDED);
}
もし現在のバージョンと違っていたらアラートを表示し、アップデートがあることとダウンロードURLをお知らせするコードを追加します。
int OnInit() {
if(IsTesting()) {
// 省略
}
EventSetTimer(1);
string downloadurl;
string newestVersion = Auth_GetNewestVersion(MQLAUTH_ID, APPLICATION_NAME, downloadurl);
if(VERSION != newestVersion) {
Alert("最新バージョンは " + newestVersion + " です。\r\n"
+ "最新バージョンのファイルはEAを購入したサイトからダウンロードすることができます。");
}
return(INIT_SUCCEEDED);
}
ダウンロードURLを利用しない場合はこのように書くこともできます。
これで、EAの初期化時にバージョンを確認し、アップデートがある場合にアラートを出す部分が完成しました。MQLAuthのバージョン番号を変更すると、利用者のMT4にこのように表示されるようになります。
今回作成したコード
//+------------------------------------------------------------------+
//| OneDayAuth.mq4 |
//| ©2020 MT4ツール製作【シストレファクトリー】 |
//| https://interactivebrokers.work/ |
//+------------------------------------------------------------------+
#define MQLAUTH_ID ""
#define APPLICATION_NAME ""
#define VERSION "1.00"
#define HTTP_QUERY_FLAG -2147483648
#include <MQLAuth.mqh>
#property copyright "©2020 MT4ツール製作【シストレファクトリー】"
#property link "https://interactivebrokers.work/"
#property version VERSION
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit() {
if(IsTesting()) {
if(AuthByAccountNumber_ReturnBool(MQLAUTH_ID, APPLICATION_NAME)) {
_isAuthorized = true;
Print("口座認証に成功しました。");
} else {
_isAuthorized = false;
Print("口座認証に失敗しました。利用期限が過ぎているか、この口座番号では利用できません。");
ExpertRemove();
}
}
EventSetTimer(1);
string downloadurl;
string newestVersion = Auth_GetNewestVersion(MQLAUTH_ID, APPLICATION_NAME, downloadurl);
if(VERSION != newestVersion) {
Alert("最新バージョンは " + newestVersion + " です。\r\n"
+ "最新バージョンのファイルは " + downloadurl + " からダウンロードすることができます。");
}
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason) {
//--- destroy timer
EventKillTimer();
}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick() {
if(!_isAuthorized) return;
// EAの処理
}
//+------------------------------------------------------------------+
//| Timer function |
//+------------------------------------------------------------------+
datetime _date;
bool _isAuthorized = false;
void OnTimer() {
if(AccountInfoInteger(ACCOUNT_LOGIN) != 0) {
if(TimeDay(TimeLocal()) != TimeDay(_date)) {
_date = TimeLocal();
if(AuthByAccountNumber_ReturnBool(MQLAUTH_ID, APPLICATION_NAME)) {
_isAuthorized = true;
Print("口座認証に成功しました。");
} else {
_isAuthorized = false;
Alert("口座認証に失敗しました。利用期限が過ぎているか、この口座番号では利用できません。");
ExpertRemove();
}
}
}
}
//+------------------------------------------------------------------+
#define MQLAUTH_ID “” //””内に自分のMQLAUTH_IDを記入する
#define APPLICATION_NAME “” // “”内に自分の登録したEA・インジケーター名に書き換える(※ユーザー名ではないので注意)
https://interactivebrokers.work/paypal/