オブジェクト結合の方法

グラフィックオブジェクト Text、Label、Bitmap、そしてBitmap Label (OBJ_TEXT、OBJ_LABEL、OBJ_BITMAP、OBJ_BITMAP_LABEL)は、OBJPROP_ANCHORのプロパティで設定した、異なる9つの方法から1つの結合座標を持つことができます。

オブジェクト

インディケータ

X/Y

Width/Height

Date/Price

OBJPROP_CORNER

OBJPROP_ANCHOR

OBJPROP_ANGLE

Text

OBJ_TEXT

はい

はい

はい

Label

OBJ_LABEL

はい

はい(読み取り専用)

はい

はい

はい

Button

OBJ_BUTTON

はい

はい

はい

Bitmap

OBJ_BITMAP

はい(読み取り専用)

はい

はい

Bitmap Label

OBJ_BITMAP_LABEL

はい

はい(読み取り専用)

はい

はい

Edit

OBJ_EDIT

はい

はい

はい

Rectangle Label

OBJ_RECTANGLE_LABEL

はい

はい

はい

表には次の名称を使用しています。

  • X/Y—チャートの隅の1つに対してピクセル単位でアンカーポイントが指定されます。
  • Width/Height—オブジェクトの幅と高さ。『読み取り専用』が指定されている場合、チャート上にオブジェクトが描画された後にのみ、幅と高さの値が計算されることを意味しています。
  • Date/Price—アンカーポイントが日付と価格のペアで指定されます。
  • OBJPROP_CORNER—チャートの隅を指定し、それに対してアンカーポイントが指定されます。ENUM_BASE_CORNERリストの4つの値のうちの1つになる場合があります。
  • OBJPROP_ANCHOR—オブジェクトでのアンカーポイントの位置を指定します。ENUM_ANCHOR_POINTリストの9つの値のうちの1つになる場合があります。このポイントから選択したチャートの隅まで、ピクセル単位で座標が表示されます。
  • OBJPROP_ANGLE—反時計回りにオブジェクトの回転角度を指定します。

必要なバージョンは ObjectSetInteger(chart_handle, object_name, OBJPROP_ANCHOR, anchor_point_mode)  関数で指定出来ます。ここで anchor_point_mode は ENUM_ANCHOR_POINT 値のいずれかです。

ENUM_ANCHOR_POINT

ID

説明

ANCHOR_LEFT_UPPER

左上の隅のアンカーポイント。

ANCHOR_LEFT

中心の左側のアンカーポイント。

ANCHOR_LEFT_LOWER

左下の隅のアンカーポイント。

ANCHOR_LOWER

中心の下部のアンカーポイント。

ANCHOR_RIGHT_LOWER

右下の隅のアンカーポイント。

ANCHOR_RIGHT

中心の右側のアンカーポイント。

ANCHOR_RIGHT_UPPER

右上の隅のアンカーポイント。

ANCHOR_UPPER

中心の上のアンカーポイント。

ANCHOR_CENTER

厳密にオブジェクトの中心にあるアンカーポイント。

OBJ_BUTTONOBJ_RECTANGLE_LABELOBJ_EDIT 及び OBJ_CHART オブジェクトは、左上隅(ANCHOR_LEFT_UPPER)に固定アンカーポイントを持っています。

例:

  string text_name="my_OBJ_TEXT_object";
  if(ObjectFind(0,text_name)<0)
    {
    Print("Object ",text_name," not found. Error code = ",GetLastError());
    //--- チャートの最高値を取得する
    double chart_max_price=ChartGetDouble(0,CHART_PRICE_MAX,0);
    //--- オブジェクトラベルを作成する
    ObjectCreate(0,text_name,OBJ_TEXT,0,TimeCurrent(),chart_max_price);
    //--- テキストの色を設定する
    ObjectSetInteger(0,text_name,OBJPROP_COLOR,clrWhite);
    //--- 背景色を設定する
    ObjectSetInteger(0,text_name,OBJPROP_BGCOLOR,clrGreen);
    //--- ラベルオブジェクトのテキストを設定する
    ObjectSetString(0,text_name,OBJPROP_TEXT,TimeToString(TimeCurrent()));
    //--- フォントを設定する
    ObjectSetString(0,text_name,OBJPROP_FONT,"Trebuchet MS");
    //--- フォントサイズを設定する
    ObjectSetInteger(0,text_name,OBJPROP_FONTSIZE,10);
    //--- 右上隅に結合する
    ObjectSetInteger(0,text_name,OBJPROP_ANCHOR,ANCHOR_RIGHT_UPPER);
    //--- 反時計回りに 90 度回転
    ObjectSetDouble(0,text_name,OBJPROP_ANGLE,90);
    //--- マウスでの選択を禁止する
    ObjectSetInteger(0,text_name,OBJPROP_SELECTABLE,false);
    //--- オブジェクトの再描画
    ChartRedraw(0);
    }

