575 lines
12 KiB
Plaintext
575 lines
12 KiB
Plaintext
///////////////////////////////////////////////////////
|
|
//
|
|
// SaherElm IT Center MQL5 Class Library
|
|
// --------------------------------------
|
|
// Name: XPPSR 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 ...
|
|
//
|
|
|
|
//
|
|
// XPERIOD Calculation Method ...
|
|
// USED For Multiple Time Frames ...
|
|
enum ENUM_X_PERIOD_METHOD
|
|
{
|
|
//
|
|
X_PERIOD_NOTHING,
|
|
//
|
|
X_PERIOD_AUTO,
|
|
//
|
|
X_PERIOD_MANUALLY
|
|
};
|
|
|
|
//
|
|
// XPPSR Exported Buffers ...
|
|
enum ENUM_X_XPPSR_BUFFERS
|
|
{
|
|
//
|
|
// LEVEL 1 ...
|
|
X_PPSR_L1_R_LINE = 0,
|
|
X_PPSR_L1_R1_LINE = 1,
|
|
X_PPSR_L1_R2_LINE = 2,
|
|
X_PPSR_L1_S_LINE = 3,
|
|
X_PPSR_L1_S1_LINE = 4,
|
|
X_PPSR_L1_S2_LINE = 5,
|
|
//
|
|
// LEVEL 2 ...
|
|
X_PPSR_L2_R_LINE = 6,
|
|
X_PPSR_L2_R1_LINE = 7,
|
|
X_PPSR_L2_R2_LINE = 8,
|
|
X_PPSR_L2_S_LINE = 9,
|
|
X_PPSR_L2_S1_LINE = 10,
|
|
X_PPSR_L2_S2_LINE = 11,
|
|
//
|
|
// LEVEL 3 ...
|
|
X_PPSR_L3_R_LINE = 12,
|
|
X_PPSR_L3_R1_LINE = 13,
|
|
X_PPSR_L3_R2_LINE = 14,
|
|
X_PPSR_L3_S_LINE = 15,
|
|
X_PPSR_L3_S1_LINE = 16,
|
|
X_PPSR_L3_S2_LINE = 17,
|
|
//
|
|
// LEVEL 4 ...
|
|
X_PPSR_L4_R_LINE = 18,
|
|
X_PPSR_L4_R1_LINE = 19,
|
|
X_PPSR_L4_R2_LINE = 20,
|
|
X_PPSR_L4_S_LINE = 21,
|
|
X_PPSR_L4_S1_LINE = 22,
|
|
X_PPSR_L4_S2_LINE = 23,
|
|
};
|
|
|
|
//
|
|
// END Definitions ...
|
|
//
|
|
|
|
//
|
|
// START Overrides ...
|
|
//
|
|
|
|
//
|
|
// END Overrides ...
|
|
//
|
|
|
|
class XSCXPPSRHelper
|
|
{
|
|
//
|
|
public:
|
|
//
|
|
// Properties ...
|
|
|
|
//
|
|
// LEVEL 1 ...
|
|
double l1RBuffer[];
|
|
double l1R1Buffer[];
|
|
double l1R2Buffer[];
|
|
double l1SBuffer[];
|
|
double l1S1Buffer[];
|
|
double l1S2Buffer[];
|
|
|
|
//
|
|
// LEVEL 2 ...
|
|
double l2RBuffer[];
|
|
double l2R1Buffer[];
|
|
double l2R2Buffer[];
|
|
double l2SBuffer[];
|
|
double l2S1Buffer[];
|
|
double l2S2Buffer[];
|
|
|
|
//
|
|
// LEVEL 3 ...
|
|
double l3RBuffer[];
|
|
double l3R1Buffer[];
|
|
double l3R2Buffer[];
|
|
double l3SBuffer[];
|
|
double l3S1Buffer[];
|
|
double l3S2Buffer[];
|
|
|
|
//
|
|
// LEVEL 4 ...
|
|
double l4RBuffer[];
|
|
double l4R1Buffer[];
|
|
double l4R2Buffer[];
|
|
double l4SBuffer[];
|
|
double l4S1Buffer[];
|
|
double l4S2Buffer[];
|
|
|
|
//
|
|
// Constructor ...
|
|
void XSCXPPSRHelper()
|
|
{
|
|
mSymbol = _Symbol;
|
|
mPeriod = _Period;
|
|
}
|
|
void XSCXPPSRHelper(
|
|
//
|
|
// Symbol ...
|
|
string symbol,
|
|
//
|
|
// Period ...
|
|
ENUM_TIMEFRAMES period,
|
|
//
|
|
// Buffer Reading ...
|
|
int numberOfItemsReadPerTick = 52,
|
|
//
|
|
// LEVEL 1 ...
|
|
ENUM_X_PERIOD_METHOD l1Method = X_PERIOD_AUTO,
|
|
ENUM_TIMEFRAMES l1Period = NULL,
|
|
ENUM_SERIESMODE l1HHMode = MODE_HIGH,
|
|
ENUM_SERIESMODE l1LLMode = MODE_LOW,
|
|
//
|
|
// LEVEL 2 ...
|
|
ENUM_X_PERIOD_METHOD l2Method = X_PERIOD_AUTO,
|
|
ENUM_TIMEFRAMES l2Period = NULL,
|
|
ENUM_SERIESMODE l2HHMode = MODE_HIGH,
|
|
ENUM_SERIESMODE l2LLMode = MODE_LOW,
|
|
//
|
|
// LEVEL 3 ...
|
|
ENUM_X_PERIOD_METHOD l3Method = X_PERIOD_AUTO,
|
|
ENUM_TIMEFRAMES l3Period = NULL,
|
|
ENUM_SERIESMODE l3HHMode = MODE_HIGH,
|
|
ENUM_SERIESMODE l3LLMode = MODE_LOW,
|
|
//
|
|
// LEVEL 4 ...
|
|
ENUM_X_PERIOD_METHOD l4Method = X_PERIOD_AUTO,
|
|
ENUM_TIMEFRAMES l4Period = NULL,
|
|
ENUM_SERIESMODE l4HHMode = MODE_HIGH,
|
|
ENUM_SERIESMODE l4LLMode = MODE_LOW
|
|
//
|
|
)
|
|
{
|
|
//
|
|
// Setting Requirements ...
|
|
|
|
//
|
|
// Symbol ...
|
|
mSymbol = symbol;
|
|
|
|
//
|
|
// Period ...
|
|
mPeriod = period;
|
|
|
|
//
|
|
// Number of Reading Buffer Items per Tick ...
|
|
mNumberOfItemsReadPerTick = numberOfItemsReadPerTick;
|
|
|
|
//
|
|
// LEVEL 1 ...
|
|
mL1Method = l1Method;
|
|
mL1Period = l1Period;
|
|
mL1HHMode = l1HHMode;
|
|
mL1LLMode = l1LLMode;
|
|
|
|
//
|
|
// LEVEL 2 ...
|
|
mL2Method = l2Method;
|
|
mL2Period = l2Period;
|
|
mL2HHMode = l2HHMode;
|
|
mL2LLMode = l2LLMode;
|
|
|
|
//
|
|
// LEVEL 3 ...
|
|
mL3Method = l3Method;
|
|
mL3Period = l3Period;
|
|
mL3HHMode = l3HHMode;
|
|
mL3LLMode = l3LLMode;
|
|
|
|
//
|
|
// LEVEL 4 ...
|
|
mL4Method = l4Method;
|
|
mL4Period = l4Period;
|
|
mL4HHMode = l4HHMode;
|
|
mL4LLMode = l4LLMode;
|
|
|
|
//
|
|
mTag = "XPPSR " + mSymbol + ", " + ToString(mPeriod);
|
|
|
|
//
|
|
// Initial Handler ...
|
|
mHandler = iCustom(
|
|
mSymbol,
|
|
mPeriod,
|
|
"x-saherelm.x121.xppsr",
|
|
//
|
|
// Inputs ...
|
|
//
|
|
// LEVEL 1 ...
|
|
"",
|
|
mL1Method,
|
|
mL1Period,
|
|
mL1HHMode,
|
|
mL1LLMode,
|
|
//
|
|
// LEVEL 2 ...
|
|
"",
|
|
mL2Method,
|
|
mL2Period,
|
|
mL2HHMode,
|
|
mL2LLMode,
|
|
//
|
|
// LEVEL 3 ...
|
|
"",
|
|
mL3Method,
|
|
mL3Period,
|
|
mL3HHMode,
|
|
mL3LLMode,
|
|
//
|
|
// LEVEL 4 ...
|
|
"",
|
|
mL4Method,
|
|
mL4Period,
|
|
mL4HHMode,
|
|
mL4LLMode,
|
|
//
|
|
"",
|
|
"",
|
|
false,
|
|
false,
|
|
false,
|
|
false,
|
|
"",
|
|
false,
|
|
false,
|
|
false,
|
|
false
|
|
//
|
|
);
|
|
if (mHandler == INVALID_HANDLE)
|
|
{
|
|
LogMessage("failed to Initialize Indicator: " + (string)GetLastError());
|
|
}
|
|
|
|
//
|
|
// LEVEL 1 ...
|
|
ArraySetAsSeries(l1RBuffer, true);
|
|
ArraySetAsSeries(l1R1Buffer, true);
|
|
ArraySetAsSeries(l1R2Buffer, true);
|
|
ArraySetAsSeries(l1SBuffer, true);
|
|
ArraySetAsSeries(l1S1Buffer, true);
|
|
ArraySetAsSeries(l1S2Buffer, true);
|
|
|
|
//
|
|
// LEVEL 2 ...
|
|
ArraySetAsSeries(l2RBuffer, true);
|
|
ArraySetAsSeries(l2R1Buffer, true);
|
|
ArraySetAsSeries(l2R2Buffer, true);
|
|
ArraySetAsSeries(l2SBuffer, true);
|
|
ArraySetAsSeries(l2S1Buffer, true);
|
|
ArraySetAsSeries(l2S2Buffer, true);
|
|
|
|
//
|
|
// LEVEL 3 ...
|
|
ArraySetAsSeries(l3RBuffer, true);
|
|
ArraySetAsSeries(l3R1Buffer, true);
|
|
ArraySetAsSeries(l3R2Buffer, true);
|
|
ArraySetAsSeries(l3SBuffer, true);
|
|
ArraySetAsSeries(l3S1Buffer, true);
|
|
ArraySetAsSeries(l3S2Buffer, true);
|
|
|
|
//
|
|
// LEVEL 4 ...
|
|
ArraySetAsSeries(l4RBuffer, true);
|
|
ArraySetAsSeries(l4R1Buffer, true);
|
|
ArraySetAsSeries(l4R2Buffer, true);
|
|
ArraySetAsSeries(l4SBuffer, true);
|
|
ArraySetAsSeries(l4S1Buffer, true);
|
|
ArraySetAsSeries(l4S2Buffer, true);
|
|
}
|
|
|
|
//
|
|
// DeConstructor ...
|
|
void ~XSCXPPSRHelper()
|
|
{
|
|
//
|
|
// Release Indicators ...
|
|
IndicatorRelease(mHandler);
|
|
}
|
|
|
|
//
|
|
// Reading Buffers ...
|
|
void ReadBuffers()
|
|
{
|
|
//
|
|
// LEVEL 1 ...
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L1_R_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l1RBuffer);
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L1_R1_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l1R1Buffer);
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L1_R2_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l1R2Buffer);
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L1_S_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l1SBuffer);
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L1_S1_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l1S1Buffer);
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L1_S2_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l1S2Buffer);
|
|
|
|
//
|
|
// LEVEL 2 ...
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L2_R_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l2RBuffer);
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L2_R1_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l2R1Buffer);
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L2_R2_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l2R2Buffer);
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L2_S_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l2SBuffer);
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L2_S1_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l2S1Buffer);
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L2_S2_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l2S2Buffer);
|
|
|
|
//
|
|
// LEVEL 3 ...
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L3_R_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l3RBuffer);
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L3_R1_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l3R1Buffer);
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L3_R2_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l3R2Buffer);
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L3_S_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l3SBuffer);
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L3_S1_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l3S1Buffer);
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L3_S2_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l3S2Buffer);
|
|
|
|
//
|
|
// LEVEL 4 ...
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L4_R_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l4RBuffer);
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L4_R1_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l4R1Buffer);
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L4_R2_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l4R2Buffer);
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L4_S_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l4SBuffer);
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L4_S1_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l4S1Buffer);
|
|
CopyBuffer(
|
|
mHandler,
|
|
X_PPSR_L4_S2_LINE,
|
|
0,
|
|
mNumberOfItemsReadPerTick,
|
|
l4S2Buffer);
|
|
}
|
|
|
|
//
|
|
// START Tools Functions ...
|
|
//
|
|
|
|
//
|
|
// END Tools Functions ...
|
|
//
|
|
|
|
//
|
|
protected:
|
|
//
|
|
private:
|
|
//
|
|
// Symbol ...
|
|
string mSymbol;
|
|
|
|
//
|
|
// Period ...
|
|
ENUM_TIMEFRAMES mPeriod;
|
|
|
|
//
|
|
// Buffer Reading ...
|
|
int mNumberOfItemsReadPerTick;
|
|
|
|
//
|
|
// LEVEL 1 ...
|
|
ENUM_X_PERIOD_METHOD mL1Method;
|
|
ENUM_TIMEFRAMES mL1Period;
|
|
ENUM_SERIESMODE mL1HHMode;
|
|
ENUM_SERIESMODE mL1LLMode;
|
|
|
|
//
|
|
// LEVEL 2 ...
|
|
ENUM_X_PERIOD_METHOD mL2Method;
|
|
ENUM_TIMEFRAMES mL2Period;
|
|
ENUM_SERIESMODE mL2HHMode;
|
|
ENUM_SERIESMODE mL2LLMode;
|
|
|
|
//
|
|
// LEVEL 3 ...
|
|
ENUM_X_PERIOD_METHOD mL3Method;
|
|
ENUM_TIMEFRAMES mL3Period;
|
|
ENUM_SERIESMODE mL3HHMode;
|
|
ENUM_SERIESMODE mL3LLMode;
|
|
|
|
//
|
|
// LEVEL 4 ...
|
|
ENUM_X_PERIOD_METHOD mL4Method;
|
|
ENUM_TIMEFRAMES mL4Period;
|
|
ENUM_SERIESMODE mL4HHMode;
|
|
ENUM_SERIESMODE mL4LLMode;
|
|
|
|
//
|
|
string mTag;
|
|
|
|
//
|
|
int mHandler;
|
|
|
|
//
|
|
bool IsValidArraySize(int bar_index)
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
if (bar_index < 0)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
int rCount = ArraySize(l1RBuffer);
|
|
result = rCount > bar_index + 1;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
}; |