개요.
- MQL5 의 OnTick 에서 호출하여 신규 캔들 시작되는 지점 검출 하기.
코드
int NumBars_Prev = 0 ;
int OnInit()
{
Init_NewBar();
return(INIT_SUCCEEDED);
}
void OnDeinit(const int reason)
{
}
void OnTick()
{
if(Check_NewBar() == 1)
{
Print("New Bar");
}
}
/*
caller : OnInit
*/
void Init_NewBar()
{
NumBars_Prev = Bars(_Symbol,_Period);
}
/*
caller : OnTick
*/
int Check_NewBar()
{
int retv = 0;
int numbar_crnt = Bars(_Symbol,_Period);
if(NumBars_Prev != numbar_crnt)// on new bar
{
retv = 1;
}
NumBars_Prev = numbar_crnt;
return retv;
}
동영상.
캔들 변경 지점 검출 클래스 구현예
- 앞의 코드에에서는 EA 내에 코드작성하였으나, EA 코드가 지저분해지고 가독성 줄어든다. 클래스로 구현하고 EA 에서는 클래스 사용하는 방식으로 구현.
- 참고 : - MQL5 에서 클래스 생성방법 상세 : https://igotit.tistory.com/2151
- 클래스 CCyNewBar.mqh 코드 전체.
- 클래스 CCyNewBar.mqh 활용EA 코드.
#include "CyClass\CyNewBar.mqh"
CCyNewBar m_CCyNewBar_Chart; // for chrt's period.
CCyNewBar m_CCyNewBar_M5 ; // for 5minute bar change.
int OnInit()
{
m_CCyNewBar_Chart.Init_CCyNewBar(_Symbol,_Period);
m_CCyNewBar_M5.Init_CCyNewBar(_Symbol, PERIOD_M5);
return(INIT_SUCCEEDED);
}
void OnTick()
{
if( m_CCyNewBar_Chart.Check_NewBar() == 1)
{
Print("New Bar");
}
if(m_CCyNewBar_M5.Check_NewBar() == 1)
{
Print("New Bar 5M ");
}
}
동영상.
- 상기 EA 실행모습.
첫등록 : 2019년 4월 27일
최종수정 : 2019년 4월 29일
본 글 단축주소 : https://igotit.tistory.com/2143
'트레이딩 > 메타트레이더 코딩' 카테고리의 다른 글
MQL5. 소켓통신 (0) | 2019.05.09 |
---|---|
MQL5. 수직선 그리기 (2) | 2019.04.29 |
MQL5. 사각형 그리기 (2) | 2019.04.29 |
MQL5. 클래스 만들기 (0) | 2019.04.29 |
MQL5. ATR ( Average True Range ) (3) | 2019.04.28 |
댓글