QQE-VT.mq4 でメインチャートに矢印をつける。

名無し 2010/02/27 23:10
MT4にVTのソースでQQEを作成して頂きたいのですが、メインチャート上に矢印を出す仕様で
お願い致します。
やはりMT4とVTの違いがあるようで知識の浅い自分にはわかりません(泣)
よろしくお願い致します。

昨日は、VT互換の QQE を作成する話でしたが、今日はメインチャート上に矢印を出す話です。


メインウィンドウに描画するタイプのインジケータ(例えば、移動平均移動平均のクロス…)なら、IndexBuffer に DRAW_ARROW を指定して簡単につくれるのですが、サブウィンドウに表示するインジケータでは出来ません。IndexBuffer に値を入れてもサブウィンドウ内にしか表示できないのです。


この場合どうするかというと、

(A) 矢印をオブジェクトとして作成する。
(B) 別のインジケータとして作成する。

の2案が考えられます。


まずは、A案で作成したものがこれです。(QQE-VT-Obj.mq4)サブウィンドウと矢印が両方表示されます。


1つのインジケータで済ませる事ができてシンプルなのですが、1つだけ欠点があり、矢印自体がオブジェクトなので、ドラッグすると移動してしまいます。^^;

↑この場合でも、Tickが更新されるか、右クリックして更新(Refresh)すれば元に戻るようにするには、矢印の描画部分を毎回全矢印に対して再描画すればOKです。QQE-VT-Obj.mq4 もそのようにしてあるので、実用上ものすごく困ることは無いと思います。




矢印が動かない(それ以前に選択できない)のが B案です。(QQE-VT-Arrow.mq4)

こちらは、内部で iCustom を使い QQE-VT.ex4 というインジケータを呼び出しているので、動作には、QQE-VT.mq4 が必要です。ファイルが2つに別れてしまうのが不便ですが、サブウィンドウの表示が不要な時はこちがら良いでしょう。プログラム自体も短いので、他のインジケータへの応用も簡単だと思います。初心者向け・・です。(外為男さんとこのQQE Alert v3は、この手法です。...もしかして、名無しさんが欲しかったのはコレですか。。そうですか。。)



補足)

そもそも、B案でなぜ?別のインジケータにしたのかというと、元の QQE-VT.mq4 が IndexBuffer を8個使い切っていたのが原因です。第三のアプローチとして、QQE の計算に使用するバッファ数を6個に減らし、残り2個を矢印表示用バッファに転用するという方法も考えられます。そのサンプルが、QQE-VT-A1.mq4 です。
見た目は、B案(QQE-VT-Arrow.mq4)と同じでも、iCustom を使わなくて済みます。
QQE-VT-A1では、DeltaATRRSI , DeltaATRRSI_2 を、IndexBuffer から ただの動的配列に変更していますので、以下のような変更を加えています。

for (i = 0; i < limit; i++) DeltaATRRSI_2[i] = iMAOnArray(ATRRSI, 0, MAPeriod, 0, MODE_SMMA, i)*4.236;

ArrayResize(DeltaATRRSI_2,Bars);//動的配列なので、毎回サイズを確保。
for (i = 0; i < Bars-MAPeriod; i++) DeltaATRRSI_2[i] = iMAOnArray(ATRRSI, 0, MAPeriod, 0, MODE_SMMA, i)*4.236;

この変更により、配列内の計算が 0〜limit までの短い範囲から、0〜Bars-MAPeriod まで広がってしまうので、トータルの計算量が増えてしまいます...。但し、その代わりに1ファイルで済むという扱い易さが手に入ります。。





さらに補足)

↑今日の記事は、MQL4 のバッファ数が最大8であるという制限に対処する目的で、
・矢印はオブジェクト化してしまう。
・IndexBuffer を、動的配列で済ませてしまう。
という手法があるのだと解釈してもらえれば幸いですが…


実は、QQE-VT-A1.mq4 で、DeltaATRRSI , DeltaATRRSI_2 を動的配列にしてしまうのは早計です。本来は、矢印シグナルの計算に使わない DeltaATRRSI , TrLevelRSIFast を削除して、矢印用の UpArrow , DownArrow を追加する方が正解です。^^;
正攻法で作ったサンプルを QQE-VT-A2.mq4 に置きました。実用的に使いたい人は、QQE-VT-Obj.mq4 か、 QQE-VT-A2.mq4 を使ってください。
(..というか、既に出回っている QQE_Alert 系を使っておいたらいいんじゃない?とか思います。私は QQE に興味はありません。。^^;;