Files
MQL5Data/X121XKIEA/Classes/x-saherelm.x121.xki.parser.class.mq5
T
2026-01-09 22:41:21 +03:30

731 lines
16 KiB
Plaintext

///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Helper Parser Class Library
// ----------------------------------------------------
// Name: XCX121XKIHelperParser
// Description: provides all Indicator
// Helper Parse 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 "../../Helpers/x-saherelm.x121.xki.helper.mq5"
//
// Definitions ...
//
// Implementation ...
class XCX121XKIHelperParser : XCBase
{
//
// Public ...
public:
//
string symbol;
ENUM_TIMEFRAMES period;
//
// Constructor ...
XCX121XKIHelperParser(XCX121XKIHelper *_helper)
{
//
helper = _helper;
symbol = _helper.GetSymbol();
period = _helper.GetPeriod();
}
//
// Deconstructor ...
~XCX121XKIHelperParser()
{
ZeroMemory(helper);
}
//
// Tools ...
/**
* Validate ...
*
* @return ( bool )
*/
bool IsValid()
{
//
bool result = false;
//
result = helper != NULL &&
helper.IsValid() &&
IsXValid(symbol) &&
IsXValid(period);
//
return result;
}
/**
* Normalize Bar Index ...
*
* @param barIndex: int, Provided Bar Index ...
*
* @return ( int )
*/
int NormalizeBarIndex(int barIndex = 0)
{
//
int result = -1;
//
if (!IsValid())
{
return result;
}
//
result = helper.NormalizeBarIndex(barIndex);
//
return result;
}
double GetPoints()
{
return GetXPoints(symbol);
}
XOHCL GetBar(int barIndex = 0)
{
//
barIndex = NormalizeBarIndex(barIndex);
XOHCL result;
result.Init(symbol, period, barIndex);
return result;
}
double GetPrice(
int barIndex = 0,
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
)
{
//
XOHCL bar = GetBar(barIndex);
double result = EMPTY_VALUE;
if (bar.IsValid())
{
result = bar.GetPrice(priceType);
}
bar.Clean();
//
return result;
}
//
// Parsers ...
// Indicators Base Conditions ...
//
DECLARE_STATE_FUNCTIONS("KIFast", helper.GetKIFastState, NormalizeBarIndex);
DECLARE_VALUE_COMPARATOR_FUNCTIONS("KIFast", helper.GetKIFast, NormalizeBarIndex, GetPoints);
//
DECLARE_STATE_FUNCTIONS("KISlow", helper.GetKISlowState, NormalizeBarIndex);
DECLARE_VALUE_COMPARATOR_FUNCTIONS("KISlow", helper.GetKISlow, NormalizeBarIndex, GetPoints);
//
DECLARE_STATE_FUNCTIONS("KISuperSlow", helper.GetKISlowState, NormalizeBarIndex);
DECLARE_VALUE_COMPARATOR_FUNCTIONS("KISuperSlow", helper.GetKISlow, NormalizeBarIndex, GetPoints);
//
DECLARE_STATE_FUNCTIONS("KIWave", helper.GetKIWaveState, NormalizeBarIndex);
DECLARE_VALUE_COMPARATOR_FUNCTIONS("KIWave", helper.GetKIWave, NormalizeBarIndex, GetPoints);
//
DECLARE_PRICE_COMPARATOR_FUNCTIONS("KIUpper", helper.GetKIUpper, NormalizeBarIndex, GetPrice);
DECLARE_PRICE_COMPARATOR_FUNCTIONS("KILower", helper.GetKILower, NormalizeBarIndex, GetPrice);
//
DECLARE_PRICE_BASED_STATE_FUNCTIONS("MAFast", helper.GetMAFast, NormalizeBarIndex, GetPoints, GetPrice);
DECLARE_PRICE_BASED_STATE_FUNCTIONS("MASlow", helper.GetMASlow, NormalizeBarIndex, GetPoints, GetPrice);
DECLARE_PRICE_BASED_STATE_FUNCTIONS("MASuperSlow", helper.GetMASuperSlow, NormalizeBarIndex, GetPoints, GetPrice);
//
DECLARE_CROSSING_COMPARATOR_FUNCTIONS("KI", "Fast", "Slow", helper.GetKIFast, helper.GetKISlow, NormalizeBarIndex, GetPoints);
DECLARE_CROSSING_COMPARATOR_FUNCTIONS("MA", "Fast", "Slow", helper.GetMAFast, helper.GetMASlow, NormalizeBarIndex, GetPoints);
DECLARE_CROSSING_COMPARATOR_FUNCTIONS("KI", "Slow", "SuperSlow", helper.GetKISlow, helper.GetKISuperSlow, NormalizeBarIndex, GetPoints);
DECLARE_CROSSING_COMPARATOR_FUNCTIONS("MA", "Slow", "SuperSlow", helper.GetMASlow, helper.GetMASuperSlow, NormalizeBarIndex, GetPoints);
//
DECLARE_VALUE_COMPARATOR_FUNCTIONS("Peak", helper.GetPeak, NormalizeBarIndex, GetPoints);
DECLARE_VALUE_COMPARATOR_FUNCTIONS("Vale", helper.GetVale, NormalizeBarIndex, GetPoints);
//
DECLARE_VALUE_COMPARATOR_FUNCTIONS("ATR", helper.GetATR, NormalizeBarIndex, GetPoints);
DECLARE_VALUE_COMPARATOR_FUNCTIONS("ATRSmoothed", helper.GetATRSmoothed, NormalizeBarIndex, GetPoints);
//
DECLARE_VALUE_COMPARATOR_FUNCTIONS("RSI", helper.GetRSI, NormalizeBarIndex, GetPoints);
DECLARE_VALUE_COMPARATOR_FUNCTIONS("RSISmoothed", helper.GetRSISmoothed, NormalizeBarIndex, GetPoints);
//
//
//
bool IsATRBreakoutUp(
int barIndex = 0,
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid() &&
IsXValid(priceType);
if (!result)
{
return result;
}
//
XOHCL bar;
result = bar.Init(symbol, period, barIndex);
if (!result)
{
return result;
}
//
double price = bar.GetPrice(priceType);
result = price > helper.GetATRRawUpper(barIndex);
bar.Clean();
//
return result;
}
bool IsATRBreakoutDown(
int barIndex = 0,
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid() &&
IsXValid(priceType);
if (!result)
{
return result;
}
//
XOHCL bar;
result = bar.Init(symbol, period, barIndex);
if (!result)
{
return result;
}
//
double price = bar.GetPrice(priceType);
result = price < helper.GetATRRawLower(barIndex);
bar.Clean();
//
return result;
}
bool IsVolatilityHigh(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
double atr = helper.GetATR(barIndex);
double atrMa = helper.GetATRSmoothed(barIndex);
result = atr > atrMa;
//
return result;
}
bool IsVolatilityLow(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
double atr = helper.GetATR(barIndex);
double atrMa = helper.GetATRSmoothed(barIndex);
result = atr < atrMa;
//
return result;
}
bool IsVolatilitySwitchdToHigh(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
double atr = helper.GetATR(barIndex);
double atrPrev = helper.GetATR(barIndex + 1);
double atrMa = helper.GetATRSmoothed(barIndex);
double atrMaPrev = helper.GetATRSmoothed(barIndex + 1);
//
result =
atr > atrMa &&
atrPrev <= atrMaPrev;
//
return result;
}
bool IsVolatilitySwitchdToLow(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
double atr = helper.GetATR(barIndex);
double atrPrev = helper.GetATR(barIndex + 1);
double atrMa = helper.GetATRSmoothed(barIndex);
double atrMaPrev = helper.GetATRSmoothed(barIndex + 1);
//
result =
atr < atrMa &&
atrPrev >= atrMaPrev;
//
return result;
}
bool IsRSIBullish(
int barIndex = 0,
double threshold = 55,
double tolerance = 2 //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result = helper.GetRSI(barIndex) > threshold + (GetXPoints(symbol) * tolerance) ||
helper.GetRSI(barIndex) > threshold - (GetXPoints(symbol) * tolerance);
//
return result;
}
bool IsRSISwitchedToBullish(
int barIndex = 0,
double threshold = 55,
double tolerance = 2 //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result =
IsRSIBullish(barIndex, threshold, tolerance) &&
!IsRSIBullish(barIndex + 1, threshold, tolerance);
//
return result;
}
bool IsRSIBearish(
int barIndex = 0,
double threshold = 45,
double tolerance = 2 //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result = helper.GetRSI(barIndex) < threshold + (GetXPoints(symbol) * tolerance) ||
helper.GetRSI(barIndex) < threshold - (GetXPoints(symbol) * tolerance);
//
return result;
}
bool IsRSISwitchedToBearish(
int barIndex = 0,
double threshold = 45,
double tolerance = 2 //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result =
IsRSIBearish(barIndex, threshold, tolerance) &&
!IsRSIBearish(barIndex + 1, threshold, tolerance);
//
return result;
}
bool IsRSIRising(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
helper.GetRSI(barIndex) > helper.GetRSISmoothed(barIndex);
//
return result;
}
bool IsRSISwitchedToRising(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsRSIRising(barIndex) &&
!IsRSIRising(barIndex + 1);
//
return result;
}
bool IsRSIFalling(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
helper.GetRSI(barIndex) < helper.GetRSISmoothed(barIndex);
//
return result;
}
bool IsRSISwitchedToFalling(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsRSIFalling(barIndex) &&
!IsRSIFalling(barIndex + 1);
//
return result;
}
bool IsRSIOverbought(
int barIndex = 0,
double threshold = 70,
double tolerance = 2 //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result = helper.GetRSI(barIndex) > threshold + (GetXPoints(symbol) * tolerance) ||
helper.GetRSI(barIndex) > threshold - (GetXPoints(symbol) * tolerance);
//
return result;
}
bool IsRSIOversold(
int barIndex = 0,
double threshold = 30,
double tolerance = 2 //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result = helper.GetRSI(barIndex) < threshold + (GetXPoints(symbol) * tolerance) ||
helper.GetRSI(barIndex) < threshold - (GetXPoints(symbol) * tolerance);
//
return result;
}
bool IsRSISwitchedToOversold(
int barIndex = 0,
double threshold = 30,
double tolerance = 2 //
)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsRSIOversold(barIndex, threshold, tolerance) &&
!IsRSIOversold(barIndex + 1, threshold, tolerance);
//
return result;
}
bool IsRSISwitchedFromOversold(
int barIndex = 0,
double threshold = 30,
double tolerance = 2 //
)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
!IsRSIOversold(barIndex, threshold, tolerance) &&
IsRSIOversold(barIndex + 1, threshold, tolerance);
//
return result;
}
bool IsRSISwitchedToOverbought(
int barIndex = 0,
double threshold = 70,
double tolerance = 2 //
)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsRSIOverbought(barIndex, threshold, tolerance) &&
!IsRSIOverbought(barIndex + 1, threshold, tolerance);
//
return result;
}
bool IsRSISwitchedFromOverbought(
int barIndex = 0,
double threshold = 70,
double tolerance = 2 //
)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
!IsRSIOverbought(barIndex, threshold, tolerance) &&
IsRSIOverbought(barIndex + 1, threshold, tolerance);
//
return result;
}
//
// Protected ...
protected:
//
//
// Private ...
private:
//
XCX121XKIHelper *helper;
//
};
//