オブジェクトの作成
チャート上にラインを表示するには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()));
}
}
検索結果がありません。 |
検索結果がありません。 |