矢印グラフィカルオブジェクト(OBJ_ARROW)の座標を結ぶ方法は 2 つのみです。識別子は ENUM_ARROW_ANCHOR でみられます。

ENUM_ARROW_ANCHOR

ID

説明

ANCHOR_TOP

上面にアンカー

ANCHOR_BOTTOM

下面にアンカー

例:

void OnStart()
 {
//--- 補助配列
  double Ups[],Downs[];
  datetime Time[];
//--- 配列を時系列として設定する
  ArraySetAsSeries(Ups,true);
  ArraySetAsSeries(Downs,true);
  ArraySetAsSeries(Time,true);
//--- 指標フラクタルのハンドルを作成する
  int FractalsHandle=iFractals(NULL,0);
  Print("FractalsHandle = ",FractalsHandle);
//--- 直近エラー値をゼロに設定する
  ResetLastError();
//--- 指標値のコピーを試みる
  int copied=CopyBuffer(FractalsHandle,0,0,1000,Ups);
  if(copied<=0)
    {
    Print("Unable to copy the upper fractals. Error = ",GetLastError());
    return;
    }
 
  ResetLastError();
//--- 指標値のコピーを試みる
  copied=CopyBuffer(FractalsHandle,1,0,1000,Downs);
  if(copied<=0)
    {
    Print("Unable to copy the bottom fractals. Error = ",GetLastError());
    return;
    }
 
  ResetLastError();
//--- 最後の 1000 のバーオープニングを含む時系列を複製する
  copied=CopyTime(NULL,0,0,1000,Time);
  if(copied<=0)
    {
    Print("Unable to copy the Opening Time of the last 1000 bars");
    return;
    }
 
  int upcounter=0,downcounter=0; // 矢印の数を数える
  bool created;// オブジェクト作成の試みの結果を受け取る
  for(int i=2;i<copied;i++)// 指標 iFractals の値をみる
    {
    if(Ups[i]!=EMPTY_VALUE)// 上部のフラクタルを発見
       {
        if(upcounter<10)// 10 以上の上向き矢印は作成しない
          {
          //--- 「Up」オブジェクトの作成を試みる
           created=ObjectCreate(0,string(Time[i]),OBJ_ARROW_THUMB_UP,0,Time[i],Ups[i]);
          if(created)// もし作成されたなら、調整する
             {
              //--- アンカーポイントは、バーに重ならないように下にする
              ObjectSetInteger(0,string(Time[i]),OBJPROP_ANCHOR,ANCHOR_BOTTOM);
              //--- 最後の仕上げとして描画する
              ObjectSetInteger(0,string(Time[i]),OBJPROP_COLOR,clrBlue);
              upcounter++;
             }
          }
       }
    if(Downs[i]!=EMPTY_VALUE)// 下部のフラクタルを発見
       {
        if(downcounter<10)// 10 以上の下向き矢印は作成しない
          {
          //--- 「Down」オブジェクトの作成を試みる
           created=ObjectCreate(0,string(Time[i]),OBJ_ARROW_THUMB_DOWN,0,Time[i],Downs[i]);
          if(created)// もし作成されたなら、調整する
             {
              //--- アンカーポイントは、バーに重ならないように上にする
              ObjectSetInteger(0,string(Time[i]),OBJPROP_ANCHOR,ANCHOR_TOP);
              //--- 最後の仕上げとして描画する
              ObjectSetInteger(0,string(Time[i]),OBJPROP_COLOR,clrRed);
              downcounter++;
             }
          }
       }
    }
 }

スクリプトの実行後チャートはこの図のようになります。

フラクタル値にマークを配置します。