개요.
- 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 코드 전체.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
//+------------------------------------------------------------------+ | |
//| CyNewBar.mqh | | |
//| igotit | | |
//| http://igotit.tistory.com | | |
//+------------------------------------------------------------------+ | |
#property copyright "igotit" | |
#property link "http://igotit.tistory.com" | |
#property version "1.00" | |
//+------------------------------------------------------------------+ | |
//| | | |
//+------------------------------------------------------------------+ | |
class CCyNewBar | |
{ | |
private: | |
int NumBars_Prev; | |
public: | |
CCyNewBar(); | |
~CCyNewBar(); | |
string m_symbol; | |
ENUM_TIMEFRAMES m_timeframe; | |
void Init_CCyNewBar(string symbol,ENUM_TIMEFRAMES timeframe); | |
int Check_NewBar(); | |
}; | |
//+------------------------------------------------------------------+ | |
//| | | |
//+------------------------------------------------------------------+ | |
CCyNewBar::CCyNewBar() | |
{ | |
// Print("Initial Number of bars=",NumBars_Prev); | |
} | |
//+------------------------------------------------------------------+ | |
//| | | |
//+------------------------------------------------------------------+ | |
CCyNewBar::~CCyNewBar() | |
{ | |
} | |
//+------------------------------------------------------------------+ | |
void CCyNewBar::Init_CCyNewBar(string symbol,ENUM_TIMEFRAMES timeframe) | |
{ | |
m_symbol = symbol; | |
m_timeframe = timeframe; | |
NumBars_Prev = Bars(m_symbol,m_timeframe); | |
} | |
int CCyNewBar::Check_NewBar() | |
{ | |
int retv = 0; | |
int numbar_crnt = Bars(m_symbol,m_timeframe); | |
if(NumBars_Prev != numbar_crnt)// on new bar | |
{ | |
retv = 1; | |
} | |
NumBars_Prev = numbar_crnt; | |
return retv; | |
} |
- 클래스 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 |
댓글