どうも!和菓子職人トレーダー潤奈です( ゚Д゚)
今回はローソク足の直近高安値を配列へ格納する為のオリジナル関数を紹介します。
コード全文
高値と安値を格納する配列を宣言しておきます。この関数はインジケーターで使用する事を想定して作成します。
1 2 3 |
//---配列 double highLine[]; double lowLine[]; |
オリジナル関数のコードは以下の通りです。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 |
void HighLowLine(int n){ double newHigh = 0; //高値の初期値 double newLow = 1000; //安値の初期値 //過去のローソク足から調べます for(int i=n; i>=0; i--){ datetime time = iTime(_Symbol,0,i); //ローソク足の時刻を取得 //時刻が0時0分だった場合、高値と安値を初期値にリセット if(TimeHour(time)==0 && TimeMinute(time)==0){ newHigh = 0; newLow = 1000; } double high = iHigh(_Symbol,0,i); //ローソク足の高値を取得 newHigh = MathMax(newHigh,high); //より高い高値に更新 highLine[i] = newHigh; //高値の配列に新しい高値を格納 double low = iLow(_Symbol,0,i); //ローソク足の安値を取得 newLow = MathMin(newLow,low); //より安い安値に更新 lowLine[i] = newLow; //安値の配列に新しい安値を格納 } } |
コード説明
関数の宣言
値は配列に格納する関数なので、戻り値のないvoid型で宣言します。
int型のn変数には、高値と安値をどこまでのローソク足の本数を確認するかの値を入れるようにします。
使用する時はHighLowLine(100);とすれば、過去100本のローソク足から現時点までの期間を調べるようになります。
1 2 3 4 5 6 |
//ローソク足の直近高安値を配列へ格納する関数 void HighLowLine(int n){ //この中にコードを記述 } |
高安値の初期値を宣言
高値は対象ローソク足の高値が大きい値に更新されたか確認するので、値を0スタートにしておきます。逆に安値は小さい値に更新されたか確認するので、適当に大きい値を入れておきます。
1 2 |
double newHigh = 0; //高値の初期値 double newLow = 1000; //安値の初期値 |
過去のローソク足からループ処理
高値と安値が更新されていくかを確認するので、過去からさかのぼって確認していくようにループ処理を行います。
1 2 3 4 5 6 |
//過去のローソク足から調べます for(int i=n; i>=0; i--){ //この中にコードを記述 } |
一定期間毎に高安値をリセット
日付毎に高値と安値の更新状況を確認したかったので、対象ローソク足の時刻を取得し、0時0分の時に高値と安値を初期値にリセットするようにしました。
1 2 3 4 5 6 |
datetime time = iTime(_Symbol,0,i); //ローソク足の時刻を取得 //時刻が0時0分だった場合、高値と安値を初期値にリセット if(TimeHour(time)==0 && TimeMinute(time)==0){ newHigh = 0; newLow = 1000; } |
例えば、1時間毎にリセットしたい場合は時の条件を削除して、if(TimeMinute(time)==0){とすれば毎時0分でリセットされるようになります。
15分毎にリセットしたい場合は、if(TimeMinute(time)%15==0){として、15で割った時の余りが0の時にリセットするように工夫も出来ます。
高値と安値を比較更新
対象ローソク足の高値を取得し、より高い高値をnewHigh変数に入れて、配列に格納します。
1 2 3 |
double high = iHigh(_Symbol,0,i); //ローソク足の高値を取得 newHigh = MathMax(newHigh,high); //より高い高値に更新 highLine[i] = newHigh; //高値の配列に新しい高値を格納 |
同じく、対象ローソク足の安値を取得し、より安い安値をnewLow変数に入れて、配列に格納します。
1 2 3 |
double low = iLow(_Symbol,0,i); //ローソク足の安値を取得 newLow = MathMin(newLow,low); //より安い安値に更新 lowLine[i] = newLow; //安値の配列に新しい安値を格納 |
まとめ
いかがでしたでしょうか。
これを応用して上手くプログラムの中に組み込んでみて下さい。
では、少しでも参考になれば( ゚Д゚)
高安値の表示インジケーター
このように表示されるインジケーターです。
このオリジナル関数を利用したインジケーターの全ソースコードになります。
時短を考える方、この記事を評価して頂ける方だけご購入をご検討下さい( ゚Д゚)
コメント