続けます。

 

for(int i = 2;i<RectangleTotal+1 ;i++){

 

この int i = 2 というのは

繰り返し処理の初期値を2から始める、という意味になります。

よって

 

for(int i = 2;i<RectangleTotal+1 ;i++){

 

この赤字の部分で

 

繰り返し処理を初期値を2として、3、4、5、6、7・・・・

と1ずつ増やしていく

 

という意味になります。

 

for(int i = 2;i<RectangleTotal+1 ;i++){

 

この部分は、繰り返し処理をどこまで続けるか、という指定になります。

RectangleTotalはデフォルトで30にしてありますので

プラス1で31.

不等号「<」なので

31を超えない。

つまり

30まで繰り返す、という意味になります。

 

ObjectCreate(0,"UpperZone[2]",OBJ_RECTANGLE,0,iTime(NULL,TimeFrame,1),iHigh(NULL,TimeFrame,2),iTime(NULL,TimeFrame,0),iClose(NULL,TimeFrame,2));

 

i = 2で、この数値から始まるようにしたいので

 

2 → i

1 → i-1

0 → i-2

 

に書き換えます。

 

ObjectCreate(0,"UpperZone[i]",OBJ_RECTANGLE,0,iTime(NULL,TimeFrame,i-1),iHigh(NULL,TimeFrame,i),iTime(NULL,TimeFrame,i-2),iClose(NULL,TimeFrame,i));

 

こうなります。

 

 

まだまだ続く(笑)

 

 

前回まででRectangleをひとつ追加しました。

この調子でひとつずつ追加していけば

 

 

こんな感じに!

 

なりますが、超めんどくせーですよね?(笑)

 

ご安心ください。

僕もそんなことはしてません。

とっても便利な方法があるんです。

それが

 

for文による繰り返し処理 です。

 

まず、表示させたいRectangleの総数を決めるパラメーターを用意します。

例によってextern int。

パラメーター名は何でもいいのですがRectangleTotalとして

 

extern int RectangleTotal = 30;//Rectangleの総数

 

これをコピペして追加してください。

 

 

 

どんどん豪華になっていく(笑)

 

次に

 

for(int i = 2;i<RectangleTotal+1 ;i++){

 

この一行を二つ目のRectangelコードの先頭にコピペしてください。

 

 

このように。

そして文末の「 { 」の相方である「 } 」

区切り線のコード部分の最後に追加します。

 

 

ここ。

 

 

きちんと相方になってることを確認してください。

前にも言いましたけど、括弧のエラーはとても多いので。

 

そして、ここからが本題

 

ObjectCreate(0,"UpperZone[2]",OBJ_RECTANGLE,0,iTime(NULL,TimeFrame,1),iHigh(NULL,TimeFrame,2),iTime(NULL,TimeFrame,0),iClose(NULL,TimeFrame,2));

 

この赤字の部分の数字を「1」ずつ増やしていきたいわけです。

 

for(int i = 2;i<RectangleTotal+1 ;i++){

 

この「i++が「1ずつ増やす」という意味になります。

 

 

続く

では区切り線を入れます。

つまり垂直線ですよね。

前に水平線を入れた時とほとんど同じです。

 

水平線の場合は

 

ObjectCreate("High",OBJ_HLINE,0,0,iHigh(NULL,TimeFrame,1));

 

でした。

垂直線はOBJ_HLINE ではなく

 

OBJ_VLINE を使います。

 

そして、垂直線の場合は水平線とは逆で価格座標は必要ありません。

だから価格座標部分は「0」

そして時間座標部分は最初のRectangleの開始座標。

 

iTime(NULL,TimeFrame,0)

 

これ。

ということで

 

ObjectCreate("VLine",OBJ_VLINE,0,iTime(NULL,TimeFrame,0),0);

 

これをコピペして追加すればOK。

 

 

そして、水平線の時と同じく、色とスタイルを変更できるようにします。

 

パラメーターの宣言。

 

extern color LineColor2 = Gray ;//区切り線の色
extern int LineStyle2 = 2 ;//区切り線のスタイル

 

この二行を追加します。

色とスタイルは自分の好みに初期設定してください。

 

 

これで

 

 

さらにパラメーターが増えました。

どんどん増えていく(笑)

 

 

そして、色とスタイルの設定コードは

 

ObjectSet("VLine",OBJPROP_COLOR,LineColor2);

 

 

ObjectSet("VLine",OBJPROP_STYLE,LineStyle2);

 

これをコピペしてください。

 

 

 

そして終了処理に

 

ObjectDelete("VLine");//区切り線を削除する

 

を追加。

 

 

以上です。

 

 

 

 

区切り線出現。

前回説明しなかったのですが

 

 

ヒゲゾーンのUpperとLowerを条件分岐させてないですよね?

 

最初のRectangleはこのように条件分岐させてます。 

(改造に合わせてRectangleの名前を変えてます)

なんで今度は分岐させてないのかというと

必要ないからです。

先々週のだから必要ない、というわけではなくて

元々必要ないんです。

ただ、Rectangleをきちんと分離させた方が

直感的に理解しやすいと思って分岐させただけで。

 

仮に、始値と終値の上下が逆になってしまっても

 

 

同じ色のRectangleというのは、このように

重なった部分は消えるんです。

だから、消えた部分にMidZoneをはめればOKなんです。

 

それとは別に

まず、高値安値でRectangleを作って

 

MidZoneを重ねる、という方法もできるのです。

この方がシンプルです。

僕は最初はこのやり方で作りました。

ですが

画像をよく見ればわかると思いますが

違う色のRectangleは重なった部分の色が合成されてしまいます。

MidZoneを思い通りの色に設定できなくなってしまうんです。

 

 

あと、前回の追加コードを挿入した部分は

 

 

ここです。

 

画像だとわかりにくいですし、コピペもできないので

全部テキストで説明したいのですが

字数制限を課せられてるのでゴメンナサイ。

コードを全部テキストにすると

あっというまに制限字数になっちゃうので。

 

前回の記事のは特に横長で見難いと思いますが

 

第一座標部分は

 

第二座標部分は

 

 

あとは

 

こうなってます。

 

 

そんなこんなで、すでに制限字数なので次回に続く(笑)

今週のドル円様は見事に先々月の高値で止められました。

 

ということで、今回は

 

過去のRectangleも表示できるように改造しましょう。

 

過去検証をするにも

S&Rを見るにも

とっても役に立ちます。

 

 

まずはひとつ前のRectangleを表示できるようにしてみましょう。

 

やることは同じなんですよ。

座標が違うだけ。

 

例えば第一座標

 

iTime(NULL,TimeFrame,0),iHigh(NULL,TimeFrame,1)

 

だったら

 

iTime(NULL,TimeFrame,1),iHigh(NULL,TimeFrame,2)

 

と変えます。

数字の部分が「1」増えるだけ。

ローソク足の番号というのは現在の足が0で

過去にさかのぼるたびに1ずつ増えていきます。

 

iHigh(NULL,TimeFrame,2)

というのはWeeklyだったら先々週の高値です。

 

iTime(NULL,TimeFrame,1)

というのはWeeklyだったら先週の開始時間

 

 

黄色ラインのここになります。

 

第二座標は

 

Time[0],iClose(NULL,TimeFrame,1)

 

これを

 

iTime(NULL,TimeFrame,0),iClose(NULL,TimeFrame,2)

 

こう変えます。

 

iTime(NULL,TimeFrame,0)

というのは今週の開始時間なので

 

 

ここになります。

 

てな感じで書き換えて

 

 

 

こうします。

Rectangleの名前は他のと重複しなければ何でもOKです。

 

 

あとは終了処理

 

 

これらを追加すればOKです。

 

ここまでできてれば

 

 

このように先々週のが表示されます。

 

ただ、ぴったりくっ付いちゃうと見難いので

区切り線を入れます。

 

続く

現状

 

このように

Rectangleの第二座標は現在の足の位置になってます。

でもローソク足と被ると若干見難いですよね?

ということで今回は

 

座標を未来にシフトさせてみましょう。

 

まず、シフト量を決めるパラメーターを用意します。

「ローソク足何本分シフトさせるか」ということです。

名前は何でもいいですがFutureとすると

 

extern int Future = 3 ;

 

これでパラメーターを宣言します。

シフト量は必ず整数なのでextern intを使います。

ここで設定した数値がデフォルトになるので好みの量をどうぞ。

 

 

こんな感じ。

 

未来座標ですが

 

このTime[0]というのは、その中身は「何時何分何秒」というものではなく

1970年1月1日00:00からの秒数

なんです。

だから未来へシフトさせるということは

さらに何秒分かをプラスさせてやればいいんです。

そのためには、まず

 

現在表示してるチャートの時間軸を取得する必要があります。

 

これは関数があらかじめ用意されています。

 

Period()

 

これ。

「()」の中には何も入りません。

 

これで現在表示してる時間軸の定数が返されます。

時間軸の定数は以前説明しましたよね?

5分足だったら5

週足だったら10080

「分」で返されます。

座標は「秒」なので60倍します。

つまり

 

Time[0]+Period()*60

 

これでローソク足一本分、シフトします。

好きな本数分だけシフトさせるために

用意したパラメーターをかけます。

 

Time[0]+Period()*60*Future

 

これでOKです。

 

こんな感じですね。

 

 

 

さらにパラメーターが増えました。

 

 

このようにローソク足3本分シフトします。

 

シフトする必要がないなら「0」にすればいいです。

今回は本体の色を陽線と陰線で別になるように改造したいと思います。

 

この条件分岐についてはヒゲゾーンですでに使ってます。

 

陽線の場合は終値が始値より上なので

 

陰線の場合は始値が終値より上なので

 

これを色を指定したObjectSetで行うだけです。

 

 

 

 

このようにZoneColor3というパラメーターを用意します。

 

ここで指定した色がデフォルトになるので、お好きな色をどうぞ。

カラーについては

http://www.metasys-seeker.net/MQL4_Reference_ver1/02-09_WebColors.html

 

http://www.metasys-seeker.net/MQL4_Reference_ver1/01-02-07_ColorConstants.html

これを参考にしてください。

 

 

そして条件分岐

 

この部分を

 

if(iClose(NULL,TimeFrame,1) > iOpen(NULL,TimeFrame,1)){ObjectSet("LastWeekMidZone",OBJPROP_COLOR,ZoneColor2);}

 

else if(iClose(NULL,TimeFrame,1) < iOpen(NULL,TimeFrame,1)){ObjectSet("LastWeekMidZone",OBJPROP_COLOR,ZoneColor3);}

 

この二通りに分けます。

 

 

これでOKです。

 

 

陰線の方を暗い色にした方がよかったか?と気づく(笑)

 

 

ドル円様は先週は陽線

 

ユーロ君は陰線

 

てゆーか

ユーロ君のチャートを何ヶ月ぶりかに見た(笑)

 

最近はインジケーター改造の記事ばかりなので

たまには一般ぴーぽー向けの記事も書かなければ、ということで

今回は

 

S&Rの強度 について。

 

いろんな考え方があると思うんですけど

僕はS&Rの強度というのは

 

ぶっこまれたマネーの量で決まる と考えています。

 

よく、ロンドン時間やNY時間に東京時間のS&Rを

あっさりブレイクするじゃないですか。

「ストップを狩りにいく」とよく言いますが

僕の考えはちょっと違ってて

 

MMさんの主要な活動時間はロンドン時間とNY時間です。

ということは

 

東京時間はMMさんがポジションを持ててない。

 

だから、position buildingをするために

 

自分たちの欲しいPriceを取りに行く。

 

というのが理由のひとつ。

 

あと

 

東京時間のS&Rは弱い。

 

なぜなら

 

マネーがぶっこまれてないから。

たとえば

6/20に僕はここからロングしたのですが

意識してたS&Rは

 

ここ。

 

天底じゃなく、MarkupやMarkdownの途中で

このようなちびレンジを形成したら要注意。

 

 

ここは

ロンドン時間とNY時間のオーバーラップしてる時間帯です。

 

なので

 

大量のマネーがぶっこまれてる。

 

 

見ての通り、Volumeも明らかに大きいです。

 

こーゆーゾーンは重要S&Rになりやすい。

 

Market Profileはおまけですが

重要なゾーンは必ずMarket Profileでも山ができるので

視覚的にわかりやすいです。

 

以前、S&Rというのは幾何学的ラインじゃないと説明しましたが

「同じ水準で何度も反応してるから」なんて単純な視点ではなく

 

どれだけマネーがぶっこまれたか。

 

これを考えてS&Rを見ることをおすすめします。

 

 

 

 

オスカーさんはついてこられてるでしょうか(笑)

無理しなくていいので地道に確実にスキルをaccumulationしてください。

オブジェクトの改造だけでも色々できますし

「別にこんなインジケーター要らねーし」

とか、目先のことしか考えられない人とは

いずれ途方もないほど大きな差になります。

 

 

では今回はRectangleを延長させてみましょう。

 

ObjectMove を使うのが一般的ですが、そこをあえて

 

ObjectSet でやってみましょう。

 

そもそも、ObjectSet というのは

 

オブジェクトのプロパティを設定する関数です。

 

オブジェクトのプロパティには

 

http://www.metasys-seeker.net/MQL4_Reference_ver1/02-15_ObjectProperties.html

 

このように色々な種類がありますが

 

OBJPROP_COLOR と OBJPROP_STYLE

 

この二つはすでに

 

 

ここで使いました。

今回は

 

OBJPROP_TIME2 を使います。

 

これは二番目の座標の時刻を取得します。

つまり

 

 

この右側のABの時刻。

 

ObjectSet("LastWeekUpperZone",OBJPROP_TIME2,Time[0]);

ObjectSet("LastWeekLowerZone",OBJPROP_TIME2,Time[0]);

ObjectSet("LastWeekMidZone",OBJPROP_TIME2,Time[0]);

 

この三行を追加します。

 

プログラムというのは上から下に読み込まれていきますので

ObjectCreateより下に入れます。

 

これでOK。

 

 

今までは、1時間足から5分足に変えると

 

 

こうでしたが、今回の改造によって

 

 

最新の足の位置まで自動的に延長されます。

さて、水平線の色を設定しましょうか。

 

今回は最初から色を変更可能にするためにパラメーターを使いましょう。

 

extern color LineColor1 = Red ;//水平線の色

 

この一行を追加します。

とりあえずRedにしてありますが

ここで指定した色がデフォルトになりますので自分の好きな色を指定してください。

 

 

これでパラメーターの宣言はOK。

 

はい、次

 

ObjectSet("LastWeekHigh",OBJPROP_COLOR,LineColor1);

 

これが先週高値ラインの色を変える関数になります。

他のラインも"LastWeekHigh"部分を変えるだけです。

コピペで貼り付けて

 

 

こんな感じでOKです。

 

 

 

このようにYellowを指定してやれば

 

 

このようになります。

 

 

ついでにラインスタイルも設定しちゃいましょう。

ラインスタイルは整数値で指定するので

 

extern int を使います。

 

extern int LineStyle1 = 0 ;//水平線のスタイル

 

これがパラメーターの宣言。

 

 

 

ObjectSet("LastWeekHigh",OBJPROP_STYLE,LineStyle1);

 

これがラインスタイルを設定する関数。

色の設定と同様、コピペしてちょちょいと書き直して

 

 

これで出来上がり。

 

 

 

1に変更すると

 

 

このように破線になります。

 

2にすると

・・・・

説明するのがめんどーなので自分で確認してください(笑)

 

ただ、

5にすると

 

 

消えます。

だから水平線を非表示にしたい場合は5にします。

 

6以上にしたらすべて実線になります。