口座番号認証をつけてMQLAuthサーバーで管理できるようにする手順

EAの口座認証機能
yuki
yuki
ここではインジケーター管理のベースになる口座番号認証を実装していきます。(今回ご紹介する認証は、日付が変わるところで確認するようにしています)
カオチャイ
カオチャイ
この機能は無料でご利用できますが、MQLAuth.mqhのバージョン1.02以上がインストールされている必要がございますので、まだ準備ができていない方は下記の記事を参考にしてくださいね!
MQLAuth準備編
MQLAuthシステムを利用するための事前準備 MQLAuthを使うための準備 MQLAuthシステムを使う前提条件として「インジケーターをMT4の口座番号やパスワードで縛って管...

口座番号認証でインジケーターを個別管理できるようにしていきます

EAの口座番号認証口座認証失敗時のメッセージなども表示可能

 

口座認証はMT4左上に表示されている口座番号とMQLAuthサーバーに登録した口座番号が一致したインジケーターしか動かないようにするもので、MQLAuthインジケーターの不正利用を防ぐ目的以外に、インジケーターの利用期限を管理したり、インジケーターをアクティベート化するなど、MQLAuthでインジケーターを管理するための基本となります。

yuki
yuki
例えばインジケーターをダウンロードしてPaypalでお支払いがあったお客様に、MT4の口座番号を登録するURLを案内して番号を登録してもらえば、インジケーターがアクティベート化されるような使い方をします

こちらは口座番号認証の代表的な使い方

 

認証には口座番号認証とパスワード認証の2つがありますが、ここでは管理の手間が楽で、セキュリティの面からも優秀な口座番号認証を解説していきます。

パスワードはパスの管理が必要ですが、口座番号認証はパスワードのような入力の必要がありませんし、MQLAuthを使えばお客さんが自由に口座番号の変更もできますので開発者様の手間が省けますからね。

カオチャイ
カオチャイ
細かい解説の必要がない方は、記事の最後にコードを貼っておきますのでコピペでご利用下さいね

 

また、パスワード認証はEAの作り方によっては力技で突破されることもありますが、口座番号認証の場合は口座自体を乗っ取るという方法でもしない限り、第三者が利用することが出来ないので安心です。

 

カオチャイ
カオチャイ
それを踏まえまして口座番号認証の実装方法を解説していきますね!

 

まずはMetaEditorでEAの.mq4を作ります

新規作成でファイルを作ります(画像はクリックで拡大できます)

 

名前はお好きなものをつけて下さい

 

認証にはOnTimerを利用するので、チェックを入れます。

 

テスターイベントハンドラは使わないのでそのまま「完了」

 

これでMetaEditorで自動生成されるEAのテンプレートが表示されました。

 

実際にコードを書き込んでいきます

#define MQLAUTH_ID "" // 追加した行
#define APPLICATION_NAME "" // 追加した行

#property copyright "©2020  MT4ツール製作【シストレファクトリー】"
#property link      "https://interactivebrokers.work/"
#property version   "1.00"
#property strict

まずはMQLAUTH_IDとAPPLICATION_NAMEをdefineで宣言します。

MQLAUTH_IDにはご自身のMQLAuthIDを、APPLICATION_NAMEにはこちらで登録したEA・インジケーター名を入れてくださいね。

 

https://mql-auth.com/Home/Manual#menu6-3

MQLAuthはデフォルトでは2回目の認証以降はキャッシュを使うため、1日ごとに認証を行う等、MT4を起動してから一定期間ごとに認証を行う場合は、実装するEAに以下のコードを追記する必要があります。

#define HTTP_QUERY_FLAG -2147483648

このコードは、必ずMQLAuth.mqhをインクルードするコードの前に追加してください。

#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

MQLAuthのインクルードファイルをインクルードします。MT4を起動した後に何度も認証を行うときは、HTTP_QUERY_FLAGも宣言する必要があります。HTTP_QUERY_FLAGの宣言はインクールドの前に書きます。

 

int OnInit()
  {
//--- create timer
   EventSetTimer(1);
   
//---
   return(INIT_SUCCEEDED);
  }

OnTimer()を1秒おきに実行するように変更しておきます。

 

datetime _date; // 追加した行

void OnTimer()
  {
   
  }

OnTimer()内に、日付が変わったときに認証を行うコードを書きます。まずは日付が変わったかどうかを調べるため、日付を格納しておくグローバル変数を用意します。

 

datetime _date;

void OnTimer()
  {
   if(TimeDay(TimeLocal()) != TimeDay(_date)){ // 追加した行
      _date = TimeLocal(); // 追加した行
   
   } // 追加した行
  }

_dateに入っている日付が現在の日付と違っていたら、日付が変わったと判断して認証を行います。TimeDay関数で、現在のローカル時刻の日付を取得し、_dateの日付と比較しています。

 

datetime _date;

