Files
xMQL5/MQLTestWorkspace/BKPS/14030310/Helpers/x-saherelm.xchlh.helper.mq5
T
2024-05-31 00:53:58 +03:30

967 lines
20 KiB
Plaintext

///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Helper Class Library
// ----------------------------------------------
// Name: XSCXCHLHHelper
// Description: provides all Indicator
// Helper requirements ...
//
//
// 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
//
// Imports ...
#include "../Classes/x-saherelm.xhelper.class.mq5"
//
// Definitions ...
//
enum ENUM_XCHLH_BUFFERS
{
//
// LC ...
XCHLH_LC_HH_LINE = 0,
XCHLH_LC_LL_LINE = 1,
//
// MC ...
XCHLH_MC_HH_LINE = 2,
XCHLH_MC_LL_LINE = 3,
//
// SC ...
XCHLH_SC_HH_LINE = 4,
XCHLH_SC_LL_LINE = 5,
//
// Hot State ...
XCHLH_HOT_STATE_LINE = 6
};
//
// Input Models ...
struct XCHLHInputs
{
//
// Props ...
//
// Hot Areas ...
bool drawHotAreas; // Draw Hot Areas Symbol
uchar hotHHArrowCode; // Hot HH Arrow Code
color hotHHArrowColor; // Hot HH Arrow Color
uchar hotLLArrowCode; // Hot LL Arrow Code
color hotLLArrowColor; // Hot LL Arrow Color
//
// Long Cycle ...
// LC Market ...
int lcLength; // Length
double lcThresholdInPips; // Threshold In Pips
ENUM_SERIESMODE lcHHMode; // Highest High Calculation Method
ENUM_SERIESMODE lcLLMode; // Lowest Low Calculation Method
//
// LC Style ...
int lcDrawWidth; // Draw Width
ENUM_DRAW_TYPE lcDrawType; // Draw Type
ENUM_LINE_STYLE lcDrawStyle; // Draw Style
color lcHHColor; // Highest High Color
color lcLLColor; // Lowest Low Color
// LC Drawings ...
bool lcDrawHH; // Draw Highest High
bool lcDrawLL; // Draw Lowest Low
//
// Medium Cycle ...
// MC Market ...
int mcLength; // Length
double mcThresholdInPips; // Threshold In Pips
ENUM_SERIESMODE mcHHMode; // Highest High Calculation Method
ENUM_SERIESMODE mcLLMode; // Lowest Low Calculation Method
// MC Style ...
int mcDrawWidth; // Draw Width
ENUM_DRAW_TYPE mcDrawType; // Draw Type
ENUM_LINE_STYLE mcDrawStyle; // Draw Style
color mcHHColor; // Highest High Color
color mcLLColor; // Lowest Low Color
// MC Drawings ...
bool mcDrawHH; // Draw Highest High
bool mcDrawLL; // Draw Lowest Low
//
// Short Cycle ...
// SC Market ...
int scLength; // Length
double scThresholdInPips; // Threshold In Pips
ENUM_SERIESMODE scHHMode; // Highest High Calculation Method
ENUM_SERIESMODE scLLMode; // Lowest Low Calculation Method
// SC Style ...
int scDrawWidth; // Draw Width
ENUM_DRAW_TYPE scDrawType; // Draw Type
ENUM_LINE_STYLE scDrawStyle; // Draw Style
color scHHColor; // Highest High Color
color scLLColor; // Lowest Low Color
// SC Drawings ...
bool scDrawHH; // Draw Highest High
bool scDrawLL; // Draw Lowest Low
//
// Constructor(s) ...
XCHLHInputs()
{
//
Clean();
}
//
// Tools ...
//
// Clean ...
void Clean()
{
//
// Hot Areas ...
drawHotAreas = false;
hotHHArrowCode = 234;
hotHHArrowColor = CLR_NONE;
hotLLArrowCode = 233;
hotLLArrowColor = CLR_NONE;
//
// Long Cycle ...
// LC Market ...
lcLength = 0;
lcThresholdInPips = 0;
lcHHMode = MODE_HIGH;
lcLLMode = MODE_LOW;
//
// LC Style ...
lcDrawWidth = 1;
lcDrawType = DRAW_NONE;
lcDrawStyle = STYLE_DOT;
lcHHColor = CLR_NONE;
lcLLColor = CLR_NONE;
// LC Drawings ...
lcDrawHH = false;
lcDrawLL = false;
//
// Medium Cycle ...
// MC Market ...
mcLength = 0;
mcThresholdInPips = 0;
mcHHMode = MODE_HIGH;
mcLLMode = MODE_LOW;
// MC Style ...
mcDrawWidth = 1;
mcDrawType = DRAW_NONE;
mcDrawStyle = STYLE_DOT;
mcHHColor = CLR_NONE;
mcLLColor = CLR_NONE;
// MC Drawings ...
mcDrawHH = false;
mcDrawLL = false;
//
// Short Cycle ...
// SC Market ...
scLength = 0;
scThresholdInPips = 0;
scHHMode = MODE_HIGH;
scLLMode = MODE_LOW;
// SC Style ...
scDrawWidth = 1;
scDrawType = DRAW_NONE;
scDrawStyle = STYLE_DOT;
scHHColor = CLR_NONE;
scLLColor = CLR_NONE;
// SC Drawings ...
scDrawHH = false;
scDrawLL = false;
}
//
// Default ...
void Default()
{
//
// Hot Areas ...
drawHotAreas = false;
hotHHArrowCode = 234;
hotHHArrowColor = CLR_NONE;
hotLLArrowCode = 233;
hotLLArrowColor = CLR_NONE;
//
// Long Cycle ...
// LC Market ...
lcLength = 28;
lcThresholdInPips = 0.3;
lcHHMode = MODE_HIGH;
lcLLMode = MODE_LOW;
//
// LC Style ...
lcDrawWidth = 1;
lcDrawType = DRAW_LINE;
lcDrawStyle = STYLE_DOT;
lcHHColor = clrAqua;
lcLLColor = clrFuchsia;
// LC Drawings ...
lcDrawHH = false;
lcDrawLL = false;
//
// Medium Cycle ...
// MC Market ...
mcLength = 14;
mcThresholdInPips = 0.3;
mcHHMode = MODE_HIGH;
mcLLMode = MODE_LOW;
// MC Style ...
mcDrawWidth = 1;
mcDrawType = DRAW_LINE;
mcDrawStyle = STYLE_DOT;
mcHHColor = clrLime;
mcLLColor = clrRed;
// MC Drawings ...
mcDrawHH = false;
mcDrawLL = false;
//
// Short Cycle ...
// SC Market ...
scLength = 7;
scThresholdInPips = 0.3;
scHHMode = MODE_HIGH;
scLLMode = MODE_LOW;
// SC Style ...
scDrawWidth = 1;
scDrawType = DRAW_LINE;
scDrawStyle = STYLE_DOT;
scHHColor = clrLightBlue;
scLLColor = clrLightSalmon;
// SC Drawings ...
scDrawHH = false;
scDrawLL = false;
}
//
// Validate ...
bool IsValid()
{
//
bool result = false;
//
result =
//
// LC ...
(lcLength >= 4 &&
lcLength > mcLength &&
lcLength > scLength)
//
&&
//
// MC ...
(mcLength >= 4 &&
mcLength > scLength &&
mcLength < lcLength)
//
&&
//
// SC ...
(scLength >= 4 &&
scLength < mcLength &&
scLength < lcLength)
//
;
//
return result;
}
//
// Retrieve MAx Length ...
int Max()
{
//
int result = 0;
//
result = MathMax(lcLength, mcLength);
result = MathMax(result, scLength);
//
return result;
}
};
//
// Class ...
class XSCXCHLHHelper : public XSCBaseHelper
{
//
// Public ...
public:
//
// Props ...
//
// Constructors ...
XSCXCHLHHelper() : XSCBaseHelper(_Symbol, _Period)
{
}
//
// Deconstructor ...
~XSCXCHLHHelper() {}
//
// Tools ...
bool Init(
string symbol, // Trading Symbol
ENUM_TIMEFRAMES period, // Trading Period
XCHLHInputs &inputs // Inputs
)
{
//
bool result = false;
//
mSymbol = symbol;
mPeriod = period;
//
result = inputs.IsValid();
if (!result)
{
return result;
}
//
mInputs = inputs;
//
ArraySetAsSeries(scHHBuffer, true);
ArraySetAsSeries(scLLBuffer, true);
ArraySetAsSeries(mcHHBuffer, true);
ArraySetAsSeries(mcLLBuffer, true);
ArraySetAsSeries(lcHHBuffer, true);
ArraySetAsSeries(lcLLBuffer, true);
ArraySetAsSeries(hotStateBuffer, true);
//
mHandler = iCustom(
mSymbol,
mPeriod,
"x-saherelm.xchlh",
//
// Inputs ...
//
// Hot Areas ...
"",
//
mInputs.drawHotAreas, // Draw Hot Areas Symbol
mInputs.hotHHArrowCode, // Hot HH Arrow Code
mInputs.hotHHArrowColor, // Hot HH Arrow Color
mInputs.hotLLArrowCode, // Hot LL Arrow Code
mInputs.hotLLArrowColor, // Hot LL Arrow Color
//
// Long Cycle ...
"",
// LC Market ...
"",
//
mInputs.lcLength, // Length
mInputs.lcThresholdInPips, // Threshold In Pips
mInputs.lcHHMode, // Highest High Calculation Method
mInputs.lcLLMode, // Lowest Low Calculation Method
//
// LC Style ...
"",
//
mInputs.lcDrawWidth, // Draw Width
mInputs.lcDrawType, // Draw Type
mInputs.lcDrawStyle, // Draw Style
mInputs.lcHHColor, // Highest High Color
mInputs.lcLLColor, // Lowest Low Color
//
// LC Drawings ...
"",
mInputs.lcDrawHH, // Draw Highest High
mInputs.lcDrawLL, // Draw Lowest Low
//
// Medium Cycle ...
"",
// MC Market ...
"",
//
mInputs.mcLength, // Length
mInputs.mcThresholdInPips, // Threshold In Pips
mInputs.mcHHMode, // Highest High Calculation Method
mInputs.mcLLMode, // Lowest Low Calculation Method
//
// MC Style ...
"",
//
mInputs.mcDrawWidth, // Draw Width
mInputs.mcDrawType, // Draw Type
mInputs.mcDrawStyle, // Draw Style
mInputs.mcHHColor, // Highest High Color
mInputs.mcLLColor, // Lowest Low Color
//
// MC Drawings ...
"",
mInputs.mcDrawHH, // Draw Highest High
mInputs.mcDrawLL, // Draw Lowest Low
//
// Short Cycle ...
"",
// SC Market ...
"",
//
mInputs.scLength, // Length
mInputs.scThresholdInPips, // Threshold In Pips
mInputs.scHHMode, // Highest High Calculation Method
mInputs.scLLMode, // Lowest Low Calculation Method
//
// SC Style ...
"",
//
mInputs.scDrawWidth, // Draw Width
mInputs.scDrawType, // Draw Type
mInputs.scDrawStyle, // Draw Style
mInputs.scHHColor, // Highest High Color
mInputs.scLLColor, // Lowest Low Color
//
// SC Drawings ...
"",
mInputs.scDrawHH, // Draw Highest High
mInputs.scDrawLL // Draw Lowest Low
//
);
result = mHandler != INVALID_HANDLE;
if (!result)
{
return result;
}
//
return result;
}
//
// Inputs ...
//
XCHLHInputs GetInputs()
{
return mInputs;
}
//
bool SetInputs(
XCHLHInputs &inputs // Configs
)
{
//
return Init(
mSymbol,
mPeriod,
inputs
//
);
}
//
// Buffers ...
//
// Short ...
//
double GetSCHH(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate();
//
int count = ArraySize(scHHBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return scHHBuffer[barIndex];
}
//
// Copy Required Items ...
int CopySCHH(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate();
//
// Copy Items ...
return Copy(
start,
count,
scHHBuffer,
buffer,
forceClean
//
);
}
//
double GetSCLL(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate();
//
int count = ArraySize(scLLBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return scLLBuffer[barIndex];
}
//
// Copy Required Items ...
int CopySCLL(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate();
//
// Copy Items ...
return Copy(
start,
count,
scLLBuffer,
buffer,
forceClean
//
);
}
//
// Medium ...
//
double GetMCHH(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate();
//
int count = ArraySize(mcHHBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return mcHHBuffer[barIndex];
}
//
// Copy Required Items ...
int CopyMCHH(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate();
//
// Copy Items ...
return Copy(
start,
count,
mcHHBuffer,
buffer,
forceClean
//
);
}
//
double GetMCLL(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate();
//
int count = ArraySize(mcLLBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return mcLLBuffer[barIndex];
}
//
// Copy Required Items ...
int CopyMCLL(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate();
//
// Copy Items ...
return Copy(
start,
count,
mcLLBuffer,
buffer,
forceClean
//
);
}
//
// Long ...
//
double GetLCHH(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate();
//
int count = ArraySize(lcHHBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return lcHHBuffer[barIndex];
}
//
// Copy Required Items ...
int CopyLCHH(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate();
//
// Copy Items ...
return Copy(
start,
count,
lcHHBuffer,
buffer,
forceClean
//
);
}
//
double GetLCLL(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate();
//
int count = ArraySize(lcLLBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return lcLLBuffer[barIndex];
}
//
// Copy Required Items ...
int CopyLCLL(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate();
//
// Copy Items ...
return Copy(
start,
count,
lcLLBuffer,
buffer,
forceClean
//
);
}
//
double GetHotState(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate();
//
int count = ArraySize(hotStateBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return hotStateBuffer[barIndex];
}
//
// Copy Required Items ...
int CopyHotState(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate();
//
// Copy Items ...
return Copy(
start,
count,
hotStateBuffer,
buffer,
forceClean
//
);
}
//
// Protected ...
protected:
//
// Private ...
private:
//
// Props ...
XCHLHInputs mInputs; // Inputs ...
//
// Buffers ...
double scHHBuffer[];
double scLLBuffer[];
double mcHHBuffer[];
double mcLLBuffer[];
double lcHHBuffer[];
double lcLLBuffer[];
double hotStateBuffer[];
//
// Tools ...
//
// Calculate Values Until Now ...
void Calculate()
{
//
int totalBars = CountBars();
//
// Short Cycle ...
//
// HH ...
CopyBuffer(
mHandler,
XCHLH_SC_HH_LINE,
0,
totalBars,
scHHBuffer
//
);
//
// LL ...
CopyBuffer(
mHandler,
XCHLH_SC_LL_LINE,
0,
totalBars,
scLLBuffer
//
);
//
// Medium Cycle ...
//
// HH ...
CopyBuffer(
mHandler,
XCHLH_MC_HH_LINE,
0,
totalBars,
mcHHBuffer
//
);
//
// LL ...
CopyBuffer(
mHandler,
XCHLH_MC_LL_LINE,
0,
totalBars,
mcLLBuffer
//
);
//
// Long Cycle ...
//
// HH ...
CopyBuffer(
mHandler,
XCHLH_LC_HH_LINE,
0,
totalBars,
lcHHBuffer
//
);
//
// LL ...
CopyBuffer(
mHandler,
XCHLH_LC_LL_LINE,
0,
totalBars,
lcLLBuffer
//
);
//
// Hot State ...
CopyBuffer(
mHandler,
XCHLH_HOT_STATE_LINE,
0,
totalBars,
hotStateBuffer
//
);
}
};
//
// Tools ...