Files
MQL5Data/Documents/BKP/14030306/Helpers/x-saherelm.xdon.helper.mq5
T

1075 lines
18 KiB
Plaintext

///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Helper Class Library
// ----------------------------------------------
// Name: XSCXDONHelper
// 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_XDON_BUFFERS
{
//
// Open ...
XDON_UPPER_O_LINE = 0,
XDON_LOWER_O_LINE = 1,
//
// Close ...
XDON_UPPER_C_LINE = 2,
XDON_LOWER_C_LINE = 3,
//
// High ...
XDON_UPPER_H_LINE = 4,
XDON_LOWER_H_LINE = 5,
//
// Low ...
XDON_UPPER_L_LINE = 6,
XDON_LOWER_L_LINE = 7,
};
//
// Input Models ...
struct XDONInputs
{
//
// Props ...
//
// Market ...
int length; // Market Length
double offset; // Offset
//
// Presentation ...
bool showOpen; // Show Open
bool showHigh; // Show High
bool showClose; // Show Close
bool showLow; // Show Low
//
// Constructor(s) ...
XDONInputs()
{
//
Clean();
}
//
// Tools ...
//
// Clean ...
void Clean()
{
//
// Market ...
length = 0;
offset = 0;
//
// Presentation ...
showOpen = false;
showHigh = false;
showClose = false;
showLow = false;
}
//
// Default ...
void Default()
{
//
// Market ...
length = 52;
offset = 0;
//
// Presentation ...
showOpen = true;
showHigh = true;
showClose = true;
showLow = true;
}
//
// Validate ...
bool IsValid()
{
//
bool result = false;
//
result =
//
length >= 5 &&
offset >= 0
//
;
//
return result;
}
//
// Retrieve MAx Length ...
int Max()
{
//
int result = 0;
//
result = MathMax(0, length);
//
return result;
}
};
//
// Class ...
class XSCXDONHelper : public XSCBaseHelper
{
//
// Public ...
public:
//
// Props ...
//
// Constructors ...
XSCXDONHelper() : XSCBaseHelper(_Symbol, _Period)
{
}
//
// Deconstructor ...
~XSCXDONHelper() {}
//
// Tools ...
bool Init(
string symbol, // Trading Symbol
ENUM_TIMEFRAMES period, // Trading Period
XDONInputs &inputs // Inputs
)
{
//
bool result = false;
//
mSymbol = symbol;
mPeriod = period;
//
result = inputs.IsValid();
if (!result)
{
return result;
}
//
mInputs = inputs;
//
ArraySetAsSeries(upperOBuffer, true);
ArraySetAsSeries(lowerOBuffer, true);
ArraySetAsSeries(upperCBuffer, true);
ArraySetAsSeries(lowerCBuffer, true);
ArraySetAsSeries(upperHBuffer, true);
ArraySetAsSeries(lowerHBuffer, true);
ArraySetAsSeries(upperLBuffer, true);
ArraySetAsSeries(lowerLBuffer, true);
//
mHandler = iCustom(
mSymbol,
mPeriod,
"x-saherelm.xdon",
//
// Inputs ...
//
// Market ...
"",
mInputs.length, // Market Length
mInputs.offset, // Offset
//
// Presentation ...
"",
mInputs.showOpen, // Show Open
mInputs.showHigh, // Show High
mInputs.showClose, // Show Close
mInputs.showLow // Show Low
//
);
result = mHandler != INVALID_HANDLE;
if (!result)
{
return result;
}
//
return result;
}
//
// Inputs ...
//
XDONInputs GetInputs()
{
return mInputs;
}
//
bool SetInputs(
XDONInputs &inputs // Configs
)
{
//
return Init(
mSymbol,
mPeriod,
inputs
//
);
}
//
// Buffers ...
//
// Open ...
//
// Upper ...
//
double GetUpperO(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate();
//
int count = ArraySize(upperOBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return upperOBuffer[barIndex];
}
//
// Copy Required Items ...
int CopyUpperO(
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,
upperOBuffer,
buffer,
forceClean
//
);
}
//
bool IsSameUpperO(
int barIndex, // Start Bar Index
int verifier = 71 // Number of Verifiers
)
{
//
// Update Calculations ...
Calculate();
//
return IsSame(
upperOBuffer,
verifier,
barIndex //
);
}
//
// Lower ...
//
double GetLowerO(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate();
//
int count = ArraySize(lowerOBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return lowerOBuffer[barIndex];
}
//
// Copy Required Items ...
int CopyLowerO(
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,
lowerOBuffer,
buffer,
forceClean
//
);
}
//
bool IsSameLowerO(
int barIndex, // Start Bar Index
int verifier = 71 // Number of Verifiers
)
{
//
// Update Calculations ...
Calculate();
//
return IsSame(
lowerOBuffer,
verifier,
barIndex //
);
}
//
// Close ...
//
// Upper ...
//
double GetUpperC(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate();
//
int count = ArraySize(upperCBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return upperCBuffer[barIndex];
}
//
// Copy Required Items ...
int CopyUpperC(
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,
upperCBuffer,
buffer,
forceClean
//
);
}
//
bool IsSameUpperC(
int barIndex, // Start Bar Index
int verifier = 71 // Number of Verifiers
)
{
//
// Update Calculations ...
Calculate();
//
return IsSame(
upperCBuffer,
verifier,
barIndex //
);
}
//
// Lower ...
//
double GetLowerC(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate();
//
int count = ArraySize(lowerCBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return lowerCBuffer[barIndex];
}
//
// Copy Required Items ...
int CopyLowerC(
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,
lowerCBuffer,
buffer,
forceClean
//
);
}
//
bool IsSameLowerC(
int barIndex, // Start Bar Index
int verifier = 71 // Number of Verifiers
)
{
//
// Update Calculations ...
Calculate();
//
return IsSame(
lowerCBuffer,
verifier,
barIndex //
);
}
//
// High ...
//
// Upper ...
//
double GetUpperH(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate();
//
int count = ArraySize(upperHBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return upperHBuffer[barIndex];
}
//
// Copy Required Items ...
int CopyUpperH(
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,
upperHBuffer,
buffer,
forceClean
//
);
}
//
bool IsSameUpperH(
int barIndex, // Start Bar Index
int verifier = 71 // Number of Verifiers
)
{
//
// Update Calculations ...
Calculate();
//
return IsSame(
upperHBuffer,
verifier,
barIndex //
);
}
//
// Lower ...
//
double GetLowerH(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate();
//
int count = ArraySize(lowerHBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return lowerHBuffer[barIndex];
}
//
// Copy Required Items ...
int CopyLowerH(
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,
lowerHBuffer,
buffer,
forceClean
//
);
}
//
bool IsSameLowerH(
int barIndex, // Start Bar Index
int verifier = 71 // Number of Verifiers
)
{
//
// Update Calculations ...
Calculate();
//
return IsSame(
lowerHBuffer,
verifier,
barIndex //
);
}
//
// Low ...
//
// Upper ...
//
double GetUpperL(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate();
//
int count = ArraySize(upperLBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return upperLBuffer[barIndex];
}
//
// Copy Required Items ...
int CopyUpperL(
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,
upperLBuffer,
buffer,
forceClean
//
);
}
//
bool IsSameUpperL(
int barIndex, // Start Bar Index
int verifier = 71 // Number of Verifiers
)
{
//
// Update Calculations ...
Calculate();
//
return IsSame(
upperLBuffer,
verifier,
barIndex //
);
}
//
// Lower ...
//
double GetLowerL(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate();
//
int count = ArraySize(lowerLBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return lowerLBuffer[barIndex];
}
//
// Copy Required Items ...
int CopyLowerL(
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,
lowerLBuffer,
buffer,
forceClean
//
);
}
//
bool IsSameLowerL(
int barIndex, // Start Bar Index
int verifier = 71 // Number of Verifiers
)
{
//
// Update Calculations ...
Calculate();
//
return IsSame(
lowerLBuffer,
verifier,
barIndex //
);
}
//
void GetUppers(
double &result[],
int barIndex = 0 //
)
{
//
Clean(result);
//
double uo = GetUpperO(barIndex);
double uc = GetUpperC(barIndex);
double uh = GetUpperH(barIndex);
double ul = GetUpperL(barIndex);
//
Add(uo, result);
Add(uc, result);
Add(uh, result);
Add(ul, result);
}
double GetMinUpper(
int barIndex = 0 //
)
{
//
double values[];
GetUppers(values);
//
double result = GetMin(values);
//
return result;
}
double GetMaxUpper(
int barIndex = 0 //
)
{
//
double values[];
GetUppers(values);
//
double result = GetMax(values);
//
return result;
}
//
void GetLowers(
double &result[],
int barIndex = 0 //
)
{
//
Clean(result);
//
double lo = GetLowerO(barIndex);
double lc = GetLowerC(barIndex);
double lh = GetLowerH(barIndex);
double ll = GetLowerL(barIndex);
//
Add(lo, result);
Add(lc, result);
Add(lh, result);
Add(ll, result);
}
double GetMinLower(
int barIndex = 0 //
)
{
//
double values[];
GetLowers(values);
//
double result = GetMin(values);
//
return result;
}
double GetMaxLower(
int barIndex = 0 //
)
{
//
double values[];
GetLowers(values);
//
double result = GetMin(values);
//
return result;
}
//
// Protected ...
protected:
//
// Private ...
private:
//
// Props ...
XDONInputs mInputs; // Inputs ...
//
// Buffers ...
double upperOBuffer[];
double lowerOBuffer[];
double upperCBuffer[];
double lowerCBuffer[];
double upperHBuffer[];
double lowerHBuffer[];
double upperLBuffer[];
double lowerLBuffer[];
//
// Tools ...
//
// Calculate Values Until Now ...
void Calculate()
{
//
int totalBars = CountBars();
//
// Open ...
//
// Upper Buffer ...
CopyBuffer(
mHandler,
XDON_UPPER_O_LINE,
0,
totalBars,
upperOBuffer
//
);
//
// Lower Buffer ...
CopyBuffer(
mHandler,
XDON_LOWER_O_LINE,
0,
totalBars,
lowerOBuffer
//
);
//
// Close ...
//
// Upper Buffer ...
CopyBuffer(
mHandler,
XDON_UPPER_C_LINE,
0,
totalBars,
upperCBuffer
//
);
//
// Lower Buffer ...
CopyBuffer(
mHandler,
XDON_LOWER_C_LINE,
0,
totalBars,
lowerCBuffer
//
);
//
// High ...
//
// Upper Buffer ...
CopyBuffer(
mHandler,
XDON_UPPER_H_LINE,
0,
totalBars,
upperHBuffer
//
);
//
// Lower Buffer ...
CopyBuffer(
mHandler,
XDON_LOWER_H_LINE,
0,
totalBars,
lowerHBuffer
//
);
//
// Low ...
//
// Upper Buffer ...
CopyBuffer(
mHandler,
XDON_UPPER_L_LINE,
0,
totalBars,
upperLBuffer
//
);
//
// Lower Buffer ...
CopyBuffer(
mHandler,
XDON_LOWER_L_LINE,
0,
totalBars,
lowerLBuffer
//
);
}
};
//
// Tools ...