418 lines
7.9 KiB
Plaintext
418 lines
7.9 KiB
Plaintext
///////////////////////////////////////////////////////
|
|
//
|
|
// SaherElm IT Center MQL5 Class Library
|
|
// --------------------------------------
|
|
// Name: XMC Indicator Provider
|
|
// Description: Provides Features ...
|
|
//
|
|
//
|
|
// Maintainer:
|
|
// ------------
|
|
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
|
|
//
|
|
//////////////////////////////////////////////////////
|
|
//
|
|
// Global Properties ...
|
|
#property library
|
|
#property copyright "Copyright 2023, SaherElm IT Center"
|
|
#property link "https://www.saherelm.ir"
|
|
#property version "1.00"
|
|
#property strict
|
|
|
|
//
|
|
// START Import and Inclused requirements ...
|
|
//
|
|
|
|
//
|
|
// Includes ...
|
|
#include "../Libraries/x-saherelm.alert.lib.mq5"
|
|
#include "../Libraries/x-saherelm.models.lib.mq5"
|
|
#include "../Libraries/x-saherelm.common.lib.mq5"
|
|
|
|
//
|
|
// END Import and Inclused requirements ...
|
|
//
|
|
|
|
//
|
|
// START Definitions ...
|
|
//
|
|
|
|
//
|
|
// XMC Exported Buffers ...
|
|
enum ENUM_X_XMC_BUFFERS
|
|
{
|
|
//
|
|
X_MC_FAST_LINE = 0,
|
|
X_MC_SLOW_LINE = 1,
|
|
X_MC_VERIFIER_LINE = 2,
|
|
};
|
|
|
|
//
|
|
// END Definitions ...
|
|
//
|
|
|
|
//
|
|
// START Overrides ...
|
|
//
|
|
|
|
//
|
|
// END Overrides ...
|
|
//
|
|
|
|
class XSCXMCHelper
|
|
{
|
|
//
|
|
public:
|
|
//
|
|
// Properties ...
|
|
double fastBuffer[];
|
|
double slowBuffer[];
|
|
double verifierBuffer[];
|
|
|
|
//
|
|
// Constructor ...
|
|
void XSCXMCHelper() {
|
|
mSymbol = _Symbol;
|
|
mPeriod = _Period;
|
|
}
|
|
void XSCXMCHelper(
|
|
//
|
|
// Symbol ...
|
|
string symbol,
|
|
//
|
|
// Period ...
|
|
ENUM_TIMEFRAMES period,
|
|
//
|
|
// Buffer Reading ...
|
|
int numberOfItemsReadPerTick = 52,
|
|
//
|
|
// FAST ...
|
|
int fastMaLength = 9,
|
|
int fastMaShift = 0,
|
|
ENUM_MA_METHOD fastMaMethod = MODE_EMA,
|
|
ENUM_APPLIED_PRICE fastMaAppliedTo = PRICE_CLOSE,
|
|
//
|
|
// SLOW ...
|
|
int slowMaLength = 18,
|
|
int slowMaShift = 0,
|
|
ENUM_MA_METHOD slowMaMethod = MODE_EMA,
|
|
ENUM_APPLIED_PRICE slowMaAppliedTo = PRICE_CLOSE,
|
|
//
|
|
// VERIFIER ...
|
|
int verifierMaLength = 50,
|
|
int verifierMaShift = 0,
|
|
ENUM_MA_METHOD verifierMaMethod = MODE_EMA,
|
|
ENUM_APPLIED_PRICE verifierMaAppliedTo = PRICE_CLOSE
|
|
//
|
|
)
|
|
{
|
|
//
|
|
// Setting Requirements ...
|
|
|
|
//
|
|
// Symbol ...
|
|
mSymbol = symbol;
|
|
|
|
//
|
|
// Period ...
|
|
mPeriod = period;
|
|
|
|
//
|
|
// Number of Reading Buffer Items per Tick ...
|
|
mNumberOfItemsReadPerTick = numberOfItemsReadPerTick;
|
|
|
|
//
|
|
// FAST ...
|
|
mFastMaLength = fastMaLength;
|
|
mFastMaShift = fastMaShift;
|
|
mFastMaMethod = fastMaMethod;
|
|
mFastMaAppliedTo = fastMaAppliedTo;
|
|
|
|
//
|
|
// SLOW ...
|
|
mSlowMaLength = slowMaLength;
|
|
mSlowMaShift = slowMaShift;
|
|
mSlowMaMethod = slowMaMethod;
|
|
mSlowMaAppliedTo = slowMaAppliedTo;
|
|
|
|
//
|
|
// VERIFIER ...
|
|
mVerifierMaLength = verifierMaLength;
|
|
mVerifierMaShift = verifierMaShift;
|
|
mVerifierMaMethod = verifierMaMethod;
|
|
mVerifierMaAppliedTo = verifierMaAppliedTo;
|
|
|
|
//
|
|
mTag = "XMC " + mSymbol + ", " + ToString(mPeriod);
|
|
|
|
//
|
|
// Initial Handler ...
|
|
mHandler = iCustom(
|
|
mSymbol,
|
|
mPeriod,
|
|
"x-saherelm.x121.xmc",
|
|
//
|
|
// Inputs ...
|
|
//
|
|
// FAST ...
|
|
"",
|
|
mFastMaLength,
|
|
mFastMaShift,
|
|
mFastMaMethod,
|
|
mFastMaAppliedTo,
|
|
//
|
|
// SLOW ...
|
|
"",
|
|
mSlowMaLength,
|
|
mSlowMaShift,
|
|
mSlowMaMethod,
|
|
mSlowMaAppliedTo,
|
|
//
|
|
// VERIFIER ...
|
|
"",
|
|
mVerifierMaLength,
|
|
mVerifierMaShift,
|
|
mVerifierMaMethod,
|
|
mVerifierMaAppliedTo,
|
|
//
|
|
"",
|
|
false,
|
|
false,
|
|
false
|
|
//
|
|
);
|
|
if (mHandler == INVALID_HANDLE)
|
|
{
|
|
LogMessage("failed to Initialize Indicator: " + (string)GetLastError());
|
|
}
|
|
|
|
//
|
|
ArraySetAsSeries(fastBuffer, true);
|
|
ArraySetAsSeries(slowBuffer, true);
|
|
ArraySetAsSeries(verifierBuffer, true);
|
|
}
|
|
|
|
//
|
|
// DeConstructor ...
|
|
void ~XSCXMCHelper()
|
|
{
|
|
//
|
|
// Release Indicators ...
|
|
IndicatorRelease(mHandler);
|
|
}
|
|
|
|
//
|
|
// Reading Buffers ...
|
|
void ReadBuffers()
|
|
{
|
|
//
|
|
// FAST ...
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_MC_FAST_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
fastBuffer);
|
|
|
|
//
|
|
// SLOW ...
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_MC_SLOW_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
slowBuffer);
|
|
|
|
//
|
|
// VERIFIER ...
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_MC_VERIFIER_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
verifierBuffer);
|
|
}
|
|
|
|
//
|
|
// START Tools Functions ...
|
|
//
|
|
|
|
//
|
|
// Check Fast Over Slow ...
|
|
bool IsFastOverSlow(
|
|
int bar_index // Bar Index ...
|
|
) {
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
if (!IsValidArraySize(bar_index)) {
|
|
return result;
|
|
}
|
|
|
|
//
|
|
result =
|
|
//
|
|
IsOver(
|
|
fastBuffer,
|
|
slowBuffer,
|
|
bar_index
|
|
)
|
|
//
|
|
;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Check Fast Crossed Over Slow ...
|
|
bool IsFastCrossedOverSlow(
|
|
int bar_index // Bar Index ...
|
|
) {
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
if (!IsValidArraySize(bar_index)) {
|
|
return result;
|
|
}
|
|
|
|
//
|
|
result =
|
|
//
|
|
IsCrossOver(
|
|
fastBuffer,
|
|
slowBuffer,
|
|
bar_index
|
|
)
|
|
//
|
|
;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Check Fast Under Slow ...
|
|
bool IsFastUnderSlow(
|
|
int bar_index // Bar Index ...
|
|
) {
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
if (!IsValidArraySize(bar_index)) {
|
|
return result;
|
|
}
|
|
|
|
//
|
|
result =
|
|
//
|
|
IsUnder(
|
|
fastBuffer,
|
|
slowBuffer,
|
|
bar_index
|
|
)
|
|
//
|
|
;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Check Fast Crossed Under Slow ...
|
|
bool IsFastCrossedUnderSlow(
|
|
int bar_index // Bar Index ...
|
|
) {
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
if (!IsValidArraySize(bar_index)) {
|
|
return result;
|
|
}
|
|
|
|
//
|
|
result =
|
|
//
|
|
IsCrossUnder(
|
|
fastBuffer,
|
|
slowBuffer,
|
|
bar_index
|
|
)
|
|
//
|
|
;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// END Tools Functions ...
|
|
//
|
|
|
|
//
|
|
protected:
|
|
//
|
|
private:
|
|
//
|
|
// Symbol ...
|
|
string mSymbol;
|
|
|
|
//
|
|
// Period ...
|
|
ENUM_TIMEFRAMES mPeriod;
|
|
|
|
//
|
|
// Buffer Reading ...
|
|
int mNumberOfItemsReadPerTick;
|
|
|
|
//
|
|
// FAST ...
|
|
int mFastMaLength;
|
|
int mFastMaShift;
|
|
ENUM_MA_METHOD mFastMaMethod;
|
|
ENUM_APPLIED_PRICE mFastMaAppliedTo;
|
|
|
|
//
|
|
// SLOW ...
|
|
int mSlowMaLength;
|
|
int mSlowMaShift;
|
|
ENUM_MA_METHOD mSlowMaMethod;
|
|
ENUM_APPLIED_PRICE mSlowMaAppliedTo;
|
|
|
|
//
|
|
// VERIFIER ...
|
|
int mVerifierMaLength;
|
|
int mVerifierMaShift;
|
|
ENUM_MA_METHOD mVerifierMaMethod;
|
|
ENUM_APPLIED_PRICE mVerifierMaAppliedTo;
|
|
|
|
//
|
|
string mTag;
|
|
|
|
//
|
|
int mHandler;
|
|
|
|
//
|
|
bool IsValidArraySize(int bar_index)
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
if (bar_index < 0)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
int rCount = ArraySize(fastBuffer);
|
|
result = rCount > bar_index + 1;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
}; |