今回はMT4の自動売買用EAサンプルソース(FX用)を、プログラミング初心者の方向けに解説しています。
はじめに
EAを作って配布する際などに、『知らない人に使われたくない』と思う事ありますよね。今回は、不特定多数ではなくある一定のユーザーに向けたEA配布を実現するため、簡単に実装できる口座縛り関数をご紹介します。
基本的な口座縛りの関数サンプル(MQL4)
以下サンプルソース(MQL4)の関数になります。そのままコピペでお使いください。
サンプルソース
bool CheckAccountNumber()
{
int allowedAccounts[] = {12345678, 87654321, 24682468}; // ← 許可する口座番号をここに入力
for (int i = 0; i < ArraySize(allowedAccounts); i++)
{
if (AccountNumber() == allowedAccounts[i])
return true;
}
Print("このEAは現在の口座番号では使用できません。");
return false;
}
こんな感じで、許可する口座番号を追記していきましょう。for文で利用可能な口座番号をチェックしています。関数:AccountNumber()を使うことでEA使用者の口座番号を取得できるので覚えておきましょう。
関数の解説
とてもシンプルなつくりで、引数は今回はありません。
EAが使える場合はTrueで使えない場合はFalseが返ってきます。
EA内での使用方法(OnInitへの実装例)
具体的な使用例としては、EAが起動された際に呼び出されるOnInit()で問題ありません。
int OnInit(){
if (!CheckAccountNumber()) //口座チェック(口座縛り関数)
{
// 自動売買を止める
return(INIT_FAILED);
}
// 他の初期化処理
return(INIT_SUCCEEDED);
}
void OnTick(){
~~~~
}
//口座縛り関数
bool CheckAccountNumber(){
int allowedAccounts[] = {123, 456, 789, 77777}; // ← 許可する口座番号をここに入力
for (int i = 0; i < ArraySize(allowedAccounts); i++)
{
if (AccountNumber() == allowedAccounts[i])
return true;
}
Print("このEAは現在の口座番号では使用できません。");
return false;
}
これで口座番号が「123,456,789,77777」の人だけこのEAが使えるという感じになりますね。
より厳密な制限をかける応用方法
ブローカー名との組み合わせ
口座番号と「ブローカー名 (AccountCompany()
」を組み合わせて制限したりもできます。こんな感じです。
bool CheckAccount()
{
if ((AccountNumber() == 12345678 && AccountCompany() == "OANDA Corporation") ||
(AccountNumber() == 77777 && AccountCompany() == "Goldenway Japan Co., Ltd."))
{
return true;
}
Print("口座またはブローカーが一致しません。");
return false;
}
さらに強化するアイディア
他にも、以下のような方法がありますが今回は詳細は割愛します。
- 口座番号の下4桁からパスワードを自動生成し、パラメータ設定に入力
- 口座番号毎にパスワードを設定し、パラメータ設定に入力
- PHPなどでサーバー側スクリプトを用意して、口座番号をチェック(上級者向け)
注意事項とまとめ
以上、『MT4でEA配布時に使える口座縛り関数』でした。本関数をご使用の際は、動作確認等を行い自己責任でお使いください。
口座縛りは、EAの配布先を限定するうえで非常に有効な手段です。ただし、それだけでは完全ではありません。できるだけ複数条件を組み合わせた認証を行い、誤動作や不正利用のリスクを最小限に抑えましょう。開発者として、安心して使ってもらえるEAを提供するためにも、事前のテストと明確な使用条件の提示が大切です。
※ EAのサンプルソース一覧表へ
コメント