*

[MT4]EAに口座縛り/期間限定縛りをかける種類と方法(MT5)

良いEAができると、クレクレ厨がよってきますが、身内の人にならひっそりと配布したい場合もあります。

しかし、どこから漏れるか分かりませんが、知らない間に自分のEAが出回っていた場合、身内を疑いたくはないですよね。

 

EA・インジケーターを第3者に渡すとき、何かしらの制限をかけておかないと、コピーされてしまう可能性があります。

制限がなしEAの場合、コピーされれば、知らぬ間にいろいろなところで使われてしまいます。

 

そこで、EAに制限をかける必要性がでてきますが、現在では様々な方法があります。 EAにつける制限にはいろいろありますが、それぞれ一長一短あります。 状況に応じて(技術レベルに応じて)使い分けられるといろいろと便利だと思います。  

 

コンパイル時に口座番号を書き口座縛りする方法

これは比較的かんたんで、ソースコードに直接口座番号とFX業者を書き込んでおき、その組み合わせ以外のユーザーの場合は稼働しないようにプログラミングするだけです。

 

口座番号で縛ったり、特定のMT4業者でしか動かないようにしたり、デモ口座では稼働しないようにすることができます。

 

しかし、利用者ごとにソースコードを編集してコンパイルする必要があるため、2~3人の場合は良いですが、数十人に対して配布する場合は、かなり面倒です。

ヒューマンエラーも発生する要因になります。

 

まず、 ソースコードに直接 「この口座番号、この口座名のアカウントでしか動かしませんよ」という 記述をします。

コンパイルすると、 その指定した口座以外では、何も動作しなくなります。  

 

固定のパスワードで制限をかける

これも比較的安直ですが、ソースコードに適当にパスワードを書いて、それをパラメータで認証させる方法です。

 

お察しの通り、EAとパスワードがセットで流出すると何の意味もありません。もう一捻りしたいところです。

 

ワンタイムパスワードで口座縛りをかける

銀行とかが最近導入している認証にワンタイムパスワードというものがあります。

これはその時、数分間だけ有効なパスワードというやつです。

 

逆に言うと、このワンタイムパスワードは時刻から生成されています。 これはEAの縛りにももちろん使えます。

 

たとえば、2017年5月の間だけEAをお試しで配布したいとします。 その場合、口座番号が1234567だったとして、2017と5から適当な四則演算をしてパスワードを生成します。(2017x5x1234567=12450608195)

 

このパスワードをEAと一緒に配布すれば5月の間だけ有効なEAができるわけです。

  6月以降も引き続き利用する場合は、またワンタイムパスワードを発行すれば、EAを再配布する手間なしに、システムを実質的に継続利用させることができます。

 

※パスワードの生成アルゴリズムは推測されないように、実際にはもっと複雑にしましょう。  

 

口座番号からパスワードを作って口座縛りをかける

何を言っているのかというと、例えば口座番号が123456789だったとします。

 

その場合、(一桁目の数字)*4+(二桁目の数字)*3+(3桁目の数字)*2の答えである1*4+2*3+9*2=28をパスワードにして、 パラメータ設定でこの数値を入力しないとEAが稼働しないようにします。

これはあくまでわかりやすく伝えるための簡単な計算式ですが、実際にはもっと複雑にします。

メリットとしては、EAを毎回コンパイルしなくていいことと、EAを先にばらまいてからパスワードを発行するという流れを取れることです。  

 

 

サーバーで認証で口座縛りをかける

FXON(ゴゴジャン)のEAがやっている方法です。EAを使う=ネットにつながっているということなので、自サーバーにアクセスさせて、口座番号や口座名の認証を行います。

 

一番強固なプロテクトですが、ちょっと気軽にやるには荷が重すぎます。

今でこそWebRequestで簡単にhttpリクエストできますが、2014年以前はDLLを組まなければいけないわ、ユーザーにDLLをセットしてもらわなくてはいけないわ、で比較的大変でした。

 

(FTPを使えば間接的にアクセス自体はできましたが、FTPのログイン情報がなければ通信できないことを考えると、セキュリティの観点からは現実的ではありませんでした。)

 

