Files
xMQL5/BKPS/Series2/Temp/x-saherelm.xtest.provider.indicators.long.lib.mq5
T
2024-01-25 04:09:42 +03:30

1477 lines
35 KiB
Plaintext

///////////////////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 XTEST Signal Provider Indicators Library
// ----------------------------------------------------------------
//
// 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 Provider Inputs ...
#include "x-saherelm.xtest.provider.inputs.lib.mq5";
//
// START Define Enums ...
//
//
// Represent Signals Methods ...
enum ENUM_X_SIGNAL_METHODS
{
//
// UNKNOWN ...
X_SIGNAL_UNKNOWN_METHOD,
//
// TM Based ...
X_SIGNAL_METHOD_ONE,
};
//
// Represent Market Conditions ...
struct X_TEST_MARKET_CONDITIONS
{
//
// XTM ...
bool isXTMPeak;
bool isXTMVale;
//
// XTD ...
bool isXTDSignalPeak;
bool isXTDSignalVale;
bool isXTDSignalOverBear;
bool isXTDSignalUnderBear;
bool isXTDSignalCrossedOverBear;
bool isXTDSignalCrossedUnderBear;
//
// XRSI ...
bool isXRSIPeak;
bool isXRSIVale;
bool isXRSICrossedOverLongExit;
bool isXRSICrossedOverLongEntry;
bool isXRSICrossedUnderShortExit;
bool isXRSICrossedUnderShortEntry;
//
// XOBD ...
bool isXOBDPeak;
bool isXOBDVale;
bool isXOBDSignalOverSwingHigh;
bool isXOBDSignalUnderSwingHigh;
bool isXOBDSignalCrossedOverSwingHigh;
bool isXOBDSignalCrossedUnderSwingHigh;
//
// XCHLH ...
//
bool isXCHLHSignalBOverSignalT;
bool isXCHLHSignalBUnderSignalT;
bool isXCHLHSignalBCrossedOverSignalT;
bool isXCHLHSignalBCrossedUnderSignalT;
//
bool isXCHLHSignalBOverLCLL;
bool isXCHLHSignalBUnderLCLL;
bool isXCHLHSignalBCrossedOverLCLL;
bool isXCHLHSignalBCrossedUnderLCLL;
//
bool isXCHLHSCMCHHSame;
bool isXCHLHSCMCLLSame;
//
bool isXCHLHSCLCHHSame;
bool isXCHLHSCLCLLSame;
//
bool isXCHLHMCLCHHSame;
bool isXCHLHMCLCLLSame;
//
// XCHMA ...
//
bool isXCHMASCPeak;
bool isXCHMASCVale;
bool isXCHMASCFastOverSlow;
bool isXCHMASCFastUnderSlow;
bool isXCHMASCFastCrossedOverSlow;
bool isXCHMASCFastCrossedUnderSlow;
//
bool isXCHMAMCPeak;
bool isXCHMAMCVale;
bool isXCHMAMCFastOverSlow;
bool isXCHMAMCFastUnderSlow;
bool isXCHMAMCFastCrossedOverSlow;
bool isXCHMAMCFastCrossedUnderSlow;
//
bool isXCHMALCPeak;
bool isXCHMALCVale;
bool isXCHMALCFastOverSlow;
bool isXCHMALCFastUnderSlow;
bool isXCHMALCFastCrossedOverSlow;
bool isXCHMALCFastCrossedUnderSlow;
};
//
// END Define Enums ...
//
//
// Imports all Indicators Helper here ...
input group "XTEST Provider Indicators";
//
#include "x-saherelm.xtm.indicator.helper.lib.mq5";
#include "x-saherelm.xtd.oscillator.helper.lib.mq5";
#include "x-saherelm.xrsi.oscillator.helper.lib.mq5";
#include "x-saherelm.xobd.oscillator.helper.lib.mq5";
#include "x-saherelm.xchlh.oscillator.helper.lib.mq5";
#include "x-saherelm.xchma.oscillator.helper.lib.mq5";
//
int xTESTMaxLengthOfInputs = 0;
int xTESTCalculatedBars = 0;
//
// Here we Define some Global Market Variables to Analyse MArket Conditions
// using them at each time ...
X_TEST_MARKET_CONDITIONS conditions = {};
//
// Init Indicators ...
bool XTESTInitIndicators()
{
//
bool result = false;
//
// Check and Calculate Max Length in Inputs ...
//
//
// XTM ...
xTESTMaxLengthOfInputs = MathMax(
xTMMaPeriod,
xTESTNumberOfItemsPerTick);
//
// XTD ...
xTESTMaxLengthOfInputs = MathMax(
xTDLength,
xTESTMaxLengthOfInputs);
//
// XRSI ...
xTESTMaxLengthOfInputs = MathMax(
xRSILength,
xTESTMaxLengthOfInputs);
//
// XOBD ...
xTESTMaxLengthOfInputs = MathMax(
xOBDLength,
xTESTMaxLengthOfInputs);
//
// XCHLH ...
xTESTMaxLengthOfInputs = MathMax(
xCHLHLcLength,
xTESTMaxLengthOfInputs);
xTESTMaxLengthOfInputs = MathMax(
xCHLHMcLength,
xTESTMaxLengthOfInputs);
xTESTMaxLengthOfInputs = MathMax(
xCHLHScLength,
xTESTMaxLengthOfInputs);
//
// XCHMA ...
xTESTMaxLengthOfInputs = MathMax(
xCHMAScFastLength,
xTESTMaxLengthOfInputs);
xTESTMaxLengthOfInputs = MathMax(
xCHMAScSlowLength,
xTESTMaxLengthOfInputs);
xTESTMaxLengthOfInputs = MathMax(
xCHMAMcFastLength,
xTESTMaxLengthOfInputs);
xTESTMaxLengthOfInputs = MathMax(
xCHMAMcSlowLength,
xTESTMaxLengthOfInputs);
xTESTMaxLengthOfInputs = MathMax(
xCHMALcFastLength,
xTESTMaxLengthOfInputs);
xTESTMaxLengthOfInputs = MathMax(
xCHMALcSlowLength,
xTESTMaxLengthOfInputs);
//
// Initialize Indicator/Oscillator Handlers ...
ResetLastError();
//
// XTM Init ...
result = XTMInitHandlers();
if (!result)
{
return result;
}
//
// XTD Init ...
result = XTDInitHandlers();
if (!result)
{
return result;
}
//
// XRSI Init ...
result = XRSIInitHandlers();
if (!result)
{
return result;
}
//
// XOBD Init ...
result = XOBDInitHandlers();
if (!result)
{
return result;
}
//
// XCLH Init ...
result = XCHLHInitHandlers();
if (!result)
{
return result;
}
//
// XCHMA Init ...
result = XCHMAInitHandlers();
if (!result)
{
return result;
}
//
result = true;
//
return result;
}
//
// Release Indicators ...
void XTESTReleaseIndicators()
{
//
// Release Handlers ...
XTMReleaseHandlers();
XTDReleaseHandlers();
XRSIReleaseHandlers();
XOBDReleaseHandlers();
XCHMAReleaseHandlers();
XCHLHReleaseHandlers();
}
//
// Handle Reading Buffers ...
void XTESTHandleReadingBuffers()
{
//
// Reading Calculated Bars for a Simple Handler ...
xTESTCalculatedBars = BarsCalculated(xTMHandler);
//
// Read Indicators Buffers ...
XTMReadBuffers(xTESTNumberOfItemsPerTick);
XTDReadBuffers(xTESTNumberOfItemsPerTick);
XRSIReadBuffers(xTESTNumberOfItemsPerTick);
XOBDReadBuffers(xTESTNumberOfItemsPerTick);
XCHMAReadBuffers(xTESTNumberOfItemsPerTick);
XCHLHReadBuffers(xTESTNumberOfItemsPerTick);
//
XTESTReadConditions();
}
//
//
// START Combination Functions ...
//
//
//
// Can Open Long Trade ...
// this is a Function will Check all market Conditions and get all
// Strategy requirement Verifications for Long Signals ...
bool XTESTCanOpenLongTrade()
{
//
bool result = false;
//
bool hasSignal = XTESTHasLongSignal();
//
result =
//
hasSignal
//
;
//
// TODO: Remove this On Production ...
if (result)
{
//
string message = XTESTGetConditionsString("\n");
//
XTESTClearConditions();
//
LogMessage(message);
}
//
return result;
}
//
// Can Close Long Trade ...
// this is a Function will Check all market Conditions and get all
// Strategy requirement Verifications for Long Signals ...
bool XTESTCanCloseLongTrade()
{
//
bool result = false;
//
// TODO: Check Market Conditions for Close Long Trades ...
// result = XTESTHasLongCloseConditions(xTESTNumberOfItemsPerTick);
//
return result;
}
//
// Can Open Short Trade ...
// this is a Function will Check all market Conditions and get all
// Strategy requirement Verifications for Short Signals ...
bool XTESTCanOpenShortTrade()
{
//
bool result = false;
//
bool hasSignal = XTESTHasShortSignal();
//
result =
//
hasSignal
//
;
//
// TODO: Remove this On Production ...
if (result)
{
//
string message = XTESTGetConditionsString("\n");
//
XTESTClearConditions();
//
LogMessage(message);
}
//
return result;
}
//
// Can Close Short Trade ...
// this is a Function will Check all market Conditions and get all
// Strategy requirement Verifications for Short Signals ...
bool XTESTCanCloseShortTrade()
{
//
bool result = false;
//
// TODO: Check Market Conditions for Close Short Trades ...
// result = XTESTHasShortCloseConditions(xTESTNumberOfItemsPerTick);
//
return result;
}
//
//
// END Combination Functions ...
//
//
//
//
// START Combination ignaling ...
//
//
//
// Read All Globally Required Conditions ...
void XTESTReadConditions()
{
//
XTESTClearConditions();
//
// XTM ...
conditions.isXTMPeak = XTMIsPeak();
conditions.isXTMVale = XTMIsVale();
//
// XTD ...
conditions.isXTDSignalPeak = XTDIsSignalPeak();
conditions.isXTDSignalVale = XTDIsSignalVale();
conditions.isXTDSignalOverBear = XTDIsSignalOverBear(1);
conditions.isXTDSignalUnderBear = XTDIsSignalUnderBear(1);
conditions.isXTDSignalCrossedOverBear = XTDIsSignalCrossedOverBear(1);
conditions.isXTDSignalCrossedUnderBear = XTDIsSignalCrossedUnderBear(1);
//
// XRSI ...
conditions.isXRSIPeak = XRSIIsPeak();
conditions.isXRSIVale = XRSIIsVale();
conditions.isXRSICrossedOverLongExit = XRSIIsCrossedOverLongExit(1);
conditions.isXRSICrossedOverLongEntry = XRSIIsCrossedOverLongEntry(1);
conditions.isXRSICrossedUnderShortExit = XRSIIsCrossedUnderShortExit(1);
conditions.isXRSICrossedUnderShortEntry = XRSIIsCrossedUnderShortEntry(1);
//
// XOBD ...
conditions.isXOBDPeak = XOBDIsPeak();
conditions.isXOBDVale = XOBDIsVale();
conditions.isXOBDSignalOverSwingHigh = XOBDIsSignalOverSwingHigh(1);
conditions.isXOBDSignalUnderSwingHigh = XOBDIsSignalUnderSwingHigh(1);
conditions.isXOBDSignalCrossedOverSwingHigh = XOBDIsSignalCrossedOverSwingHigh(1);
conditions.isXOBDSignalCrossedUnderSwingHigh = XOBDIsSignalCrossedUnderSwingHigh(1);
//
// XCHLH ...
//
conditions.isXCHLHSignalBOverSignalT = XCHLHIsSignalBOverSignalT(1);
conditions.isXCHLHSignalBUnderSignalT = XCHLHIsSignalBUnderSignalT(1);
conditions.isXCHLHSignalBCrossedOverSignalT = XCHLHIsSignalBCrossedOverSignalT(1);
conditions.isXCHLHSignalBCrossedUnderSignalT = XCHLHIsSignalBCrossedUnderSignalT(1);
//
conditions.isXCHLHSignalBOverLCLL = XCHLHIsSignalBOverLCLL(1);
conditions.isXCHLHSignalBUnderLCLL = XCHLHIsSignalBUnderLCLL(1);
conditions.isXCHLHSignalBCrossedOverLCLL = XCHLHIsSignalBCrossedOverLCLL(1);
conditions.isXCHLHSignalBCrossedUnderLCLL = XCHLHIsSignalBCrossedUnderLCLL(1);
//
conditions.isXCHLHSCMCHHSame = XCHLHIsMCSCHasSameHH(1);
conditions.isXCHLHSCMCLLSame = XCHLHIsMCSCHasSameLL(1);
//
conditions.isXCHLHSCLCHHSame = XCHLHIsLCSCHasSameHH(1);
conditions.isXCHLHSCLCLLSame = XCHLHIsLCSCHasSameLL(1);
//
conditions.isXCHLHMCLCHHSame = XCHLHIsLCMCHasSameHH(1);
conditions.isXCHLHMCLCLLSame = XCHLHIsLCMCHasSameLL(1);
//
// XCHMA ...
//
conditions.isXCHMASCPeak = XCHMAIsSCPeak();
conditions.isXCHMASCVale = XCHMAIsSCVale();
conditions.isXCHMASCFastOverSlow = XCHMAIsSCFastOverSlow(1);
conditions.isXCHMASCFastUnderSlow = XCHMAIsSCFastUnderSlow(1);
conditions.isXCHMASCFastCrossedOverSlow = XCHMAIsSCFastCrossedOverSlow(1);
conditions.isXCHMASCFastCrossedUnderSlow = XCHMAIsSCFastCrossedUnderSlow(1);
//
conditions.isXCHMAMCPeak = XCHMAIsMCPeak();
conditions.isXCHMAMCVale = XCHMAIsMCVale();
conditions.isXCHMAMCFastOverSlow = XCHMAIsMCFastOverSlow(1);
conditions.isXCHMAMCFastUnderSlow = XCHMAIsMCFastUnderSlow(1);
conditions.isXCHMAMCFastCrossedOverSlow = XCHMAIsMCFastCrossedOverSlow(1);
conditions.isXCHMAMCFastCrossedUnderSlow = XCHMAIsMCFastCrossedUnderSlow(1);
//
conditions.isXCHMALCPeak = XCHMAIsLCPeak();
conditions.isXCHMALCVale = XCHMAIsLCVale();
conditions.isXCHMALCFastOverSlow = XCHMAIsLCFastOverSlow(1);
conditions.isXCHMALCFastUnderSlow = XCHMAIsLCFastUnderSlow(1);
conditions.isXCHMALCFastCrossedOverSlow = XCHMAIsLCFastCrossedOverSlow(1);
conditions.isXCHMALCFastCrossedUnderSlow = XCHMAIsLCFastCrossedUnderSlow(1);
}
//
// Cleanup Conditions ...
void XTESTClearConditions()
{
//
X_TEST_MARKET_CONDITIONS mConditions = {};
//
conditions = mConditions;
}
//
// Converts Market Conditions to Specific String Representation ...
string XTESTGetConditionsString(
string separator = ",", // Specify Separator
bool ignoreFalses = true // Ignore False Conditions
)
{
//
string result = "";
//
// XTM ...
result +=
"| XTM |" + separator;
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXTMPeak))
{
result += "isXTMPeak: " + (string)conditions.isXTMPeak + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXTMVale))
{
result += "isXTMVale: " + (string)conditions.isXTMVale + separator;
}
//
// Separator ...
result += separator;
//
// XTD ...
result +=
"| XTD |" + separator;
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXTDSignalPeak))
{
result += "isXTDSignalPeak: " + (string)conditions.isXTDSignalPeak + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXTDSignalVale))
{
result += "isXTDSignalVale: " + (string)conditions.isXTDSignalVale + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXTDSignalOverBear))
{
result += "isXTDSignalOverBear: " + (string)conditions.isXTDSignalOverBear + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXTDSignalUnderBear))
{
result += "isXTDSignalUnderBear: " + (string)conditions.isXTDSignalUnderBear + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXTDSignalCrossedOverBear))
{
result += "isXTDSignalCrossedOverBear: " + (string)conditions.isXTDSignalCrossedOverBear + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXTDSignalCrossedUnderBear))
{
result += "isXTDSignalCrossedUnderBear: " + (string)conditions.isXTDSignalCrossedUnderBear + separator;
}
//
// Separator ...
result += separator;
//
// XRSI ...
result +=
"| XRSI |" + separator;
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXRSIPeak))
{
result += "isXRSIPeak: " + (string)conditions.isXRSIPeak + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXRSIVale))
{
result += "isXRSIVale: " + (string)conditions.isXRSIVale + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXRSICrossedOverLongExit))
{
result += "isXRSICrossedOverLongExit: " + (string)conditions.isXRSICrossedOverLongExit + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXRSICrossedOverLongEntry))
{
result += "isXRSICrossedOverLongEntry: " + (string)conditions.isXRSICrossedOverLongEntry + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXRSICrossedUnderShortExit))
{
result += "isXRSICrossedUnderShortExit: " + (string)conditions.isXRSICrossedUnderShortExit + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXRSICrossedUnderShortEntry))
{
result += "isXRSICrossedUnderShortEntry: " + (string)conditions.isXRSICrossedUnderShortEntry + separator;
}
//
// Separator ...
result += separator;
//
// XOBD ...
result +=
"| XOBD |" + separator;
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXOBDPeak))
{
result += "isXOBDPeak: " + (string)conditions.isXOBDPeak + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXOBDVale))
{
result += "isXOBDVale: " + (string)conditions.isXOBDVale + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXOBDSignalOverSwingHigh))
{
result += "isXOBDSignalOverSwingHigh: " + (string)conditions.isXOBDSignalOverSwingHigh + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXOBDSignalUnderSwingHigh))
{
result += "isXOBDSignalUnderSwingHigh: " + (string)conditions.isXOBDSignalUnderSwingHigh + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXOBDSignalCrossedOverSwingHigh))
{
result += "isXOBDSignalCrossedOverSwingHigh: " + (string)conditions.isXOBDSignalCrossedOverSwingHigh + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXOBDSignalCrossedUnderSwingHigh))
{
result += "isXOBDSignalCrossedUnderSwingHigh: " + (string)conditions.isXOBDSignalCrossedUnderSwingHigh + separator;
}
//
// Separator ...
result += separator;
//
// XCHLH ...
result +=
"| XCHLH |" + separator;
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHLHSignalBOverSignalT))
{
result += "isXCHLHSignalBOverSignalT: " + (string)conditions.isXCHLHSignalBOverSignalT + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHLHSignalBUnderSignalT))
{
result += "isXCHLHSignalBUnderSignalT: " + (string)conditions.isXCHLHSignalBUnderSignalT + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHLHSignalBCrossedOverSignalT))
{
result += "isXCHLHSignalBCrossedOverSignalT: " + (string)conditions.isXCHLHSignalBCrossedOverSignalT + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHLHSignalBCrossedUnderSignalT))
{
result += "isXCHLHSignalBCrossedUnderSignalT: " + (string)conditions.isXCHLHSignalBCrossedUnderSignalT + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHLHSignalBOverLCLL))
{
result += "isXCHLHSignalBOverLCLL: " + (string)conditions.isXCHLHSignalBOverLCLL + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHLHSignalBUnderLCLL))
{
result += "isXCHLHSignalBUnderLCLL: " + (string)conditions.isXCHLHSignalBUnderLCLL + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHLHSignalBCrossedOverLCLL))
{
result += "isXCHLHSignalBCrossedOverLCLL: " + (string)conditions.isXCHLHSignalBCrossedOverLCLL + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHLHSignalBCrossedUnderLCLL))
{
result += "isXCHLHSignalBCrossedUnderLCLL: " + (string)conditions.isXCHLHSignalBCrossedUnderLCLL + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHLHSCMCHHSame))
{
result += "isXCHLHSCMCHHSame: " + (string)conditions.isXCHLHSCMCHHSame + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHLHSCMCLLSame))
{
result += "isXCHLHSCMCLLSame: " + (string)conditions.isXCHLHSCMCLLSame + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHLHSCLCHHSame))
{
result += "isXCHLHSCLCHHSame: " + (string)conditions.isXCHLHSCLCHHSame + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHLHSCLCLLSame))
{
result += "isXCHLHSCLCLLSame: " + (string)conditions.isXCHLHSCLCLLSame + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHLHMCLCHHSame))
{
result += "isXCHLHMCLCHHSame: " + (string)conditions.isXCHLHMCLCHHSame + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHLHMCLCLLSame))
{
result += "isXCHLHMCLCLLSame: " + (string)conditions.isXCHLHMCLCLLSame + separator;
}
//
// Separator ...
result += separator;
//
// XCHMA ...
result +=
"| XCHMA |" + separator;
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHMASCPeak))
{
result += "isXCHMASCPeak: " + (string)conditions.isXCHMASCPeak + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHMASCVale))
{
result += "isXCHMASCVale: " + (string)conditions.isXCHMASCVale + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHMASCFastOverSlow))
{
result += "isXCHMASCFastOverSlow: " + (string)conditions.isXCHMASCFastOverSlow + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHMASCFastUnderSlow))
{
result += "isXCHMASCFastUnderSlow: " + (string)conditions.isXCHMASCFastUnderSlow + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHMASCFastCrossedOverSlow))
{
result += "isXCHMASCFastCrossedOverSlow: " + (string)conditions.isXCHMASCFastCrossedOverSlow + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHMASCFastCrossedUnderSlow))
{
result += "isXCHMASCFastCrossedUnderSlow: " + (string)conditions.isXCHMASCFastCrossedUnderSlow + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHMAMCPeak))
{
result += "isXCHMAMCPeak: " + (string)conditions.isXCHMAMCPeak + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHMAMCVale))
{
result += "isXCHMAMCVale: " + (string)conditions.isXCHMAMCVale + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHMAMCFastOverSlow))
{
result += "isXCHMAMCFastOverSlow: " + (string)conditions.isXCHMAMCFastOverSlow + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHMAMCFastUnderSlow))
{
result += "isXCHMAMCFastUnderSlow: " + (string)conditions.isXCHMAMCFastUnderSlow + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHMAMCFastCrossedOverSlow))
{
result += "isXCHMAMCFastCrossedOverSlow: " + (string)conditions.isXCHMAMCFastCrossedOverSlow + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHMAMCFastCrossedUnderSlow))
{
result += "isXCHMAMCFastCrossedUnderSlow: " + (string)conditions.isXCHMAMCFastCrossedUnderSlow + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHMALCPeak))
{
result += "isXCHMALCPeak: " + (string)conditions.isXCHMALCPeak + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHMALCVale))
{
result += "isXCHMALCVale: " + (string)conditions.isXCHMALCVale + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHMALCFastOverSlow))
{
result += "isXCHMALCFastOverSlow: " + (string)conditions.isXCHMALCFastOverSlow + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHMALCFastUnderSlow))
{
result += "isXCHMALCFastUnderSlow: " + (string)conditions.isXCHMALCFastUnderSlow + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHMALCFastCrossedOverSlow))
{
result += "isXCHMALCFastCrossedOverSlow: " + (string)conditions.isXCHMALCFastCrossedOverSlow + separator;
}
//
if (
!ignoreFalses ||
(ignoreFalses && conditions.isXCHMALCFastCrossedUnderSlow))
{
result += "isXCHMALCFastCrossedUnderSlow: " + (string)conditions.isXCHMALCFastCrossedUnderSlow + separator;
}
//
// Separator ...
result += separator;
//
return result;
}
//
// Check Market Conditions by Combination of Power of All tools for LONGs ...
bool XTESTHasLongSignal()
{
//
bool result = false;
ENUM_X_SIGNAL_METHODS methods[];
//
// Retrieve all Long Signals based on Stuffs ...
bool isXTMHasSignal = XTMHasLongConditions(xTESTNumberOfItemsPerTick);
bool isXTDHasSignal = XTDHasLongConditions(xTESTNumberOfItemsPerTick);
bool isXRSIHasSignal = XRSIHasLongConditions(xTESTNumberOfItemsPerTick);
bool isXOBDHasSignal = XOBDHasLongConditions(xTESTNumberOfItemsPerTick);
bool isXCHLHHasSignal = XCHLHHasLongConditions(xTESTNumberOfItemsPerTick);
bool isXCHMAHasSignal = XCHMAHasLongConditions(xTESTNumberOfItemsPerTick);
//
// START Method 1 ...
//
//
// XTM ...
bool isXTMMethod1Verified = conditions.isXTMVale;
//
// XTD ...
bool isXTDMethod1Verifier =
conditions.isXTDSignalCrossedOverBear || conditions.isXTDSignalOverBear;
//
// XOBD ...
bool isXOBDMethod1Verified =
conditions.isXOBDSignalUnderSwingHigh; // || conditions.isXOBDSignalOverSwingHigh
//
// XRSI ...
// There is no RSI Verification ...
//
// XCHLH ...
bool isXCHLHMethod1Verified =
//
(
//
conditions.isXCHLHSignalBOverSignalT &&
conditions.isXCHLHSignalBOverLCLL
//
)
//
||
//
(
//
(
//
conditions.isXCHLHSignalBUnderSignalT &&
conditions.isXCHLHSignalBUnderLCLL
//
)
//
&&
//
(
//
(
//
conditions.isXCHMASCFastOverSlow &&
conditions.isXCHMAMCFastUnderSlow &&
conditions.isXCHMALCFastUnderSlow
//
)
?
//
!conditions.isXCHLHMCLCLLSame
:
//
!(
//
conditions.isXCHMASCFastUnderSlow &&
conditions.isXCHMAMCFastUnderSlow &&
conditions.isXCHMALCFastOverSlow
//
)
//
)
//
)
//
||
//
(
//
// Small Importance ...
(
//
conditions.isXCHLHSignalBUnderSignalT &&
conditions.isXCHLHSignalBOverLCLL
//
)
//
&&
//
(
//
!(
//
conditions.isXCHMASCFastOverSlow &&
conditions.isXCHMAMCFastUnderSlow &&
conditions.isXCHMALCFastUnderSlow
//
)
//
)
//
&&
//
(
//
// Special Condition on Old Age Trades ...
(
//
(
//
conditions.isXCHMALCFastOverSlow &&
conditions.isXCHMASCFastUnderSlow &&
conditions.isXCHMAMCFastUnderSlow
//
)
//
||
//
(
//
conditions.isXCHMASCFastOverSlow &&
conditions.isXCHMAMCFastOverSlow &&
conditions.isXCHMALCFastOverSlow
//
)
//
)
//
? !conditions.isXCHLHMCLCHHSame
: true
//
)
//
)
//
;
//
// XCHMA ...
bool isXCHMAMethod1Verified =
//
(
//
(
(
//
conditions.isXCHMASCFastOverSlow &&
conditions.isXCHMAMCFastUnderSlow &&
conditions.isXCHMALCFastUnderSlow
//
)
//
&&
//
xCHMAScSlowBuffer[1] > XCHMAGetMin(1)
//
)
//
||
//
(
//
conditions.isXCHMAMCFastOverSlow &&
conditions.isXCHMASCFastUnderSlow &&
conditions.isXCHMALCFastUnderSlow
//
)
//
||
//
(
//
conditions.isXCHMALCFastOverSlow &&
conditions.isXCHMASCFastUnderSlow &&
conditions.isXCHMAMCFastUnderSlow
//
)
//
||
//
(
//
(
//
conditions.isXCHMASCFastOverSlow &&
conditions.isXCHMAMCFastOverSlow &&
conditions.isXCHMALCFastOverSlow
//
)
//
&&
//
xCHMAScFastBuffer[1] < XCHMAGetMax(1)
//
)
//
)
//
;
//
// In this Method we give XTM Signals as a Base and then try to
// get Verifications from other stuffs ...
bool isMethod1HasSignal =
//
isXTMMethod1Verified
//
&&
//
isXTDMethod1Verifier
//
&&
//
isXOBDMethod1Verified
//
&&
//
isXCHLHMethod1Verified
//
&&
//
isXCHMAMethod1Verified
//
;
//
// Filling Methods Buffer ...
if (isMethod1HasSignal)
{
//
ArrayResize(
methods,
ArraySize(methods) + 1);
//
methods[ArraySize(methods) - 1] = X_SIGNAL_METHOD_ONE;
}
//
// END Method 1 ...
//
//
// START Method 2 ...
//
//
// END Method 2 ...
//
//
result =
isMethod1HasSignal;
//
// XTESTClearConditions();
//
return result;
}
//
// Check Market Conditions by Combination of Power of All tools for SHORTs ...
bool XTESTHasShortSignal()
{
//
bool result = false;
ENUM_X_SIGNAL_METHODS methods[];
//
// Retrieve all Long Signals based on Stuffs ...
bool isXTMHasSignal = XTMHasShortConditions(xTESTNumberOfItemsPerTick);
bool isXTDHasSignal = XTDHasShortConditions(xTESTNumberOfItemsPerTick);
bool isXRSIHasSignal = XRSIHasShortConditions(xTESTNumberOfItemsPerTick);
bool isXOBDHasSignal = XOBDHasShortConditions(xTESTNumberOfItemsPerTick);
bool isXCHLHHasSignal = XCHLHHasShortConditions(xTESTNumberOfItemsPerTick);
bool isXCHMAHasSignal = XCHMAHasShortConditions(xTESTNumberOfItemsPerTick);
//
// START Method 1 ...
//
//
// XTM ...
bool isXTMMethod1Verified = conditions.isXTMPeak;
//
// XTD ...
bool isXTDMethod1Verifier = conditions.isXTDSignalUnderBear;
//
// XRSI ...
// There is no RSI Verification ...
//
// XOBD ...
bool isXOBDMethod1Verified = conditions.isXOBDSignalUnderSwingHigh;
//
// XCHLH Case 1
bool isXCHLHCase1 =
conditions.isXCHLHSignalBOverSignalT &&
conditions.isXCHLHSignalBOverLCLL &&
!conditions.isXCHLHMCLCHHSame;
//
// XCHLH Case 2
bool isXCHLHCase2 =
conditions.isXCHLHSignalBCrossedUnderSignalT &&
conditions.isXCHLHSignalBUnderSignalT;
//
// XCHLH ...
bool isXCHLHMethod1Verified =
//
(
isXCHLHCase1 ||
isXCHLHCase2)
//
;
//
// XCHMA Case1 ...
bool isCHMACase1 =
(conditions.isXCHMASCFastUnderSlow || conditions.isXCHMASCFastCrossedUnderSlow) &&
conditions.isXCHMAMCFastOverSlow &&
(conditions.isXCHMALCFastUnderSlow || conditions.isXCHMALCFastOverSlow);
//
// XCHMA Case2 ...
bool isCHMACase2 =
conditions.isXCHMASCFastOverSlow &&
conditions.isXCHMAMCFastOverSlow &&
conditions.isXCHMALCFastUnderSlow;
//
// XCHMA Case3 ...
bool isCHMACase3 =
conditions.isXCHMASCFastUnderSlow &&
conditions.isXCHMAMCFastOverSlow &&
conditions.isXCHMALCFastOverSlow;
//
// XCHMA ...
bool isXCHMAMethod1Verified =
//
(
//
isXCHLHCase1 ?
//
(
//
isCHMACase1 ||
isCHMACase2 ||
isCHMACase3
//
)
:
//
false
//
)
//
||
//
(
//
isXCHLHCase2 ?
//
(
//
true
//
)
:
//
false
//
)
//
;
//
// In this Method we give XTM Signals as a Base and then try to
// get Verifications from other stuffs ...
bool isMethod1HasSignal =
//
isXTMMethod1Verified
//
&&
//
isXTDMethod1Verifier
//
&&
//
isXOBDMethod1Verified
//
&&
//
isXCHLHMethod1Verified
//
&&
//
isXCHMAMethod1Verified
//
;
//
// Filling Methods Buffer ...
if (isMethod1HasSignal)
{
//
ArrayResize(
methods,
ArraySize(methods) + 1);
//
methods[ArraySize(methods) - 1] = X_SIGNAL_METHOD_ONE;
}
//
// END Method 1 ...
//
//
// START Method 2 ...
//
//
// END Method 2 ...
//
//
result =
isMethod1HasSignal;
//
// XTESTClearConditions();
//
return result;
}
//
//
// END Combination ignaling ...
//
//