| //+------------------------------------------------------------------+
|
| //| Oscilators.mqh |
|
| //| Copyright 2000-2025, MetaQuotes Ltd. |
|
| //| https://www.mql5.com |
|
| //+------------------------------------------------------------------+
|
| #include "Indicator.mqh"
|
| //+------------------------------------------------------------------+
|
| //| Class CiATR. |
|
| //| Purpose: Class of the "Average True Range" idnicator. |
|
| //| Derives from class CIndicator. |
|
| //+------------------------------------------------------------------+
|
| class CiATR : public CIndicator
|
| {
|
| protected:
|
| int m_ma_period;
|
|
|
| public:
|
| CiATR(void);
|
| ~CiATR(void);
|
| //--- methods of access to protected data
|
| int MaPeriod(void) const { return(m_ma_period); }
|
| //--- method of creation
|
| bool Create(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period);
|
| //--- methods of access to indicator data
|
| double Main(const int index) const;
|
| //--- method of identifying
|
| virtual int Type(void) const { return(IND_ATR); }
|
|
|
| protected:
|
| //--- methods of tuning
|
| virtual bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[]);
|
| bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor |
|
| //+------------------------------------------------------------------+
|
| CiATR::CiATR(void) : m_ma_period(-1)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CiATR::~CiATR(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create the "Average True Range" indicator |
|
| //+------------------------------------------------------------------+
|
| bool CiATR::Create(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period)
|
| {
|
| //--- check history
|
| if(!SetSymbolPeriod(symbol,period))
|
| return(false);
|
| //--- create
|
| m_handle=iATR(symbol,period,ma_period);
|
| //--- check result
|
| if(m_handle==INVALID_HANDLE)
|
| return(false);
|
| //--- indicator successfully created
|
| if(!Initialize(symbol,period,ma_period))
|
| {
|
| //--- initialization failed
|
| IndicatorRelease(m_handle);
|
| m_handle=INVALID_HANDLE;
|
| return(false);
|
| }
|
| //--- ok
|
| return(true);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with universal parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiATR::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[])
|
| {
|
| return(Initialize(symbol,period,(int)params[0].integer_value));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with special parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiATR::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period)
|
| {
|
| if(CreateBuffers(symbol,period,1))
|
| {
|
| //--- string of status of drawing
|
| m_name ="ATR";
|
| m_status="("+symbol+","+PeriodDescription()+","+IntegerToString(ma_period)+") H="+IntegerToString(m_handle);
|
| //--- save settings
|
| m_ma_period=ma_period;
|
| //--- create buffers
|
| ((CIndicatorBuffer*)At(0)).Name("MAIN_LINE");
|
| //--- ok
|
| return(true);
|
| }
|
| //--- error
|
| return(false);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to buffer of "Average True Range" |
|
| //+------------------------------------------------------------------+
|
| double CiATR::Main(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(0);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Class CiBearsPower. |
|
| //| Purpose: Class indicator "Bears Power". |
|
| //| Derives from class CIndicator. |
|
| //+------------------------------------------------------------------+
|
| class CiBearsPower : public CIndicator
|
| {
|
| protected:
|
| int m_ma_period;
|
|
|
| public:
|
| CiBearsPower(void);
|
| ~CiBearsPower(void);
|
| //--- methods of access to protected data
|
| int MaPeriod(void) const { return(m_ma_period); }
|
| //--- method create
|
| bool Create(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period);
|
| //--- methods of access to indicator data
|
| double Main(const int index) const;
|
| //--- method of identifying
|
| virtual int Type(void) const { return(IND_BEARS); }
|
|
|
| protected:
|
| //--- methods of tuning
|
| virtual bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[]);
|
| bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor |
|
| //+------------------------------------------------------------------+
|
| CiBearsPower::CiBearsPower(void) : m_ma_period(-1)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CiBearsPower::~CiBearsPower(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create the "Bears Power" indicator |
|
| //+------------------------------------------------------------------+
|
| bool CiBearsPower::Create(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period)
|
| {
|
| //--- check history
|
| if(!SetSymbolPeriod(symbol,period))
|
| return(false);
|
| //--- create
|
| m_handle=iBearsPower(symbol,period,ma_period);
|
| //--- check result
|
| if(m_handle==INVALID_HANDLE)
|
| return(false);
|
| //--- indicator successfully created
|
| if(!Initialize(symbol,period,ma_period))
|
| {
|
| //--- initialization failed
|
| IndicatorRelease(m_handle);
|
| m_handle=INVALID_HANDLE;
|
| return(false);
|
| }
|
| //--- ok
|
| return(true);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with universal parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiBearsPower::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[])
|
| {
|
| return(Initialize(symbol,period,(int)params[0].integer_value));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with special parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiBearsPower::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period)
|
| {
|
| if(CreateBuffers(symbol,period,1))
|
| {
|
| //--- string of status of drawing
|
| m_name ="BearsPower";
|
| m_status="("+symbol+","+PeriodDescription()+","+IntegerToString(ma_period)+") H="+IntegerToString(m_handle);
|
| //--- save settings
|
| m_ma_period=ma_period;
|
| //--- create buffers
|
| ((CIndicatorBuffer*)At(0)).Name("MAIN_LINE");
|
| //--- ok
|
| return(true);
|
| }
|
| //--- error
|
| return(false);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to buffer of "Bears Power" |
|
| //+------------------------------------------------------------------+
|
| double CiBearsPower::Main(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(0);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Class CiBullsPower. |
|
| //| Purpose: Class of the "Bulls Power" indicator. |
|
| //| Derives from class CIndicator. |
|
| //+------------------------------------------------------------------+
|
| class CiBullsPower : public CIndicator
|
| {
|
| protected:
|
| int m_ma_period;
|
|
|
| public:
|
| CiBullsPower(void);
|
| ~CiBullsPower(void);
|
| //--- methods of access to protected data
|
| int MaPeriod(void) const { return(m_ma_period); }
|
| //--- method create
|
| bool Create(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period);
|
| //--- methods of access to indicator data
|
| double Main(const int index) const;
|
| //--- method of identifying
|
| virtual int Type(void) const { return(IND_BULLS); }
|
|
|
| protected:
|
| //--- methods of tuning
|
| virtual bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[]);
|
| bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor |
|
| //+------------------------------------------------------------------+
|
| CiBullsPower::CiBullsPower(void) : m_ma_period(-1)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CiBullsPower::~CiBullsPower(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create indicator "Bulls Power" |
|
| //+------------------------------------------------------------------+
|
| bool CiBullsPower::Create(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period)
|
| {
|
| //--- check history
|
| if(!SetSymbolPeriod(symbol,period))
|
| return(false);
|
| //--- create
|
| m_handle=iBullsPower(symbol,period,ma_period);
|
| //--- check result
|
| if(m_handle==INVALID_HANDLE)
|
| return(false);
|
| //--- indicator successfully created
|
| if(!Initialize(symbol,period,ma_period))
|
| {
|
| //--- initialization failed
|
| IndicatorRelease(m_handle);
|
| m_handle=INVALID_HANDLE;
|
| return(false);
|
| }
|
| //--- ok
|
| return(true);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with universal parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiBullsPower::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[])
|
| {
|
| return(Initialize(symbol,period,(int)params[0].integer_value));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with special parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiBullsPower::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period)
|
| {
|
| if(CreateBuffers(symbol,period,1))
|
| {
|
| //--- string of status of drawing
|
| m_name ="BullsPower";
|
| m_status="("+symbol+","+PeriodDescription()+","+IntegerToString(ma_period)+") H="+IntegerToString(m_handle);
|
| //--- save settings
|
| m_ma_period=ma_period;
|
| //--- create buffers
|
| ((CIndicatorBuffer*)At(0)).Name("MAIN_LINE");
|
| //--- ok
|
| return(true);
|
| }
|
| //--- error
|
| return(false);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to buffer of "Bulls Power" |
|
| //+------------------------------------------------------------------+
|
| double CiBullsPower::Main(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(0);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Class CiCCI. |
|
| //| Purpose: Class of the "Commodity Channel Index" indicator. |
|
| //| Derives from class CIndicator. |
|
| //+------------------------------------------------------------------+
|
| class CiCCI : public CIndicator
|
| {
|
| protected:
|
| int m_ma_period;
|
| int m_applied;
|
|
|
| public:
|
| CiCCI(void);
|
| ~CiCCI(void);
|
| //--- methods of access to protected data
|
| int MaPeriod(void) const { return(m_ma_period); }
|
| int Applied(void) const { return(m_applied); }
|
| //--- method create
|
| bool Create(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period,const int applied);
|
| //--- methods of access to indicator data
|
| double Main(const int index) const;
|
| //--- method of identifying
|
| virtual int Type(void) const { return(IND_CCI); }
|
|
|
| protected:
|
| //--- methods of tuning
|
| virtual bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[]);
|
| bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period,const int applied);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor |
|
| //+------------------------------------------------------------------+
|
| CiCCI::CiCCI(void) : m_ma_period(-1),
|
| m_applied(-1)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CiCCI::~CiCCI(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create the "Commodity Channel Index" indicator |
|
| //+------------------------------------------------------------------+
|
| bool CiCCI::Create(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period,const int applied)
|
| {
|
| //--- check history
|
| if(!SetSymbolPeriod(symbol,period))
|
| return(false);
|
| //--- create
|
| m_handle=iCCI(symbol,period,ma_period,applied);
|
| //--- check result
|
| if(m_handle==INVALID_HANDLE)
|
| return(false);
|
| //--- indicator successfully created
|
| if(!Initialize(symbol,period,ma_period,applied))
|
| {
|
| //--- initialization failed
|
| IndicatorRelease(m_handle);
|
| m_handle=INVALID_HANDLE;
|
| return(false);
|
| }
|
| //--- ok
|
| return(true);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with universal parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiCCI::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[])
|
| {
|
| return(Initialize(symbol,period,(int)params[0].integer_value,(int)params[1].integer_value));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create the "Commodity Channel Index" indicator |
|
| //+------------------------------------------------------------------+
|
| bool CiCCI::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period,const int applied)
|
| {
|
| if(CreateBuffers(symbol,period,1))
|
| {
|
| //--- string of status of drawing
|
| m_name ="CCI";
|
| m_status="("+symbol+","+PeriodDescription()+","+
|
| IntegerToString(ma_period)+","+PriceDescription(applied)+") H="+IntegerToString(m_handle);
|
| //--- save settings
|
| m_ma_period=ma_period;
|
| m_applied =applied;
|
| //--- create buffers
|
| ((CIndicatorBuffer*)At(0)).Name("MAIN_LINE");
|
| //--- ok
|
| return(true);
|
| }
|
| //--- error
|
| return(false);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to buffer of "Commodity Channel Index" |
|
| //+------------------------------------------------------------------+
|
| double CiCCI::Main(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(0);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Class CiChaikin. |
|
| //| Purpose: Class of the "Chaikin Oscillator" indicator. |
|
| //| Derives from class CIndicator. |
|
| //+------------------------------------------------------------------+
|
| class CiChaikin : public CIndicator
|
| {
|
| protected:
|
| int m_fast_ma_period;
|
| int m_slow_ma_period;
|
| ENUM_MA_METHOD m_ma_method;
|
| ENUM_APPLIED_VOLUME m_applied;
|
|
|
| public:
|
| CiChaikin(void);
|
| ~CiChaikin(void);
|
| //--- methods of access to protected data
|
| int FastMaPeriod(void) const { return(m_fast_ma_period); }
|
| int SlowMaPeriod(void) const { return(m_slow_ma_period); }
|
| ENUM_MA_METHOD MaMethod(void) const { return(m_ma_method); }
|
| ENUM_APPLIED_VOLUME Applied(void) const { return(m_applied); }
|
| //--- method of creation
|
| bool Create(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int fast_ma_period,const int slow_ma_period,
|
| const ENUM_MA_METHOD ma_method,const ENUM_APPLIED_VOLUME applied);
|
| //--- methods of access to indicator data
|
| double Main(const int index) const;
|
| //--- method of identifying
|
| virtual int Type(void) const { return(IND_CHAIKIN); }
|
|
|
| protected:
|
| //--- methods of tuning
|
| virtual bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[]);
|
| bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int fast_ma_period,const int slow_ma_period,
|
| const ENUM_MA_METHOD ma_method,const ENUM_APPLIED_VOLUME applied);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor |
|
| //+------------------------------------------------------------------+
|
| CiChaikin::CiChaikin(void) : m_fast_ma_period(-1),
|
| m_slow_ma_period(-1),
|
| m_ma_method(WRONG_VALUE),
|
| m_applied(WRONG_VALUE)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CiChaikin::~CiChaikin(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create indicator "Chaikin Oscillator" |
|
| //+------------------------------------------------------------------+
|
| bool CiChaikin::Create(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int fast_ma_period,const int slow_ma_period,
|
| const ENUM_MA_METHOD ma_method,const ENUM_APPLIED_VOLUME applied)
|
| {
|
| //--- check history
|
| if(!SetSymbolPeriod(symbol,period))
|
| return(false);
|
| //--- create
|
| m_handle=iChaikin(symbol,period,fast_ma_period,slow_ma_period,ma_method,applied);
|
| //--- check result
|
| if(m_handle==INVALID_HANDLE)
|
| return(false);
|
| //--- indicator successfully created
|
| if(!Initialize(symbol,period,fast_ma_period,slow_ma_period,ma_method,applied))
|
| {
|
| //--- initialization failed
|
| IndicatorRelease(m_handle);
|
| m_handle=INVALID_HANDLE;
|
| return(false);
|
| }
|
| //--- ok
|
| return(true);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with universal parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiChaikin::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[])
|
| {
|
| return(Initialize(symbol,period,(int)params[0].integer_value,(int)params[1].integer_value,
|
| (ENUM_MA_METHOD)params[2].integer_value,(ENUM_APPLIED_VOLUME)params[3].integer_value));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with special parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiChaikin::Initialize(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int fast_ma_period,const int slow_ma_period,
|
| const ENUM_MA_METHOD ma_method,const ENUM_APPLIED_VOLUME applied)
|
| {
|
| if(CreateBuffers(symbol,period,1))
|
| {
|
| //--- string of status of drawing
|
| m_name ="Chaikin";
|
| m_status="("+symbol+","+PeriodDescription()+","+
|
| IntegerToString(fast_ma_period)+","+IntegerToString(slow_ma_period)+","+
|
| MethodDescription(ma_method)+","+PriceDescription(applied)+") H="+IntegerToString(m_handle);
|
| //--- save settings
|
| m_fast_ma_period=fast_ma_period;
|
| m_slow_ma_period=slow_ma_period;
|
| m_ma_method =ma_method;
|
| m_applied =applied;
|
| //--- create buffers
|
| ((CIndicatorBuffer*)At(0)).Name("MAIN_LINE");
|
| //--- ok
|
| return(true);
|
| }
|
| //--- error
|
| return(false);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to buffer of "Chaikin Oscillator" |
|
| //+------------------------------------------------------------------+
|
| double CiChaikin::Main(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(0);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Class CiDeMarker. |
|
| //| Purpose: Class of the "DeMarker" indicator. |
|
| //| Derives from class CIndicator. |
|
| //+------------------------------------------------------------------+
|
| class CiDeMarker : public CIndicator
|
| {
|
| protected:
|
| int m_ma_period;
|
|
|
| public:
|
| CiDeMarker(void);
|
| ~CiDeMarker(void);
|
| //--- methods of access to protected data
|
| int MaPeriod(void) const { return(m_ma_period); }
|
| //--- method of creation
|
| bool Create(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period);
|
| //--- methods of access to indicator data
|
| double Main(const int index) const;
|
| //--- method of identifying
|
| virtual int Type(void) const { return(IND_DEMARKER); }
|
|
|
| protected:
|
| //--- methods of tuning
|
| virtual bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[]);
|
| bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor |
|
| //+------------------------------------------------------------------+
|
| CiDeMarker::CiDeMarker(void) : m_ma_period(-1)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CiDeMarker::~CiDeMarker(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create indicator "DeMarker" |
|
| //+------------------------------------------------------------------+
|
| bool CiDeMarker::Create(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period)
|
| {
|
| //--- check history
|
| if(!SetSymbolPeriod(symbol,period))
|
| return(false);
|
| //--- create
|
| m_handle=iDeMarker(symbol,period,ma_period);
|
| //--- check result
|
| if(m_handle==INVALID_HANDLE)
|
| return(false);
|
| //--- indicator successfully created
|
| if(!Initialize(symbol,period,ma_period))
|
| {
|
| //--- initialization failed
|
| IndicatorRelease(m_handle);
|
| m_handle=INVALID_HANDLE;
|
| return(false);
|
| }
|
| //--- ok
|
| return(true);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with universal parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiDeMarker::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[])
|
| {
|
| return(Initialize(symbol,period,(int)params[0].integer_value));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with special parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiDeMarker::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period)
|
| {
|
| if(CreateBuffers(symbol,period,1))
|
| {
|
| //--- string of status of drawing
|
| m_name ="DeMarker";
|
| m_status="("+symbol+","+PeriodDescription()+","+IntegerToString(ma_period)+") H="+IntegerToString(m_handle);
|
| //--- save settings
|
| m_ma_period=ma_period;
|
| //--- create buffers
|
| ((CIndicatorBuffer*)At(0)).Name("MAIN_LINE");
|
| //--- ok
|
| return(true);
|
| }
|
| //--- error
|
| return(false);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to buffer of "DeMarker" |
|
| //+------------------------------------------------------------------+
|
| double CiDeMarker::Main(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(0);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Class CiForce. |
|
| //| Purpose: Class of the "Force Index" indicator. |
|
| //| Derives from class CIndicator. |
|
| //+------------------------------------------------------------------+
|
| class CiForce : public CIndicator
|
| {
|
| protected:
|
| int m_ma_period;
|
| ENUM_MA_METHOD m_ma_method;
|
| ENUM_APPLIED_VOLUME m_applied;
|
|
|
| public:
|
| CiForce(void);
|
| ~CiForce(void);
|
| //--- methods of access to protected data
|
| int MaPeriod(void) const { return(m_ma_period); }
|
| ENUM_MA_METHOD MaMethod(void) const { return(m_ma_method); }
|
| ENUM_APPLIED_VOLUME Applied(void) const { return(m_applied); }
|
| //--- method of creation
|
| bool Create(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int ma_period,const ENUM_MA_METHOD ma_method,const ENUM_APPLIED_VOLUME applied);
|
| //--- methods of access to indicator data
|
| double Main(const int index) const;
|
| //--- method of identifying
|
| virtual int Type(void) const { return(IND_FORCE); }
|
|
|
| protected:
|
| //--- methods of tuning
|
| virtual bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[]);
|
| bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int ma_period,const ENUM_MA_METHOD ma_method,const ENUM_APPLIED_VOLUME applied);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor |
|
| //+------------------------------------------------------------------+
|
| CiForce::CiForce(void) : m_ma_period(-1),
|
| m_ma_method(WRONG_VALUE),
|
| m_applied(WRONG_VALUE)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CiForce::~CiForce(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create indicator "Force Index" |
|
| //+------------------------------------------------------------------+
|
| bool CiForce::Create(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int ma_period,const ENUM_MA_METHOD ma_method,const ENUM_APPLIED_VOLUME applied)
|
| {
|
| //--- check history
|
| if(!SetSymbolPeriod(symbol,period))
|
| return(false);
|
| //--- create
|
| m_handle=iForce(symbol,period,ma_period,ma_method,applied);
|
| //--- check result
|
| if(m_handle==INVALID_HANDLE)
|
| return(false);
|
| //--- indicator successfully created
|
| if(!Initialize(symbol,period,ma_period,ma_method,applied))
|
| {
|
| //--- initialization failed
|
| IndicatorRelease(m_handle);
|
| m_handle=INVALID_HANDLE;
|
| return(false);
|
| }
|
| //--- ok
|
| return(true);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with universal parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiForce::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[])
|
| {
|
| return(Initialize(symbol,period,(int)params[0].integer_value,(ENUM_MA_METHOD)params[1].integer_value,
|
| (ENUM_APPLIED_VOLUME)params[2].integer_value));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with special parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiForce::Initialize(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int ma_period,const ENUM_MA_METHOD ma_method,const ENUM_APPLIED_VOLUME applied)
|
| {
|
| if(CreateBuffers(symbol,period,1))
|
| {
|
| //--- string of status of drawing
|
| m_name ="Force";
|
| m_status="("+symbol+","+PeriodDescription()+","+
|
| IntegerToString(ma_period)+","+MethodDescription(ma_method)+","+
|
| VolumeDescription(applied)+","+") H="+IntegerToString(m_handle);
|
| //--- save settings
|
| m_ma_period=ma_period;
|
| m_ma_method=ma_method;
|
| m_applied =applied;
|
| //--- create buffers
|
| ((CIndicatorBuffer*)At(0)).Name("MAIN_LINE");
|
| //--- ok
|
| return(true);
|
| }
|
| //--- error
|
| return(false);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to buffer of "Force Index" |
|
| //+------------------------------------------------------------------+
|
| double CiForce::Main(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(0);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Class CiMACD. |
|
| //| Purpose: Class of the "Moving Averages |
|
| //| Convergence-Divergence" indicator. |
|
| //| Derives from class CIndicator. |
|
| //+------------------------------------------------------------------+
|
| class CiMACD : public CIndicator
|
| {
|
| protected:
|
| int m_fast_ema_period;
|
| int m_slow_ema_period;
|
| int m_signal_period;
|
| int m_applied;
|
|
|
| public:
|
| CiMACD(void);
|
| ~CiMACD(void);
|
| //--- methods of access to protected data
|
| int FastEmaPeriod(void) const { return(m_fast_ema_period); }
|
| int SlowEmaPeriod(void) const { return(m_slow_ema_period); }
|
| int SignalPeriod(void) const { return(m_signal_period); }
|
| int Applied(void) const { return(m_applied); }
|
| //--- method of creation
|
| bool Create(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int fast_ema_period,const int slow_ema_period,
|
| const int signal_period,const int applied);
|
| //--- methods of access to indicator data
|
| double Main(const int index) const;
|
| double Signal(const int index) const;
|
| //--- method of identifying
|
| virtual int Type(void) const { return(IND_MACD); }
|
|
|
| protected:
|
| //--- methods of tuning
|
| virtual bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[]);
|
| bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int fast_ema_period,const int slow_ema_period,
|
| const int signal_period,const int applied);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor |
|
| //+------------------------------------------------------------------+
|
| CiMACD::CiMACD(void) : m_fast_ema_period(-1),
|
| m_slow_ema_period(-1),
|
| m_signal_period(-1),
|
| m_applied(-1)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CiMACD::~CiMACD(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create the "Moving Averages Convergence-Divergence" indicator |
|
| //+------------------------------------------------------------------+
|
| bool CiMACD::Create(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int fast_ema_period,const int slow_ema_period,
|
| const int signal_period,const int applied)
|
| {
|
| //--- check history
|
| if(!SetSymbolPeriod(symbol,period))
|
| return(false);
|
| //--- create
|
| m_handle=iMACD(symbol,period,fast_ema_period,slow_ema_period,signal_period,applied);
|
| //--- check result
|
| if(m_handle==INVALID_HANDLE)
|
| return(false);
|
| //--- indicator successfully created
|
| if(!Initialize(symbol,period,fast_ema_period,slow_ema_period,signal_period,applied))
|
| {
|
| //--- initialization failed
|
| IndicatorRelease(m_handle);
|
| m_handle=INVALID_HANDLE;
|
| return(false);
|
| }
|
| //--- ok
|
| return(true);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with universal parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiMACD::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[])
|
| {
|
| return(Initialize(symbol,period,(int)params[0].integer_value,(int)params[1].integer_value,
|
| (int)params[2].integer_value,(int)params[3].integer_value));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with special parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiMACD::Initialize(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int fast_ema_period,const int slow_ema_period,
|
| const int signal_period,const int applied)
|
| {
|
| if(CreateBuffers(symbol,period,2))
|
| {
|
| //--- string of status of drawing
|
| m_name ="MACD";
|
| m_status="("+symbol+","+PeriodDescription()+","+
|
| IntegerToString(fast_ema_period)+","+IntegerToString(slow_ema_period)+","+
|
| IntegerToString(signal_period)+","+PriceDescription(applied)+","+") H="+IntegerToString(m_handle);
|
| //--- save settings
|
| m_fast_ema_period=fast_ema_period;
|
| m_slow_ema_period=slow_ema_period;
|
| m_signal_period =signal_period;
|
| m_applied =applied;
|
| //--- create buffers
|
| ((CIndicatorBuffer*)At(0)).Name("MAIN_LINE");
|
| ((CIndicatorBuffer*)At(1)).Name("SIGNAL_LINE");
|
| //--- ok
|
| return(true);
|
| }
|
| //--- error
|
| return(false);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to Main buffer of "Moving Averages |
|
| //| Convergence-Divergence" |
|
| //+------------------------------------------------------------------+
|
| double CiMACD::Main(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(0);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to Signal buffer of "Moving Averages |
|
| //| Convergence-Divergence" |
|
| //+------------------------------------------------------------------+
|
| double CiMACD::Signal(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(1);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Class CiMomentum. |
|
| //| Purpose: Class of the "Momentum" indicator. |
|
| //| Derives from class CIndicator. |
|
| //+------------------------------------------------------------------+
|
| class CiMomentum : public CIndicator
|
| {
|
| protected:
|
| int m_ma_period;
|
| int m_applied;
|
|
|
| public:
|
| CiMomentum(void);
|
| ~CiMomentum(void);
|
| //--- methods of access to protected data
|
| int MaPeriod(void) const { return(m_ma_period); }
|
| int Applied(void) const { return(m_applied); }
|
| //--- method of creation
|
| bool Create(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period,const int applied);
|
| //--- methods of access to indicator data
|
| double Main(const int index) const;
|
| //--- method of identifying
|
| virtual int Type(void) const { return(IND_MOMENTUM); }
|
|
|
| protected:
|
| //--- methods of tuning
|
| virtual bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[]);
|
| bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period,const int applied);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor |
|
| //+------------------------------------------------------------------+
|
| CiMomentum::CiMomentum(void) : m_ma_period(-1),
|
| m_applied(-1)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CiMomentum::~CiMomentum(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create the "Momentum" indicator |
|
| //+------------------------------------------------------------------+
|
| bool CiMomentum::Create(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period,const int applied)
|
| {
|
| //--- check history
|
| if(!SetSymbolPeriod(symbol,period))
|
| return(false);
|
| //--- create
|
| m_handle=iMomentum(symbol,period,ma_period,applied);
|
| //--- check result
|
| if(m_handle==INVALID_HANDLE)
|
| return(false);
|
| //--- indicator successfully created
|
| if(!Initialize(symbol,period,ma_period,applied))
|
| {
|
| //--- initialization failed
|
| IndicatorRelease(m_handle);
|
| m_handle=INVALID_HANDLE;
|
| return(false);
|
| }
|
| //--- ok
|
| return(true);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with universal parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiMomentum::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[])
|
| {
|
| return(Initialize(symbol,period,(int)params[0].integer_value,(int)params[1].integer_value));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with special parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiMomentum::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period,const int applied)
|
| {
|
| if(CreateBuffers(symbol,period,1))
|
| {
|
| //--- string of status of drawing
|
| m_name="Momentum";
|
| m_status="("+symbol+","+PeriodDescription()+","+
|
| IntegerToString(ma_period)+","+PriceDescription(applied)+","+") H="+IntegerToString(m_handle);
|
| //--- save settings
|
| m_ma_period=ma_period;
|
| m_applied =applied;
|
| //--- create buffers
|
| ((CIndicatorBuffer*)At(0)).Name("MAIN_LINE");
|
| //--- ok
|
| return(true);
|
| }
|
| //--- error
|
| return(false);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to buffer of "Momentum" |
|
| //+------------------------------------------------------------------+
|
| double CiMomentum::Main(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(0);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Class CiOsMA. |
|
| //| Purpose: Class of the "Moving Average of Oscillator |
|
| //| (MACD histogram)" indicator. |
|
| //| Derives from class CIndicator. |
|
| //+------------------------------------------------------------------+
|
| class CiOsMA : public CIndicator
|
| {
|
| protected:
|
| int m_fast_ema_period;
|
| int m_slow_ema_period;
|
| int m_signal_period;
|
| int m_applied;
|
|
|
| public:
|
| CiOsMA(void);
|
| ~CiOsMA(void);
|
| //--- methods of access to protected data
|
| int FastEmaPeriod(void) const { return(m_fast_ema_period); }
|
| int SlowEmaPeriod(void) const { return(m_slow_ema_period); }
|
| int SignalPeriod(void) const { return(m_signal_period); }
|
| int Applied(void) const { return(m_applied); }
|
| //--- method of creation
|
| bool Create(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int fast_ema_period,const int slow_ema_period,
|
| const int signal_period,const int applied);
|
| //--- methods of access to indicator data
|
| double Main(const int index) const;
|
| //--- method of identifying
|
| virtual int Type(void) const { return(IND_OSMA); }
|
|
|
| protected:
|
| //--- methods of tuning
|
| virtual bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[]);
|
| bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int fast_ema_period,const int slow_ema_period,
|
| const int signal_period,const int applied);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor |
|
| //+------------------------------------------------------------------+
|
| CiOsMA::CiOsMA(void) : m_fast_ema_period(-1),
|
| m_slow_ema_period(-1),
|
| m_signal_period(-1),
|
| m_applied(-1)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CiOsMA::~CiOsMA(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create indicator "Moving Average of Oscillator |
|
| //| (MACD histogram)" |
|
| //+------------------------------------------------------------------+
|
| bool CiOsMA::Create(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int fast_ema_period,const int slow_ema_period,
|
| const int signal_period,const int applied)
|
| {
|
| //--- check history
|
| if(!SetSymbolPeriod(symbol,period))
|
| return(false);
|
| //--- create
|
| m_handle=iOsMA(symbol,period,fast_ema_period,slow_ema_period,signal_period,applied);
|
| //--- check result
|
| if(m_handle==INVALID_HANDLE)
|
| return(false);
|
| //--- indicator successfully created
|
| if(!Initialize(symbol,period,fast_ema_period,slow_ema_period,signal_period,applied))
|
| {
|
| //--- initialization failed
|
| IndicatorRelease(m_handle);
|
| m_handle=INVALID_HANDLE;
|
| return(false);
|
| }
|
| //--- ok
|
| return(true);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with universal parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiOsMA::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[])
|
| {
|
| return(Initialize(symbol,period,(int)params[0].integer_value,(int)params[1].integer_value,
|
| (int)params[2].integer_value,(int)params[3].integer_value));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with special parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiOsMA::Initialize(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int fast_ema_period,const int slow_ema_period,
|
| const int signal_period,const int applied)
|
| {
|
| if(CreateBuffers(symbol,period,1))
|
| {
|
| //--- string of status of drawing
|
| m_name ="OsMA";
|
| m_status="("+symbol+","+PeriodDescription()+","+
|
| IntegerToString(fast_ema_period)+","+IntegerToString(slow_ema_period)+","+
|
| IntegerToString(signal_period)+","+PriceDescription(applied)+","+") H="+IntegerToString(m_handle);
|
| //--- save settings
|
| m_fast_ema_period=fast_ema_period;
|
| m_slow_ema_period=slow_ema_period;
|
| m_signal_period =signal_period;
|
| m_applied =applied;
|
| //--- create buffers
|
| ((CIndicatorBuffer*)At(0)).Name("MAIN_LINE");
|
| //--- ok
|
| return(true);
|
| }
|
| //--- error
|
| return(false);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to buffer of "Moving Average of Oscillator |
|
| //| (MACD histogram)" |
|
| //+------------------------------------------------------------------+
|
| double CiOsMA::Main(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(0);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Class CiRSI. |
|
| //| Purpose: Class of the "Relative Strength Index" indicator. |
|
| //| Derives from class CIndicator. |
|
| //+------------------------------------------------------------------+
|
| class CiRSI : public CIndicator
|
| {
|
| protected:
|
| int m_ma_period;
|
| int m_applied;
|
|
|
| public:
|
| CiRSI(void);
|
| ~CiRSI(void);
|
| //--- methods of access to protected data
|
| int MaPeriod(void) const { return(m_ma_period); }
|
| int Applied(void) const { return(m_applied); }
|
| //--- method of creation
|
| bool Create(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period,const int applied);
|
| //--- methods of access to indicator data
|
| double Main(const int index) const;
|
| //--- method of identifying
|
| virtual int Type(void) const { return(IND_RSI); }
|
|
|
| protected:
|
| //--- methods of tuning
|
| virtual bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[]);
|
| bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period,const int applied);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor |
|
| //+------------------------------------------------------------------+
|
| CiRSI::CiRSI(void) : m_ma_period(-1),
|
| m_applied(-1)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CiRSI::~CiRSI(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create indicator "Relative Strength Index" |
|
| //+------------------------------------------------------------------+
|
| bool CiRSI::Create(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period,const int applied)
|
| {
|
| //--- check history
|
| if(!SetSymbolPeriod(symbol,period))
|
| return(false);
|
| //--- create
|
| m_handle=iRSI(symbol,period,ma_period,applied);
|
| //--- check result
|
| if(m_handle==INVALID_HANDLE)
|
| return(false);
|
| //--- indicator successfully created
|
| if(!Initialize(symbol,period,ma_period,applied))
|
| {
|
| //--- initialization failed
|
| IndicatorRelease(m_handle);
|
| m_handle=INVALID_HANDLE;
|
| return(false);
|
| }
|
| //--- ok
|
| return(true);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with universal parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiRSI::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[])
|
| {
|
| return(Initialize(symbol,period,(int)params[0].integer_value,(int)params[1].integer_value));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with special parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiRSI::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period,const int applied)
|
| {
|
| if(CreateBuffers(symbol,period,1))
|
| {
|
| //--- string of status of drawing
|
| m_name ="RSI";
|
| m_status="("+symbol+","+PeriodDescription()+","+
|
| IntegerToString(ma_period)+","+PriceDescription(applied)+","+") H="+IntegerToString(m_handle);
|
| //--- save settings
|
| m_ma_period=ma_period;
|
| m_applied =applied;
|
| //--- create buffers
|
| ((CIndicatorBuffer*)At(0)).Name("MAIN_LINE");
|
| //--- ok
|
| return(true);
|
| }
|
| //--- error
|
| return(false);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to buffer of "Relative Strength Index" |
|
| //+------------------------------------------------------------------+
|
| double CiRSI::Main(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(0);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Class CiRVI. |
|
| //| Purpose: Class of the "Relative Vigor Index" indicator. |
|
| //| Derives from class CIndicator. |
|
| //+------------------------------------------------------------------+
|
| class CiRVI : public CIndicator
|
| {
|
| protected:
|
| int m_ma_period;
|
|
|
| public:
|
| CiRVI(void);
|
| ~CiRVI(void);
|
| //--- methods of access to protected data
|
| int MaPeriod(void) const { return(m_ma_period); }
|
| //--- method of creation
|
| bool Create(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period);
|
| //--- methods of access to indicator data
|
| double Main(const int index) const;
|
| double Signal(const int index) const;
|
| //--- method of identifying
|
| virtual int Type(void) const { return(IND_RVI); }
|
|
|
| protected:
|
| //--- methods of tuning
|
| virtual bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[]);
|
| bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor |
|
| //+------------------------------------------------------------------+
|
| CiRVI::CiRVI(void) : m_ma_period(-1)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CiRVI::~CiRVI(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create the "Relative Vigor Index" indicator |
|
| //+------------------------------------------------------------------+
|
| bool CiRVI::Create(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period)
|
| {
|
| //--- check history
|
| if(!SetSymbolPeriod(symbol,period))
|
| return(false);
|
| //--- create
|
| m_handle=iRVI(symbol,period,ma_period);
|
| //--- check result
|
| if(m_handle==INVALID_HANDLE)
|
| return(false);
|
| //--- indicator successfully created
|
| if(!Initialize(symbol,period,ma_period))
|
| {
|
| //--- initialization failed
|
| IndicatorRelease(m_handle);
|
| m_handle=INVALID_HANDLE;
|
| return(false);
|
| }
|
| //--- ok
|
| return(true);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with universal parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiRVI::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[])
|
| {
|
| return(Initialize(symbol,period,(int)params[0].integer_value));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with special parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiRVI::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period)
|
| {
|
| if(CreateBuffers(symbol,period,2))
|
| {
|
| //--- string of status of drawing
|
| m_name ="RVI";
|
| m_status="("+symbol+","+PeriodDescription()+","+
|
| IntegerToString(ma_period)+") H="+IntegerToString(m_handle);
|
| //--- save settings
|
| m_ma_period=ma_period;
|
| //--- create buffers
|
| ((CIndicatorBuffer*)At(0)).Name("MAIN_LINE");
|
| ((CIndicatorBuffer*)At(1)).Name("SIGNAL_LINE");
|
| //--- ok
|
| return(true);
|
| }
|
| //--- error
|
| return(false);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to Main buffer of "Relative Vigor Index" |
|
| //+------------------------------------------------------------------+
|
| double CiRVI::Main(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(0);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to Signal buffer of "Relative Vigor Index" |
|
| //+------------------------------------------------------------------+
|
| double CiRVI::Signal(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(1);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Class CiStochastic. |
|
| //| Purpose: Class of the "Stochastic Oscillator" indicator. |
|
| //| Derives from class CIndicator. |
|
| //+------------------------------------------------------------------+
|
| class CiStochastic : public CIndicator
|
| {
|
| protected:
|
| int m_Kperiod;
|
| int m_Dperiod;
|
| int m_slowing;
|
| ENUM_MA_METHOD m_ma_method;
|
| ENUM_STO_PRICE m_price_field;
|
|
|
| public:
|
| CiStochastic(void);
|
| ~CiStochastic(void);
|
| //--- methods of access to protected data
|
| int Kperiod(void) const { return(m_Kperiod); }
|
| int Dperiod(void) const { return(m_Dperiod); }
|
| int Slowing(void) const { return(m_slowing); }
|
| ENUM_MA_METHOD MaMethod(void) const { return(m_ma_method); }
|
| ENUM_STO_PRICE PriceField(void) const { return(m_price_field); }
|
| //--- method create
|
| bool Create(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int Kperiod,const int Dperiod,const int slowing,
|
| const ENUM_MA_METHOD ma_method,const ENUM_STO_PRICE price_field);
|
| //--- methods of access to indicator data
|
| double Main(const int index) const;
|
| double Signal(const int index) const;
|
| //--- method of identifying
|
| virtual int Type(void) const { return(IND_STOCHASTIC); }
|
|
|
| protected:
|
| //--- methods of tuning
|
| virtual bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[]);
|
| bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int Kperiod,const int Dperiod,const int slowing,
|
| const ENUM_MA_METHOD ma_method,const ENUM_STO_PRICE price_field);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor |
|
| //+------------------------------------------------------------------+
|
| CiStochastic::CiStochastic(void) : m_Kperiod(-1),
|
| m_Dperiod(-1),
|
| m_slowing(-1),
|
| m_ma_method(WRONG_VALUE),
|
| m_price_field(WRONG_VALUE)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CiStochastic::~CiStochastic(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create the "Stochastic Oscillator" indicator |
|
| //+------------------------------------------------------------------+
|
| bool CiStochastic::Create(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int Kperiod,const int Dperiod,const int slowing,
|
| const ENUM_MA_METHOD ma_method,const ENUM_STO_PRICE price_field)
|
| {
|
| //--- check history
|
| if(!SetSymbolPeriod(symbol,period))
|
| return(false);
|
| //--- create
|
| m_handle=iStochastic(symbol,period,Kperiod,Dperiod,slowing,ma_method,price_field);
|
| //--- check result
|
| if(m_handle==INVALID_HANDLE)
|
| return(false);
|
| //--- indicator successfully created
|
| if(!Initialize(symbol,period,Kperiod,Dperiod,slowing,ma_method,price_field))
|
| {
|
| //--- initialization failed
|
| IndicatorRelease(m_handle);
|
| m_handle=INVALID_HANDLE;
|
| return(false);
|
| }
|
| //--- ok
|
| return(true);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with universal parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiStochastic::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[])
|
| {
|
| return(Initialize(symbol,period,(int)params[0].integer_value,(int)params[1].integer_value,
|
| (int)params[2].integer_value,(ENUM_MA_METHOD)params[3].integer_value,
|
| (ENUM_STO_PRICE)params[4].integer_value));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with special parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiStochastic::Initialize(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int Kperiod,const int Dperiod,const int slowing,
|
| const ENUM_MA_METHOD ma_method,const ENUM_STO_PRICE price_field)
|
| {
|
| if(CreateBuffers(symbol,period,2))
|
| {
|
| //--- string of status of drawing
|
| m_name ="Stochastic";
|
| m_status="("+symbol+","+PeriodDescription()+","+
|
| IntegerToString(Kperiod)+","+IntegerToString(Dperiod)+","+IntegerToString(slowing)+","+
|
| MethodDescription(ma_method)+","+IntegerToString(price_field)+") H="+IntegerToString(m_handle);
|
| //--- save settings
|
| m_Kperiod =Kperiod;
|
| m_Dperiod =Dperiod;
|
| m_slowing =slowing;
|
| m_ma_method =ma_method;
|
| m_price_field=price_field;
|
| //--- create buffers
|
| ((CIndicatorBuffer*)At(0)).Name("MAIN_LINE");
|
| ((CIndicatorBuffer*)At(1)).Name("SIGNAL_LINE");
|
| //--- ok
|
| return(true);
|
| }
|
| //--- error
|
| return(false);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to Main buffer of "Stochastic Oscillator" |
|
| //+------------------------------------------------------------------+
|
| double CiStochastic::Main(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(0);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to Signal buffer of "Stochastic Oscillator" |
|
| //+------------------------------------------------------------------+
|
| double CiStochastic::Signal(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(1);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Class CiWPR. |
|
| //| Purpose: Class of the "Williams' Percent Range" indicator. |
|
| //| Derives from class CIndicator. |
|
| //+------------------------------------------------------------------+
|
| class CiWPR : public CIndicator
|
| {
|
| protected:
|
| int m_calc_period;
|
|
|
| public:
|
| CiWPR(void);
|
| ~CiWPR(void);
|
| //--- methods of access to protected data
|
| int CalcPeriod(void) const { return(m_calc_period); }
|
| //--- method of creation
|
| bool Create(const string symbol,const ENUM_TIMEFRAMES period,const int calc_period);
|
| //--- methods of access to indicator data
|
| double Main(const int index) const;
|
| //--- method of identifying
|
| virtual int Type(void) const { return(IND_WPR); }
|
|
|
| protected:
|
| //--- methods of tuning
|
| virtual bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[]);
|
| bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int calc_period);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor |
|
| //+------------------------------------------------------------------+
|
| CiWPR::CiWPR(void) : m_calc_period(-1)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CiWPR::~CiWPR(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create the "Williams' Percent Range" indicator |
|
| //+------------------------------------------------------------------+
|
| bool CiWPR::Create(const string symbol,const ENUM_TIMEFRAMES period,const int calc_period)
|
| {
|
| //--- check history
|
| if(!SetSymbolPeriod(symbol,period))
|
| return(false);
|
| //--- create
|
| m_handle=iWPR(symbol,period,calc_period);
|
| //--- check result
|
| if(m_handle==INVALID_HANDLE)
|
| return(false);
|
| //--- indicator successfully created
|
| if(!Initialize(symbol,period,calc_period))
|
| {
|
| //--- initialization failed
|
| IndicatorRelease(m_handle);
|
| m_handle=INVALID_HANDLE;
|
| return(false);
|
| }
|
| //--- ok
|
| return(true);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with universal parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiWPR::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[])
|
| {
|
| return(Initialize(symbol,period,(int)params[0].integer_value));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize indicator with the cpecial parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiWPR::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int calc_period)
|
| {
|
| if(CreateBuffers(symbol,period,1))
|
| {
|
| //--- string of status of drawing
|
| m_name ="WPR";
|
| m_status="("+symbol+","+PeriodDescription()+","+
|
| IntegerToString(calc_period)+") H="+IntegerToString(m_handle);
|
| //--- save settings
|
| m_calc_period=calc_period;
|
| //--- create buffers
|
| ((CIndicatorBuffer*)At(0)).Name("MAIN_LINE");
|
| //--- ok
|
| return(true);
|
| }
|
| //--- error
|
| return(false);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to buffer of "Williams' Percent Range" |
|
| //+------------------------------------------------------------------+
|
| double CiWPR::Main(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(0);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Class CiTriX. |
|
| //| Purpose: Class of the "Triple Exponential Moving Averages |
|
| //| Oscillator" indicator. |
|
| //| Derives from class CIndicator. |
|
| //+------------------------------------------------------------------+
|
| class CiTriX : public CIndicator
|
| {
|
| protected:
|
| int m_ma_period;
|
| int m_applied;
|
|
|
| public:
|
| CiTriX(void);
|
| ~CiTriX(void);
|
| //--- methods of access to protected data
|
| int MaPeriod(void) const { return(m_ma_period); }
|
| int Applied(void) const { return(m_applied); }
|
| //--- method of creation
|
| bool Create(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period,const int applied);
|
| //--- methods of access to indicator data
|
| double Main(const int index) const;
|
| //--- method of identifying
|
| virtual int Type(void) const { return(IND_TRIX); }
|
|
|
| protected:
|
| //--- methods of tuning
|
| virtual bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[]);
|
| bool Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period,const int applied);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor |
|
| //+------------------------------------------------------------------+
|
| CiTriX::CiTriX(void) : m_ma_period(-1),
|
| m_applied(-1)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CiTriX::~CiTriX(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create the "Triple Exponential Moving Averages |
|
| //| Oscillator" indicator |
|
| //+------------------------------------------------------------------+
|
| bool CiTriX::Create(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period,const int applied)
|
| {
|
| //--- check history
|
| if(!SetSymbolPeriod(symbol,period)) return(false);
|
| //--- create
|
| m_handle=iTriX(symbol,period,ma_period,applied);
|
| //--- check result
|
| if(m_handle==INVALID_HANDLE)
|
| return(false);
|
| //--- indicator successfully created
|
| if(!Initialize(symbol,period,ma_period,applied))
|
| {
|
| //--- initialization failed
|
| IndicatorRelease(m_handle);
|
| m_handle=INVALID_HANDLE;
|
| return(false);
|
| }
|
| //--- ok
|
| return(true);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with universal parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiTriX::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[])
|
| {
|
| return(Initialize(symbol,period,(int)params[0].integer_value,(int)params[1].integer_value));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create the "Triple Exponential Moving Averages |
|
| //| Oscillator" indicator |
|
| //+------------------------------------------------------------------+
|
| bool CiTriX::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int ma_period,const int applied)
|
| {
|
| if(CreateBuffers(symbol,period,1))
|
| {
|
| //--- string of status of drawing
|
| m_name ="TriX";
|
| m_status="("+symbol+","+PeriodDescription()+","+
|
| IntegerToString(ma_period)+","+PriceDescription(applied)+") H="+IntegerToString(m_handle);
|
| //--- save settings
|
| m_ma_period=ma_period;
|
| m_applied =applied;
|
| //--- create buffers
|
| ((CIndicatorBuffer*)At(0)).Name("MAIN_LINE");
|
| //--- ok
|
| return(true);
|
| }
|
| //--- error
|
| return(false);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to buffer of "Triple Exponential Moving Averages |
|
| //| Oscillator" |
|
| //+------------------------------------------------------------------+
|
| double CiTriX::Main(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(0);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|