オブジェクトの状態を維持しておきたい時に活躍
何らかの情報をチャートに表示するためにはオブジェクトを使います。
オブジェクトは物体の意味ですね。
水平線とか四角形とかラベルとかがオブジェクトです。
チャートに何かをペタっと貼り付けられるものは全部オブジェクトと思って良いでしょう。
さて、そんなオブジェクトですが、実は時間足ごとに表示、非表示を切り替えられることをご存知でしょうか?
水平線を右クリックしてプロパティを選択し、表示選択タブを開いてみてください。
これが各時間足でのオブジェクトの表示、非表示の切替え画面です。
チェックした時間足のみに表示させられるんですね。
デフォルトは全ての時間足です。
さて、ここで問題です。
「すべての時間足に表示」のチェックを外し、さらに各時間足のチェックもしなければ、そのオブジェクトはどの時間足でも見えなくなるでしょうか?
正解はNOです。
無チェックの場合、「すべての時間足に表示」にチェックが入っているとみなされてしまいます。
「な~んだ。いずれかの時間足には表示しなきゃいけないのか。使えね~。」
いえいえ。そうではありません。
確かに画面操作ではすべての時間足で”非表示”にすることはできませんが、プログラミングでならそれが可能です。
以下のコードをご覧ください。
string objectName = "Test"; ObjectCreate(0, objectName, OBJ_HLINE, 0, 0, Bid); // 水平線作成 ObjectSetInteger(0, objectName, OBJPROP_TIMEFRAMES, OBJ_NO_PERIODS); // OBJ_NO_PERIODSで全ての時間足で非表示
ObjectSetInteger関数でOBJPROP_TIMEFRAMESプロパティにOBJ_NO_PERIODSを設定しているところがポイントです。
こうすることで、そのオブジェクトを全ての時間足で非表示にすることが可能です。
「非表示にする必要なんてある?要らないなら削除すればいいじゃん?」という声が聞こえてきそうですが、非表示にしたいケースはあります。
例えば、手動でオブジェクトを移動させたり見た目を変えたりしてその状態は保持しておきたいけど一時的に消したい場合です。
「それってどんな時よ?」
「通常は5分足でトレードするけど環境認識のために一時的に上位足に切り替えた。5分足のオブジェクトがあるとごちゃごちゃして邪魔。」みたいな時です。心当たりありませんか?
こういうシーンに上記のコードは活躍してくれます!
ちなみに、特定の時間足(5分足と15分足と30分足)にだけ表示させたい場合はこう書きます。
string objectName = "Test"; ObjectCreate(0, objectName, OBJ_HLINE, 0, 0, Bid); ObjectSetInteger(0, objectName, OBJPROP_TIMEFRAMES, OBJ_PERIOD_M5 | OBJ_PERIOD_M15 | OBJ_PERIOD_M30);
「|」を足していけば、表示させたい時間足を増やせます。
良かったらご活用ください。