iCustom()関数を利用して、既存のインジケーターから必要なデータを取得して、EAなどを作成できることはよく知られています。
たとえば、ネット上で公開されている「BandsMA」というインジケーターからデータを取得する場合を例にしましょう。
通常は、元々のインジケーターである「BandsMA」のMQLファイルを開いて、
配列を宣言している場所をみつけて、その順番を確認します。
上の例でいうと、
MovingBuffer[]=0番目の配列
UpperBuffer[]=1番目の配列
LowerBuffer[]=2番目の配列
ということが分かります。
次に、上のような複雑なスタート関数内のプログラムを解析して、どの配列がどのグラフに対応しているかを調べます。
上のプログラムを解析すると、どうやら、1番目の配列が一番上のグラフに対応し、2番目の配列が一番の下のグラフに対応していることがわかります(このファイルの場合には配列の名称からだけでもこのことは推測できますが…)。
こうしてはじめて、EA上に、iCustom()関数を使って、データを呼び出すことができます。
上の例でいうと、
BB_Upという変数には、「BandsMA」の1番目の配列の0番目のバー上の値が、
BB_Lwという変数には、「BandsMA」の2番目の配列の0番目のバー上の値が、
それぞれ代入されています。
しか~し、
このやり方は、いかにも面倒くさいし、そもそも、MQLファイルが入手できず、EXファイルしか手元にない場合には、どうしたらいいんでしょう。
私がよく使うのは、以下のようなやり方です。
まず、上のようなインジケーターをあらかじめ用意しておき、名前を「test(iCustom)」とでもしておきます。
そして、この「test(iCustom)」をチャートに表示させます。
すると、チャート左上に、「BandsMA」の0番目の配列の0番目のバー上の値が出ます。
次に、チャート上の0番目のバー上のグラフに一つずつマウスポインタをあてて、それぞれの値をチェックします。
上の画像を見ると、真ん中のグラフの値が先ほどのチャート左上の数値と一致しているので、真ん中のグラフが0番目の配列に対応していることが一発でわかります。
あとは、「test(iCustom)」の外部パラメーターを変えながら、すべての配列とグラフの対応関係を調べればいいだけです。
このやり方なら、元々のインジケーターのプログラムソースなど見る必要なんて一切ありません。
頭にくるほど簡単な方法でしょ!
コメントをお書きください
EA太郎 (土曜日, 18 1月 2014 11:10)
本当に「頭にくるほど」簡単ですね。私にとってはコロンブスの卵です。プロの方にとっては常套手段なのでしょうか。
easakuseidaiko (土曜日, 18 1月 2014 14:38)
>EA太郎さん
私も当初は元々のインジケーターのソースを解析してやってました。
しかし、ご承知のように、プログラムというのは、自分で作るより他人のソースを解析する方が難しいですよね。あるとき、非常に複雑なインジケーターからデータを取る必要があり、困り果てていたところ、苦し紛れに思いついた方法なんです。^^;
他の業者さんはどうしてるか分かりませんが、とある業者さんのサイトを覗いてみたら、iCustom()関数の使い方を解説する中で、元々のインジケーターのソース解析を熱心にやっていたので、「あらまぁ~」と思い、今回記事にしてみました。
asdf (水曜日, 03 2月 2016 22:54)
good
EA作成代行 (木曜日, 04 2月 2016 10:46)
>asdfさん
ありがとうございます。
http://goo.gl/LoUyV3
もぜひご覧ください。
田中明夫 (木曜日, 05 4月 2018 23:03)
インジケーターはチャートに入れなくてもいいのでしょうか?eaだけセットすれば動きますか?
EA作成代行 (金曜日, 06 4月 2018 12:40)
>田中さん
はい、インジケーターはチャートに表示する必要はありません。
ただし、「ファイル」→「データフォルダを開く」→「MQL4」→「Indicators」の中にそのインジケーターが入っている必要はあります。
mimi (水曜日, 17 10月 2018 05:19)
通貨強弱(ForexProfitSupreme Meter)インジケータはiCustom できますか?
上記のtest(iCustom)を作りやってみましたが、表示されません。
iCustom できないインジケータもあると聞いたことがあります。通貨強弱のインジケータもiCustom できないのでしょうか?
教えていただけますか?
宜しくお願いします。
EA作成代行 (日曜日, 21 10月 2018 17:28)
>mimiさん
インジケーターによっては、このやり方でデータを抽出できないものもあります。
詳しいことは、そのインジケーターを調べないと分かりませんが、調べてもわからないこともあります。^^;