Files
xMQL5/BKPS/Series2/XTMPack/x-saherelm.xmap.provider.xtd.oscillator.helper.lib.mq5
T
2024-01-25 04:09:42 +03:30

1021 lines
18 KiB
Plaintext

////////////////////////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 XTD Oscillator 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
//
#include "..\Libraries\x-saherelm.log.lib.mq5"
#include "..\Libraries\x-saherelm.common.lib.mq5"
#include "x-saherelm.xmap.provider.inputs.lib.mq5"
//
// START Enum Definitions ...
//
//
// XTD Oscillator States ...
enum ENUM_X_XTD_STATES
{
X_XTD_BULLISH_CROSSED_OVER_BEARISH = 2,
X_XTD_BULLISH_OVER_BEARISH = 1,
X_XTD_NEUTURAL = 0,
X_XTD_BULLISH_UNDER_BEARISH = -1,
X_XTD_BULLISH_CROSSED_UNDER_BEARISH = -2
};
//
// XTD Oscillator Buffer Lines ...
enum ENUM_X_XTD_BUFFER_LINES
{
X_XTD_BULLISH_POWER_LINE = 0,
X_XTD_BEARISH_POWER_LINE = 1,
X_XTD_SIGNAL_LINE = 2,
};
//
// END Enum Definitions ...
//
//
// START Inputs ...
//
input group "XTD Oscillator";
input int xTDLength = 28; // Market Length
input bool xTDDrawCrosses = false; // Draw Cross Arrows
input uchar xTDBullishArrowCode = 228; // Cross Over Arrow Code
input color xTDBullishArrowColor = clrAqua; // Cross Over Arrow Color
input uchar xTDBearishArrowCode = 230; // Cross Under Arrow Code
input color xTDBearishArrowColor = clrMagenta; // Cross Under Arrow Color
//
// END Inputs ...
//
//
// START Definitions ...
//
int xTDHandler = INVALID_HANDLE;
double xTDBullishBuffer[];
double xTDBearishBuffer[];
double xTDSignalBuffer[];
//
// END Definitions ...
//
//
// START Handler Functions ...
//
//
// Init Indicators ...
bool XTDInitHandlers()
{
//
bool result = false;
//
// Initialize Indicator/Oscillator Handlers ...
ResetLastError();
//
// XTD Handler ...
ArraySetAsSeries(xTDBullishBuffer, true);
ArraySetAsSeries(xTDBearishBuffer, true);
ArraySetAsSeries(xTDSignalBuffer, true);
xTDHandler = iCustom(
_Symbol,
_Period,
"x-saherelm.xtd.oscillator",
//
// Inputs ...
xTDLength,
xTDDrawCrosses,
xTDBullishArrowCode,
xTDBullishArrowColor,
xTDBearishArrowCode,
xTDBearishArrowColor);
if (xTDHandler == INVALID_HANDLE)
{
//
LogMessage("failed to Initialize XTD Oscillator: " + (string)GetLastError());
return result;
}
//
result = true;
//
return result;
}
//
// Release Indicators ...
void XTDReleaseHandlers()
{
IndicatorRelease(xTDHandler);
}
//
// Handle Reading Buffers ...
void XTDReadBuffers()
{
//
// XTD Bullish Buffer ...
CopyBuffer(
xTDHandler,
X_XTD_BULLISH_POWER_LINE,
0,
xMAPNumberOfItemsPerTick,
xTDBullishBuffer);
//
// XTD Bullish Buffer ...
CopyBuffer(
xTDHandler,
X_XTD_BEARISH_POWER_LINE,
0,
xMAPNumberOfItemsPerTick,
xTDBearishBuffer);
//
// XTD Signal Buffer ...
CopyBuffer(
xTDHandler,
X_XTD_SIGNAL_LINE,
0,
xMAPNumberOfItemsPerTick,
xTDSignalBuffer);
}
//
// END Handler Funcions ...
//
//
// START XTD Custom Functions ...
//
//
// Find Peak based On this Indicator ...
bool XTDIsPeak(
int loopback // loopback length
)
{
//
bool result = false;
//
return result;
}
//
// Find Vale based On this Indicator ...
bool XTDIsVale(
int loopback // loopback length
)
{
//
bool result = false;
//
return result;
}
//
// Check Bull Crossed Over Bear ...
bool XTDIsBullCrossedOverBear(
int bar_index // sepcified Bar Index
)
{
//
bool result = false;
//
result =
xTDBullishBuffer[bar_index] > xTDBearishBuffer[bar_index] &&
xTDBullishBuffer[bar_index + 1] <= xTDBearishBuffer[bar_index + 1];
//
return result;
}
//
// Check Bull Crossed Under Bear ...
bool XTDIsBullCrossedUnderBear(
int bar_index // sepcified Bar Index
)
{
//
bool result = false;
//
result =
xTDBullishBuffer[bar_index] < xTDBearishBuffer[bar_index] &&
xTDBullishBuffer[bar_index + 1] >= xTDBearishBuffer[bar_index + 1];
//
return result;
}
//
// Check Signal Crossed Over Bear ...
bool XTDIsSignalCrossedOverBear(
int bar_index // sepcified Bar Index
)
{
//
bool result = false;
//
result =
xTDSignalBuffer[bar_index] > xTDBearishBuffer[bar_index] &&
xTDSignalBuffer[bar_index + 1] <= xTDBearishBuffer[bar_index + 1];
//
return result;
}
//
// Check Signal Crossed Under Bear ...
bool XTDIsSignalCrossedUnderBear(
int bar_index // sepcified Bar Index
)
{
//
bool result = false;
//
result =
xTDSignalBuffer[bar_index] < xTDBearishBuffer[bar_index] &&
xTDSignalBuffer[bar_index + 1] >= xTDBearishBuffer[bar_index + 1];
//
return result;
}
//
// Check Bull Over Bear ...
bool XTDIsBullOverBear(
int bar_index // sepcified Bar Index
)
{
//
bool result = false;
//
result =
xTDBullishBuffer[bar_index] > xTDBearishBuffer[bar_index];
//
return result;
}
//
// Check Bull Under Bear ...
bool XTDIsBullUnderBear(
int bar_index // sepcified Bar Index
)
{
//
bool result = false;
//
result =
xTDBullishBuffer[bar_index] < xTDBearishBuffer[bar_index];
//
return result;
}
//
// Check Signal Over Bear ...
bool XTDIsSignalOverBear(
int bar_index // sepcified Bar Index
)
{
//
bool result = false;
//
result =
xTDSignalBuffer[bar_index] > xTDBearishBuffer[bar_index];
//
return result;
}
//
// Check Signal Under Bear ...
bool XTDIsSignalUnderBear(
int bar_index // sepcified Bar Index
)
{
//
bool result = false;
//
result =
xTDSignalBuffer[bar_index] < xTDBearishBuffer[bar_index];
//
return result;
}
//
// Check Bull is Going Up in Loopback ...
bool XTDIsBullIncreaseInLoopback(
int loopback // loopback length
)
{
//
bool result = false;
//
// Validate Args ...
if (
loopback == 0 ||
ArraySize(xTDBullishBuffer) < loopback)
{
return result;
}
//
double value1 = xTDBullishBuffer[1];
double valueLast = xTDBullishBuffer[loopback - 1];
result = value1 > valueLast;
for (int i = 2; i < loopback; i++)
{
//
double valuei = xTDBullishBuffer[i];
bool isResult = value1 >= valuei;
//
result = result && isResult;
if (!result)
{
break;
}
}
//
return result;
}
//
// Check Bull is Going Down in Loopback ...
bool XTDIsBullDecreaseInLoopback(
int loopback // loopback length
)
{
//
bool result = false;
//
// Validate Args ...
if (
loopback == 0 ||
ArraySize(xTDBullishBuffer) < loopback)
{
return result;
}
//
double value1 = xTDBullishBuffer[1];
double valueLast = xTDBullishBuffer[loopback - 1];
result = value1 < valueLast;
for (int i = 2; i < loopback; i++)
{
//
double valuei = xTDBullishBuffer[i];
bool isResult = value1 <= valuei;
//
result = result && isResult;
if (!result)
{
break;
}
}
//
return result;
}
//
// Check Bear is Going Up in Loopback ...
bool XTDIsBearIncreaseInLoopback(
int loopback // loopback length
)
{
//
bool result = false;
//
// Validate Args ...
if (
loopback == 0 ||
ArraySize(xTDBearishBuffer) < loopback)
{
return result;
}
//
double value1 = xTDBearishBuffer[1];
double valueLast = xTDBearishBuffer[loopback - 1];
result = value1 > valueLast;
for (int i = 2; i < loopback; i++)
{
//
double valuei = xTDBearishBuffer[i];
bool isResult = value1 >= valuei;
//
result = result && isResult;
if (!result)
{
break;
}
}
//
return result;
}
//
// Check Bear is Going Down in Loopback ...
bool XTDIsBearDecreaseInLoopback(
int loopback // loopback length
)
{
//
bool result = false;
//
// Validate Args ...
if (
loopback == 0 ||
ArraySize(xTDBearishBuffer) < loopback)
{
return result;
}
//
double value1 = xTDBearishBuffer[1];
double valueLast = xTDBearishBuffer[loopback - 1];
result = value1 < valueLast;
for (int i = 2; i < loopback; i++)
{
//
double valuei = xTDBearishBuffer[i];
bool isResult = value1 <= valuei;
//
result = result && isResult;
if (!result)
{
break;
}
}
//
return result;
}
//
// Check Signal is Going Up in Loopback ...
bool XTDIsSignalIncreaseInLoopback(
int loopback // loopback length
)
{
//
bool result = false;
//
// Validate Args ...
if (
loopback == 0 ||
ArraySize(xTDSignalBuffer) < loopback)
{
return result;
}
//
double value1 = xTDSignalBuffer[1];
double valueLast = xTDSignalBuffer[loopback - 1];
result = value1 > valueLast;
for (int i = 2; i < loopback; i++)
{
//
double valuei = xTDSignalBuffer[i];
bool isResult = value1 >= valuei;
//
result = result && isResult;
if (!result)
{
break;
}
}
//
return result;
}
//
// Check Signal is Going Down in Loopback ...
bool XTDIsSignalDecreaseInLoopback(
int loopback // loopback length
)
{
//
bool result = false;
//
// Validate Args ...
if (
loopback == 0 ||
ArraySize(xTDSignalBuffer) < loopback)
{
return result;
}
//
double value1 = xTDSignalBuffer[1];
double valueLast = xTDSignalBuffer[loopback - 1];
result = value1 < valueLast;
for (int i = 2; i < loopback; i++)
{
//
double valuei = xTDSignalBuffer[i];
bool isResult = value1 <= valuei;
//
result = result && isResult;
if (!result)
{
break;
}
}
//
return result;
}
//
// Get Max Bull in Loopback ...
double XTDGetMaxBullInLoopback(
int loopback // loopback length
)
{
//
double result = 0;
//
// Validate Args ...
if (
loopback == 0 ||
ArraySize(xTDBullishBuffer) < loopback)
{
return result;
}
//
for (int i = 2; i < loopback; i++)
{
//
double value = xTDBullishBuffer[i];
result =
result == 0 || result < value ? value : result;
}
//
return result;
}
//
// Get Min Bull in Loopback ...
double XTDGetMinBullInLoopback(
int loopback // loopback length
)
{
//
double result = 0;
//
// Validate Args ...
if (
loopback == 0 ||
ArraySize(xTDBullishBuffer) < loopback)
{
return result;
}
//
for (int i = 2; i < loopback; i++)
{
//
double value = xTDBullishBuffer[i];
result =
result == 0 || result > value ? value : result;
}
//
return result;
}
//
// Get Max Bear in Loopback ...
double XTDGetMaxBearInLoopback(
int loopback // loopback length
)
{
//
double result = 0;
//
// Validate Args ...
if (
loopback == 0 ||
ArraySize(xTDBearishBuffer) < loopback)
{
return result;
}
//
for (int i = 2; i < loopback; i++)
{
//
double value = xTDBearishBuffer[i];
result =
result == 0 || result < value ? value : result;
}
//
return result;
}
//
// Get Min Bear in Loopback ...
double XTDGetMinBearInLoopback(
int loopback // loopback length
)
{
//
double result = 0;
//
// Validate Args ...
if (
loopback == 0 ||
ArraySize(xTDBearishBuffer) < loopback)
{
return result;
}
//
for (int i = 2; i < loopback; i++)
{
//
double value = xTDBearishBuffer[i];
result =
result == 0 || result > value ? value : result;
}
//
return result;
}
//
// Get Max Signal in Loopback ...
double XTDGetMaxSignalInLoopback(
int loopback // loopback length
)
{
//
double result = 0;
//
// Validate Args ...
if (
loopback == 0 ||
ArraySize(xTDSignalBuffer) < loopback)
{
return result;
}
//
for (int i = 2; i < loopback; i++)
{
//
double value = xTDSignalBuffer[i];
result =
result == 0 || result < value ? value : result;
}
//
return result;
}
//
// Get Min Signal in Loopback ...
double XTDGetMinSignalInLoopback(
int loopback // loopback length
)
{
//
double result = 0;
//
// Validate Args ...
if (
loopback == 0 ||
ArraySize(xTDSignalBuffer) < loopback)
{
return result;
}
//
for (int i = 2; i < loopback; i++)
{
//
double value = xTDSignalBuffer[i];
result =
result == 0 || result > value ? value : result;
}
//
return result;
}
//
// Count Bull Over Bear Crosses In Loopback ...
int XTDCountBullOverBearCrossesInLoopback(
int loopback // loopback length
)
{
//
int result = 0;
//
// Validate Args ...
if (
loopback < 0 ||
ArraySize(xTDBullishBuffer) < loopback)
{
return result;
}
//
// Loop through Loopback ...
for (int i = 0; i < loopback - 1; i++) {
//
bool isCrossed = XTDIsBullCrossedOverBear(i);
if (isCrossed) {
result++;
}
}
//
return result;
}
//
// Count Bull Under Bear Crosses In Loopback ...
int XTDCountBullUnderBearCrossesInLoopback(
int loopback // loopback length
)
{
//
int result = 0;
//
// Validate Args ...
if (
loopback < 0 ||
ArraySize(xTDBullishBuffer) < loopback)
{
return result;
}
//
// Loop through Loopback ...
for (int i = 0; i < loopback - 1; i++) {
//
bool isCrossed = XTDIsBullCrossedUnderBear(i);
if (isCrossed) {
result++;
}
}
//
return result;
}
//
// Count Signal Over Bear Crosses In Loopback ...
int XTDCountSignalOverBearCrossesInLoopback(
int loopback // loopback length
)
{
//
int result = 0;
//
// Validate Args ...
if (
loopback < 0 ||
ArraySize(xTDSignalBuffer) < loopback)
{
return result;
}
//
// Loop through Loopback ...
for (int i = 0; i < loopback - 1; i++) {
//
bool isCrossed = XTDIsSignalCrossedOverBear(i);
if (isCrossed) {
result++;
}
}
//
return result;
}
//
// Count Signal Under Bear Crosses In Loopback ...
int XTDCountSignalUnderBearCrossesInLoopback(
int loopback // loopback length
)
{
//
int result = 0;
//
// Validate Args ...
if (
loopback < 0 ||
ArraySize(xTDSignalBuffer) < loopback)
{
return result;
}
//
// Loop through Loopback ...
for (int i = 0; i < loopback - 1; i++) {
//
bool isCrossed = XTDIsSignalCrossedUnderBear(i);
if (isCrossed) {
result++;
}
}
//
return result;
}
//
// Find First Bull Cross Over Bear in Loopback ...
int XTDFindBullOverBearCrossIndexInLoopback(
int loopback // loopback length
) {
//
int result = -1;
//
// Validate Args ...
if (
loopback < 0 ||
ArraySize(xTDBullishBuffer) < loopback)
{
return result;
}
//
// Loop through Loopback ...
for (int i = 0; i < loopback - 1; i++) {
//
bool isCrossed = XTDIsBullCrossedOverBear(i);
if (isCrossed) {
//
result = i;
break;
}
}
//
return result;
}
//
// Find First Bull Cross Under Bear in Loopback ...
int XTDFindBullUnderBearCrossIndexInLoopback(
int loopback // loopback length
) {
//
int result = -1;
//
// Validate Args ...
if (
loopback < 0 ||
ArraySize(xTDBullishBuffer) < loopback)
{
return result;
}
//
// Loop through Loopback ...
for (int i = 0; i < loopback - 1; i++) {
//
bool isCrossed = XTDIsBullCrossedUnderBear(i);
if (isCrossed) {
//
result = i;
break;
}
}
//
return result;
}
//
// Find First Signall Cross Over Bear in Loopback ...
int XTDFindSignalOverBearCrossIndexInLoopback(
int loopback // loopback length
) {
//
int result = -1;
//
// Validate Args ...
if (
loopback < 0 ||
ArraySize(xTDSignalBuffer) < loopback)
{
return result;
}
//
// Loop through Loopback ...
for (int i = 0; i < loopback - 1; i++) {
//
bool isCrossed = XTDIsSignalCrossedOverBear(i);
if (isCrossed) {
//
result = i;
break;
}
}
//
return result;
}
//
// Find First Signal Cross Under Bear in Loopback ...
int XTDFindSignalUnderBearCrossIndexInLoopback(
int loopback // loopback length
) {
//
int result = -1;
//
// Validate Args ...
if (
loopback < 0 ||
ArraySize(xTDSignalBuffer) < loopback)
{
return result;
}
//
// Loop through Loopback ...
for (int i = 0; i < loopback - 1; i++) {
//
bool isCrossed = XTDIsSignalCrossedUnderBear(i);
if (isCrossed) {
//
result = i;
break;
}
}
//
return result;
}
//
// END XTD Custom Functions ...
//