今回は、使う頻度が高い計算を関数化して、今後簡単に使えるようにしたいと思います。
何を作るかというと、iBarTypeという関数を作って、そのロウソク足が陽線か陰線か一発で分かるようにしたいと思います。
目次
どんな感じになるの?
普通にコードを書くと、以下のように終値と始値を引いて、終値の方が値が高かったら陽線、低かったら陰線という風に条件分岐をすることになります。
double M1_Open = iOpen (NULL,NULL,i); double M1_Close = iClose(NULL,NULL,i); double M1_Bar = M1_Close - M1_Open; if (M1_Bar > 0) { //陽線だったら... } else if(M1_Bar < 0) { //陰線だったら... }
これを以下のようにして、今後簡単に求められるようにします。
int bartype = iBarType(NULL,NULL,i); if (bartype == 1) { //陽線だったら... } else if(bartype == 2) { //陰線だったら... }
関数の作成
メタエディタを開いて、適当にインジケーターを新規作成します。(既存のインジケータファイルでも問題ありません。)
この関数では以下のように値を返してくれるように考えています。
- 十字線、または四値同時の場合は「0」を返す
- 陽線の場合は「1」を返す
- 陰線の場合は「2」を返す
まずは関数を定義します。
コードの一番下に以下のように追加します。
関数が出来ました。
以下のように関数を使うと変数内に「0」が格納されるものが出来ました。
int bartype = iBarType();
もちろんこれで完成ではありません。
次に始値と終値を使って陽線、陰線を確認してみます。
一番最初に使ったコードを追加しました。
「陽線だったら…」「陰線だったら…」の部分を以下のように変更します。
これで、陽線の場合はreturnで「1」を返し、陰線の場合は「2」を返します。
十字線の場合はif文で該当しないので、「0」のままになります。
皆さん気付きましたか?
このコードだと常にシフト0地点(現在足)のロウソク足しか確認できません。
なぜなら、iOpen、iCloseどちらも以下のようにしてあるからです。
(NULL,NULL,0)
なので、以下の部分を引数に変更します。
関数の完成
これで完成です。
以下のように関数を呼び出せば、そのロウソク足が陽線なのか陰線なのかがわかります。
int bartype = iBarType("USDJPY",PERIOD_M5,5);
同じように関数を作ってしまえば、ロウソク足のPoint値を確認するオリジナル関数も作れますよね?
是非チャレンジしてみましょう。
コメント