MQLAuthの概要
このセクションでは、MQLAuthについて紹介します。
このセクションでは、MQLAuthについて紹介します。
MQLAuthは、MQL言語で書かれたプログラム(例えばEA・インジケーター・スクリプト等を指します。以後「EA等」と言います。)に認証等を付けることができるウェブサービスです。
通常では、EA等販売プラットフォーム(GogoJungle等)を利用することでこのような口座番号縛りを強制的に実装することができますが、EA等販売プラットフォームを利用しない直販者は、MQLソースコードに直接口座番号を記入し、口座縛りを実装するしかありませんでした。この場合、利用者が増えるたびに口座番号を書き換えコンパイルする必要があり、EA等をバージョンアップした際には全ての利用者に対し口座番号別にコンパイルしたファイルをそれぞれ送付する必要があります。
MQLAuthを利用すれば、遠隔で口座番号縛りを追加したり削除したりすることができます。
遠隔で口座番号縛りを設定できるので、全ての利用者に同一のコンパイル済みプログラムファイルを配布すればよくなるため、いちいち利用者ごとに口座番号を書き換えてコンパイルする手間を0にすることができます。
MQLAuthLの口座番号認証は、5つの口座番号までなら無料で利用できますので、内輪だけでEAを配布するような用途であれば、一切の金銭的負担なくEA等の流出を防ぐことができます
遠隔での口座番号認証の他に、MQLAuthを利用することで、以下のような機能を無料で利用できます。
これらの機能はMQLAuthウェブサービスの利用登録(無料)と、MQLAuthライブラリのダウンロードが必要です。
MQLAuthライブラリは、MQL言語を使った開発で役に立つ機能を盛り込んだライブラリです。MQLAuthライブラリの機能は全て無料で利用できます。
MQLAuthライブラリは例えば、以下のような機能があります。
チャート上に画像を表示する機能
ブラウザを開きウェブサイトを表示する機能
MT4時間と日本時間を正確に変換する機能
LINE通知機能
これらの機能はMQLAuthインクルードファイルをダウンロードするだけですぐにお使いいただけます。MQLAuthウェブサービスに利用登録する必要はありません。
MQLAuthの認証を利用することで、以下のアクセス認証を実装することができます。
それぞれの口座番号またはパスワードに対し、個別に利用期限を設定することができます。
例えば、AさんのMT4口座番号【12345678】では2021年12月31日まで、BさんのMT4口座【23456789】では2200年12月31日(実質的に期限無し)まで稼働し、その他の口座では稼働しないような口座縛りをEA等に付けることができます。
MQLAuthLに登録された口座番号は、EA利用者が自分で変更することができます。
この機能をEA等利用者に案内することで、EA等提供者は利用者の口座変更要望に煩わされることがありません。
IB目的のEA等で利用者自身による口座変更をさせたくない場合は、この機能を無効にすることもできます。
EA利用者等自身で口座番号を変更する手順
MQLAuthはEA等のバージョン情報とダウンロードURLを記録することができます。これを利用することで、EA等のバージョンアップを行った際、古いEA等を動かしているMT4に対しAlert()で更新を通知したり、ダウンロードURLを通知したりすることができます。
EA等に短期間の期限付きの口座番号認証を自動的に付ける機能です。
この機能を使うと、EA等をチャートに挿入した時にMT4の口座番号を読み取り、7日後に使えなくなる口座番号認証が自動的に設定されるようになります。
この機能を活用すれば、いちいち利用者の口座番号を聞き取ったり、ソースコード内に期限を制限する内容を書いたりする必要無く、不特定多数に対し期限付きの体験版を配布することができます。
体験版の期間は1日単位で好きな期間を設定することができます。
EA等の利用者全員に対し、一斉に同一のメッセージを送信し、チャート画面上やアラートに表示する機能です。
メッセージをクリックすることでブラウザを開くこともできます。
この機能を使うことで、例えば新しいEA商品を販売する際、過去の商品の利用者に対し「新商品が完成しました!詳細はここをクリック」というメッセージを送信することで、新商品の案内をすることができます。
特定の利用者に対し、個別にメッセージを送信し、チャート画面上やアラートに表示する機能です。
メッセージをクリックすることでブラウザを開くこともできます。
この機能を使うことで、例えばEAの利用料を支払っていない利用者に対し「利用料のお支払いが確認できませんでした。こちらをクリックしてサポートにご連絡ください。」といったメッセージを表示することで注意を促すことができます。
PayPalでの決済を自動的に検知し、口座番号認証を設定する機能です。
この機能を利用すると、通常であればPayPalにログインし決済を確認、口座番号と期限を手動で入力するという手間を全自動にすることができます。
また、PayPal決済と同時に「サンキューメール」を送信することもできます。
詳しくは以下のページもご参考ください。
チャート上に画像を表示するのはとっても手間ですよね。オブジェクトをCreateし、立幅横幅設定、表示位置を指定…
MQLAuthライブラリの画像表示機能を使えば、たった一行のコードでチャート上の好きなところに画像を表示させることができます。
自分のツイッターアイコンをチャート画面隅に表示させ、アイコンをクリックしたらブラウザオープン機能を使ってツイッターを開く、なんてのも面白いかもしれません。
チャート上の画像をクリックしたら自分のウェブサイトに飛ばしたい、と考えるEA販売者は少なくありません。
MQLAuthライブラリのブラウザオープン機能を使えば、チャート上に表示させた画像、文字をクリックした時に、ブラウザを開きウェブサイトを表示する機能がお手軽に実装できます。
チャートの片隅にアイコンを表示しておき、クリックすれば販売しているEA一覧ページが開く、といった用途にお使いいただくことで、EA等の販売に役立てることができます。
MT4は通常、サーバー時間(通称:MT4時間)で表示されています。業者によってサーバー時間が異なっており、サマータイムが絡むケースも多く、正確な日本時間を出すのが困難です。
特に、根強い人気のある東京仲値トレード等の時間アノマリー戦略では、時間の計算を正確に行うことが非常に重要です。
MQLAuthライブラリでは、MT4時間を日本時間に変換、日本時間をMT4時間に変換するための関数が用意されています。この関数を利用すれば、チャート画面上の時間表示を簡単に日本時間にしたり、パラメータで利用者が入力した日本時間をMT4時間に変換し正確な稼働時間設定を行ったりすることができます。
サマータイムの変換も自動的に行われるので、一度EA等に組み込んでしまえば、もう時間の変換に悩まされることはありません。
EAがポジションを持ったときや決済した時にLINE通知を行う機能は根強い人気があります。
MQLAuthライブラリのLINE通知機能を使えば、難しいLINE Notifyの実装を行う必要なく、簡単に自作のEA等にLINE通知を実装することができます。
LINE通知[Auth_LineNotify]
ここでは、MQL4のEAに口座番号縛りを実装する手順を例に、MQLAuthの実装方法について説明します。その他の実装については、リファレンスを参考にしてください。
メールアドレス、パスワードを入力し、「登録する」ボタンをクリックします。
メールアドレス確認用のメールが送信されます。
メールを開き、リンク部分をクリックします。
メールが届いていない場合は迷惑メールフォルダもご確認ください。
これでアカウントの作成が完了しました。続いて「ログイン」をクリックします。
先ほど登録した情報でログインします。
ログインしたら、マイページに移動します。
「MQLAuth ID」という項目があるので、これをメモしておきます。これがインジケーターの提供者を識別する番号になります。後ほどインジケーターのソースコードに記入します。
MQLAuthのインクルードファイル(.mqh)をダウンロードし、指定のフォルダに入れます。
MQLAuthを使うために必要なインクルードファイル(.mqh)と、MQLAuthのサンプルコードが入った圧縮ファイルです。
サンプルコードはMQL4用のフォーマット”.mq4″になっていますが、”.mq5″にリネームするだけでMQL5でも使用できます。
MQLAuth.zipを解凍すると、Includeフォルダの中に MQLAuth.mqh というファイルがあります。
このMQLAuth.mqhを以下のフォルダにコピーしてください。
MT4の場合
[MT4のファイル保存フォルダ]/MQL4/Include/
MT5の場合
[MT5のファイル保存フォルダ]/MQL5/Include/
MQLソースコードの先頭に以下の3行を追加します。
#define MQLAUTH_ID "先ほどメモした「MQLAuth ID」"
#define APPLICATION_NAME "MQLAuthに登録するEAの名称"
#include <MQLAuth.mqh>
口座認証はタイマーを利用するため、OnInit()に以下のソースコードを追加します。
EventSetTimer(1);
OnTimer()に以下のソースコードを追加します。この例では、最初の認証の後、タイマーを1日後にセットしています。
if(AccountNumber() != 0) {
if(AuthByAccountNumber_ReturnBool(MQLAUTH_ID, APPLICATION_NAME)) {
// 認証に成功した場合の処理をここに書く
Print("[口座番号: " + (string)AccountNumber() + "] 認証に成功しました。");
} else {
// 認証に失敗した場合の処理をここに書く
Print("[口座番号: " + (string)AccountNumber()
+ "] 認証に失敗しました。利用期限が過ぎているか、この口座番号では利用できません。");
}
EventSetTimer(86400);
}
OnTimer()がない場合は、以下のソースコードを追加します。
void OnTimer() {
if(AccountNumber() != 0) {
if(AuthByAccountNumber_ReturnBool(MQLAUTH_ID, APPLICATION_NAME)) {
// 認証に成功した場合の処理をここに書く
Print("[口座番号: " + (string)AccountNumber() + "] 認証に成功しました。");
} else {
// 認証に失敗した場合の処理をここに書く
Print("[口座番号: " + (string)AccountNumber()
+ "] 認証に失敗しました。利用期限が過ぎているか、この口座番号では利用できません。");
}
EventSetTimer(86400);
}
}
MQLソースコードの追加は以上です。
MQLAuthはサーバにアクセスし認証情報を読み取っています。
サーバアクセスはアクセス回数上限が設定されており、同一端末からのアクセスが30回/60秒を超えるとサーバがエラーを返します。
サーバがエラーを返すと、認証が失敗します。 そのため、不必要な連続認証アクセスとならないよう、実装には気を付けてください。
なお、ダウンロードしたMQLAuth.mqhを改変せず使用する場合は、2回目のアクセスからはローカルキャッシュを読み込むため、サーバへのアクセスは行われません。
MQLのAccountInfoInteger(ACCOUNT_LOGIN)で得られる口座番号は、MT4サーバにログインしてからでないと0を返します。
MT4を起動した直後は、MT4サーバにログインする前なのでAccountInfoInteger(ACCOUNT_LOGIN)は必ず0を返します。
チャートにインジケーターを挿入している状態でMT4を起動したとき、MT4サーバにログインする前にインジケーターの初期化(OnInit())が終了してしまいます。
そのため、AccountInfoInteger(ACCOUNT_LOGIN)を利用する口座番号認証では、OnInit()内に認証用コードを書くと、MT4サーバにログインする前に認証が行われてしまうため、必ず認証に失敗します。
この問題を解決するため、口座番号認証を利用する場合は、OnTimer()内に認証用コードを書きます。
void OnTimer() {
if(AccountNumber() != 0) { ・・・①
EventSetTimer(86400); ・・・②
if(AuthByAccountNumber_ReturnBool(MQLAUTH_ID, APPLICATION_NAME)) {
Print("[口座番号: " + (string)AccountNumber() + "] 認証に成功しました。");
} else {
Print("[口座番号: " + (string)AccountNumber() + "] 認証に失敗しました。"
+ "利用期限が過ぎているか、この口座番号では利用できません。");
}
}
}
① MT4サーバにログインする前はAccountInfoInteger(ACCOUNT_LOGIN)は0を返すので、その場合は認証を行いません。
② MT4サーバにログインした後はAccountInfoInteger(ACCOUNT_LOGIN)が口座番号を返すようになります。その後は繰り返し認証をする必要がないため、タイマー時間を延ばします。なお、OnTimer()で認証を繰り返し行ったとしても、デフォルトのMQLAuth.mqhではキャッシュの値を読み込むだけなので、2回目以降の認証ではサーバへのアクセスは行われません。