引数のtimeframeとshiftの意味は?
iCustom関数は、独自インジケーターをEA等に組み込むためのMT4標準関数です。
iCustom関数は動作が遅いのであまり好きではないのですが、EAの製作を依頼される時に、「このインジケーターを使ってEAを作って欲しい」と言われることがよくあるので、仕方なく使ってきました。
そんなモチベーションだったので、iCustom関数のことをちゃんと知ろうとしてこなかったのですが、どうしてもこの関数と真剣に向き合わなければならない事情ができまして、あれこれと研究しました。
そんな中、iCustom関数を使うと簡単にMTFを実現できるということを発見したのです!
「今更!?」と言われそうですが、私にとっては目からウロコものです。
MTF化は本当に簡単で、引数のtimeframeにMTFの時間足を設定するだけです。例えば、チャートが5分足で、あるインジケーターを30分足で使いたい時は、引数のtimeframeにPERIOD_M30を設定すればOKです。
前々から「引数のtimeframeは何をしてくれるものなんだろう」とは思っていたのですが、まさかMTF化だったとは。
ただ、iCustom関数を使ったMTFでは、注意事項が1つあります。
それは、timeframeでMTF化した場合、引数のshiftはMTF側の時間足のローソク足で数えることです。
先の例を使うと、現在時刻が10:23でshiftに1を設定した(1本前の)場合、iCustom関数で読み込まれる30分足の1本前のローソク足は9:30のローソク足になります。5分足チャートでの1本前となる10:15のローソク足ではありません。
ちなみに、インジケーター自体にMTFの機能が付いている場合は、timeframeに0を設定してインジケーター内の機能でMTF化しても良いですし、timeframeにMTFの時間足を設定してインジケーター内のMTF機能は無効化しても構いません。お好みです。