EAで自動売買プログラムを色々と書いていると、きっと、
「ローソク足の上ヒゲと下ヒゲを関数化して記述できないかな〜」
なんて思いを抱いたりすることでしょう。
この記事では、ヒゲの条件をEAの中で関数化する方法を紹介しておきますね。
ヒゲの特性である「トレンドの反転」を生かして、あなたの自動売買EAの逆張りサインにしてみてはいかがでしょうか?
MQL言語でヒゲの出現を記述してみよう
まず、トレンド転換のサインとなりそうなヒゲの定義ですが、上ヒゲの場合で考えると…
・実体部分がヒゲ部分よりも小さい
・実体部分が高値と安値の中間値よりも下に位置している
という2つの要素が必要ですね。
これをさっそくMQLで記述してみましょう。
まずは、いくつか関数を宣言しておくと便利です。(宣言はOnTick()の外に!)
(↓中間値を代入する関数)
double Nakachi;(OnTickの外)
{Nakachi=(iHigh(NULL,0,1)+iLow(NULL,0,1))/2;}(OnTickの中)
(↓ヒゲが出た足の大きさを指定する関数。ここではスキャルピング用に2pipsの大きさに設定)
double Higesize;(OnTickの外)
{Higesize=0.02;}(OnTickの中)
(↓上髭を代入する関数)
int Uwahige;(OnTickの外)
(↓下ヒゲを代入する関数)
int Shitahige;(OnTickの外)
こんな感じの関数を最初に宣言しておくと、記述がごちゃごちゃしないので、便利です。
では、まずは上ヒゲ発生が確定した時に「Uwahige」に代入させる方法を↓
(OnTickの中)
if(iOpen(NULL,0,1)<=Nakachi&&iClose(NULL,0,1)<=Nakachi &&(iHigh(NULL,0,1)-iLow(NULL,0,1))>=Higesize) {Uwahige=1;Shitahige=0;}
これで、任意の足が、
・始値と終値の両方が足の高値と安値の仲値よりも下にあり、
・かつ、足自体の長さも2pips以上ある
といういわゆる「上ヒゲ」を定義することができます。
なので、先ほど宣言しておいた「Uwahige」という関数に「1」を代入した、という流れです。
当然、ヒゲのサイズをもっと大きなものだけに設定したいときは、最初に「Higesize」に代入しておいた数字を0.03…0.05…などと任意の大きさに設定すればOKですね。
下ひげの場合も、この文章を真逆にすればいいだけです。
(OnTickの中)
if(iOpen(NULL,0,1)>=Nakachi&&iClose(NULL,0,1)>=Nakachi &&(iHigh(NULL,0,1)-iLow(NULL,0,1))>=Higesize) {Uwahige=0;Shitahige=1;}
これで、一つ前の足でヒゲが出現した時に、「Uwahige」もしくは「Shitahige」という関数が「1」になってくれます。
それをトリガーにしてOrderSend()などの売買の記述を書いていけば、ヒゲトレードEAを作ることができますぞ。
ヒゲと実体の大きさや比率も自由自在
ちなみに、
「もっと強烈なヒゲが発生した時だけに関数が変わるような記述もしたい!」
という気持ちもあるかと思います。
↓こんな感じのヒゲの時だけ、エントリーさせたい!という場合ですね。
こういう強烈なヒゲを定義することもできますので、紹介しておきます。
先ほどはヒゲの定義に、「足全体の仲値」を使いましたが、もっとヒゲ部分が長くて、実体が極端に短いようなヒゲ足の場合、仲値は使えません。
その場合、
「足の高値と安値を4分割」
ほどにしてみましょう。
新たに関数「Hige4bunkatsu」「HigeTOP」「HigeBOTTOM」という関数をOnTick()の外に宣言しておきます。(ネーミングが適当w)
(OnTickの外)
double Hige4bunkatsu;
double HigeTOP;
double HigeBOTTOM;
(OnTickの中)
{Hige4bunkatsu=(iHigh(NULL,0,1)-iLow(NULL,0,1))/4;}
これで、「足の高値と安値を4分割した値」が「Hige4bunkatsu」に代入されました。
安値が110.050で、高値が110.080だったとしたら、足の大きさは0.030(3pips)なので、
「0.0075」という数字がHige4bunkatsuの中に代入されているというわけです。
この数字を、安値に足したものをHigeTOPという関数に代入します。
{HigeTOP=(iLow(NULL,0,1)+Hige4bunkatsu);}
この場合、110.0575という数字がHigeTOPの中に入ったわけです。
足の全体の4分の1の境目が「HigeTOP」という関数に代入されたということになります。
なので、あとは、足の実体がこのHigeTOPを超えなければ、大きな上ヒゲをつけたということになります。
先ほどの仲値で作ったヒゲのコードと同じように、
if(iOpen(NULL,0,1)<=HigeTOP&&iClose(NULL,0,1)<=HigeTOP &&(iHigh(NULL,0,1)-iLow(NULL,0,1))>=Higesize) {Uwahige=1;Shitahige=0;}
と書けば、OKです。
これで、
・始値も安値も足全体の4分の1しかない上ヒゲ
を定義できました。
下ヒゲもこれを逆にするだけ。
まずは「HigeBOTTOM」という関数に、足全体の4分の1の境目を代入します。
{HigeBOTTOM=(iHigh(NULL,0,1)-Hige4bunkatsu);}
そして、始値と高値が足全体の4分の1よりも上にあるということを↓で定義します。
if(iOpen(NULL,0,1)>=HigeBOTTOM&&iClose(NULL,0,1)>=HigeBOTTOM &&(iHigh(NULL,0,1)-iLow(NULL,0,1))>=Higesize) {Uwahige=0;Shitahige=1;}
まとめ:ヒゲのトリガーは逆張りトレードEAには必須
以上が、MQLでの「上ヒゲと下ヒゲの書き方」でした。
ヒゲの大きさなどをあなたのお好みの時間軸に合うように「Higesize」で設定して、5分足のスキャルピングから、1時間足のデイトレードまで、幅広くご活用くださいね。
移動平均線やオシレーター系を組み合わせると、勝率の高い逆張りエントリーのEAができそうですよね。
ぼくも目下色々と試行錯誤中でございます。
では、また新しく期待値がプラスのEAなどができたら紹介しますね〜。
記事カテゴリ:FX自動売買