Files
MQL5Data/X121XKIEA/Classes/x-saherelm.x121.xki.parser.class.mq5
T
2026-01-07 19:53:22 +03:30

2585 lines
48 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;
}
//
// Parsers ...
// Indicators Base Conditions ...
// #region KI Fast ...
bool IsKIFastBullish(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
double state = helper.GetKIFastState(barIndex);
result = state >= 1;
//
return result;
}
bool IsKIFastBearish(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
double state = helper.GetKIFastState(barIndex);
result = state <= -1;
//
return result;
}
bool IsKIFastSwitchedToBullish(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result = IsKIFastBullish(barIndex) &&
!IsKIFastBullish(barIndex + 1);
//
return result;
}
bool IsKIFastSwitchedToBearish(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result = IsKIFastBearish(barIndex) &&
!IsKIFastBearish(barIndex + 1);
//
return result;
}
bool IsKIFastOverLast(
int barIndex = 0,
double distancePoint = 5 //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
double value = helper.GetKIFast(barIndex);
double pValue = helper.GetKIFast(barIndex + 1);
double point = GetPoints(symbol);
double distance = point * distancePoint;
//
result = value >= pValue + distance;
//
return result;
}
bool IsKIFastUnderLast(
int barIndex = 0,
double distancePoint = 5 //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
double value = helper.GetKIFast(barIndex);
double pValue = helper.GetKIFast(barIndex + 1);
double point = GetPoints(symbol);
double distance = point * distancePoint;
//
result = value <= pValue - distance;
//
return result;
}
bool IsKIFastSameAsLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result = IsValid() &&
helper.GetKIFast(barIndex) == helper.GetKIFast(barIndex + 1);
//
return result;
}
bool IsKIFastSwitchedOverLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsKIFastOverLast(barIndex) &&
!IsKIFastOverLast(barIndex + 1);
if (!result)
{
return result;
}
//
return result;
}
bool IsKIFastSwitchedUnderLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsKIFastUnderLast(barIndex) &&
!IsKIFastUnderLast(barIndex + 1);
if (!result)
{
return result;
}
//
return result;
}
// #endregion
// #region KI Slow ...
bool IsKISlowBullish(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
double state = helper.GetKISlowState(barIndex);
result = state >= 1;
//
return result;
}
bool IsKISlowBearish(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
double state = helper.GetKISlowState(barIndex);
result = state <= -1;
//
return result;
}
bool IsKISlowSwitchedToBullish(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result = IsKISlowBullish(barIndex) &&
!IsKISlowBullish(barIndex + 1);
//
return result;
}
bool IsKISlowSwitchedToBearish(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result = IsKISlowBearish(barIndex) &&
!IsKISlowBearish(barIndex + 1);
//
return result;
}
bool IsKISlowOverLast(
int barIndex = 0,
double distancePoint = 5 //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
double value = helper.GetKISlow(barIndex);
double pValue = helper.GetKISlow(barIndex + 1);
double point = GetPoints(symbol);
double distance = point * distancePoint;
//
result = value >= pValue + distance;
//
return result;
}
bool IsKISlowUnderLast(
int barIndex = 0,
double distancePoint = 5 //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
double value = helper.GetKISlow(barIndex);
double pValue = helper.GetKISlow(barIndex + 1);
double point = GetPoints(symbol);
double distance = point * distancePoint;
//
result = value <= pValue - distance;
//
return result;
}
bool IsKISlowSameAsLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result = IsValid() &&
helper.GetKISlow(barIndex) == helper.GetKISlow(barIndex + 1);
//
return result;
}
bool IsKISlowSwitchedOverLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsKISlowOverLast(barIndex) &&
!IsKISlowOverLast(barIndex + 1);
if (!result)
{
return result;
}
//
return result;
}
bool IsKISlowSwitchedUnderLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsKISlowUnderLast(barIndex) &&
!IsKISlowUnderLast(barIndex + 1);
if (!result)
{
return result;
}
//
return result;
}
// #endregion
// #region KI Super Slow ...
bool IsKISuperSlowBullish(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
double state = helper.GetKISuperSlowState(barIndex);
result = state >= 1;
//
return result;
}
bool IsKISuperSlowBearish(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
double state = helper.GetKISuperSlowState(barIndex);
result = state <= -1;
//
return result;
}
bool IsKISuperSlowSwitchedToBullish(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result = IsKISuperSlowBullish(barIndex) &&
!IsKISuperSlowBullish(barIndex + 1);
//
return result;
}
bool IsKISuperSlowSwitchedToBearish(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result = IsKISuperSlowBearish(barIndex) &&
!IsKISuperSlowBearish(barIndex + 1);
//
return result;
}
bool IsKISuperSlowOverLast(
int barIndex = 0,
double distancePoint = 5 //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
double value = helper.GetKISuperSlow(barIndex);
double pValue = helper.GetKISuperSlow(barIndex + 1);
double point = GetPoints(symbol);
double distance = point * distancePoint;
//
result = value >= pValue + distance;
//
return result;
}
bool IsKISuperSlowUnderLast(
int barIndex = 0,
double distancePoint = 5 //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
double value = helper.GetKISuperSlow(barIndex);
double pValue = helper.GetKISuperSlow(barIndex + 1);
double point = GetPoints(symbol);
double distance = point * distancePoint;
//
result = value <= pValue - distance;
//
return result;
}
bool IsKISuperSlowSameAsLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result = IsValid() &&
helper.GetKISuperSlow(barIndex) == helper.GetKISuperSlow(barIndex + 1);
//
return result;
}
bool IsKISuperSlowSwitchedOverLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsKISuperSlowOverLast(barIndex) &&
!IsKISuperSlowOverLast(barIndex + 1);
if (!result)
{
return result;
}
//
return result;
}
bool IsKISuperSlowSwitchedUnderLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsKISuperSlowUnderLast(barIndex) &&
!IsKISuperSlowUnderLast(barIndex + 1);
if (!result)
{
return result;
}
//
return result;
}
// #endregion
// #region KI Wave ...
bool IsKIWaveBullish(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result = helper.GetKIWaveState(barIndex) >= 1;
//
return result;
}
bool IsKIWaveBearish(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result = helper.GetKIWaveState(barIndex) <= -1;
//
return result;
}
bool IsKIWaveSwitchedToBullish(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result = IsKIWaveBullish(barIndex) &&
!IsKIWaveBullish(barIndex + 1);
//
return result;
}
bool IsKIWaveSwitchedToBearish(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result = IsKIWaveBearish(barIndex) &&
!IsKIWaveBearish(barIndex + 1);
//
return result;
}
bool IsKIWaveOverLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result = IsValid() &&
helper.GetKIWave(barIndex) > helper.GetKIWave(barIndex + 1);
//
return result;
}
bool IsKIWaveUnderLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result = IsValid() &&
helper.GetKIWave(barIndex) < helper.GetKIWave(barIndex + 1);
//
return result;
}
bool IsKIWaveSwitchedOverLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsKIWaveOverLast(barIndex) &&
!IsKIWaveOverLast(barIndex + 1);
//
return result;
}
bool IsKIWaveSwitchedUnderLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsKIWaveUnderLast(barIndex) &&
!IsKIWaveUnderLast(barIndex + 1);
//
return result;
}
// #endregion
// #region KI Band ...
bool IsPriceOverKIUpper(
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.GetKIUpper(barIndex);
bar.Clean();
//
return result;
}
bool IsPriceUnderKIUpper(
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.GetKIUpper(barIndex);
bar.Clean();
//
return result;
}
bool IsPriceOverKILower(
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.GetKILower(barIndex);
bar.Clean();
//
return result;
}
bool IsPriceUnderKILower(
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.GetKILower(barIndex);
bar.Clean();
//
return result;
}
bool IsPriceInsideKIBands(
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.GetKIUpper(barIndex) &&
price > helper.GetKILower(barIndex);
bar.Clean();
//
return result;
}
bool IsPriceSwitchedOverKIUpper(
int barIndex = 0,
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsPriceOverKIUpper(barIndex, priceType) &&
!IsPriceOverKIUpper(barIndex + 1, priceType);
//
return result;
}
bool IsPriceSwitchedUnderKIUpper(
int barIndex = 0,
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsPriceUnderKIUpper(barIndex, priceType) &&
!IsPriceUnderKIUpper(barIndex + 1, priceType);
//
return result;
}
bool IsPriceSwitchedOverKILower(
int barIndex = 0,
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsPriceOverKILower(barIndex, priceType) &&
!IsPriceOverKILower(barIndex + 1, priceType);
//
return result;
}
bool IsPriceSwitchedUnderKILower(
int barIndex = 0,
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsPriceUnderKILower(barIndex, priceType) &&
!IsPriceUnderKILower(barIndex + 1, priceType);
//
return result;
}
// #endregion
// #region MA Fast/Slow/SuperSlow ...
// #region MA Fast ...
bool IsMAFastBullish(
int barIndex = 0,
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
XOHCL iBar;
result = IsValid() &&
iBar.Init(symbol, period, barIndex);
if (!result)
{
return result;
}
//
result = iBar.GetPrice(priceType) > helper.GetMAFast(barIndex);
//
iBar.Clean();
//
return result;
}
bool IsMAFastBearish(
int barIndex = 0,
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
XOHCL iBar;
result = IsValid() &&
iBar.Init(symbol, period, barIndex);
if (!result)
{
return result;
}
//
result = iBar.GetPrice(priceType) < helper.GetMAFast(barIndex);
//
iBar.Clean();
//
return result;
}
bool IsMAFastOverLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
helper.GetMAFast(barIndex) > helper.GetMAFast(barIndex + 1);
//
return result;
}
bool IsMAFastUnderLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
helper.GetMAFast(barIndex) < helper.GetMAFast(barIndex + 1);
//
return result;
}
bool IsMAFastSwitchedOverLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsMAFastOverLast(barIndex) &&
!IsMAFastOverLast(barIndex + 1);
//
return result;
}
bool IsMAFastSwitchedUnderLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsMAFastUnderLast(barIndex) &&
!IsMAFastUnderLast(barIndex + 1);
//
return result;
}
bool IsMAFastSwitchedToBullish(
int barIndex = 0,
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result = IsValid() &&
IsMAFastBullish(barIndex) &&
!IsMAFastBullish(barIndex + 1);
//
return result;
}
bool IsMAFastSwitchedToBearish(
int barIndex = 0,
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result = IsValid() &&
IsMAFastBearish(barIndex) &&
!IsMAFastBearish(barIndex + 1);
//
return result;
}
// #endregion
// #region MA Slow ...
bool IsMASlowBullish(
int barIndex = 0,
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
XOHCL iBar;
result = IsValid() &&
iBar.Init(symbol, period, barIndex);
if (!result)
{
return result;
}
//
result = iBar.GetPrice(priceType) > helper.GetMASlow(barIndex);
//
iBar.Clean();
//
return result;
}
bool IsMASlowBearish(
int barIndex = 0,
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
XOHCL iBar;
result = IsValid() &&
iBar.Init(symbol, period, barIndex);
if (!result)
{
return result;
}
//
result = iBar.GetPrice(priceType) < helper.GetMASlow(barIndex);
//
iBar.Clean();
//
return result;
}
bool IsMASlowOverLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
helper.GetMASlow(barIndex) > helper.GetMASlow(barIndex + 1);
//
return result;
}
bool IsMASlowUnderLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
helper.GetMASlow(barIndex) < helper.GetMASlow(barIndex + 1);
//
return result;
}
bool IsMASlowSwitchedOverLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsMASlowOverLast(barIndex) &&
!IsMASlowOverLast(barIndex + 1);
//
return result;
}
bool IsMASlowSwitchedUnderLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsMASlowUnderLast(barIndex) &&
!IsMASlowUnderLast(barIndex + 1);
//
return result;
}
bool IsMASlowSwitchedToBullish(
int barIndex = 0,
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result = IsValid() &&
IsMASlowBullish(barIndex) &&
!IsMASlowBullish(barIndex + 1);
//
return result;
}
bool IsMASlowSwitchedToBearish(
int barIndex = 0,
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result = IsValid() &&
IsMASlowBearish(barIndex) &&
!IsMASlowBearish(barIndex + 1);
//
return result;
}
// #endregion
// #region MA Super Slow ...
bool IsMASuperSlowBullish(
int barIndex = 0,
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
XOHCL iBar;
result = IsValid() &&
iBar.Init(symbol, period, barIndex);
if (!result)
{
return result;
}
//
result = iBar.GetPrice(priceType) > helper.GetMASuperSlow(barIndex);
//
iBar.Clean();
//
return result;
}
bool IsMASuperSlowBearish(
int barIndex = 0,
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
XOHCL iBar;
result = IsValid() &&
iBar.Init(symbol, period, barIndex);
if (!result)
{
return result;
}
//
result = iBar.GetPrice(priceType) < helper.GetMASuperSlow(barIndex);
//
iBar.Clean();
//
return result;
}
bool IsMASuperSlowOverLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
helper.GetMASuperSlow(barIndex) > helper.GetMASuperSlow(barIndex + 1);
//
return result;
}
bool IsMASuperSlowUnderLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
helper.GetMASuperSlow(barIndex) < helper.GetMASuperSlow(barIndex + 1);
//
return result;
}
bool IsMASuperSlowSwitchedOverLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsMASuperSlowOverLast(barIndex) &&
!IsMASuperSlowOverLast(barIndex + 1);
//
return result;
}
bool IsMASuperSlowSwitchedUnderLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsMASuperSlowUnderLast(barIndex) &&
!IsMASuperSlowUnderLast(barIndex + 1);
//
return result;
}
bool IsMASuperSlowSwitchedToBullish(
int barIndex = 0,
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result = IsValid() &&
IsMASuperSlowBullish(barIndex) &&
!IsMASuperSlowBullish(barIndex + 1);
//
return result;
}
bool IsMASuperSlowSwitchedToBearish(
int barIndex = 0,
ENUM_X_PRICE priceType = X_PRICE_CLOSE //
)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result = IsValid() &&
IsMASuperSlowBearish(barIndex) &&
!IsMASuperSlowBearish(barIndex + 1);
//
return result;
}
// #endregion
bool IsMACrossoverBullish(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result = helper.GetMAFast(barIndex) > helper.GetMASlow(barIndex);
return result;
}
bool IsMACrossoverBearish(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result = helper.GetMAFast(barIndex) < helper.GetMASlow(barIndex);
return result;
}
bool IsMACrossoverSwitchedToBullish(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result = IsMACrossoverBullish(barIndex) &&
!IsMACrossoverBullish(barIndex + 1);
return result;
}
bool IsMACrossoverSwitchedToBearish(int barIndex = 0)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result = IsMACrossoverBearish(barIndex) &&
!IsMACrossoverBearish(barIndex + 1);
return result;
}
// #endregion
// #region PV ...
bool IsPeakSameAsLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result = IsValid();
if (!result)
{
return result;
}
//
result = helper.GetPeak(barIndex) == helper.GetPeak(barIndex + 1);
//
return result;
}
bool IsPeakOverLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result = IsValid();
if (!result)
{
return result;
}
//
result = helper.GetPeak(barIndex) > helper.GetPeak(barIndex + 1);
//
return result;
}
bool IsPeakUnderLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result = IsValid();
if (!result)
{
return result;
}
//
result = helper.GetPeak(barIndex) < helper.GetPeak(barIndex + 1);
//
return result;
}
int CountSamePeaks(
int barIndex = 0,
int loopback = 10 //
)
{
//
int result = 0;
//
if (!IsValid())
{
return result;
}
//
loopback = NormalizeInt(loopback, 2);
barIndex = NormalizeBarIndex(barIndex);
//
for (int i = barIndex; i < barIndex + loopback; i++)
{
//
if (IsPeakSameAsLast(i))
{
result++;
}
}
//
return result;
}
bool IsValeSameAsLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result = IsValid();
if (!result)
{
return result;
}
//
result = helper.GetVale(barIndex) == helper.GetVale(barIndex + 1);
//
return result;
}
bool IsValeOverLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result = IsValid();
if (!result)
{
return result;
}
//
result = helper.GetVale(barIndex) > helper.GetVale(barIndex + 1);
//
return result;
}
bool IsValeUnderLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result = IsValid();
if (!result)
{
return result;
}
//
result = helper.GetVale(barIndex) < helper.GetVale(barIndex + 1);
//
return result;
}
int CountSameVales(
int barIndex = 0,
int loopback = 10 //
)
{
//
int result = 0;
//
if (!IsValid())
{
return result;
}
//
loopback = NormalizeInt(loopback, 2);
barIndex = NormalizeBarIndex(barIndex);
//
for (int i = barIndex; i < barIndex + loopback; i++)
{
//
if (IsValeSameAsLast(i))
{
result++;
}
}
//
return result;
}
// #endregion
// #region ATR ...
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 IsATROverLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
helper.GetATR(barIndex) > helper.GetATR(barIndex + 1);
//
return result;
}
bool IsATRUnderLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
helper.GetATR(barIndex) < helper.GetATR(barIndex + 1);
//
return result;
}
bool IsATRSwitchedOverLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsATROverLast(barIndex) &&
!IsATROverLast(barIndex + 1);
//
return result;
}
bool IsATRSwitchedUnderLast(int barIndex = 0)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsATRUnderLast(barIndex) &&
!IsATRUnderLast(barIndex + 1);
//
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;
}
// #endregion
// #region RSI ...
bool IsRSIBullish(
int barIndex = 0,
double threshold = 50 //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result = helper.GetRSI(barIndex) > threshold;
return result;
}
bool IsRSIBearish(
int barIndex = 0,
double threshold = 50 //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result = helper.GetRSI(barIndex) < threshold;
return result;
}
bool IsRSIOverbought(
int barIndex = 0,
double threshold = 70 //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result = helper.GetRSI(barIndex) > threshold;
return result;
}
bool IsRSIOversold(
int barIndex = 0,
double threshold = 30 //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result = helper.GetRSI(barIndex) < threshold;
return result;
}
bool IsRSISwitchedToOverSold(
int barIndex = 0,
double threshold = 30 //
)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsRSIOversold(barIndex, threshold) &&
!IsRSIOversold(barIndex + 1, threshold);
//
return result;
}
bool IsRSISwitchedFromOverSold(
int barIndex = 0,
double threshold = 30 //
)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
!IsRSIOversold(barIndex, threshold) &&
IsRSIOversold(barIndex + 1, threshold);
//
return result;
}
bool IsRSISwitchedToOverbought(
int barIndex = 0,
double threshold = 70 //
)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
IsRSIOverbought(barIndex, threshold) &&
!IsRSIOverbought(barIndex + 1, threshold);
//
return result;
}
bool IsRSISwitchedFromOverbought(
int barIndex = 0,
double threshold = 70 //
)
{
//
bool result = false;
//
barIndex = NormalizeBarIndex(barIndex);
//
result =
IsValid() &&
!IsRSIOverbought(barIndex, threshold) &&
IsRSIOverbought(barIndex + 1, threshold);
//
return result;
}
bool IsRSISwitchedToBullish(
int barIndex = 0,
double threshold = 50 //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result =
IsRSIBullish(barIndex, threshold) &&
!IsRSIBullish(barIndex + 1, threshold);
//
return result;
}
bool IsRSISwitchedToBearish(
int barIndex = 0,
double threshold = 50 //
)
{
//
bool result = false;
//
// Normalize ...
barIndex = NormalizeBarIndex(barIndex);
//
// Validate ...
result = IsValid();
if (!result)
{
return result;
}
//
result =
IsRSIBearish(barIndex, threshold) &&
!IsRSIBearish(barIndex + 1, threshold);
//
return result;
}
// #endregion
// #region Composite ...
// #endregion
//
// Protected ...
protected:
//
//
// Private ...
private:
//
XCX121XKIHelper *helper;
//
};
//