라이브러리: IsNewBar - 페이지 2

 

DeepFocus의 코드는 훌륭하게 작동하지만 모든 심볼 또는 타임프레임과 호환되도록 약간의 조정을 가했습니다.


class CNewCandle {
  private:
    string              m_symbol;
    ENUM_TIMEFRAMES     m_timeframe;
    datetime            m_lastBarOpenedAt;
    datetime            m_time[1];

  public:
                     CNewCandle(const string symbol, const ENUM_TIMEFRAMES timeframe);
                    ~CNewCandle(void) {};

                     bool                       IsNewCandle(void);
};


CNewCandle::CNewCandle(const string symbol, const ENUM_TIMEFRAMES timeframe) {
    m_symbol = symbol;
    m_timeframe = timeframe;
    CopyTime(m_symbol, m_timeframe, 0, 1, m_time);
    m_lastBarOpenedAt = m_time[0];
}


/**
 * @brief 새 캔들이 형성되었는지 확인
 *
 * @return true | false
 */
bool CNewCandle::IsNewCandle(void) {
    CopyTime(m_symbol, m_timeframe, 0, 1, m_time);
    if(m_lastBarOpenedAt < m_time[0]) {
        m_lastBarOpenedAt = m_time[0];
        return(true);
    } else {
        return(false);
    }

}


구현하려면:

CIsNewCandle someName(_Symbol, PERIOD_CURRENT);

void OnTick(){
        if(someName.IsNewCandle()){
                /// 새 바 이벤트 핸들러를 호출하거나
                /// 새 바에서 작업을 수행합니다. 
                }
        }