Files
xMQL5/MQLTestWorkspace/BKPS/BKP/x121 old style indicators/Helpers/x-saherelm.x121.xppsr.helper.mq5
T

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;
}
};