본문 바로가기
트레이딩/메타트레이더 코딩

MQL5. 캔들 변경 지점 검출

by 리치굿맨 2019. 4. 29.

개요. 

- 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. 캔들 변경 지점 검출  (0) 2019.04.29
MQL5. 사각형 그리기  (2) 2019.04.29
MQL5. 클래스 만들기  (0) 2019.04.29
MQL5. ATR ( Average True Range )  (3) 2019.04.28

댓글0


   
현물 |선물 인버스 |선물 USDT     현물 | 선물 USDT |봇제작툴/카피트레이딩     현물 |선물 인버스 |선물 USDT     선물 인버스 |선물 USDT