口座縛りのEA
良いEAができた場合誰かに渡す際に何かしらの制限をかけておかないとコピーされる可能性があります。
ですので、EAに制限をかける必要があります。
EAの制限を掛ける方法は
- 固定のパスワードで制限する方法
- コンパイル時に口座縛りする方法
- 口座番号からパスワードを作って口座縛りをかける
それぞれの方法は一長一短があるので使い分けて活用することをオススメします。
固定のパスワードで制限する方法
固定のパスワードで制限する方法は簡単です。
これは比較的に簡単ですが、ソースコード内に適当にパスワードを作成して、
パラメーターで認証させる方法です。
しかし、EAとパスワードが流出するとすぐにバレてしまうのでセキュリティは低いです。
input string Password = "The password"; //...OnInitとかの記述 void OnTick() { if( Password != "The password") { Comment("Passwordが違います"); return INIT_FAILED; } /*メインコード*/ }
Copy
コンパイル時に口座縛りする方法
コンパイル時に口座縛りする方法は非常に簡単です。
ソースコードに
- 口座番号
- FX業者
- ユーザー名
などを指定し、組合せ以外にユーザーはEAが稼働しないようにします。
多くの口座縛りはこの方法を活用していることが多いです。
しかし、ソースコードを編集してユーザー毎にコンパイルする必要があります。
void OnTick() { if(AccountNumber() != 1234567 || AccountName() != "Taro Yamada") { Comment("使用許可していないユーザーです"); return(0); } }
Copy
口座番号からパスワードを作って口座縛りをかける
例えば、口座番号が123456789だったとします。
その場合、(一桁目の数字)*4+(二桁目の数字)*3+(3桁目の数字)*2の
答えである1*4+2*3+9*2=28をパスワードにして、
パラメータ設定でこの数値を入力しないとEAが稼働しないようにします。
口座番号からパスワードを作るメリットとしては、
- EAを毎回コンパイルしなくて良い
- EAを先にばらまいてからパスワードを発行できる
という点です。
input int Password = 28;//パスコード void OnTick() { int GeneratedPass = StringToInteger(StringSubstr(IntegerToString(AccountNumber()),0,1))*4+ StringToInteger(StringSubstr(IntegerToString(AccountNumber()),1,1))*3+ StringToInteger(StringSubstr(IntegerToString(AccountNumber()),2,1))*2; if(Password != GeneratedPass) { Comment("Passwordが違います"); return; } /*メインコード*/ }
Copy
まとめ
今回は様々な口座縛りの方法をご紹介しました。
もっと強力な口座を縛る方法などもあるのですが、簡易的なものをお伝えしました。
もし、有料で販売する際や配布する際にこうしたソースコードを活用して見てください。
コメント