| //+------------------------------------------------------------------+
|
| //| BillWilliams.mqh |
|
| //| Copyright 2000-2025, MetaQuotes Ltd. |
|
| //| https://www.mql5.com |
|
| //+------------------------------------------------------------------+
|
| #include "Indicator.mqh"
|
| //+------------------------------------------------------------------+
|
| //| Class CiAC. |
|
| //| Purpose: Class of the "Accelerator Oscillator" indicator. |
|
| //| Derives from class CIndicator. |
|
| //+------------------------------------------------------------------+
|
| class CiAC : public CIndicator
|
| {
|
| public:
|
| CiAC(void);
|
| ~CiAC(void);
|
| //--- method of creating
|
| bool Create(const string symbol,const ENUM_TIMEFRAMES period);
|
| //--- methods of access to data of indicator
|
| double Main(const int index) const;
|
| //--- method of identifying
|
| virtual int Type(void) const { return(IND_AC); }
|
|
|
| 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);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor |
|
| //+------------------------------------------------------------------+
|
| CiAC::CiAC(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CiAC::~CiAC(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create the "Accelerator Oscillator" indicator |
|
| //+------------------------------------------------------------------+
|
| bool CiAC::Create(const string symbol,const ENUM_TIMEFRAMES period)
|
| {
|
| //--- check history
|
| if(!SetSymbolPeriod(symbol,period))
|
| return(false);
|
| //--- create
|
| m_handle=iAC(symbol,period);
|
| //--- check result
|
| if(m_handle==INVALID_HANDLE)
|
| return(false);
|
| //--- idicator successfully created
|
| if(!Initialize(symbol,period))
|
| {
|
| //--- initialization failed
|
| IndicatorRelease(m_handle);
|
| m_handle=INVALID_HANDLE;
|
| return(false);
|
| }
|
| //--- ok
|
| return(true);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with universal parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiAC::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[])
|
| {
|
| return(Initialize(symbol,period));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with special parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiAC::Initialize(const string symbol,const ENUM_TIMEFRAMES period)
|
| {
|
| if(CreateBuffers(symbol,period,1))
|
| {
|
| //--- string of status of drawing
|
| m_name ="AC";
|
| m_status="("+symbol+","+PeriodDescription()+") H="+IntegerToString(m_handle);
|
| //--- create buffers
|
| ((CIndicatorBuffer*)At(0)).Name("MAIN_LINE");
|
| //--- ok
|
| return(true);
|
| }
|
| //--- error
|
| return(false);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to the buffer of "Accelerator Oscillator" |
|
| //+------------------------------------------------------------------+
|
| double CiAC::Main(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(0);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Class CiAlligator. |
|
| //| Purpose: Class of the "Alligator" indicator. |
|
| //| Derives from class CIndicator. |
|
| //+------------------------------------------------------------------+
|
| class CiAlligator : public CIndicator
|
| {
|
| protected:
|
| int m_jaw_period;
|
| int m_jaw_shift;
|
| int m_teeth_period;
|
| int m_teeth_shift;
|
| int m_lips_period;
|
| int m_lips_shift;
|
| ENUM_MA_METHOD m_ma_method;
|
| int m_applied;
|
|
|
| public:
|
| CiAlligator(void);
|
| ~CiAlligator(void);
|
| //--- methods of access to protected data
|
| int JawPeriod(void) const { return(m_jaw_period); }
|
| int JawShift(void) const { return(m_jaw_shift); }
|
| int TeethPeriod(void) const { return(m_teeth_period); }
|
| int TeethShift(void) const { return(m_teeth_shift); }
|
| int LipsPeriod(void) const { return(m_lips_period); }
|
| int LipsShift(void) const { return(m_lips_shift); }
|
| ENUM_MA_METHOD MaMethod(void) const { return(m_ma_method); }
|
| int Applied(void) const { return(m_applied); }
|
| //--- method of creating
|
| bool Create(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int jaw_period,const int jaw_shift,
|
| const int teeth_period,const int teeth_shift,
|
| const int lips_period,const int lips_shift,
|
| const ENUM_MA_METHOD ma_method,const int applied);
|
| //--- methods of access to data of indicator
|
| double Jaw(const int index) const;
|
| double Teeth(const int index) const;
|
| double Lips(const int index) const;
|
| //--- method of identifying
|
| virtual int Type(void) const { return(IND_ALLIGATOR); }
|
|
|
| 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 jaw_period,const int jaw_shift,
|
| const int teeth_period,const int teeth_shift,
|
| const int lips_period,const int lips_shift,
|
| const ENUM_MA_METHOD ma_method,const int applied);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor |
|
| //+------------------------------------------------------------------+
|
| CiAlligator::CiAlligator(void) : m_jaw_period(-1),
|
| m_jaw_shift(-1),
|
| m_teeth_period(-1),
|
| m_teeth_shift(-1),
|
| m_lips_period(-1),
|
| m_lips_shift(-1),
|
| m_ma_method(WRONG_VALUE),
|
| m_applied(-1)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CiAlligator::~CiAlligator(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create the "Alligator" indicator |
|
| //+------------------------------------------------------------------+
|
| bool CiAlligator::Create(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int jaw_period,const int jaw_shift,
|
| const int teeth_period,const int teeth_shift,
|
| const int lips_period,const int lips_shift,
|
| const ENUM_MA_METHOD ma_method,const int applied)
|
| {
|
| //--- check history
|
| if(!SetSymbolPeriod(symbol,period))
|
| return(false);
|
| //--- create
|
| m_handle=iAlligator(symbol,period,jaw_period,jaw_shift,teeth_period,teeth_shift,lips_period,lips_shift,ma_method,applied);
|
| //--- check result
|
| if(m_handle==INVALID_HANDLE)
|
| return(false);
|
| //--- idicator successfully created
|
| if(!Initialize(symbol,period,jaw_period,jaw_shift,teeth_period,teeth_shift,lips_period,lips_shift,ma_method,applied))
|
| {
|
| //--- initialization failed
|
| IndicatorRelease(m_handle);
|
| m_handle=INVALID_HANDLE;
|
| return(false);
|
| }
|
| //--- ok
|
| return(true);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with universal parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiAlligator::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,
|
| (int)params[4].integer_value,(int)params[5].integer_value,
|
| (ENUM_MA_METHOD)params[6].integer_value,(int)params[7].integer_value));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with special parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiAlligator::Initialize(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int jaw_period,const int jaw_shift,
|
| const int teeth_period,const int teeth_shift,
|
| const int lips_period,const int lips_shift,
|
| const ENUM_MA_METHOD ma_method,const int applied)
|
| {
|
| if(CreateBuffers(symbol,period,3))
|
| {
|
| //--- string of status of drawing
|
| m_name ="Alligator";
|
| m_status="("+symbol+","+PeriodDescription()+","+
|
| IntegerToString(jaw_period)+","+IntegerToString(jaw_shift)+","+
|
| IntegerToString(teeth_period)+","+IntegerToString(teeth_shift)+","+
|
| IntegerToString(lips_period)+","+IntegerToString(lips_shift)+","+
|
| MethodDescription(ma_method)+","+PriceDescription(applied)+") H="+IntegerToString(m_handle);
|
| //--- save settings
|
| m_jaw_period =jaw_period;
|
| m_jaw_shift =jaw_shift;
|
| m_teeth_period=teeth_period;
|
| m_teeth_shift =teeth_shift;
|
| m_lips_period =lips_period;
|
| m_lips_shift =lips_shift;
|
| m_ma_method =ma_method;
|
| m_applied =applied;
|
| //--- create buffers
|
| ((CIndicatorBuffer*)At(0)).Name("JAW_LINE");
|
| ((CIndicatorBuffer*)At(0)).Offset(jaw_shift);
|
| ((CIndicatorBuffer*)At(1)).Name("TEETH_LINE");
|
| ((CIndicatorBuffer*)At(1)).Offset(teeth_shift);
|
| ((CIndicatorBuffer*)At(2)).Name("LIPS_LINE");
|
| ((CIndicatorBuffer*)At(2)).Offset(lips_shift);
|
| //--- ok
|
| return(true);
|
| }
|
| //--- error
|
| return(false);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to Jaw buffer of "Alligator" |
|
| //+------------------------------------------------------------------+
|
| double CiAlligator::Jaw(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(0);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to Teeth buffer of "Alligator" |
|
| //+------------------------------------------------------------------+
|
| double CiAlligator::Teeth(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(1);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to Lips buffer of "Alligator" |
|
| //+------------------------------------------------------------------+
|
| double CiAlligator::Lips(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(2);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Class CiAO. |
|
| //| Purpose: Class of the "Awesome Oscillator" indicator. |
|
| //| Derives from class CIndicator. |
|
| //+------------------------------------------------------------------+
|
| class CiAO : public CIndicator
|
| {
|
| public:
|
| CiAO(void);
|
| ~CiAO(void);
|
| //--- method of creating
|
| bool Create(const string symbol,const ENUM_TIMEFRAMES period);
|
| //--- methods of access to data of indicator
|
| double Main(const int index) const;
|
| //--- method of identifying
|
| virtual int Type(void) const { return(IND_AO); }
|
|
|
| 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);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor |
|
| //+------------------------------------------------------------------+
|
| CiAO::CiAO(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CiAO::~CiAO(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create the "Awesome Oscillator" indicator |
|
| //+------------------------------------------------------------------+
|
| bool CiAO::Create(const string symbol,const ENUM_TIMEFRAMES period)
|
| {
|
| //--- check history
|
| if(!SetSymbolPeriod(symbol,period))
|
| return(false);
|
| //--- create
|
| m_handle=iAO(symbol,period);
|
| //--- check result
|
| if(m_handle==INVALID_HANDLE)
|
| return(false);
|
| //--- indicator successfullly created
|
| if(!Initialize(symbol,period))
|
| {
|
| //--- initialization failed
|
| IndicatorRelease(m_handle);
|
| m_handle=INVALID_HANDLE;
|
| return(false);
|
| }
|
| //--- ok
|
| return(true);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with universal parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiAO::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[])
|
| {
|
| return(Initialize(symbol,period));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create the "Awesome Oscillator" indicator |
|
| //+------------------------------------------------------------------+
|
| bool CiAO::Initialize(const string symbol,const ENUM_TIMEFRAMES period)
|
| {
|
| if(CreateBuffers(symbol,period,1))
|
| {
|
| //--- string of status of drawing
|
| m_status="AO("+symbol+","+PeriodDescription()+") H="+IntegerToString(m_handle);
|
| //--- create buffers
|
| ((CIndicatorBuffer*)At(0)).Name("MAIN_LINE");
|
| //--- ok
|
| return(true);
|
| }
|
| //--- error
|
| return(false);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to buffer of "Awesome Oscillator" |
|
| //+------------------------------------------------------------------+
|
| double CiAO::Main(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(0);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Class CiFractals. |
|
| //| Purpose: Class of the "Fractals" indicator. |
|
| //| Derives from class CIndicator. |
|
| //+------------------------------------------------------------------+
|
| class CiFractals : public CIndicator
|
| {
|
| public:
|
| CiFractals(void);
|
| ~CiFractals(void);
|
| //--- method of creating
|
| bool Create(const string symbol,const ENUM_TIMEFRAMES period);
|
| //--- methods of access to indicator data
|
| double Upper(const int index) const;
|
| double Lower(const int index) const;
|
| //--- method of identifying
|
| virtual int Type(void) const { return(IND_FRACTALS); }
|
|
|
| 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);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor |
|
| //+------------------------------------------------------------------+
|
| CiFractals::CiFractals(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CiFractals::~CiFractals(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create the "Fractals" indicator |
|
| //+------------------------------------------------------------------+
|
| bool CiFractals::Create(const string symbol,const ENUM_TIMEFRAMES period)
|
| {
|
| //--- check history
|
| if(!SetSymbolPeriod(symbol,period))
|
| return(false);
|
| //--- create
|
| m_handle=iFractals(symbol,period);
|
| //--- check result
|
| if(m_handle==INVALID_HANDLE)
|
| return(false);
|
| //--- idicator successfully created
|
| if(!Initialize(symbol,period))
|
| {
|
| //--- initialization failed
|
| IndicatorRelease(m_handle);
|
| m_handle=INVALID_HANDLE;
|
| return(false);
|
| }
|
| //--- ok
|
| return(true);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with universal parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiFractals::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[])
|
| {
|
| return(Initialize(symbol,period));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with special parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiFractals::Initialize(const string symbol,const ENUM_TIMEFRAMES period)
|
| {
|
| if(CreateBuffers(symbol,period,2))
|
| {
|
| //--- string of status of drawing
|
| m_name ="Fractals";
|
| m_status="("+symbol+","+PeriodDescription()+") H="+IntegerToString(m_handle);
|
| //--- create buffers
|
| ((CIndicatorBuffer*)At(0)).Name("UPPER_LINE");
|
| ((CIndicatorBuffer*)At(1)).Name("LOWER_LINE");
|
| //--- ok
|
| return(true);
|
| }
|
| //--- error
|
| return(false);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to Upper buffer of "Fractals" |
|
| //+------------------------------------------------------------------+
|
| double CiFractals::Upper(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(0);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to Lower buffer of "Fractals" |
|
| //+------------------------------------------------------------------+
|
| double CiFractals::Lower(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(1);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Class CiGator. |
|
| //| Purpose: Class of the "Gator oscillator" indicator. |
|
| //| Derives from class CIndicator. |
|
| //+------------------------------------------------------------------+
|
| class CiGator : public CIndicator
|
| {
|
| protected:
|
| int m_jaw_period;
|
| int m_jaw_shift;
|
| int m_teeth_period;
|
| int m_teeth_shift;
|
| int m_lips_period;
|
| int m_lips_shift;
|
| ENUM_MA_METHOD m_ma_method;
|
| int m_applied;
|
|
|
| public:
|
| CiGator(void);
|
| ~CiGator(void);
|
| //--- methods of access to protected data
|
| int JawPeriod(void) const { return(m_jaw_period); }
|
| int JawShift(void) const { return(m_jaw_shift); }
|
| int TeethPeriod(void) const { return(m_teeth_period); }
|
| int TeethShift(void) const { return(m_teeth_shift); }
|
| int LipsPeriod(void) const { return(m_lips_period); }
|
| int LipsShift(void) const { return(m_lips_shift); }
|
| ENUM_MA_METHOD MaMethod(void) const { return(m_ma_method); }
|
| int Applied(void) const { return(m_applied); }
|
| //--- method of creating
|
| bool Create(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int jaw_period,const int jaw_shift,
|
| const int teeth_period,const int teeth_shift,
|
| const int lips_period,const int lips_shift,
|
| const ENUM_MA_METHOD ma_method,const int applied);
|
| //--- methods of access to data of indicator
|
| double Upper(const int index) const;
|
| double Lower(const int index) const;
|
| //--- method of identifying
|
| virtual int Type(void) const { return(IND_GATOR); }
|
|
|
| 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 jaw_period,const int jaw_shift,
|
| const int teeth_period,const int teeth_shift,
|
| const int lips_period,const int lips_shift,
|
| const ENUM_MA_METHOD ma_method,const int applied);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor |
|
| //+------------------------------------------------------------------+
|
| CiGator::CiGator(void) : m_jaw_period(-1),
|
| m_jaw_shift(-1),
|
| m_teeth_period(-1),
|
| m_teeth_shift(-1),
|
| m_lips_period(-1),
|
| m_lips_shift(-1),
|
| m_ma_method(WRONG_VALUE),
|
| m_applied(-1)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CiGator::~CiGator(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create indicator "Gator oscillator" |
|
| //+------------------------------------------------------------------+
|
| bool CiGator::Create(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int jaw_period,const int jaw_shift,
|
| const int teeth_period,const int teeth_shift,
|
| const int lips_period,const int lips_shift,
|
| const ENUM_MA_METHOD ma_method,const int applied)
|
| {
|
| //--- check history
|
| if(!SetSymbolPeriod(symbol,period))
|
| return(false);
|
| //--- create
|
| m_handle=iGator(symbol,period,jaw_period,jaw_shift,teeth_period,teeth_shift,lips_period,lips_shift,ma_method,applied);
|
| //--- check result
|
| if(m_handle==INVALID_HANDLE)
|
| return(false);
|
| //--- idicator successfully created
|
| if(!Initialize(symbol,period,jaw_period,jaw_shift,teeth_period,teeth_shift,lips_period,lips_shift,ma_method,applied))
|
| {
|
| //--- initialization failed
|
| IndicatorRelease(m_handle);
|
| m_handle=INVALID_HANDLE;
|
| return(false);
|
| }
|
| //--- ok
|
| return(true);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with universal parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiGator::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,
|
| (int)params[4].integer_value,(int)params[5].integer_value,
|
| (ENUM_MA_METHOD)params[6].integer_value,(int)params[7].integer_value));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with special parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiGator::Initialize(const string symbol,const ENUM_TIMEFRAMES period,
|
| const int jaw_period,const int jaw_shift,
|
| const int teeth_period,const int teeth_shift,
|
| const int lips_period,const int lips_shift,
|
| const ENUM_MA_METHOD ma_method,const int applied)
|
| {
|
| if(CreateBuffers(symbol,period,2))
|
| {
|
| //--- string of status drawing
|
| m_name ="Gator";
|
| m_status="("+symbol+","+PeriodDescription()+","+
|
| IntegerToString(jaw_period)+","+IntegerToString(jaw_shift)+","+
|
| IntegerToString(teeth_period)+","+IntegerToString(teeth_shift)+","+
|
| IntegerToString(lips_period)+","+IntegerToString(lips_shift)+","+
|
| MethodDescription(ma_method)+","+PriceDescription(applied)+") H="+IntegerToString(m_handle);
|
| //--- save settings
|
| m_jaw_period =jaw_period;
|
| m_jaw_shift =jaw_shift;
|
| m_teeth_period=teeth_period;
|
| m_teeth_shift =teeth_shift;
|
| m_lips_period =lips_period;
|
| m_lips_shift =lips_shift;
|
| m_ma_method =ma_method;
|
| m_applied =applied;
|
| //--- create buffers
|
| ((CIndicatorBuffer*)At(0)).Name("UPPER_LINE");
|
| ((CIndicatorBuffer*)At(0)).Offset(teeth_shift);
|
| ((CIndicatorBuffer*)At(1)).Name("LOWER_LINE");
|
| ((CIndicatorBuffer*)At(1)).Offset(lips_shift);
|
| //--- ok
|
| return(true);
|
| }
|
| //--- error
|
| return(false);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to Upper buffer of "Gator oscillator" |
|
| //+------------------------------------------------------------------+
|
| double CiGator::Upper(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(0);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to Lower buffer of "Gator oscillator" |
|
| //+------------------------------------------------------------------+
|
| double CiGator::Lower(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(1);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Class CiBWMFI. |
|
| //| Purpose: Class of the "Market Facilitation Index" indicator |
|
| //| by Bill Williams". |
|
| //| Derives from class CIndicator. |
|
| //+------------------------------------------------------------------+
|
| class CiBWMFI : public CIndicator
|
| {
|
| protected:
|
| ENUM_APPLIED_VOLUME m_applied;
|
|
|
| public:
|
| CiBWMFI(void);
|
| ~CiBWMFI(void);
|
| //--- methods of access to protected data
|
| ENUM_APPLIED_VOLUME Applied(void) const { return(m_applied); }
|
| //--- method of creating
|
| bool Create(const string symbol,const ENUM_TIMEFRAMES period,const ENUM_APPLIED_VOLUME applied);
|
| //--- methods of access to data of indicator
|
| double Main(const int index) const;
|
| //--- method of identifying
|
| virtual int Type(void) const { return(IND_BWMFI); }
|
|
|
| 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 ENUM_APPLIED_VOLUME applied);
|
| };
|
| //+------------------------------------------------------------------+
|
| //| Constructor |
|
| //+------------------------------------------------------------------+
|
| CiBWMFI::CiBWMFI(void) : m_applied(WRONG_VALUE)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Destructor |
|
| //+------------------------------------------------------------------+
|
| CiBWMFI::~CiBWMFI(void)
|
| {
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Create "Market Facilitation Index by Bill Williams" indicator |
|
| //+------------------------------------------------------------------+
|
| bool CiBWMFI::Create(const string symbol,const ENUM_TIMEFRAMES period,const ENUM_APPLIED_VOLUME applied)
|
| {
|
| //--- check history
|
| if(!SetSymbolPeriod(symbol,period))
|
| return(false);
|
| //--- create
|
| m_handle=iBWMFI(symbol,period,applied);
|
| //--- check result
|
| if(m_handle==INVALID_HANDLE)
|
| return(false);
|
| //--- idicator successfully created
|
| if(!Initialize(symbol,period,applied))
|
| {
|
| //--- initialization failed
|
| IndicatorRelease(m_handle);
|
| m_handle=INVALID_HANDLE;
|
| return(false);
|
| }
|
| //--- ok
|
| return(true);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize the indicator with universal parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiBWMFI::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const int num_params,const MqlParam ¶ms[])
|
| {
|
| return(Initialize(symbol,period,(ENUM_APPLIED_VOLUME)params[0].integer_value));
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Initialize indicator with the special parameters |
|
| //+------------------------------------------------------------------+
|
| bool CiBWMFI::Initialize(const string symbol,const ENUM_TIMEFRAMES period,const ENUM_APPLIED_VOLUME applied)
|
| {
|
| if(CreateBuffers(symbol,period,1))
|
| {
|
| //--- string of status of drawing
|
| m_name ="BWMFI";
|
| m_status="BWMFI("+symbol+","+PeriodDescription()+","+VolumeDescription(applied)+") H="+IntegerToString(m_handle);
|
| //--- save settings
|
| m_applied=applied;
|
| //--- create buffers
|
| ((CIndicatorBuffer*)At(0)).Name("MAIN_LINE");
|
| //--- ok
|
| return(true);
|
| }
|
| //--- error
|
| return(false);
|
| }
|
| //+------------------------------------------------------------------+
|
| //| Access to buffer of "Market Facilitation Index by Bill Williams".|
|
| //+------------------------------------------------------------------+
|
| double CiBWMFI::Main(const int index) const
|
| {
|
| CIndicatorBuffer *buffer=At(0);
|
| //--- check
|
| if(buffer==NULL)
|
| return(EMPTY_VALUE);
|
| //---
|
| return(buffer.At(index));
|
| }
|
| //+------------------------------------------------------------------+
|