Files
xMQL5/BKPS/XAU5-14021118-Full/Helpers/x-saherelm.xama.indicator.helper.lib.mq5
T
2024-02-07 14:46:54 +03:30

608 lines
9.9 KiB
Plaintext

/////////////////////////////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 XAMA Indicator Helper for Signal Providers
// --------------------------------------------------------------------------
//
// 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
//
// Includes ...
#include "../Libraries/x-saherelm.log.lib.mq5"
#include "../Libraries/x-saherelm.common.lib.mq5"
//
// START Enum Definitions ...
//
//
// XAMA Indicator States ...
enum ENUM_X_XAMA_STATES
{
X_XAMA_BULLISH = 1,
X_XAMA_BEARISH = -1,
X_XAMA_NEUTURAL = 0,
};
//
// XAMA Indicator Buffer Lines ...
enum ENUM_X_XAMA_BUFFER_LINES
{
X_XAMA_MA_LINE = 0,
X_XAMA_MC_COLOR_LINE = 1,
X_XAMA_STATE_LINE = 2,
};
//
// END Enum Definitions ...
//
//
// START Inputs ...
//
// input group "XAMA Indicator";
//
// input int xAMALength = 18; // Market Length
// input int xAMAFastEMA = 2; // Fast EMA Period
// input int xAMASlowEMA = 30; // Slow EMA Period
// input int xAMAShift = 0; // Shift
// input ENUM_APPLIED_PRICE xAMAAppliedTo = PRICE_CLOSE; // Applied To
//
// Configurations ...
int xAMALength = 18; // Market Length
int xAMAFastEMA = 2; // Fast EMA Period
int xAMASlowEMA = 30; // Slow EMA Period
int xAMAShift = 0; // Shift
ENUM_APPLIED_PRICE xAMAAppliedTo = PRICE_CLOSE; // Applied To
//
// END Inputs ...
//
//
// START Definitions ...
//
int xAMAHandler = INVALID_HANDLE;
double xAMAMaBuffer[];
double xAMAStateBuffer[];
//
// END Definitions ...
//
//
// START Handler Functions ...
//
//
// Validate Inputs ...
bool XAMAValidateInputs()
{
//
bool result = false;
//
result =
xAMALength > 2 &&
xAMAFastEMA < xAMALength &&
xAMAFastEMA < xAMASlowEMA &&
xAMAShift >= 0;
//
if (!result)
{
//
LogMessage("XAMA Indicator Inputs Validation Failed ...");
}
//
return result;
}
//
// Init Indicators ...
bool XAMAInitHandlers()
{
//
bool result = false;
//
// Initialize Indicator/Indicator Handlers ...
ResetLastError();
//
// XAMA Handler ...
ArraySetAsSeries(xAMAMaBuffer, true);
ArraySetAsSeries(xAMAStateBuffer, true);
xAMAHandler = iCustom(
_Symbol,
_Period,
"x-saherelm.xama.indicator",
//
// Inputs ...
xAMALength,
xAMAFastEMA,
xAMASlowEMA,
xAMAShift,
xAMAAppliedTo
//
);
if (xAMAHandler == INVALID_HANDLE)
{
//
LogMessage("failed to Initialize XAMA Indicator: " + (string)GetLastError());
return result;
}
//
result = true;
//
return result;
}
//
// Release Indicators ...
void XAMAReleaseHandlers()
{
IndicatorRelease(xAMAHandler);
}
//
// Handle Reading Buffers ...
void XAMAReadBuffers(
int xAMAItemsPerTick // Number Of Reading Buffer Items Per Tick
)
{
//
// XAMA Ma Buffer ...
CopyBuffer(
xAMAHandler,
X_XAMA_MA_LINE,
0,
xAMAItemsPerTick,
xAMAMaBuffer);
//
// XAMA State Buffer ...
CopyBuffer(
xAMAHandler,
X_XAMA_STATE_LINE,
0,
xAMAItemsPerTick,
xAMAStateBuffer);
}
//
// END Handler Funcions ...
//
//
// START XAMA Custom Functions ...
//
//
// Check SC is Peak ...
bool XAMAIsPeak(
int bar_index, // Specified Index ...
int length = 10 // Specified Length ...
)
{
//
bool result = false;
//
if (
length <= 0 ||
bar_index <= 0 ||
!XAMAIsValidBuffersSize(bar_index + length + 1))
{
return result;
}
//
// Must Decreasing ...
bool isIncreasing = IsIncreasing(
bar_index + length,
bar_index,
xAMAMaBuffer
//
);
//
return result;
}
//
// Check SC is Vale ...
bool XAMAIsVale(
int bar_index, // Specified Index ...
int length = 10 // Specified Length ...
)
{
//
bool result = false;
//
if (
length <= 0 ||
bar_index <= 0 ||
!XAMAIsValidBuffersSize(bar_index + length + 1))
{
return result;
}
//
result = IsDecreasing(
bar_index + length,
bar_index,
xAMAMaBuffer
//
);
//
return result;
}
//
// Check TM Crossed Up ...
bool XAMAIsStartBullish(
int bar_index // Specified Index ...
)
{
//
bool result = false;
//
if (
bar_index <= 0 ||
!XAMAIsValidBuffersSize(bar_index + 2))
{
return result;
}
//
result =
//
xAMAStateBuffer[bar_index] == X_XAMA_BULLISH &&
xAMAStateBuffer[bar_index + 1] != X_XAMA_BULLISH
//
;
//
return result;
}
//
// Check TM Crossed Up After Neutural State ...
bool XAMAIsStartBullishAfterNeutural(
int bar_index // Specified Index ...
)
{
//
bool result = false;
//
if (
bar_index <= 0 ||
!XAMAIsValidBuffersSize(bar_index + 2))
{
return result;
}
//
result =
//
xAMAStateBuffer[bar_index] == X_XAMA_BULLISH &&
xAMAStateBuffer[bar_index + 1] == X_XAMA_NEUTURAL
//
;
//
return result;
}
//
// Check TM In Up State ...
bool XAMAIsBullish(
int bar_index // Specified Index ...
)
{
//
bool result = false;
//
if (
bar_index <= 0 ||
!XAMAIsValidBuffersSize(bar_index + 1))
{
return result;
}
//
result =
//
xAMAStateBuffer[bar_index] == X_XAMA_BULLISH
//
;
//
return result;
}
//
// Check TM Ends Up State ...
bool XAMAIsEndBullish(
int bar_index // Specified Index ...
)
{
//
bool result = false;
//
if (
bar_index <= 0 ||
!XAMAIsValidBuffersSize(bar_index + 2))
{
return result;
}
//
result =
//
xAMAStateBuffer[bar_index] != X_XAMA_BULLISH &&
xAMAStateBuffer[bar_index + 1] == X_XAMA_BULLISH
//
;
//
return result;
}
//
// Check TM Ends Up State By Neutural ...
bool XAMAIsEndBullishByNeutural(
int bar_index // Specified Index ...
)
{
//
bool result = false;
//
if (
bar_index <= 0 ||
!XAMAIsValidBuffersSize(bar_index + 2))
{
return result;
}
//
result =
//
xAMAStateBuffer[bar_index] == X_XAMA_NEUTURAL &&
xAMAStateBuffer[bar_index + 1] == X_XAMA_BULLISH
//
;
//
return result;
}
//
// Check TM Crossed Down ...
bool XAMAIsStartBearish(
int bar_index // Specified Index ...
)
{
//
bool result = false;
//
if (
bar_index <= 0 ||
!XAMAIsValidBuffersSize(bar_index + 2))
{
return result;
}
//
result =
//
xAMAStateBuffer[bar_index] == X_XAMA_BEARISH &&
xAMAStateBuffer[bar_index + 1] != X_XAMA_BEARISH
//
;
//
return result;
}
//
// Check TM Crossed Down After Neutural State ...
bool XAMAIsStartBearishAfterNeutural(
int bar_index // Specified Index ...
)
{
//
bool result = false;
//
if (
bar_index <= 0 ||
!XAMAIsValidBuffersSize(bar_index + 2))
{
return result;
}
//
result =
//
xAMAStateBuffer[bar_index] == X_XAMA_BEARISH &&
xAMAStateBuffer[bar_index + 1] == X_XAMA_NEUTURAL
//
;
//
return result;
}
//
// Check TM In Down State ...
bool XAMAIsBearish(
int bar_index // Specified Index ...
)
{
//
bool result = false;
//
if (
bar_index <= 0 ||
!XAMAIsValidBuffersSize(bar_index + 1))
{
return result;
}
//
result =
//
xAMAStateBuffer[bar_index] == X_XAMA_BEARISH
//
;
//
return result;
}
//
// Check TM Ends Down State ...
bool XAMAIsEndBearish(
int bar_index // Specified Index ...
)
{
//
bool result = false;
//
if (
bar_index <= 0 ||
!XAMAIsValidBuffersSize(bar_index + 2))
{
return result;
}
//
result =
//
xAMAStateBuffer[bar_index] != X_XAMA_BEARISH &&
xAMAStateBuffer[bar_index + 1] == X_XAMA_BEARISH
//
;
//
return result;
}
//
// Check TM Ends Down State By Neutural ...
bool XAMAIsEndBearishByNeutural(
int bar_index // Specified Index ...
)
{
//
bool result = false;
//
if (
bar_index <= 0 ||
!XAMAIsValidBuffersSize(bar_index + 2))
{
return result;
}
//
result =
//
xAMAStateBuffer[bar_index] == X_XAMA_NEUTURAL &&
xAMAStateBuffer[bar_index + 1] == X_XAMA_BEARISH
//
;
//
return result;
}
//
// Check TM In Neutural State ...
bool XAMAIsNeutural(
int bar_index // Specified Index ...
)
{
//
bool result = false;
//
if (
bar_index <= 0 ||
!XAMAIsValidBuffersSize(bar_index + 1))
{
return result;
}
//
result =
//
xAMAStateBuffer[bar_index] == X_XAMA_NEUTURAL
//
;
//
return result;
}
//
// Check all Buffers has valid Size ...
bool XAMAIsValidBuffersSize(
int size // the size of buffers which min size for requirements
)
{
//
bool result = false;
//
if (
size <= 0 ||
//
ArraySize(xAMAMaBuffer) < size
//
)
{
result = false;
}
else
{
result = true;
}
//
return result;
}
//
// END XAMA Custom Functions ...
//