自動的に期限付き体験版になる機能をEAに追加する方法

体験版EA
yuki
yuki
EA販売の手段として、期限付き体験版を無料配布するのは非常に有効ですが、申込者個別に期限を設定してコンパイルして送付するのは面倒ですよね。そこで今回は、日付が変わるときに口座番号認証をするEAを作る手順で作ったEAに、自動的に期限付き体験版になる機能を追加する方法をご説明します
カオチャイ
カオチャイ
この機能を使えば、いちいち認証を追加しなくても、EAをチャートに挿入した瞬間に自動的に期限付きのユーザーが作成されます!
yuki
yuki
この機能は無料でご利用できますが、MQLAuth.mqhのバージョン1.02以上がインストールされている必要がございますので、まだ準備ができていない方は下記の記事を参考にしてくださいね!
カオチャイ
カオチャイ
自分でつけるのが面倒くさいという方はシストレファクトリーのMQLAuth実装代行のサービスもご利用くださいね! 
MQLAuth準備編
MQLAuthシステムを利用するための事前準備 MQLAuthを使うための準備 MQLAuthシステムを使う前提条件として「インジケーターをMT4の口座番号やパスワードで縛って管...

体験版機能を使うとなにができる?

MQLAuthの体験版機能をONにしますと、下記の機能を利用することができるようになります。

① 配布するEAに自動で◯日の利用期限がつき、利用者がMT4にEAをセットした日から◯日後に利用できなくなる。(期限は事前にコードにて指定)

② MT4に体験版EAがセットされると、MQLAuthユーザー管理画面に「自動生成した体験版ユーザー」という欄が自動で記述される。

体験版機能このように、MQLAuthのユーザー管理画面にユーザーが自動で登録されていきます

 

体験版機能をつけることによって、TwitterなどでEAやサインツールを無料配布して不特定多数の利用者に使ってもらうことができます。

EAやインジケーターは大抵高額で販売されているため、人の目につかないまま埋もれてしまう事がほとんどですが、SNSなどで無料配布となると話は全く別で、多くの利用者が飛びついてくれる傾向にあります。(無料と有料ではダウンロード数の差に20倍以上の開きが出ます)

そしてこの体験版機能ですが、MQLAuthのPayPal連携機能と組み合わせることで真価を発揮します。

詳しくはPayPal連携の記事で説明していますが、配布したEAやサインツールが、開発者様側で特に作業をしなくても自動で利益を生み出してくれるツールに変わります

 

実際にバイナリーオプションのインジに実装した例はこちら
MQL実装例
【コピペでOK】バイナリーオプションサインツールに体験版機能を機能を実装してみました https://interactivebrokers.work/start_mqlauth/ 体験版機能付きのBO用サインツー...

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();
         }
      }
   }
}
//+------------------------------------------------------------------+

 

カオチャイ
カオチャイ
体験版を配布することは「このEAには自信がある!」というアピールにもつながります。ぜひ活用してくださいね!
yuki
yuki
なお、こちらのコードをそのまま使う場合は下記の2箇所を修正してくださいね!

#define MQLAUTH_ID “” //””内に自分のMQLAUTH_IDを記入する

#define APPLICATION_NAME “” // “”内に自分の登録したEA・インジケーター名に書き換える(※ユーザー名ではないので注意)

基本の口座番号認証
EAやインジケーターに認証をつける方法
MT4のEAやインジケーターにサーバー認証(口座番号縛り)を実装する方法MQLAuthを使って、EAやインジケーターに口座番号認証を実装する方法を紹介しています。 従来のコピー防止だけでなく、遠隔での停止や決済機能の自動化なども可能になる画期的な認証方法です。...
インジケーターのカスタマイズ色々
MQLコードでEAをカスタマイズ
【MQLコード解説】EA・インジケーターのカスタマイズ【体験版・LINE通知】EAやインジケーターに口座番号認証を実装する方法を紹介しています。 認証システムにはMQLAuthを利用して解説していきます。...
インジケーターカスタマイズ参考記事
メッセージ送付機能
配布したEA利用者のMT4にメッセージを一斉配信する方法 https://interactivebrokers.work/start_mqlauth/ 一斉送信機能で確実な宣伝が可能に...
アップデート自動通知
EAアップデート時に自動でMT4のアラートを表示する機能を追加する https://interactivebrokers.work/start_mqlauth/ アップデートのお知らせとは? ...
バイナリーオプションツールに認証をつける
バイナリーオプションのインジケーターに口座認証を実装する方法 https://interactivebrokers.work/start_mqlauth/ 口座番号認証はパスワードよりも安...