しかし、一度作ってしまえば、たとえ誰かがEAをばらまいたとしても、サーバー側からいろいろと操作したり、情報収集することが可能です。

(口座番号とか口座名とか資産データとか吸い出すこともその気になれば可能です。)

 

  WebRequestとは、EAからWEBにアクセスする関数で、数行の記述で、ネットワークに接続することが可能です。(イマサラー)

 

接続方法もGETメソッドとPOSTメソッドがあるので、ログインが必要なポータル系サイトでも、ログインして表示させたりすることもできます。

てきとうにレンタルサーバーを借りて、データベースを構築しておけば、 このWebRequestと併用することで、オンライン認証ができます。

 

この認証方法の場合、プログラムの組み方によっては、サーバー側からEAを稼働停止したり、リストを取得することができるという非常に強力なメリットがあります。

 

デメリットは、 開発者がMQL、SQL、PHP(もしくはPerl)、HTML、(ちょっとした)サーバー構築、通信プロトコルの知識に精通していなければならないので、すこしハードルが高いということです。  

 

MQL&PHP サーバーを経由するコピートレードシステムを作るやり方 についても1から解説していますので、余力がある方はトライしてみてください。  

MQL&PHP サーバーを経由するコピートレードシステムを作るやり方1

 

もしどうしても、開発者がいなければご相談ください。 (サーバーが絡む場合の開発相場はEA開発とは全然違いますからね…)  

 

 

有効期限をつけるやり方(超簡単バージョン)

EAやインジケーターをお試しで使ってもらい、気に入ってもらったら購入してもらうというビジネスモデルは、買い手にとっても売り手に取ってもそこそこメリットのある販売方法です。

 

そのためには、EA、インジケーターに有効期限機能をつける必要があります。 一番いいのはウェブサーバー認証方式にして管理することですが、簡易的にEAに制限をつけることもできます。

 

例えば、2019年10月1日から2019年12月31日までの間、 利用可能にしたい場合、

これをOnCalculate(OnStart, Start)の直下に貼り付ければ、 その期間だけ有効なEA,インジケーターが出来上がります。

ここで注意してもらいたいのは、 日付のフォーマットです。 日付は、必ず半角で 2003.8.12 17:35 西暦.月.日 時:分 のフォーマットで記入してください。 「日」と「時」の間は、半角スペースです。  

 

毎回コンパイルせずにEAに期間限定縛りをするやり方

簡単なやり方

EA/インジケーターに時間縛りをする方法そのものは簡単です。 OnTick() (Start,OnStart,Oncalculateなど)の直下に

と書けばいいだけです。  

簡単なやり方の問題点

ただ、このやり方の場合、例えば一週間のトライアル期間をつけたい場合、「ちょっと使ってみたいです」っていう人がいる度にコンパイルしなければなりません。  

 

これはかなり面倒です。   これは、開発時は「それくらいできる!」と思っても、なかなか続かないパターンのやつです。というか、プログラマなんだから自動化したいと考えるものです。  

 

今回はそんな状況に対するちょっとした解決法の紹介です。  

MT4の仕様を考える

MT4、MQLの仕様では、”初めてセットしたタイミング”を長期間にわたって記録する手段がいくつかあります。  

ファイル関数

一つはファイル関数&ファイルです。初めてEA/インジケーターをセットした時刻をファイルに記録しておいて、そこからの起算で処理すれば時間縛りができます。   ただし、この場合、「MT4にはファイル機能がある」という知識と「おそらくこのファイルを削除すればまた動くのでは?」という知恵がある人に当たると、簡単に突破されてしまいます。  

グローバル変数

もう一つはグローバル関数です。ファイル関数は削除されない限り永続的にデータが残りますが、グローバル変数は数か月で自動的に消去される特徴があります。   しかし、今回はこれを使います。  

具体的な話を先にしてしまうと、

EAが初めてセットされたとき、グローバル変数にその時刻を記録

現在時刻がグローバル変数の時刻を超えたら、稼働させない

というものです。  

 

「こんなん、グローバル変数を削除・書き換えされたら終わりじゃん」と思うかもしれませんが、実際そうです。  

 

その対策として、グローバル変数を無数(数千)用意し、そのどれか一つを本当に使う変数として定義します。  

 

