MQLで価格の引き算をして結果をPipsに変換する方法
公開日:2018/06/13
MT4でローソク足の実体の幅や高値から安値までの幅を取得してインジゲーターなどに組み込みたい場合があると思います。
これをすることができれば、陽線、陰線の判断やその足がどのくらいの大きさの幅があるローソク足なのか判断することも可能になります。
そこで今回は、簡単な例として高値 - 安値の引き算をして結果をPipsに変換する方法について書いていきます。
以下から作成過程を説明していきます。
ソースコードの説明①
まず、単純に高値と安値の引き算をして結果を表示してみます。
■高値と安値の引き算
1本前の足の高値と安値をそれぞれdouble型の変数(aとb)に代入します。
そして、引き算の結果をdouble型の変数(c)に代入して表示ます。
①double a = High[1];
③double b = Low[1];
③double c = a-b;
④Comment("1本前の足の高値 - 安値は、"+c+"です。");
①double a = High[1];
double型の変数aに1本前の足の高値を代入。
②double b = Low[1];
double型の変数bに1本前の足の安値を代入。
③double c = a - b;
double型の変数cにa - b(高値 - 安値)の結果を代入。
④Comment("1本前の足の高値 - 安値は、"+c+"です。");
Commentで結果を表示。
それでは、コンパイルして実行してみます。
実行結果①
結果が表示されましたが、double型で小数点の桁数も指定していないので、とても長くわかりずらい表示になってしまいました。
ソースコードの説明②
次に先ほど、引き算した値を見やすくするためにPipsに変換してみます。
■結果をPipsに変換
double a = High[1];
double b = Low[1];
double c = a-b;
①string d = DoubleToStr(NormalizeDouble((c/(10*Point)),3),3);
②double e = StrToDouble(d);
③Comment("1本前の足の高値 - 安値は、"+c+"です。\n"+"Pipsに変換すると、"+e+"Pipsです。");
①と②を追加して、③の記述を少し変更しました。
①string d = DoubleToStr(NormalizeDouble((c/(10*Point)),3),3);
string型の変数dを指定。
NormalizeDoubleでcの値を(10*Point)で割って小数点以下3桁で四捨五入。
その結果をDoubleToStrで小数点以下3桁で文字列に変換。
ここで、10*Pointというものがありますが、
今回は、3桁/5桁の業者でテストしているので、
1Point = 0.1Pipsになるため、
Pointに10をかけています。
Pointについては「
Point」を参考にしてみてください。
②double e = StrToDouble(d);
double型の変数eにstring型の変数dをdouble型に変換した値を代入。
③Comment("1本前の足の高値 - 安値は、"+c+"です。\n"+"Pipsに変換すると、"+e+"Pipsです。");
Commentで結果を表示。
それでは、コンパイルして実行してみます。
実行結果②
無事、引き算の結果をPipsに変換することができました。
今回は、四捨五入して切り上げましたが、四捨五入しない方法や切り下げる方法もあります。
これについては、また次回以降に詳しく書いてみたいと思います。
まとめ
いかがだったでしょうか?
意外と苦戦しましたが、なんとかPipsに変換することができました。
いろいろ試してみたかったので、とても遠回りをして回りくどいコードになってしまいましたが、
もっと、シンプルな書き方があると思うので、興味がある方は調べて検証してみてください。
今回、このインジゲーターを作ってみたのには、いくつか理由があります。
まず、引き算がしてみたかったこと。
そして、ローソク足の幅をPipsで取得することができれば、自分なりの大陽線とか大陰線の判断が自動でできるようになるからです。
これをインジゲーターやEAに組み込むことによって、
指標の発表後や何か大きなニュースなどで価格が瞬間的に動いた場合に、
サインを表示しないようにしたり、注文をスルーすることができるようになります。
これについては、良いときもあれば、悪いときもありますが、
自分の経験から総合的には、大きな動きをした後はエントリーを見送った方が良さそうだと思います。
今回は、高値と安値の引き算だけの処理でしたが、
次回は、始値と終値も絡めて、大陽線とか大陰線の判断ができるものを作ってみたいと思います。
それでは、また。
今回使用したMQL一覧
関連ページ