void OnTimer() {
   if(AccountInfoInteger(ACCOUNT_LOGIN) != 0) { // 追加した行
      if(TimeDay(TimeLocal()) != TimeDay(_date)) {
         _date = TimeLocal();

      }
   } // 追加した行
}

MT4が証券会社にログインするまではAccountInfoInteger(ACCOUNT_LOGIN)が0を返すので、ログインしてから認証するようにします。

 

口座認証部分を書く

datetime _date;
bool _isAuthorized = false; // 追加した行

void OnTimer() {
   if(AccountInfoInteger(ACCOUNT_LOGIN) != 0) {
      if(TimeDay(TimeLocal()) != TimeDay(_date)) {
         _date = TimeLocal();

      }
   }
}

認証状態を表すbool変数 _isAuthorized を用意します。初期状態はfalseにして、認証されていない状態にしておきます。

 

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();
         }
         // ここまで追加
      }
   }
}

AuthByAccountNumber_ReturnBool(MQLAUTH_ID, APPLICATION_NAME)は口座番号認証が成功したらtrueを返します。

口座認証に成功したら_isAuthorizedにtrueを入れ、口座認証に失敗したらアラートで警告を出して_isAuthorizedにfalseを入れます。お好みで、ExpertRemove()でEAをチャートからはがします。

 

void OnTick() {
   if(!_isAuthorized) return; // 追加した行

   // EAの処理
}

あとはOnTick()の先頭で、_isAuthorizedがfalseのときはreturnして、その後ろに通常通りEAの内容を書いていけば、日付が変わるときに口座番号認証をするEAの完成です。

しかし、このままだとバックテストができません。なぜなら、バックテストではOnTimer()が動かないからです。そこで、バックテストの場合はOnInit()で認証するようにします。

 

int OnInit() {
   // ここから追加
   if(IsTesting()) {
      if(AuthByAccountNumber_ReturnBool(MQLAUTH_ID, APPLICATION_NAME)) {
         _isAuthorized = true;
         Print("口座認証に成功しました。");
      } else {
         _isAuthorized = false;
         Print("口座認証に失敗しました。利用期限が過ぎているか、この口座番号では利用できません。");
         ExpertRemove();
      }
   }
   // 追加ここまで
   EventSetTimer(1);

   return(INIT_SUCCEEDED);
}

これでようやく完成です。

 

MQLAuthシステムにユーザー登録を行う

yuki
yuki
完成したインジケーターは、下記の手順でMQLAuthシステムにユーザー登録をすることで、管理ができるようになります

 

ユーザー登録

ユーザー管理画面より【ユーザーの登録】を選びます

 

ユーザー管理画面

必要事項を入力していきます

 

ユーザー登録登録が完了しました

 

今回作成したコード

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

         if(AuthByAccountNumber_ReturnBool(MQLAUTH_ID, APPLICATION_NAME)) {
            _isAuthorized = true;
            Print("口座認証に成功しました。");
         } else {
            _isAuthorized = false;
            Alert("口座認証に失敗しました。利用期限が過ぎているか、この口座番号では利用できません。");
            ExpertRemove();
         }
      }
   }
}
//+------------------------------------------------------------------+

 

カオチャイ
カオチャイ
以上で基本的な認証の実装は完成です。おつかれさまでした!
yuki
yuki
上記のコードをそのままコピペで使う場合は下記の2箇所を修正すればOKですよ!

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

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

 

認証を実装したらこのあたりから挑戦してみましょう
アップデート自動通知
EAアップデート時に自動でMT4のアラートを表示する機能を追加する https://interactivebrokers.work/start_mqlauth/ アップデートのお知らせとは? ...
インジケーターからLINE通知を送る方法
EA・インジケーターからLINEにメッセージを送信する方法 https://interactivebrokers.work/start_mqlauth/ LINEでメッセージを送信 ...
MT4からブラウザを開く方法
MT4のチャートに表示させた文字列をクリックでブラウザを開いてみよう https://interactivebrokers.work/start_mqlauth/ MT4からブラウザを開くとなにが...
メッセージ送付機能
配布したEA利用者のMT4にメッセージを一斉配信する方法 https://interactivebrokers.work/start_mqlauth/ 一斉送信機能で確実な宣伝が可能に...
インジケーターのカスタマイズ色々
EAのカスタマイズ方法
EA認証システムMQLAuthの操作方法MQLAuthを使ったインジケーターのカスタマイズ方法を解説しています...
EA・インジケーター制作のご依頼はこちら
ツール制作の流れ
MT4のEA・インジケーターを作成依頼する際の流れと注意事項をまとめましたMT4やMT5に関するツールを作成する際の流れを説明しています。 シストレファクトリーでは一からEAの制作以外にもツールの修正や、統計的なアプローチができるソフトなどお客様の欲しいツールを形にいたします。...
料金とお問い合わせ
MT4・MT5のEA・インジケーター作成と料金のお問い合わせシストレファクトリーでEA・インジケーターを作成すると特殊機能が無料! シストレファクトリーで作成したEAやインジケーターの著作権は無...