2010年5月7日金曜日

★チャート上の矢印
Arrows On The Chart


さて、メタトレーダー4(MetaTrader 4) では インジケーターやスクリプトでチャート上に矢印を描くことができるが、 矢印を描くには以下の2つの方法がある。
インジケーターバッファを使う方法
バッファのスタイルをDRAW_ARROWに設定し、SetIndexArrow()で矢印の番号を指定する方法で、
矢印を表示するのは簡単だが、1種類の矢印あたり8コしか利用できないバッファのうちの1つを使って しまう。また、バッファを使うため、同じ時間(縦位置)上には(バッファ 1つあたり)1つの矢印しか表示できず、色も1色、サイズも1種類しか使えない。 また、最新の足より右側に表示したい場合にはSetIndexShift() を使う必要がある。
オブジェクトを使う方法
CreateObject() で矢印オブジェクトを作成し、OBJPROP_ARROWCODE でその番号を指定する方法で、
いくつでも好きな場所に好きな矢印を表示させることができる。 しかし、ObjectCreate()/ObjectSet() などのAPIで制御する必要がある ため、上記のバッファを使う方法よりは難しい。
また、インジケーター終了時に正しくObjectDelete() しないと矢印が残ってしまう。
ところで、この2つの方法で表示できる矢印の種類は微妙に異なるのはご存知だろうか。
以下は矢印オブジェクトとして作成した場合に表示できる矢印の一覧である。
これに対し、
バッファを使う方法で表示できる矢印の一覧は以下となる。
(バッファは8コまでしか使えないため、8種類づつ別ウィンドウにしている)

どちらの方法でも矢印の種類は0~255の番号で指定するが、どこが違うかとい うと、バッファを使う方では0~32までを指定してもすべて×マークになっている。 (251番と同じ形状)
これは、矢印としてWingdingsフォントが利用されているため、 31以下は文字でいうと制御コードであるためである。(32は空白)
オブジェクトの場合は0~31の部分を特別扱いしていると思われ、 MQL4のリファレンスのArrow codesの部分を見ると、 1~6は特別扱いとされている。(1、2はロング/ショートのオーダー位置に表示される矢印、5、6はその位置の値を表示するようになっている)
ちなみに、上記の矢印画像を表示するインジケーターは 00-MarkList_v101.mq4で、★インジケーター作成リスト(M~Q)を参照。

2 件のコメント:

  1. 質問です。
    SetIndexBuffer(0,Buffer1);
    SetIndexStyle(0,DRAW_ARROW,EMPTY,1,clrRed);
    SetIndexArrow(0,233);
    SetIndexBuffer(1,Buffer2);
    SetIndexStyle(1,DRAW_ARROW,EMPTY,1,clrBlue);
    SetIndexStyle(1,234);

    のようなコードを書いて、↑と↓を表示させようとしたのですが、↑はうまくいくのですが、↓がどうしても251番の形状になってしまいます。234以外を試しに指定してみても何もかわりませんでした。何か理由は分かりますか?

    返信削除
  2. SetIndexStyle(1,234);

    SetIndexArrow(1,234);

    返信削除