mql5/Include/Indicators/SuperTrend.mqh

26 lines
1.1 KiB
MQL5
Raw Permalink Normal View History

2025-08-16 12:30:04 -04:00
class CSuperTrend
{
private:
string m_symbol; ENUM_TIMEFRAMES m_tf; int m_atrPeriod; double m_mult; int m_hATR;
public:
CSuperTrend(): m_symbol(""), m_tf(PERIOD_CURRENT), m_atrPeriod(10), m_mult(3.0), m_hATR(-1) {}
bool Init(const string symbol, const ENUM_TIMEFRAMES tf, const int atrPeriod=10, const double mult=3.0)
{ m_symbol=symbol; m_tf=tf; m_atrPeriod=MathMax(1,atrPeriod); m_mult=mult; m_hATR=iATR(m_symbol,m_tf,m_atrPeriod); return (m_hATR>0); }
// Returns +1 uptrend, -1 downtrend at shift
int Direction(const int shift)
{
double atr=0.0; double b[1];
if(m_hATR>0 && CopyBuffer(m_hATR,0,shift,1,b)==1) atr=b[0];
if(atr<=0) return 0;
double hl2 = (iHigh(m_symbol,m_tf,shift)+iLow(m_symbol,m_tf,shift))/2.0;
// Simplified supertrend: compare close to hl2 band +/- m_mult*atr
double upBand = hl2 - m_mult*atr;
double dnBand = hl2 + m_mult*atr;
double close = iClose(m_symbol,m_tf,shift);
if(close>=dnBand) return +1;
if(close<=upBand) return -1;
// fallback to prev direction
int prev = 0; if(shift+1<1000) prev = Direction(shift+1); return prev;
}
};