何を言っているのかというと、ファイル関数でファイルに時刻を記述した場合、Windows,iOSの性質上、ファイルが大量にあったとしても一括削除することが簡単にできてしまいます。  

 

しかし、MT4のグローバル変数はひとつひとつ削除することはできても、一括で削除することはできません。それを利用します。  

bool RunSystem;

をあらかじめ宣言しておき、   OnInit()で次の記述をする

OnTickの直下で

if(!RunSystem) return;

と書いておく。 こうすると、CoreData0~CoreData1023のグローバル変数が生成され、それぞれにEAの初期セット時刻が刻まれます。 この中の一つの変数が実際に利用する変数です。(今回はCoreData555)

 

クラッカーは、CoreData555以外の変数をいくら削除・編集してもまた稼働させることはできません。  

555をてきとうな数字に変えて使ってください。これがパスワードのようなものになります。   60*60*24*5の5が5日間を表しているので、これを7に変えれば七日間の利用制限、10に変えれば10日間の利用制限が可能です。  

 

問題点

数か月するとまた使えてしまう

グローバル変数が数か月で自動的に消去されるという性質がある以上、これは避けられません。

数か月単位で制限したい場合には、最初に紹介したように一個一個コンパイルしてもいいと思います。  

また、MT4をデータごと消して、再インストールした場合も同様に利用できてしまいます。ただ、アタッカー側としては毎度毎度その作業をするのはかなり大変だと思います。  

 

あと、グローバル変数を一括削除する方法がない訳でもないんですよね。そこら辺は”CoreData”の文字列を一見ランダムに見えるような文字列で生成させればクリアできると思います。  

 

クラッカーの基本的性格として、”めんどくさがり屋”というのが挙げられるので、そこら辺を突くような仕様にすれば多少はね..    

 

 

 

この投稿は役に立ちましたか? 役に立った 役に立たなかった 0 人中 0 人がこの 投稿 は役に立ったと言っています。
 

この記事にコメントを残す

  1. K より:

    こんにちは。

    いきなりの御連絡すいません。

    私のEAに使用期間の縛りを入れたいのですがうまく出来ません。

    簡単に組み込めるコードは無いでしょうか?

    有料で構いませんので御教授お願い致します。

  2. 山﨑謙二 より:

    お世話になります。

    オリジナルインジケーターを作成しているのですが、、
    貸出に期限をつけたいと思っています。

    1週間、1ヶ月のスパンを考えています。

    操作手順が全くわかりません。
    簡単に活用できる物がありましたらよろしくお願い致します。

Message

メールアドレスが公開されることはありません。

CAPTCHA


このコメントはWEBに公開されるので、問い合わせ等はメールなどでお願いします。

関連記事

(MQL4プログラマのための)先に知っておくと時間を節約できるMQL4の仕様

ほとんどの人には関係ない記事だと思います。 開発者の方が検索してたまたま見てもらうような覚書です。

記事を読む

EAのトレードがコピートレードで流出するのを防ぐ方法

何かしらEAを配布するときには流出のリスクが伴います。EAそのものにアカウント縛りや、FX業者縛りな

記事を読む

[MT4EA]完全無敗 勝率100%のバックテストを生成するEA[ソースコードあり]

今回はバックテストで完璧な成績を出すEAを作成しました。 意味は...ありません。ただの道楽です。

記事を読む

2chの市況版のスレをテキストマイニングして逆張りするやり方

よく「大衆の逆をいけば勝てる」みたいなことが相場の世界では言われますよね。 今回は2chの市況版の

記事を読む

EAが動かないときのその原因 一覧

「EAが動かな~い」というときには様々な原因と可能性がありますが、それらを一個一個解消していかないと

記事を読む

 
  • (↑広告です。このサイトの管理者の運営ではありません)

     


  • 横瀬兼元(ペンネーム)です。

    プロフィール
    商材を買わせようとする偽者がいるらしいのでご注意ください。
    ツイッター始めました(イマサラー)
    https://twitter.com/FxantennaC
    (埋め込みするとページ表示が極端に遅くなるので、リンクでご容赦を)

Translate »
ページトップへ