개요
아래 메타트레이더 5의 챠트에 현재 이전 지정된 캔들 수량(예 100개) 중 최고가를 찾고 이를 화면상에서 수평선 표현하는 코드 소스 정리.
아래 코드의 함수 get_Highest(int num_candle) 는 인자로 전달된 현재시점기준 과거 num_candle 수량중에서 최고가를 반환하는 함수. 이를 OnTick 에서 호출하여 print 하는 예.
void OnTick()
{
Print(Get_Highest(100));
}
double Get_Highest(int num_candle)
{
int idx_highest_candle;
double arr_high[];
ArraySetAsSeries(arr_high, true); //
CopyHigh(_Symbol,_Period,0,num_candle, arr_high); //0means current candle, 100 candle's H copy to High[]
idx_highest_candle = ArrayMaximum(arr_high,0,num_candle); // search for highest candle.
return arr_high[idx_highest_candle];
}
시각적으로 해당 고가를 챠트에 표현하는 기능 추가하면 아래코드.
int OnInit()
{
Init_myLine();
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
ObjectMove(_Symbol, "Line1",0,0,Get_Highest(100)); // draw line
}
double Get_Highest(int num_candle)
{
int idx_highest_candle;
double arr_high[];
ArraySetAsSeries(arr_high, true); //
CopyHigh(_Symbol,_Period,0,num_candle, arr_high); //0means current candle, 100 candle's H copy to High[]
idx_highest_candle = ArrayMaximum(arr_high,0,num_candle); // search for highest candle.
return arr_high[idx_highest_candle];
}
void Init_myLine()
{
ObjectCreate(
_Symbol,
"Line1",
OBJ_HLINE,
0, //int sub_window
0, //datetime time1
0 // y value on chart
);
ObjectSetInteger(
0, // long chart_id
"Line1",
OBJPROP_COLOR, //int properti_modifier
clrRed // long value
);
ObjectSetInteger(0,"Line1",OBJPROP_WIDTH, 1); // line width.
}
작동동영상.
본 글 포함된 상위 정리글
메타트레이더5체계정리 : https://igotit.tistory.com/1775
|
첫등록 : 2019년 4월 27일.
최종수정 :
본 글 단축주소 : https://igotit.tistory.com/2142
'트레이딩 > 메타트레이더 코딩' 카테고리의 다른 글
MQL5. 클래스 만들기 (0) | 2019.04.29 |
---|---|
MQL5. ATR ( Average True Range ) (3) | 2019.04.28 |
MQL5. 수평선 그리기 (0) | 2019.04.27 |
MQL5. Data Collections. (0) | 2019.04.24 |
MQL5. 포지션 함수, 클래스. (0) | 2019.04.23 |
댓글