mirror of
https://github.com/rithsila/MT5-EA-Sniper-Strategy.git
synced 2026-08-17 04:38:12 +00:00
113 lines
2.9 KiB
Plaintext
113 lines
2.9 KiB
Plaintext
/*
|
|
SignalBase.mqh
|
|
|
|
Copyright 2013-2020, Orchard Forex
|
|
https://www.orchardforex.com
|
|
|
|
*/
|
|
|
|
#include "CommonBase.mqh"
|
|
#include "IndicatorBase.mqh"
|
|
|
|
//// New
|
|
//// This is to maintain compatibility and allow sub classes to still
|
|
//// use mEntrySignal= or mExitSignal=
|
|
//// mEntrySignal and mExitSignal are effectively deprecated now
|
|
#define mEntrySignal mSignalValues[OFX_ENTRY_SIGNAL] // Deprecated
|
|
#define mExitSignal mSignalValues[OFX_EXIT_SIGNAL] // Deprecated
|
|
|
|
struct SIndicatorItem {
|
|
CIndicatorBase *indicator;
|
|
int bufferNum;
|
|
};
|
|
|
|
//// New
|
|
enum ENUM_OFX_SIGNAL_TYPE {
|
|
OFX_ENTRY_SIGNAL,
|
|
OFX_EXIT_SIGNAL
|
|
};
|
|
|
|
enum ENUM_OFX_SIGNAL_DIRECTION {
|
|
OFX_SIGNAL_NONE = 0,
|
|
OFX_SIGNAL_BUY = 1,
|
|
OFX_SIGNAL_SELL = 2,
|
|
OFX_SIGNAL_BOTH = 3
|
|
};
|
|
|
|
class CSignalBase : public CCommonBase {
|
|
|
|
private:
|
|
|
|
protected: // member variables
|
|
|
|
//// Replaced
|
|
ENUM_OFX_SIGNAL_DIRECTION mSignalValues[2];
|
|
////ENUM_OFX_SIGNAL_DIRECTION mEntrySignal;
|
|
////ENUM_OFX_SIGNAL_DIRECTION mExitSignal;
|
|
SIndicatorItem mIndicatorList[];
|
|
|
|
public: // constructors
|
|
|
|
CSignalBase() : CCommonBase()
|
|
{ Init(); }
|
|
CSignalBase(string symbol, ENUM_TIMEFRAMES timeframe) : CCommonBase(symbol, timeframe)
|
|
{ Init(); }
|
|
~CSignalBase() { }
|
|
|
|
int Init();
|
|
|
|
public:
|
|
|
|
virtual void UpdateSignal() { return; }
|
|
//// Changed - maintain backward compatibility
|
|
virtual ENUM_OFX_SIGNAL_DIRECTION EntrySignal() { return(mSignalValues[OFX_ENTRY_SIGNAL]); }
|
|
virtual ENUM_OFX_SIGNAL_DIRECTION ExitSignal() { return(mSignalValues[OFX_EXIT_SIGNAL]); }
|
|
//// New, and shows my lack of planning
|
|
virtual void SetSignal(ENUM_OFX_SIGNAL_TYPE type,
|
|
ENUM_OFX_SIGNAL_DIRECTION value)
|
|
{ mSignalValues[type] = value; }
|
|
virtual ENUM_OFX_SIGNAL_DIRECTION GetSignal(ENUM_OFX_SIGNAL_TYPE type)
|
|
{ return(mSignalValues[type]); }
|
|
|
|
virtual void AddIndicator(CIndicatorBase *indicator, int bufferNum);
|
|
virtual double GetIndicatorData(int indicatorNum, int index);
|
|
|
|
};
|
|
|
|
int CSignalBase::Init() {
|
|
|
|
if (InitResult()!=INIT_SUCCEEDED) return(InitResult());
|
|
|
|
//// Replaced
|
|
ArrayInitialize(mSignalValues, OFX_SIGNAL_NONE);
|
|
////mEntrySignal = OFX_SIGNAL_NONE;
|
|
////mExitSignal = OFX_SIGNAL_NONE;
|
|
|
|
return(INIT_SUCCEEDED);
|
|
|
|
}
|
|
|
|
void CSignalBase::AddIndicator(CIndicatorBase *indicator, int bufferNum) {
|
|
|
|
SIndicatorItem indicatorItem = {NULL, 0};
|
|
indicatorItem.indicator = indicator;
|
|
indicatorItem.bufferNum = bufferNum;
|
|
int cnt = ArraySize(mIndicatorList);
|
|
ArrayResize(mIndicatorList, cnt+1);
|
|
mIndicatorList[cnt] = indicatorItem;
|
|
if (indicator.InitResult()!=INIT_SUCCEEDED) {
|
|
InitError("",indicator.InitResult());
|
|
}
|
|
|
|
return;
|
|
|
|
}
|
|
|
|
double CSignalBase::GetIndicatorData(int indicatorNum,int index) {
|
|
|
|
return(mIndicatorList[indicatorNum].indicator.GetData(mIndicatorList[indicatorNum].bufferNum, index));
|
|
|
|
}
|
|
|
|
|