体験版機能を使うとなにができる?
MQLAuthの体験版機能をONにしますと、下記の機能を利用することができるようになります。
① 配布するEAに自動で◯日の利用期限がつき、利用者がMT4にEAをセットした日から◯日後に利用できなくなる。(期限は事前にコードにて指定)
② MT4に体験版EAがセットされると、MQLAuthユーザー管理画面に「自動生成した体験版ユーザー」という欄が自動で記述される。
このように、MQLAuthのユーザー管理画面にユーザーが自動で登録されていきます
体験版機能をつけることによって、TwitterなどでEAやサインツールを無料配布して不特定多数の利用者に使ってもらうことができます。
EAやインジケーターは大抵高額で販売されているため、人の目につかないまま埋もれてしまう事がほとんどですが、SNSなどで無料配布となると話は全く別で、多くの利用者が飛びついてくれる傾向にあります。(無料と有料ではダウンロード数の差に20倍以上の開きが出ます)
そしてこの体験版機能ですが、MQLAuthのPayPal連携機能と組み合わせることで真価を発揮します。
詳しくはPayPal連携の記事で説明していますが、配布したEAやサインツールが、開発者様側で特に作業をしなくても自動で利益を生み出してくれるツールに変わります。
MQLAuth管理画面の設定
まず、MQLAuthメイン画面から【ユーザー管理】を選び、自動的に期限付き体験版になる機能を有効にしたいEA・インジケーターの【編集】をクリックします。
編集画面に進むと【自動体験版作成機能を有効にする】のチェックボックスがあるので、それをクリックし、「保存」ボタンを押せば設定は完了です。続いてソースコードの編集にいきます。
ソースコードの編集
#define MQLAUTH_ID ""
#define APPLICATION_NAME ""
#define HTTP_QUERY_FLAG -2147483648
#include <MQLAuth.mqh>
#property copyright "©2020 MT4ツール製作【シストレファクトリー】"
#property link "https://interactivebrokers.work/"
#property version "1.00"
#property strict
int _periodDay = 7; // この行を追加
まずグローバル変数に、体験版の期間を格納する変数を追加します。この例では、MQLAuthのユーザーに登録されていない口座番号で利用しようとすると、期限が7日後の口座番号認証ユーザーが自動的に作成されます。
MQLAUTH_IDとAPPLICATION_NAMEはご自身のものに変更しておいてくださいね。
void OnTimer() {
if(AccountInfoInteger(ACCOUNT_LOGIN) != 0) {
if(TimeDay(TimeLocal()) != TimeDay(_date)) {
_date = TimeLocal();
datetime period = AuthByAccountNumberWithAddUser_ReturnDatetime(MQLAUTH_ID, APPLICATION_NAME, _periodDay); // この行を追加
if(AuthByAccountNumber_ReturnBool(MQLAUTH_ID, APPLICATION_NAME)) {
_isAuthorized = true;
Print("口座認証に成功しました。");
} else {
_isAuthorized = false;
Alert("口座認証に失敗しました。利用期限が過ぎているか、この口座番号では利用できません。");
ExpertRemove();
}
}
}
}
OnTimer()内で認証用関数AuthByAccountNumberWithAddUser_ReturnDatetime()を呼び出します。
3つ目の引数が体験版の期間です。戻り値はdatetime型ですので、メッセージ表示期限を格納する変数を宣言し、そこに格納します。
void OnTimer() {
if(AccountInfoInteger(ACCOUNT_LOGIN) != 0) {
if(TimeDay(TimeLocal()) != TimeDay(_date)) {
_date = TimeLocal();
datetime period = AuthByAccountNumberWithAddUser_ReturnDatetime(MQLAUTH_ID, APPLICATION_NAME, _periodDay);
// ここから削除
//if(AuthByAccountNumber_ReturnBool(MQLAUTH_ID, APPLICATION_NAME)) {
// _isAuthorized = true;
// Print("口座認証に成功しました。");
//} else {
// _isAuthorized = false;
// Alert("口座認証に失敗しました。利用期限が過ぎているか、この口座番号では利用できません。");
// ExpertRemove();
//}
// 削除ここまで
// ここから追加
if(period >= TimeLocal()) {
_isAuthorized = true;
Print("口座認証に成功しました。利用期限は " + TimeToString(period) + " です。");
} else {
_isAuthorized = false;
Alert("口座認証に失敗しました。利用期限が過ぎているか、この口座番号では利用できません。");
ExpertRemove();
}
// 追加ここまで
}
}
}
次に認証部分を書き換えます。
認証用関数AuthByAccountNumberWithAddUser_ReturnDatetime()の戻り値が現在時刻より後だったら認証成功、現在時刻より前(期限切れ)だったら認証失敗にしてEAをチャートからはがします。
これで完成です。チャートにこのEAを挿入すると、MQLAuthに口座番号が登録されていない場合は期限が7日後のユーザーが自動的に作成され、既に口座番号が登録されているユーザーは通常の認証が行われます。
今回作成したコード
//+------------------------------------------------------------------+
//| OneDayAuth.mq4 |
//| ©2020 MT4ツール製作【シストレファクトリー】 |
//| https://interactivebrokers.work/ |
//+------------------------------------------------------------------+
#define MQLAUTH_ID ""
#define APPLICATION_NAME ""
#define HTTP_QUERY_FLAG -2147483648
#include <MQLAuth.mqh>
#property copyright "©2020 MT4ツール製作【シストレファクトリー】"
#property link "https://interactivebrokers.work/"
#property version "1.00"
#property strict
int _periodDay = 7; // 体験版の期間(この例では期限が7日後のユーザーが作成されます)
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit() {
if(IsTesting()) {
if(AuthByAccountNumber_ReturnBool(MQLAUTH_ID, APPLICATION_NAME)) {
_isAuthorized = true;
Print("口座認証に成功しました。");
} else {
_isAuthorized = false;
Print("口座認証に失敗しました。利用期限が過ぎているか、この口座番号では利用できません。");
ExpertRemove();
}
}
EventSetTimer(1);
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();
datetime period = AuthByAccountNumberWithAddUser_ReturnDatetime(MQLAUTH_ID, APPLICATION_NAME, _periodDay);
if(period >= TimeLocal()) {
_isAuthorized = true;
Print("口座認証に成功しました。利用期限は " + TimeToString(period) + " です。");
} else {
_isAuthorized = false;
Alert("口座認証に失敗しました。利用期限が過ぎているか、この口座番号では利用できません。");
ExpertRemove();
}
}
}
}
//+------------------------------------------------------------------+
#define MQLAUTH_ID “” //””内に自分のMQLAUTH_IDを記入する
#define APPLICATION_NAME “” // “”内に自分の登録したEA・インジケーター名に書き換える(※ユーザー名ではないので注意)