このページでは、ローソク足の種類や実体、ヒゲの部分をMQL上でどのように確認していくかについて解説します。
バックテストを取るうえで、実体の大きさやヒゲの長さなどによって条件を考えるのは勝率に影響してくるとても重要な部分です。
しっかりと理解していきましょう。
ローソク足の種類
ローソク足の種類には、陽線(ようせん)と陰線(いんせん)があります。
陽線は、始値(はじめね)から上昇して終値(おわりね)を迎えた場合に形成されます。一定期間で価格が上昇したことを表します。
陰線はその逆で、始値(はじめね)から下降して終値(おわりね)を迎えた場合に形成されます。一定期間で価格が下降したことを表します。
陽線を表す計算式
陽線かどうかを確認するには、始値の価格より終値の価格が高ければ良いことになります。
終値 > 始値
実体の大きさは、終値の価格から始値の価格を引けば、その差が実際の大きさになるとわかります。
終値 – 始値
上髭の長さは、高値の価格から終値の価格を引けば、その差が上髭の長さになることがわかります。高値と終値が同値だった場合、上髭が無いということもわかります。
高値 – 終値
下髭の長さは、始値の価格から安値の価格を引けば、その差が下髭の長さになるとわかります。こちらも始値と安値が同値だった場合、下髭が無いこということがわかります。
始値 – 安値
まとめると以下の通りです。
陰線を表す計算式
陰線かどうかを確認するには、始値の価格より終値の価格が低ければ良いことになります。
始値 > 終値
実体の大きさは、始値の価格から終値の価格を引けば、その差が実際の大きさになるとわかります。
始値 – 終値
上髭の長さは、高値の価格から始値の価格を引けば、その差が上髭の長さになることがわかります。高値と始値が同値だった場合、上髭が無いということもわかります。
高値 – 始値
下髭の長さは、終値の価格から安値の価格を引けば、その差が下髭の長さになるとわかります。こちらも終値と安値が同値だった場合、下髭が無いこということがわかります。
終値 – 安値
まとめると以下の通りです。
陽線か陰線かによって髭の求め方が変わる
陽線・陰線の判断、実体の大きさの求め方は比較的わかりやすいかと思います。
しかし、髭の長さを求める場合、その足が陽線なのか陰線なのかを判断し、そこから始値を使って計算するのか終値を使って計算するのかを考えなければなりません。
実際の計算式
先ほどまでは説明上の計算式をお伝えしました。(終値 – 始値のような)
ここでは、実際にコードを記述して求めてみましょう。
カスタムインジケーターを作成して、printf出力してみます。わからない方は以下のページで説明していますので、ご確認ください。
コードを記述する箇所は以下の36行目です。onCalculate()の{ }の間に記述します。
早速ですが、コードは以下の通りです。
実際のコードも記載しておきます。
double Judge_Candle = close[0] - open[0]; if(Judge_Candle > 0) //陽線の場合 { double Candle = close[0] - open[0]; //陽線の実体の長さ double Upper_Stick = high[0] - close[0]; //上髭の長さ double Lower_Stick = open[0] - low[0]; //下髭の長さ printf("陽線の実体: %f 上髭の長さ %f 下髭の長さ %f",Candle,Upper_Stick,Lower_Stick); } else if(Judge_Candle < 0) //陰線の場合 { double Candle = open[0] - close[0]; //陰線の実体の長さ double Upper_Stick = high[0] - open[0]; //上髭の長さ double Lower_Stick = close[0] - low[0]; //下髭の長さ printf("陰線の実体: %f 上髭の長さ %f 下髭の長さ %f",Candle,Upper_Stick,Lower_Stick); }
36行目の部分は「終値 – 始値」の結果を「Judge_Candle」という変数名を付けて格納しています。
double Judge_Candle = close[0] - open[0];
始めに説明した「終値 > 始値」または「始値 > 終値」という書き方ではありませんが、このような書き方もできます。
「終値 – 始値」が「0」より大きければ、「終値 > 始値」が成り立ちますし、マイナス値であれば、「始値 > 終値」が成り立つということがわかるので、この書き方をしました。
どのような書き方でも構いません。
if(Judge_Candle > 0) //陽線の場合 { ※省略 } else if(Judge_Candle < 0) //陰線の場合 { ※省略 }
陽線の場合、各変数に長さを求める計算式の結果を格納しています。open,close,high,lowは予め用意されている配列なので、そのまま利用してます。「0」は現在足を指定しています。
陰線も同様の書き方です。
double Candle = close[0] - open[0]; //陽線の実体の長さ double Upper_Stick = high[0] - close[0]; //上髭の長さ double Lower_Stick = open[0] - low[0]; //下髭の長さ
こちらはprintf出力の関数を使ってMT4上のエキスパートタブに表示するようにしています。
printfの詳細については省略しますが、以下の書き方を真似ていれば大丈夫です。
printf("陽線の実体: %f 上髭の長さ %f 下髭の長さ %f",Candle,Upper_Stick,Lower_Stick);
記述できたら、「コンパイル」をクリックしてエラー表示されていないことを確認します。
その後、デバッグのスタートボタンをクリックして確認してみましょう。
このように表示されればOKです。
相場が動いているときであれば、連続して表示されその時のローソク足の状態によって値が変化するはずです。
コメント
コメント一覧 (1件)
lf58nk