オブジェクトの作成
チャート上にラインを表示するにはObjectCreate関数を使用します。
bool ObjectCreate(
   long chart_id,
   string object_name,
   ENUM_OBJECT object_type,
   sub_window sub_window,
   datetime time1,
   double price1,
   ...
   datetime timeN=0,
   double priceN=0
);
インジケーターを挿入したチャートにオブジェクトを表示するにはchart_idに0を指定します。chart_idに適切な値を指定することで他のチャートにオブジェクトを挿入することも可能です。
MT4におけるチャートIDについて
object_nameには他のオブジェクトと重複しない名前を付けます。この名前をもとにしてオブジェクトを管理します。
水平線を表示する場合にはobject_typeにOBJ_HLINEを指定します。
オブジェクトをサブウィンドウ(MACDやRSIが表示されるチャート下のウィンドウ)に表示する場合にはsub_windowにサブウィンドウの番号を指定します。メインのチャートに表示する場合には0を指定します。
OnInit内でオブジェクトを作成する例は以下のようになります。
#include 
string LineName = "SampleHLine";
int OnInit(){
   if(ObjectCreate(0, LineName, OBJ_HLINE, 0, Time[0], Close[0]) == false){
      Print(__FUNCTION__, " ObjectCreate Error : ", ErrorDescription(GetLastError()));
      return(INIT_FAILED);
   }
   return(INIT_SUCCEEDED);
}
オブジェクトの設定を変更する
ObjectSet関数を使うことでオブジェクトの設定を変更することができます。
表示位置、色、大きさなど様々な項目を変更可能です。
bool ObjectSet(
   string object_name,
   int index,
   double value
);
object_nameには設定を変更するオブジェクトの名前を指定します。
indexにはどの項目を変更するかを指定します。Object Properties
valueには変更後の値を指定します。
レートが動く毎にオブジェクトの表示位置を現在レートに変更するには、indexにOBJPROP_
PRICE1を指定、valueに現在レートを指定します。
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]){
  
   if(ObjectSet(LineName, OBJPROP_PRICE1, Close[0]) == false){
      Print(__FUNCTION__, " ObjectSet Error : ", ErrorDescription(GetLastError()));
      return(INIT_FAILED);
   }
  
   return(rates_total);
}
オブジェクトを削除する
チャートからオブジェクトを削除するには、ObjectDelete関数を使用します。
bool ObjectDelete(
   long chart_id,
   string object_name
);
インジケーターを削除した際に表示が消えるよう、OnDeinit関数内で実行する例です。
void OnDeinit(const int reason){
   if(ObjectDelete(0, LineName) == false){
      Print(__FUNCTION__, " ObjectDelete Error : ", ErrorDescription(GetLastError()));
   }
}
まとめ
最終的には以下のコードとなります。
#property copyright "Copyright 2016, gogojungle"
#property link      "http://labo.fx-on.com"
#property version   "1.00"
#property strict
#property indicator_chart_window
#include 
string LineName = "SampleHLine";
int OnInit(){
   if(ObjectCreate(0, LineName, OBJ_HLINE, 0, Time[0], Close[0]) == false){
      Print(__FUNCTION__, " ObjectCreate Error : ", ErrorDescription(GetLastError()));
      return(INIT_FAILED);
   }
   if(ObjectSet(LineName, OBJPROP_PRICE1, Close[0]) == false){
      Print(__FUNCTION__, " ObjectSet Error : ", ErrorDescription(GetLastError()));
      return(INIT_FAILED);
   }
   return(INIT_SUCCEEDED);
}
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[]){
  
   if(ObjectSet(LineName, OBJPROP_PRICE1, Close[0]) == false){
      Print(__FUNCTION__, " ObjectSet Error : ", ErrorDescription(GetLastError()));
      return(INIT_FAILED);
   }
  
   return(rates_total);
}
void OnDeinit(const int reason){
   if(ObjectDelete(0, LineName) == false){
      Print(__FUNCTION__, " ObjectDelete Error : ", ErrorDescription(GetLastError()));
   }
}
| 検索結果がありません。 | 
| 検索結果がありません。 |