4175 lines
112 KiB
Plaintext
4175 lines
112 KiB
Plaintext
///////////////////////////////////////////////////////
|
|
//
|
|
// SaherElm IT Center MQL5 Helper Class Library
|
|
// ----------------------------------------------
|
|
// Name: XCXCAEAHelper
|
|
// Description: provides all Indicator
|
|
// Helper 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 "../../Classes/x-saherelm.x-bar.analyser.class.mq5"
|
|
#include "../../Classes/x-saherelm.x-poi.class.mq5"
|
|
#include "../../Classes/x-saherelm.x-poi.drawer.class.mq5"
|
|
#include "../../Helpers/x-saherelm.x121.x3ma.helper.mq5"
|
|
#include "../../Helpers/x-saherelm.x121.xca.helper.mq5"
|
|
#include "../../Helpers/x-saherelm.x121.xcc.helper.mq5"
|
|
#include "../../Helpers/x-saherelm.x121.xct.helper.mq5"
|
|
#include "../../Helpers/x-saherelm.x121.xoscs.helper.mq5"
|
|
|
|
//
|
|
// Input Structure ...
|
|
struct XCAEAInputs
|
|
{
|
|
//
|
|
bool showAC;
|
|
bool showAD;
|
|
bool showADX;
|
|
bool showATR;
|
|
bool showCCI;
|
|
bool showRSI;
|
|
bool showMFI;
|
|
bool showRVI;
|
|
bool showMACD;
|
|
bool showMomentum;
|
|
bool showStochastic;
|
|
|
|
//
|
|
X121XCTInputs ctInputs;
|
|
X121XCCInputs ccInputs;
|
|
X121XCAInputs caInputs;
|
|
X121X3MAInputs x3maInputs;
|
|
X121XOCSInputs oscsInputs;
|
|
|
|
//
|
|
// Constructor ...
|
|
XCAEAInputs()
|
|
{
|
|
Clean();
|
|
}
|
|
|
|
//
|
|
// Tools ...
|
|
|
|
/**
|
|
* Cleaning Up ...
|
|
*/
|
|
void Clean()
|
|
{
|
|
//
|
|
showAC = false;
|
|
showAD = false;
|
|
showADX = false;
|
|
showATR = false;
|
|
showCCI = false;
|
|
showRSI = false;
|
|
showMFI = false;
|
|
showRVI = false;
|
|
showMACD = false;
|
|
showMomentum = false;
|
|
showStochastic = false;
|
|
|
|
//
|
|
ctInputs.Clean();
|
|
ccInputs.Clean();
|
|
caInputs.Clean();
|
|
x3maInputs.Clean();
|
|
oscsInputs.Clean();
|
|
|
|
//
|
|
ZeroMemory(this);
|
|
}
|
|
|
|
/**
|
|
* Set Default Values ...
|
|
*/
|
|
void Default()
|
|
{
|
|
//
|
|
ctInputs.Default();
|
|
ccInputs.Default();
|
|
caInputs.Default();
|
|
x3maInputs.Default();
|
|
oscsInputs.Default();
|
|
}
|
|
|
|
/**
|
|
* Validate ...
|
|
*
|
|
* @return ( bool )
|
|
*/
|
|
bool IsValid()
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
result =
|
|
//
|
|
ctInputs.IsValid() &&
|
|
ccInputs.IsValid() &&
|
|
caInputs.IsValid() &&
|
|
x3maInputs.IsValid() &&
|
|
oscsInputs.IsValid()
|
|
//
|
|
;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* Extract Max Input Length ...
|
|
*
|
|
* @return ( int )
|
|
*/
|
|
int Max()
|
|
{
|
|
//
|
|
int result = 0;
|
|
|
|
//
|
|
int ctMax = ctInputs.Max();
|
|
int ccMax = ccInputs.Max();
|
|
int caMax = caInputs.Max();
|
|
int ocsMax = oscsInputs.Max();
|
|
int x3maMax = x3maInputs.Max();
|
|
|
|
//
|
|
result = MathMax(ctMax, ccMax);
|
|
result = MathMax(result, caMax);
|
|
result = MathMax(result, ocsMax);
|
|
result = MathMax(result, x3maMax);
|
|
|
|
//
|
|
return result;
|
|
}
|
|
};
|
|
|
|
//
|
|
// Conditions Structure ...
|
|
struct XCAEAConditions
|
|
{
|
|
//
|
|
// Common ...
|
|
string symbol;
|
|
ENUM_TIMEFRAMES period;
|
|
datetime time;
|
|
|
|
//
|
|
datetime to;
|
|
datetime from;
|
|
|
|
//
|
|
// Bars ...
|
|
XOHCL bars[];
|
|
double bodies[];
|
|
double ranges[];
|
|
double velocities[];
|
|
double scoreBullish;
|
|
double scoreBearish;
|
|
double volumeBullish;
|
|
double volumeBearish;
|
|
double priceChangeRate;
|
|
|
|
//
|
|
// X3MA ...
|
|
|
|
//
|
|
// Buffers ...
|
|
|
|
//
|
|
double fastBuffer[];
|
|
double mediumBuffer[];
|
|
double slowBuffer[];
|
|
double fastStateBuffer[];
|
|
double mediumStateBuffer[];
|
|
double slowStateBuffer[];
|
|
|
|
//
|
|
// Conditions ...
|
|
|
|
//
|
|
bool isFastOverMedium;
|
|
bool isFastUnderMedium;
|
|
|
|
//
|
|
bool isFastCrossedOverMedium;
|
|
bool isFastCrossedUnderMedium;
|
|
|
|
//
|
|
bool isFastOverSlow;
|
|
bool isFastUnderSlow;
|
|
|
|
//
|
|
bool isFastCrossedOverSlow;
|
|
bool isFastCrossedUnderSlow;
|
|
|
|
//
|
|
bool isMediumOverSlow;
|
|
bool isMediumUnderSlow;
|
|
|
|
//
|
|
bool isMediumCrossedOverSlow;
|
|
bool isMediumCrossedUnderSlow;
|
|
|
|
//
|
|
bool is3MaBullishOrdered;
|
|
bool is3MaBearishOrdered;
|
|
|
|
//
|
|
bool is3MaSwitchedToBullishOrdered;
|
|
bool is3MaSwitchedToBearishOrdered;
|
|
|
|
//
|
|
bool is3MaBullishState;
|
|
bool is3MaBearishState;
|
|
|
|
//
|
|
bool is3MaSwitchedToBullishState;
|
|
bool is3MaSwitchedToBearishState;
|
|
|
|
//
|
|
bool is3MaBullish;
|
|
bool is3MaBearish;
|
|
|
|
//
|
|
bool is3MaSwitchedToBullish;
|
|
bool is3MaSwitchedToBearish;
|
|
|
|
//
|
|
bool is3MaFinishedFromBullish;
|
|
bool is3MaFinishedFromBearish;
|
|
|
|
//
|
|
// XCA ...
|
|
|
|
//
|
|
// Buffers ...
|
|
|
|
//
|
|
double kiBuffer[];
|
|
double tkiBuffer[];
|
|
double sHHBuffer[];
|
|
double sLLBuffer[];
|
|
double mHHBuffer[];
|
|
double mLLBuffer[];
|
|
double lHHBuffer[];
|
|
double lLLBuffer[];
|
|
double hHHBuffer[];
|
|
double hLLBuffer[];
|
|
double sarBuffer[];
|
|
double mahBuffer[];
|
|
double malBuffer[];
|
|
double macBuffer[];
|
|
double peakBuffer[];
|
|
double valeBuffer[];
|
|
double vidyaBuffer[];
|
|
double trendBuffer[];
|
|
double kiStateBuffer[];
|
|
double supportBuffer[];
|
|
double tkiStateBuffer[];
|
|
double swingLowBuffer[];
|
|
double swingHighBuffer[];
|
|
double vidyaStateBuffer[];
|
|
double resistanceBuffer[];
|
|
double peakGoldenBuffer[];
|
|
double valeGoldenBuffer[];
|
|
double fiboLevel1Buffer[];
|
|
double fiboLevel2Buffer[];
|
|
double fiboLevel3Buffer[];
|
|
double fiboLevel4Buffer[];
|
|
double fiboLevel5Buffer[];
|
|
double trendStateBuffer[];
|
|
|
|
//
|
|
// Conditions ...
|
|
|
|
//
|
|
// KI ...
|
|
|
|
//
|
|
bool isKIRejectUp;
|
|
bool isKIRejectDown;
|
|
|
|
//
|
|
bool isKIBullish;
|
|
bool isKIBearish;
|
|
|
|
//
|
|
bool isKISwitchedToBullish;
|
|
bool isKISwitchedToBearish;
|
|
|
|
//
|
|
bool isKIFinishedFromBullish;
|
|
bool isKIFinishedFromBearish;
|
|
|
|
//
|
|
// TKI ...
|
|
|
|
//
|
|
bool isTKIRejectUp;
|
|
bool isTKIRejectDown;
|
|
|
|
//
|
|
bool isTKIBullish;
|
|
bool isTKIBearish;
|
|
|
|
//
|
|
bool isTKISwitchedToBullish;
|
|
bool isTKISwitchedToBearish;
|
|
|
|
//
|
|
bool isTKIFinishedFromBullish;
|
|
bool isTKIFinishedFromBearish;
|
|
|
|
//
|
|
// VIDYA ...
|
|
|
|
//
|
|
bool isVidyaRejectUp;
|
|
bool isVidyaRejectDown;
|
|
|
|
//
|
|
bool isVidyaBullish;
|
|
bool isVidyaBearish;
|
|
|
|
//
|
|
bool isVidyaSwitchedToBullish;
|
|
bool isVidyaSwitchedToBearish;
|
|
|
|
//
|
|
bool isVidyaFinishedFromBullish;
|
|
bool isVidyaFinishedFromBearish;
|
|
|
|
//
|
|
// SAR ...
|
|
|
|
//
|
|
bool isSarBullish;
|
|
bool isSarBearish;
|
|
|
|
//
|
|
bool isSarSwitchedToBullish;
|
|
bool isSarSwitchedToBearish;
|
|
|
|
//
|
|
bool isSarFinishedFromBullish;
|
|
bool isSarFinishedFromBearish;
|
|
|
|
//
|
|
// MANALYSER ...
|
|
|
|
//
|
|
// MAH ...
|
|
|
|
//
|
|
bool isOverMah;
|
|
bool isUnderMah;
|
|
bool isCrossedOverMah;
|
|
bool isCrossedUnderMah;
|
|
|
|
//
|
|
bool isCloseOverMah;
|
|
bool isCloseUnderMah;
|
|
bool isCloseCrossedOverMah;
|
|
bool isCloseCrossedUnderMah;
|
|
|
|
//
|
|
bool isMahBullishRejected;
|
|
bool isMahBearishRejected;
|
|
|
|
//
|
|
// MAL ...
|
|
|
|
//
|
|
bool isOverMal;
|
|
bool isUnderMal;
|
|
bool isCrossedOverMal;
|
|
bool isCrossedUnderMal;
|
|
|
|
//
|
|
bool isCloseOverMal;
|
|
bool isCloseUnderMal;
|
|
bool isCloseCrossedOverMal;
|
|
bool isCloseCrossedUnderMal;
|
|
|
|
//
|
|
bool isMalBullishRejected;
|
|
bool isMalBearishRejected;
|
|
|
|
//
|
|
// MAC ...
|
|
|
|
//
|
|
bool isOverMac;
|
|
bool isUnderMac;
|
|
bool isCrossedOverMac;
|
|
bool isCrossedUnderMac;
|
|
|
|
//
|
|
bool isCloseOverMac;
|
|
bool isCloseUnderMac;
|
|
bool isCloseCrossedOverMac;
|
|
bool isCloseCrossedUnderMac;
|
|
|
|
//
|
|
bool isMacBullishRejected;
|
|
bool isMacBearishRejected;
|
|
|
|
//
|
|
// PEAK ...
|
|
|
|
//
|
|
bool isPeakSameLast;
|
|
bool isPeakOverLast;
|
|
bool isPeakUnderLast;
|
|
|
|
//
|
|
// VALE ...
|
|
|
|
//
|
|
bool isValeSameLast;
|
|
bool isValeOverLast;
|
|
bool isValeUnderLast;
|
|
|
|
//
|
|
// TREND ...
|
|
|
|
//
|
|
bool isTrendRejectUp;
|
|
bool isTrendRejectDown;
|
|
|
|
//
|
|
bool isTrendBullish;
|
|
bool isTrendBearish;
|
|
|
|
//
|
|
bool isTrendSwitchedToBullish;
|
|
bool isTrendSwitchedToBearish;
|
|
|
|
//
|
|
bool isTrendFinishedFromBullish;
|
|
bool isTrendFinishedFromBearish;
|
|
|
|
//
|
|
// SUPPORT ...
|
|
|
|
//
|
|
bool isSupportSameLast;
|
|
bool isSupportOverLast;
|
|
bool isSupportUnderLast;
|
|
|
|
//
|
|
bool isLastSupportBreaked;
|
|
bool isLastSupportRejected;
|
|
|
|
//
|
|
// RESISTANCE ...
|
|
|
|
//
|
|
bool isResistanceSameLast;
|
|
bool isResistanceOverLast;
|
|
bool isResistanceUnderLast;
|
|
|
|
//
|
|
bool isLastResistanceBreaked;
|
|
bool isLastResistanceRejected;
|
|
|
|
//
|
|
// SWING Low ...
|
|
|
|
//
|
|
bool isSwingLowSameLast;
|
|
bool isSwingLowOverLast;
|
|
bool isSwingLowUnderLast;
|
|
|
|
//
|
|
bool isLastSwingLowBreaked;
|
|
bool isLastSwingLowRejected;
|
|
|
|
//
|
|
// SWING High ...
|
|
|
|
//
|
|
bool isSwingHighSameLast;
|
|
bool isSwingHighOverLast;
|
|
bool isSwingHighUnderLast;
|
|
|
|
//
|
|
bool isLastSwingHighBreaked;
|
|
bool isLastSwingHighRejected;
|
|
|
|
//
|
|
// COMPLEX Conditions ...
|
|
|
|
//
|
|
bool isPeakIsPivot;
|
|
bool isValeIsPivot;
|
|
|
|
//
|
|
bool isPeakSwitchedToPivot;
|
|
bool isValeSwitchedToPivot;
|
|
|
|
//
|
|
bool isPeakFinishedFromPivot;
|
|
bool isValeFinishedFromPivot;
|
|
|
|
//
|
|
bool isSwingLowSameAsVale;
|
|
bool isSwingHighSameAsPeak;
|
|
|
|
//
|
|
bool isSupportSameAsVale;
|
|
bool isResistanceSameAsPeak;
|
|
|
|
//
|
|
bool isSupportSameAsSwingLow;
|
|
bool isResistanceSameAsSwingHigh;
|
|
|
|
//
|
|
// XOSCS ...
|
|
|
|
//
|
|
// Buffers ...
|
|
|
|
//
|
|
double acBuffer[];
|
|
double adBuffer[];
|
|
double atrBuffer[];
|
|
double cciBuffer[];
|
|
double rsiBuffer[];
|
|
double mfiBuffer[];
|
|
double rviBuffer[];
|
|
double adxBuffer[];
|
|
double adxpBuffer[];
|
|
double adxnBuffer[];
|
|
double macdBuffer[];
|
|
double momentumBuffer[];
|
|
double rviSignalBuffer[];
|
|
double macdSignalBuffer[];
|
|
double stochasticBuffer[];
|
|
double stochasticSignalBuffer[];
|
|
|
|
//
|
|
// Values ...
|
|
|
|
//
|
|
double adxThreshold;
|
|
double cciOBLevel;
|
|
double cciOSLevel;
|
|
double cciReversalLevel;
|
|
double rsiOBLevel;
|
|
double rsiOSLevel;
|
|
double rsiReversalLevel;
|
|
double mfiOBLevel;
|
|
double mfiOSLevel;
|
|
double mfiReversalLevel;
|
|
double rviBullishLevel;
|
|
double rviBearishLevel;
|
|
double macdBullishLevel;
|
|
double macdBearishLevel;
|
|
double momentumBullishLevel;
|
|
double momentumBearishLevel;
|
|
double stochasticOBLevel;
|
|
double stochasticOSLevel;
|
|
double stochasticReversalLevel;
|
|
|
|
//
|
|
// Conditions ...
|
|
|
|
//
|
|
// AC ...
|
|
|
|
//
|
|
bool isACBullish;
|
|
bool isACBearish;
|
|
|
|
//
|
|
bool isACSwitchedToBullish;
|
|
bool isACSwitchedToBearish;
|
|
|
|
//
|
|
bool isACOverMax;
|
|
bool isACUnderMin;
|
|
|
|
//
|
|
// AD ...
|
|
|
|
//
|
|
bool isADBiggerLast;
|
|
bool isADLesserLast;
|
|
|
|
//
|
|
bool isADOverMax;
|
|
bool isADUnderMin;
|
|
|
|
//
|
|
// ADX ...
|
|
|
|
//
|
|
bool isADXBiggerLast;
|
|
bool isADXLesserLast;
|
|
|
|
//
|
|
bool isADXOverThreshold;
|
|
bool isADXUnderThreshold;
|
|
|
|
//
|
|
bool isDXPBiggerThanDXN;
|
|
bool isDXNBiggerThanDXP;
|
|
|
|
//
|
|
bool isADXBullish;
|
|
bool isADXBearish;
|
|
|
|
//
|
|
bool isADXSwitchedToBullish;
|
|
bool isADXSwitchedToBearish;
|
|
|
|
//
|
|
// ATR ...
|
|
|
|
bool isATROverLast;
|
|
bool isATRUnderLast;
|
|
|
|
//
|
|
// CCI ...
|
|
|
|
//
|
|
bool isCCIBullish;
|
|
bool isCCIBearish;
|
|
|
|
//
|
|
bool isCCISwitchedToBullish;
|
|
bool isCCISwitchedToBearish;
|
|
|
|
//
|
|
bool isCCIOB;
|
|
bool isCCIOS;
|
|
|
|
//
|
|
bool isCCICrossedOverOB;
|
|
bool isCCICrossedOverOS;
|
|
|
|
//
|
|
bool isCCICrossedUnderOB;
|
|
bool isCCICrossedUnderOS;
|
|
|
|
//
|
|
// RSI ...
|
|
|
|
//
|
|
bool isRSIBullish;
|
|
bool isRSIBearish;
|
|
|
|
//
|
|
bool isRSISwitchedToBullish;
|
|
bool isRSISwitchedToBearish;
|
|
|
|
//
|
|
bool isRSIOB;
|
|
bool isRSIOS;
|
|
|
|
//
|
|
bool isRSICrossedOverOB;
|
|
bool isRSICrossedOverOS;
|
|
|
|
//
|
|
bool isRSICrossedUnderOB;
|
|
bool isRSICrossedUnderOS;
|
|
|
|
//
|
|
// MFI ...
|
|
|
|
//
|
|
bool isMFIBullish;
|
|
bool isMFIBearish;
|
|
|
|
//
|
|
bool isMFISwitchedToBullish;
|
|
bool isMFISwitchedToBearish;
|
|
|
|
//
|
|
bool isMFIOB;
|
|
bool isMFIOS;
|
|
|
|
//
|
|
bool isMFICrossedOverOB;
|
|
bool isMFICrossedOverOS;
|
|
|
|
//
|
|
bool isMFICrossedUnderOB;
|
|
bool isMFICrossedUnderOS;
|
|
|
|
//
|
|
// RVI ...
|
|
|
|
//
|
|
bool isRVIBullish;
|
|
bool isRVIBearish;
|
|
|
|
//
|
|
bool isRVISwitchedToBullish;
|
|
bool isRVISwitchedToBearish;
|
|
|
|
//
|
|
bool isRVIOverSignal;
|
|
bool isRVIUnderSignal;
|
|
|
|
//
|
|
bool isRVICrossedOverSignal;
|
|
bool isRVICrossedUnderSignal;
|
|
|
|
//
|
|
// MACD ...
|
|
|
|
//
|
|
bool isMACDBullish;
|
|
bool isMACDBearish;
|
|
|
|
//
|
|
bool isMACDSwitchedToBullish;
|
|
bool isMACDSwitchedToBearish;
|
|
|
|
//
|
|
bool isMACDOverSignal;
|
|
bool isMACDUnderSignal;
|
|
|
|
//
|
|
bool isMACDCrossedOverSignal;
|
|
bool isMACDCrossedUnderSignal;
|
|
|
|
//
|
|
// MOMENTUM ...
|
|
|
|
//
|
|
bool isMomentumBullish;
|
|
bool isMomentumBearish;
|
|
|
|
//
|
|
bool isMomentumSwitchedToBullish;
|
|
bool isMomentumSwitchedToBearish;
|
|
|
|
//
|
|
// STOCHASTIC ...
|
|
|
|
//
|
|
bool isStochasticBullish;
|
|
bool isStochasticBearish;
|
|
|
|
//
|
|
bool isStochasticSwitchedToBullish;
|
|
bool isStochasticSwitchedToBearish;
|
|
|
|
//
|
|
bool isStochasticOverSignal;
|
|
bool isStochasticUnderSignal;
|
|
|
|
//
|
|
bool isStochasticCrossedOverSignal;
|
|
bool isStochasticCrossedUnderSignal;
|
|
|
|
//
|
|
bool isStochasticOB;
|
|
bool isStochasticOS;
|
|
|
|
//
|
|
bool isStochasticCrossedOverOB;
|
|
bool isStochasticCrossedOverOS;
|
|
|
|
//
|
|
bool isStochasticCrossedUnderOB;
|
|
bool isStochasticCrossedUnderOS;
|
|
|
|
//
|
|
// Specified Conditions ...
|
|
|
|
//
|
|
// Constructor ...
|
|
XCAEAConditions()
|
|
{
|
|
Clean();
|
|
}
|
|
|
|
//
|
|
// Tools ...
|
|
|
|
/**
|
|
* Cleaning Up ...
|
|
*/
|
|
void Clean()
|
|
{
|
|
//
|
|
// Commons ...
|
|
symbol = NULL;
|
|
period = NULL;
|
|
|
|
//
|
|
to = NULL;
|
|
from = NULL;
|
|
time = NULL;
|
|
|
|
//
|
|
// Bars ...
|
|
Clean(bars);
|
|
Clean(bodies);
|
|
Clean(ranges);
|
|
scoreBullish = 0;
|
|
scoreBearish = 0;
|
|
volumeBullish = 0;
|
|
volumeBearish = 0;
|
|
Clean(velocities);
|
|
priceChangeRate = 0;
|
|
ArraySetAsSeries(bars, true);
|
|
ArraySetAsSeries(bodies, true);
|
|
ArraySetAsSeries(ranges, true);
|
|
ArraySetAsSeries(velocities, true);
|
|
|
|
//
|
|
// X3MA ...
|
|
|
|
//
|
|
// Buffers ...
|
|
|
|
//
|
|
Clean(fastBuffer);
|
|
Clean(mediumBuffer);
|
|
Clean(slowBuffer);
|
|
Clean(fastStateBuffer);
|
|
Clean(mediumStateBuffer);
|
|
Clean(slowStateBuffer);
|
|
|
|
//
|
|
ArraySetAsSeries(fastBuffer, true);
|
|
ArraySetAsSeries(mediumBuffer, true);
|
|
ArraySetAsSeries(slowBuffer, true);
|
|
ArraySetAsSeries(fastStateBuffer, true);
|
|
ArraySetAsSeries(mediumStateBuffer, true);
|
|
ArraySetAsSeries(slowStateBuffer, true);
|
|
|
|
//
|
|
// Conditions ...
|
|
|
|
//
|
|
isFastOverMedium = false;
|
|
isFastUnderMedium = false;
|
|
|
|
//
|
|
isFastCrossedOverMedium = false;
|
|
isFastCrossedUnderMedium = false;
|
|
|
|
//
|
|
isFastOverSlow = false;
|
|
isFastUnderSlow = false;
|
|
|
|
//
|
|
isFastCrossedOverSlow = false;
|
|
isFastCrossedUnderSlow = false;
|
|
|
|
//
|
|
isMediumOverSlow = false;
|
|
isMediumUnderSlow = false;
|
|
|
|
//
|
|
isMediumCrossedOverSlow = false;
|
|
isMediumCrossedUnderSlow = false;
|
|
|
|
//
|
|
is3MaBullishOrdered = false;
|
|
is3MaBearishOrdered = false;
|
|
|
|
//
|
|
is3MaSwitchedToBullishOrdered = false;
|
|
is3MaSwitchedToBearishOrdered = false;
|
|
|
|
//
|
|
is3MaBullishState = false;
|
|
is3MaBearishState = false;
|
|
|
|
//
|
|
is3MaSwitchedToBullishState = false;
|
|
is3MaSwitchedToBearishState = false;
|
|
|
|
//
|
|
is3MaBullish = false;
|
|
is3MaBearish = false;
|
|
|
|
//
|
|
is3MaSwitchedToBullish = false;
|
|
is3MaSwitchedToBearish = false;
|
|
|
|
//
|
|
is3MaFinishedFromBullish = false;
|
|
is3MaFinishedFromBearish = false;
|
|
|
|
//
|
|
// XCA ...
|
|
|
|
//
|
|
// Buffers ...
|
|
|
|
//
|
|
Clean(kiBuffer);
|
|
Clean(tkiBuffer);
|
|
Clean(sHHBuffer);
|
|
Clean(sLLBuffer);
|
|
Clean(mHHBuffer);
|
|
Clean(mLLBuffer);
|
|
Clean(lHHBuffer);
|
|
Clean(lLLBuffer);
|
|
Clean(hHHBuffer);
|
|
Clean(hLLBuffer);
|
|
Clean(sarBuffer);
|
|
Clean(mahBuffer);
|
|
Clean(malBuffer);
|
|
Clean(macBuffer);
|
|
Clean(peakBuffer);
|
|
Clean(valeBuffer);
|
|
Clean(vidyaBuffer);
|
|
Clean(trendBuffer);
|
|
Clean(kiStateBuffer);
|
|
Clean(supportBuffer);
|
|
Clean(tkiStateBuffer);
|
|
Clean(swingLowBuffer);
|
|
Clean(swingHighBuffer);
|
|
Clean(resistanceBuffer);
|
|
Clean(peakGoldenBuffer);
|
|
Clean(valeGoldenBuffer);
|
|
Clean(fiboLevel1Buffer);
|
|
Clean(fiboLevel2Buffer);
|
|
Clean(fiboLevel3Buffer);
|
|
Clean(fiboLevel4Buffer);
|
|
Clean(fiboLevel5Buffer);
|
|
Clean(vidyaStateBuffer);
|
|
Clean(trendStateBuffer);
|
|
|
|
//
|
|
ArraySetAsSeries(kiBuffer, true);
|
|
ArraySetAsSeries(tkiBuffer, true);
|
|
ArraySetAsSeries(sHHBuffer, true);
|
|
ArraySetAsSeries(sLLBuffer, true);
|
|
ArraySetAsSeries(mHHBuffer, true);
|
|
ArraySetAsSeries(mLLBuffer, true);
|
|
ArraySetAsSeries(lHHBuffer, true);
|
|
ArraySetAsSeries(lLLBuffer, true);
|
|
ArraySetAsSeries(hHHBuffer, true);
|
|
ArraySetAsSeries(hLLBuffer, true);
|
|
ArraySetAsSeries(sarBuffer, true);
|
|
ArraySetAsSeries(mahBuffer, true);
|
|
ArraySetAsSeries(malBuffer, true);
|
|
ArraySetAsSeries(macBuffer, true);
|
|
ArraySetAsSeries(peakBuffer, true);
|
|
ArraySetAsSeries(valeBuffer, true);
|
|
ArraySetAsSeries(vidyaBuffer, true);
|
|
ArraySetAsSeries(trendBuffer, true);
|
|
ArraySetAsSeries(kiStateBuffer, true);
|
|
ArraySetAsSeries(supportBuffer, true);
|
|
ArraySetAsSeries(tkiStateBuffer, true);
|
|
ArraySetAsSeries(swingLowBuffer, true);
|
|
ArraySetAsSeries(swingHighBuffer, true);
|
|
ArraySetAsSeries(resistanceBuffer, true);
|
|
ArraySetAsSeries(peakGoldenBuffer, true);
|
|
ArraySetAsSeries(valeGoldenBuffer, true);
|
|
ArraySetAsSeries(fiboLevel1Buffer, true);
|
|
ArraySetAsSeries(fiboLevel2Buffer, true);
|
|
ArraySetAsSeries(fiboLevel3Buffer, true);
|
|
ArraySetAsSeries(fiboLevel4Buffer, true);
|
|
ArraySetAsSeries(fiboLevel5Buffer, true);
|
|
ArraySetAsSeries(vidyaStateBuffer, true);
|
|
ArraySetAsSeries(trendStateBuffer, true);
|
|
|
|
//
|
|
// Conditions ...
|
|
|
|
//
|
|
// KI ...
|
|
|
|
//
|
|
isKIRejectUp = false;
|
|
isKIRejectDown = false;
|
|
|
|
//
|
|
isKIBullish = false;
|
|
isKIBearish = false;
|
|
|
|
//
|
|
isKISwitchedToBullish = false;
|
|
isKISwitchedToBearish = false;
|
|
|
|
//
|
|
isKIFinishedFromBullish = false;
|
|
isKIFinishedFromBearish = false;
|
|
|
|
//
|
|
// TKI ...
|
|
|
|
//
|
|
isTKIRejectUp = false;
|
|
isTKIRejectDown = false;
|
|
|
|
//
|
|
isTKIBullish = false;
|
|
isTKIBearish = false;
|
|
|
|
//
|
|
isTKISwitchedToBullish = false;
|
|
isTKISwitchedToBearish = false;
|
|
|
|
//
|
|
isTKIFinishedFromBullish = false;
|
|
isTKIFinishedFromBearish = false;
|
|
|
|
//
|
|
// VIDYA ...
|
|
|
|
//
|
|
isVidyaRejectUp = false;
|
|
isVidyaRejectDown = false;
|
|
|
|
//
|
|
isVidyaBullish = false;
|
|
isVidyaBearish = false;
|
|
|
|
//
|
|
isVidyaSwitchedToBullish = false;
|
|
isVidyaSwitchedToBearish = false;
|
|
|
|
//
|
|
isVidyaFinishedFromBullish = false;
|
|
isVidyaFinishedFromBearish = false;
|
|
|
|
//
|
|
// SAR ...
|
|
|
|
//
|
|
isSarBullish = false;
|
|
isSarBearish = false;
|
|
|
|
//
|
|
isSarSwitchedToBullish = false;
|
|
isSarSwitchedToBearish = false;
|
|
|
|
//
|
|
isSarFinishedFromBullish = false;
|
|
isSarFinishedFromBearish = false;
|
|
|
|
//
|
|
// MANALYSER ...
|
|
|
|
//
|
|
// MAH ...
|
|
|
|
//
|
|
isOverMah = false;
|
|
isUnderMah = false;
|
|
isCrossedOverMah = false;
|
|
isCrossedUnderMah = false;
|
|
|
|
//
|
|
isCloseOverMah = false;
|
|
isCloseUnderMah = false;
|
|
isCloseCrossedOverMah = false;
|
|
isCloseCrossedUnderMah = false;
|
|
|
|
//
|
|
isMahBullishRejected = false;
|
|
isMahBearishRejected = false;
|
|
|
|
//
|
|
// MAL ...
|
|
|
|
//
|
|
isOverMal = false;
|
|
isUnderMal = false;
|
|
isCrossedOverMal = false;
|
|
isCrossedUnderMal = false;
|
|
|
|
//
|
|
isCloseOverMal = false;
|
|
isCloseUnderMal = false;
|
|
isCloseCrossedOverMal = false;
|
|
isCloseCrossedUnderMal = false;
|
|
|
|
//
|
|
isMalBullishRejected = false;
|
|
isMalBearishRejected = false;
|
|
|
|
//
|
|
// MAC ...
|
|
|
|
//
|
|
isOverMac = false;
|
|
isUnderMac = false;
|
|
isCrossedOverMac = false;
|
|
isCrossedUnderMac = false;
|
|
|
|
//
|
|
isCloseOverMac = false;
|
|
isCloseUnderMac = false;
|
|
isCloseCrossedOverMac = false;
|
|
isCloseCrossedUnderMac = false;
|
|
|
|
//
|
|
isMacBullishRejected = false;
|
|
isMacBearishRejected = false;
|
|
|
|
//
|
|
// PEAK ...
|
|
|
|
//
|
|
isPeakSameLast = false;
|
|
isPeakOverLast = false;
|
|
isPeakUnderLast = false;
|
|
|
|
//
|
|
// VALE ...
|
|
|
|
//
|
|
isValeSameLast = false;
|
|
isValeOverLast = false;
|
|
isValeUnderLast = false;
|
|
|
|
//
|
|
// TREND ...
|
|
|
|
//
|
|
isTrendRejectUp = false;
|
|
isTrendRejectDown = false;
|
|
|
|
//
|
|
isTrendBullish = false;
|
|
isTrendBearish = false;
|
|
|
|
//
|
|
isTrendSwitchedToBullish = false;
|
|
isTrendSwitchedToBearish = false;
|
|
|
|
//
|
|
isTrendFinishedFromBullish = false;
|
|
isTrendFinishedFromBearish = false;
|
|
|
|
//
|
|
// SUPPORT ...
|
|
|
|
//
|
|
isSupportSameLast = false;
|
|
isSupportOverLast = false;
|
|
isSupportUnderLast = false;
|
|
|
|
//
|
|
isLastSupportBreaked = false;
|
|
isLastSupportRejected = false;
|
|
|
|
//
|
|
// RESISTANCE ...
|
|
|
|
//
|
|
isResistanceSameLast = false;
|
|
isResistanceOverLast = false;
|
|
isResistanceUnderLast = false;
|
|
|
|
//
|
|
isLastResistanceBreaked = false;
|
|
isLastResistanceRejected = false;
|
|
|
|
//
|
|
// SWING Low ...
|
|
|
|
//
|
|
isSwingLowSameLast = false;
|
|
isSwingLowOverLast = false;
|
|
isSwingLowUnderLast = false;
|
|
|
|
//
|
|
isLastSwingLowBreaked = false;
|
|
isLastSwingLowRejected = false;
|
|
|
|
//
|
|
// SWING High ...
|
|
|
|
//
|
|
isSwingHighSameLast = false;
|
|
isSwingHighOverLast = false;
|
|
isSwingHighUnderLast = false;
|
|
|
|
//
|
|
isLastSwingHighBreaked = false;
|
|
isLastSwingHighRejected = false;
|
|
|
|
//
|
|
// COMPLEX Conditions ...
|
|
|
|
//
|
|
isPeakIsPivot = false;
|
|
isValeIsPivot = false;
|
|
|
|
//
|
|
isPeakSwitchedToPivot = false;
|
|
isValeSwitchedToPivot = false;
|
|
|
|
//
|
|
isPeakFinishedFromPivot = false;
|
|
isValeFinishedFromPivot = false;
|
|
|
|
//
|
|
isSwingLowSameAsVale = false;
|
|
isSwingHighSameAsPeak = false;
|
|
|
|
//
|
|
isSupportSameAsVale = false;
|
|
isResistanceSameAsPeak = false;
|
|
|
|
//
|
|
isSupportSameAsSwingLow = false;
|
|
isResistanceSameAsSwingHigh = false;
|
|
|
|
//
|
|
// XOSCS ...
|
|
|
|
//
|
|
// Buffers ...
|
|
|
|
//
|
|
Clean(acBuffer);
|
|
Clean(adBuffer);
|
|
Clean(atrBuffer);
|
|
Clean(cciBuffer);
|
|
Clean(rsiBuffer);
|
|
Clean(mfiBuffer);
|
|
Clean(rviBuffer);
|
|
Clean(adxBuffer);
|
|
Clean(adxpBuffer);
|
|
Clean(adxnBuffer);
|
|
Clean(macdBuffer);
|
|
Clean(momentumBuffer);
|
|
Clean(rviSignalBuffer);
|
|
Clean(macdSignalBuffer);
|
|
Clean(stochasticBuffer);
|
|
Clean(stochasticSignalBuffer);
|
|
|
|
//
|
|
ArraySetAsSeries(acBuffer, true);
|
|
ArraySetAsSeries(adBuffer, true);
|
|
ArraySetAsSeries(atrBuffer, true);
|
|
ArraySetAsSeries(cciBuffer, true);
|
|
ArraySetAsSeries(rsiBuffer, true);
|
|
ArraySetAsSeries(mfiBuffer, true);
|
|
ArraySetAsSeries(rviBuffer, true);
|
|
ArraySetAsSeries(adxBuffer, true);
|
|
ArraySetAsSeries(adxpBuffer, true);
|
|
ArraySetAsSeries(adxnBuffer, true);
|
|
ArraySetAsSeries(macdBuffer, true);
|
|
ArraySetAsSeries(momentumBuffer, true);
|
|
ArraySetAsSeries(rviSignalBuffer, true);
|
|
ArraySetAsSeries(macdSignalBuffer, true);
|
|
ArraySetAsSeries(stochasticBuffer, true);
|
|
ArraySetAsSeries(stochasticSignalBuffer, true);
|
|
|
|
//
|
|
// Values ...
|
|
|
|
//
|
|
adxThreshold = 0.0;
|
|
cciOBLevel = 0.0;
|
|
cciOSLevel = 0.0;
|
|
cciReversalLevel = 0.0;
|
|
rsiOBLevel = 0.0;
|
|
rsiOSLevel = 0.0;
|
|
rsiReversalLevel = 0.0;
|
|
mfiOBLevel = 0.0;
|
|
mfiOSLevel = 0.0;
|
|
mfiReversalLevel = 0.0;
|
|
rviBullishLevel = 0.0;
|
|
rviBearishLevel = 0.0;
|
|
macdBullishLevel = 0.0;
|
|
macdBearishLevel = 0.0;
|
|
momentumBullishLevel = 0.0;
|
|
momentumBearishLevel = 0.0;
|
|
stochasticOBLevel = 0.0;
|
|
stochasticOSLevel = 0.0;
|
|
stochasticReversalLevel = 0.0;
|
|
|
|
//
|
|
// Conditions ...
|
|
|
|
//
|
|
// AC ...
|
|
|
|
//
|
|
isACBullish = false;
|
|
isACBearish = false;
|
|
isACSwitchedToBullish = false;
|
|
isACSwitchedToBearish = false;
|
|
isACOverMax = false;
|
|
isACUnderMin = false;
|
|
|
|
//
|
|
// AD ...
|
|
|
|
//
|
|
isADBiggerLast = false;
|
|
isADLesserLast = false;
|
|
isADOverMax = false;
|
|
isADUnderMin = false;
|
|
|
|
//
|
|
// ADX ...
|
|
|
|
//
|
|
isADXBiggerLast = false;
|
|
isADXLesserLast = false;
|
|
isADXOverThreshold = false;
|
|
isADXUnderThreshold = false;
|
|
isDXPBiggerThanDXN = false;
|
|
isDXNBiggerThanDXP = false;
|
|
isADXBullish = false;
|
|
isADXBearish = false;
|
|
isADXSwitchedToBullish = false;
|
|
isADXSwitchedToBearish = false;
|
|
|
|
//
|
|
// ATR ...
|
|
|
|
//
|
|
isATROverLast = false;
|
|
isATRUnderLast = false;
|
|
|
|
//
|
|
// CCI ...
|
|
|
|
//
|
|
isCCIBullish = false;
|
|
isCCIBearish = false;
|
|
isCCISwitchedToBullish = false;
|
|
isCCISwitchedToBearish = false;
|
|
isCCIOB = false;
|
|
isCCIOS = false;
|
|
isCCICrossedOverOB = false;
|
|
isCCICrossedOverOS = false;
|
|
isCCICrossedUnderOB = false;
|
|
isCCICrossedUnderOS = false;
|
|
|
|
//
|
|
// RSI ...
|
|
|
|
//
|
|
isRSIBullish = false;
|
|
isRSIBearish = false;
|
|
isRSISwitchedToBullish = false;
|
|
isRSISwitchedToBearish = false;
|
|
isRSIOB = false;
|
|
isRSIOS = false;
|
|
isRSICrossedOverOB = false;
|
|
isRSICrossedOverOS = false;
|
|
isRSICrossedUnderOB = false;
|
|
isRSICrossedUnderOS = false;
|
|
|
|
//
|
|
// MFI ...
|
|
|
|
//
|
|
isMFIBullish = false;
|
|
isMFIBearish = false;
|
|
isMFISwitchedToBullish = false;
|
|
isMFISwitchedToBearish = false;
|
|
isMFIOB = false;
|
|
isMFIOS = false;
|
|
isMFICrossedOverOB = false;
|
|
isMFICrossedOverOS = false;
|
|
isMFICrossedUnderOB = false;
|
|
isMFICrossedUnderOS = false;
|
|
|
|
//
|
|
// RVI ...
|
|
|
|
//
|
|
isRVIBullish = false;
|
|
isRVIBearish = false;
|
|
isRVISwitchedToBullish = false;
|
|
isRVISwitchedToBearish = false;
|
|
isRVIOverSignal = false;
|
|
isRVIUnderSignal = false;
|
|
isRVICrossedOverSignal = false;
|
|
isRVICrossedUnderSignal = false;
|
|
|
|
//
|
|
// MACD ...
|
|
|
|
//
|
|
isMACDBullish = false;
|
|
isMACDBearish = false;
|
|
isMACDSwitchedToBullish = false;
|
|
isMACDSwitchedToBearish = false;
|
|
isMACDOverSignal = false;
|
|
isMACDUnderSignal = false;
|
|
isMACDCrossedOverSignal = false;
|
|
isMACDCrossedUnderSignal = false;
|
|
|
|
//
|
|
// MOMENTUM ...
|
|
|
|
//
|
|
isMomentumBullish = false;
|
|
isMomentumBearish = false;
|
|
isMomentumSwitchedToBullish = false;
|
|
isMomentumSwitchedToBearish = false;
|
|
|
|
//
|
|
// STOCHASTIC ...
|
|
|
|
//
|
|
isStochasticBullish = false;
|
|
isStochasticBearish = false;
|
|
isStochasticSwitchedToBullish = false;
|
|
isStochasticSwitchedToBearish = false;
|
|
isStochasticOverSignal = false;
|
|
isStochasticUnderSignal = false;
|
|
isStochasticCrossedOverSignal = false;
|
|
isStochasticCrossedUnderSignal = false;
|
|
isStochasticOB = false;
|
|
isStochasticOS = false;
|
|
isStochasticCrossedOverOB = false;
|
|
isStochasticCrossedOverOS = false;
|
|
isStochasticCrossedUnderOB = false;
|
|
isStochasticCrossedUnderOS = false;
|
|
|
|
//
|
|
ZeroMemory(this);
|
|
}
|
|
|
|
/**
|
|
* Generate Conditions Scores ...
|
|
*
|
|
* @param bullishScore: Double, Directional Scores Reference ...
|
|
* @param bearishScore: Double, Directional Scores Reference ...
|
|
*/
|
|
void GenerateScore(
|
|
double &bullishScore,
|
|
double &bearishScore //
|
|
)
|
|
{
|
|
//
|
|
bullishScore = 0;
|
|
bearishScore = 0;
|
|
|
|
//
|
|
double score = 1;
|
|
double minScore = 0.5;
|
|
double highScore = 1.5;
|
|
|
|
//
|
|
// X3MA ...
|
|
|
|
//
|
|
// XCA ...
|
|
|
|
//
|
|
if (isFastOverSlow)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isFastOverMedium)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isMediumOverSlow)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isFastCrossedOverSlow)
|
|
{
|
|
bullishScore += score;
|
|
}
|
|
if (isFastCrossedOverMedium)
|
|
{
|
|
bullishScore += score;
|
|
}
|
|
if (isMediumCrossedOverSlow)
|
|
{
|
|
bullishScore += score;
|
|
}
|
|
|
|
//
|
|
if (is3MaBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (is3MaBullishState)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (is3MaBullishOrdered)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (is3MaSwitchedToBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (is3MaFinishedFromBearish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (is3MaSwitchedToBullishState)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (is3MaSwitchedToBullishOrdered)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isFastUnderSlow)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isMediumUnderSlow)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isFastUnderMedium)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isFastCrossedUnderSlow)
|
|
{
|
|
bearishScore += score;
|
|
}
|
|
if (isFastCrossedUnderMedium)
|
|
{
|
|
bearishScore += score;
|
|
}
|
|
if (isMediumCrossedUnderSlow)
|
|
{
|
|
bearishScore += score;
|
|
}
|
|
|
|
//
|
|
if (is3MaBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (is3MaBearishState)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (is3MaBearishOrdered)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (is3MaSwitchedToBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (is3MaFinishedFromBullish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (is3MaSwitchedToBearishState)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (is3MaSwitchedToBearishOrdered)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
//
|
|
// KI ...
|
|
|
|
//
|
|
if (isKIBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isKIRejectUp)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isKISwitchedToBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isKIBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isKIRejectDown)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isKISwitchedToBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
|
|
//
|
|
// TKI ...
|
|
|
|
//
|
|
if (isTKIBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isTKIRejectUp)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isTKISwitchedToBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isTKIBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isTKIRejectDown)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isTKISwitchedToBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
|
|
//
|
|
// VIDYA ...
|
|
|
|
//
|
|
if (isVidyaBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isVidyaRejectUp)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isVidyaSwitchedToBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isVidyaBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isVidyaRejectDown)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isVidyaSwitchedToBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
|
|
//
|
|
// SAR ...
|
|
|
|
//
|
|
if (isSarBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isSarSwitchedToBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isSarBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isSarSwitchedToBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
|
|
//
|
|
// MANALYSER ...
|
|
|
|
//
|
|
// MAH ...
|
|
|
|
//
|
|
if (isUnderMah)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isCloseUnderMah)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isCrossedUnderMah)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isMahBullishRejected)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isCloseCrossedUnderMah)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isOverMah)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isCloseOverMah)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isCrossedOverMah)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isMahBearishRejected)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isCloseCrossedOverMah)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
|
|
//
|
|
|
|
//
|
|
// MAL ...
|
|
|
|
//
|
|
if (isOverMal)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isCloseOverMal)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isCrossedOverMal)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isMalBullishRejected)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isCloseCrossedOverMal)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isUnderMal)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isCloseUnderMal)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isCrossedUnderMal)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isMalBearishRejected)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isCloseCrossedUnderMal)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
|
|
//
|
|
// MAC ...
|
|
|
|
//
|
|
if (isOverMac)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isCloseOverMac)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isCrossedOverMac)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isMacBullishRejected)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isCloseCrossedOverMac)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isUnderMac)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isCloseUnderMac)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isCrossedUnderMac)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isMacBearishRejected)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isCloseCrossedUnderMac)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
|
|
//
|
|
// TREND ...
|
|
|
|
//
|
|
if (isTrendBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isTrendRejectUp)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isTrendSwitchedToBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isTrendBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isTrendRejectDown)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isTrendSwitchedToBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
|
|
//
|
|
// SUPPORT ...
|
|
|
|
//
|
|
if (isSupportSameLast)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isSupportOverLast)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isLastSupportRejected)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isSupportUnderLast)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isLastSupportBreaked)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
|
|
//
|
|
// RESISTANCE ...
|
|
|
|
//
|
|
if (isResistanceOverLast)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isLastResistanceBreaked)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isResistanceSameLast)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isResistanceUnderLast)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isLastResistanceRejected)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
|
|
//
|
|
// SWING Low ...
|
|
|
|
//
|
|
if (isSwingLowSameLast)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isSwingLowOverLast)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isLastSwingLowRejected)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isSwingLowUnderLast)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isLastSwingLowBreaked)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
|
|
//
|
|
// SWING High ...
|
|
|
|
//
|
|
if (isSwingHighOverLast)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isLastSwingHighBreaked)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isSwingHighSameLast)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isSwingHighUnderLast)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isLastSwingHighRejected)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
|
|
//
|
|
// COMPLEX Conditions ...
|
|
|
|
//
|
|
if (isValeIsPivot)
|
|
{
|
|
bullishScore += score;
|
|
}
|
|
if (isSupportSameAsVale)
|
|
{
|
|
bullishScore += score;
|
|
}
|
|
if (isSwingLowSameAsVale)
|
|
{
|
|
bullishScore += score;
|
|
}
|
|
if (isSupportSameAsSwingLow)
|
|
{
|
|
bullishScore += score;
|
|
}
|
|
|
|
//
|
|
if (isPeakIsPivot)
|
|
{
|
|
bearishScore += score;
|
|
}
|
|
if (isSwingHighSameAsPeak)
|
|
{
|
|
bearishScore += score;
|
|
}
|
|
if (isResistanceSameAsPeak)
|
|
{
|
|
bearishScore += score;
|
|
}
|
|
if (isResistanceSameAsSwingHigh)
|
|
{
|
|
bearishScore += score;
|
|
}
|
|
|
|
//
|
|
// XOCS ...
|
|
|
|
//
|
|
// AC ...
|
|
|
|
//
|
|
if (isACBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isACOverMax)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isACSwitchedToBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isACBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isACUnderMin)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isACSwitchedToBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
|
|
//
|
|
// AD ...
|
|
|
|
//
|
|
if (isADOverMax)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isADBiggerLast)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isADUnderMin)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isADLesserLast)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
|
|
//
|
|
// ADX ...
|
|
|
|
//
|
|
if (isADXBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isADXBiggerLast)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isADXOverThreshold)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isDXPBiggerThanDXN)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isADXSwitchedToBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isADXBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isADXLesserLast)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isDXNBiggerThanDXP)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isADXUnderThreshold)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isADXSwitchedToBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
|
|
//
|
|
// ATR ...
|
|
|
|
//
|
|
if (isATROverLast)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isATRUnderLast)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
|
|
//
|
|
// CCI ...
|
|
|
|
//
|
|
if (isCCIOS)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isCCIBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isCCICrossedOverOS)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isCCICrossedOverOB)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isCCISwitchedToBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isCCIOB)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isCCIBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isCCICrossedUnderOS)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isCCICrossedUnderOB)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isCCISwitchedToBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
|
|
//
|
|
// RSI ...
|
|
|
|
//
|
|
if (isRSIOS)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isRSIBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isRSICrossedOverOB)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isRSICrossedOverOS)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isRSISwitchedToBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isRSIOB)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isRSIBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isRSICrossedUnderOB)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isRSICrossedUnderOS)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isRSISwitchedToBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
|
|
//
|
|
// MFI ...
|
|
|
|
//
|
|
if (isMFIOS)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isMFIBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isMFICrossedOverOB)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isMFICrossedOverOS)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isMFISwitchedToBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isMFIOB)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isMFIBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isMFICrossedUnderOB)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isMFICrossedUnderOS)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isMFISwitchedToBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
|
|
//
|
|
// RVI ...
|
|
|
|
//
|
|
if (isRVIBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isRVIOverSignal)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isRVISwitchedToBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isRVICrossedOverSignal)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isRVIBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isRVIUnderSignal)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isRVISwitchedToBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isRVICrossedUnderSignal)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
|
|
//
|
|
// MACD ...
|
|
|
|
//
|
|
if (isMACDBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isMACDOverSignal)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isMACDSwitchedToBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isMACDCrossedOverSignal)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isMACDBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isMACDUnderSignal)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isMACDSwitchedToBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isMACDCrossedUnderSignal)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
|
|
//
|
|
// MOMENTUM ...
|
|
|
|
//
|
|
if (isMomentumBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isMomentumSwitchedToBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isMomentumBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isMomentumSwitchedToBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
|
|
//
|
|
// STOCHASTIC ...
|
|
|
|
//
|
|
if (isStochasticOS)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isStochasticOverSignal)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isStochasticBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isStochasticCrossedOverSignal)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isStochasticCrossedOverOB)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isStochasticCrossedOverOS)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
if (isStochasticSwitchedToBullish)
|
|
{
|
|
bullishScore += minScore;
|
|
}
|
|
|
|
//
|
|
if (isStochasticOB)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isStochasticUnderSignal)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isStochasticBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isStochasticCrossedUnderSignal)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isStochasticCrossedUnderOB)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isStochasticCrossedUnderOS)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
if (isStochasticSwitchedToBearish)
|
|
{
|
|
bearishScore += minScore;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Generate Summary String for Represent Conditions State ...
|
|
*
|
|
* @param onlyCommons: Boolean, Just Generate Only Commons Conditions ...
|
|
* @param onlyConditions: Boolean, Just Generate Only Conditions ...
|
|
* @param includeScores: Boolean, Attach Scores Representations on Result ...
|
|
* @param ignoreFalseConditions: Boolean, Ignore False Conditions on Result ...
|
|
* @param separator: String, Separate Lines ...
|
|
*
|
|
* @return ( string )
|
|
*/
|
|
string GenerateSummary(
|
|
bool onlyCommons = false,
|
|
bool onlyConditions = false,
|
|
bool includeScores = true,
|
|
bool ignoreFalseConditions = true,
|
|
string separator = "\n" //
|
|
)
|
|
{
|
|
//
|
|
string result = NULL;
|
|
|
|
//
|
|
double bullishScore = 0;
|
|
double bearishScore = 0;
|
|
GenerateScore(
|
|
bullishScore,
|
|
bearishScore //
|
|
);
|
|
|
|
//
|
|
string scoresStr =
|
|
//
|
|
"Scores: " + separator +
|
|
"---------------" + separator +
|
|
"Bullish: " + ToString(bullishScore) + separator +
|
|
"Bearish: " + ToString(bearishScore) + separator +
|
|
""
|
|
//
|
|
;
|
|
|
|
//
|
|
string commonStr = GenerateSpecifiedCommonSummary(
|
|
this,
|
|
separator,
|
|
includeScores //
|
|
);
|
|
|
|
//
|
|
string conditionsStr =
|
|
//
|
|
//
|
|
"-----------------------" + separator +
|
|
"X3MA: " + separator +
|
|
"-----------------------" + separator +
|
|
ToString("isFastOverMedium", isFastOverMedium, ignoreFalseConditions, separator) +
|
|
ToString("isFastUnderMedium", isFastUnderMedium, ignoreFalseConditions, separator) +
|
|
ToString("isFastCrossedOverMedium", isFastCrossedOverMedium, ignoreFalseConditions, separator) +
|
|
ToString("isFastCrossedUnderMedium", isFastCrossedUnderMedium, ignoreFalseConditions, separator) +
|
|
ToString("isFastOverSlow", isFastOverSlow, ignoreFalseConditions, separator) +
|
|
ToString("isFastUnderSlow", isFastUnderSlow, ignoreFalseConditions, separator) +
|
|
ToString("isFastCrossedOverSlow", isFastCrossedOverSlow, ignoreFalseConditions, separator) +
|
|
ToString("isFastCrossedUnderSlow", isFastCrossedUnderSlow, ignoreFalseConditions, separator) +
|
|
ToString("isMediumOverSlow", isMediumOverSlow, ignoreFalseConditions, separator) +
|
|
ToString("isMediumUnderSlow", isMediumUnderSlow, ignoreFalseConditions, separator) +
|
|
ToString("isMediumCrossedOverSlow", isMediumCrossedOverSlow, ignoreFalseConditions, separator) +
|
|
ToString("isMediumCrossedUnderSlow", isMediumCrossedUnderSlow, ignoreFalseConditions, separator) +
|
|
ToString("is3MaBullishOrdered", is3MaBullishOrdered, ignoreFalseConditions, separator) +
|
|
ToString("is3MaBearishOrdered", is3MaBearishOrdered, ignoreFalseConditions, separator) +
|
|
ToString("is3MaSwitchedToBullishOrdered", is3MaSwitchedToBullishOrdered, ignoreFalseConditions, separator) +
|
|
ToString("is3MaSwitchedToBearishOrdered", is3MaSwitchedToBearishOrdered, ignoreFalseConditions, separator) +
|
|
ToString("is3MaBullishState", is3MaBullishState, ignoreFalseConditions, separator) +
|
|
ToString("is3MaBearishState", is3MaBearishState, ignoreFalseConditions, separator) +
|
|
ToString("is3MaSwitchedToBullishState", is3MaSwitchedToBullishState, ignoreFalseConditions, separator) +
|
|
ToString("is3MaSwitchedToBearishState", is3MaSwitchedToBearishState, ignoreFalseConditions, separator) +
|
|
ToString("is3MaBullish", is3MaBullish, ignoreFalseConditions, separator) +
|
|
ToString("is3MaBearish", is3MaBearish, ignoreFalseConditions, separator) +
|
|
ToString("is3MaSwitchedToBullish", is3MaSwitchedToBullish, ignoreFalseConditions, separator) +
|
|
ToString("is3MaSwitchedToBearish", is3MaSwitchedToBearish, ignoreFalseConditions, separator) +
|
|
ToString("is3MaFinishedFromBullish", is3MaFinishedFromBullish, ignoreFalseConditions, separator) +
|
|
ToString("is3MaFinishedFromBearish", is3MaFinishedFromBearish, ignoreFalseConditions, separator) +
|
|
"-----------------------" + separator +
|
|
"XCA: " + separator +
|
|
"-----------------------" + separator +
|
|
ToString("isKIRejectUp", isKIRejectUp, ignoreFalseConditions, separator) +
|
|
ToString("isKIRejectDown", isKIRejectDown, ignoreFalseConditions, separator) +
|
|
ToString("isKIBullish", isKIBullish, ignoreFalseConditions, separator) +
|
|
ToString("isKIBearish", isKIBearish, ignoreFalseConditions, separator) +
|
|
ToString("isKISwitchedToBullish", isKISwitchedToBullish, ignoreFalseConditions, separator) +
|
|
ToString("isKIFinishedFromBullish", isKIFinishedFromBullish, ignoreFalseConditions, separator) +
|
|
ToString("isKISwitchedToBearish", isKISwitchedToBearish, ignoreFalseConditions, separator) +
|
|
ToString("isKIFinishedFromBearish", isKIFinishedFromBearish, ignoreFalseConditions, separator) +
|
|
ToString("isTKIRejectUp", isTKIRejectUp, ignoreFalseConditions, separator) +
|
|
ToString("isTKIRejectDown", isTKIRejectDown, ignoreFalseConditions, separator) +
|
|
ToString("isTKIBullish", isTKIBullish, ignoreFalseConditions, separator) +
|
|
ToString("isTKIBearish", isTKIBearish, ignoreFalseConditions, separator) +
|
|
ToString("isTKISwitchedToBullish", isTKISwitchedToBullish, ignoreFalseConditions, separator) +
|
|
ToString("isTKIFinishedFromBullish", isTKIFinishedFromBullish, ignoreFalseConditions, separator) +
|
|
ToString("isTKISwitchedToBearish", isTKISwitchedToBearish, ignoreFalseConditions, separator) +
|
|
ToString("isTKIFinishedFromBearish", isTKIFinishedFromBearish, ignoreFalseConditions, separator) +
|
|
ToString("isVidyaRejectUp", isVidyaRejectUp, ignoreFalseConditions, separator) +
|
|
ToString("isVidyaRejectDown", isVidyaRejectDown, ignoreFalseConditions, separator) +
|
|
ToString("isVidyaBullish", isVidyaBullish, ignoreFalseConditions, separator) +
|
|
ToString("isVidyaBearish", isVidyaBearish, ignoreFalseConditions, separator) +
|
|
ToString("isVidyaSwitchedToBullish", isVidyaSwitchedToBullish, ignoreFalseConditions, separator) +
|
|
ToString("isVidyaFinishedFromBullish", isVidyaFinishedFromBullish, ignoreFalseConditions, separator) +
|
|
ToString("isVidyaSwitchedToBearish", isVidyaSwitchedToBearish, ignoreFalseConditions, separator) +
|
|
ToString("isVidyaFinishedFromBearish", isVidyaFinishedFromBearish, ignoreFalseConditions, separator) +
|
|
ToString("isSarBullish", isSarBullish, ignoreFalseConditions, separator) +
|
|
ToString("isSarBearish", isSarBearish, ignoreFalseConditions, separator) +
|
|
ToString("isSarSwitchedToBullish", isSarSwitchedToBullish, ignoreFalseConditions, separator) +
|
|
ToString("isSarFinishedFromBullish", isSarFinishedFromBullish, ignoreFalseConditions, separator) +
|
|
ToString("isSarSwitchedToBearish", isSarSwitchedToBearish, ignoreFalseConditions, separator) +
|
|
ToString("isSarFinishedFromBearish", isSarFinishedFromBearish, ignoreFalseConditions, separator) +
|
|
ToString("isOverMah", isOverMah, ignoreFalseConditions, separator) +
|
|
ToString("isUnderMah", isUnderMah, ignoreFalseConditions, separator) +
|
|
ToString("isCrossedOverMah", isCrossedOverMah, ignoreFalseConditions, separator) +
|
|
ToString("isCrossedUnderMah", isCrossedUnderMah, ignoreFalseConditions, separator) +
|
|
ToString("isCloseOverMah", isCloseOverMah, ignoreFalseConditions, separator) +
|
|
ToString("isCloseUnderMah", isCloseUnderMah, ignoreFalseConditions, separator) +
|
|
ToString("isCloseCrossedOverMah", isCloseCrossedOverMah, ignoreFalseConditions, separator) +
|
|
ToString("isCloseCrossedUnderMah", isCloseCrossedUnderMah, ignoreFalseConditions, separator) +
|
|
ToString("isMahBullishRejected", isMahBullishRejected, ignoreFalseConditions, separator) +
|
|
ToString("isMahBearishRejected", isMahBearishRejected, ignoreFalseConditions, separator) +
|
|
ToString("isOverMal", isOverMal, ignoreFalseConditions, separator) +
|
|
ToString("isUnderMal", isUnderMal, ignoreFalseConditions, separator) +
|
|
ToString("isCrossedOverMal", isCrossedOverMal, ignoreFalseConditions, separator) +
|
|
ToString("isCrossedUnderMal", isCrossedUnderMal, ignoreFalseConditions, separator) +
|
|
ToString("isCloseOverMal", isCloseOverMal, ignoreFalseConditions, separator) +
|
|
ToString("isCloseUnderMal", isCloseUnderMal, ignoreFalseConditions, separator) +
|
|
ToString("isCloseCrossedOverMal", isCloseCrossedOverMal, ignoreFalseConditions, separator) +
|
|
ToString("isCloseCrossedUnderMal", isCloseCrossedUnderMal, ignoreFalseConditions, separator) +
|
|
ToString("isMalBullishRejected", isMalBullishRejected, ignoreFalseConditions, separator) +
|
|
ToString("isMalBearishRejected", isMalBearishRejected, ignoreFalseConditions, separator) +
|
|
ToString("isOverMac", isOverMac, ignoreFalseConditions, separator) +
|
|
ToString("isUnderMac", isUnderMac, ignoreFalseConditions, separator) +
|
|
ToString("isCrossedOverMac", isCrossedOverMac, ignoreFalseConditions, separator) +
|
|
ToString("isCrossedUnderMac", isCrossedUnderMac, ignoreFalseConditions, separator) +
|
|
ToString("isCloseOverMac", isCloseOverMac, ignoreFalseConditions, separator) +
|
|
ToString("isCloseUnderMac", isCloseUnderMac, ignoreFalseConditions, separator) +
|
|
ToString("isCloseCrossedOverMac", isCloseCrossedOverMac, ignoreFalseConditions, separator) +
|
|
ToString("isCloseCrossedUnderMac", isCloseCrossedUnderMac, ignoreFalseConditions, separator) +
|
|
ToString("isMacBullishRejected", isMacBullishRejected, ignoreFalseConditions, separator) +
|
|
ToString("isMacBearishRejected", isMacBearishRejected, ignoreFalseConditions, separator) +
|
|
ToString("isPeakSameLast", isPeakSameLast, ignoreFalseConditions, separator) +
|
|
ToString("isPeakOverLast", isPeakOverLast, ignoreFalseConditions, separator) +
|
|
ToString("isPeakUnderLast", isPeakUnderLast, ignoreFalseConditions, separator) +
|
|
ToString("isValeSameLast", isValeSameLast, ignoreFalseConditions, separator) +
|
|
ToString("isValeOverLast", isValeOverLast, ignoreFalseConditions, separator) +
|
|
ToString("isValeUnderLast", isValeUnderLast, ignoreFalseConditions, separator) +
|
|
ToString("isTrendRejectUp", isTrendRejectUp, ignoreFalseConditions, separator) +
|
|
ToString("isTrendRejectDown", isTrendRejectDown, ignoreFalseConditions, separator) +
|
|
ToString("isTrendBullish", isTrendBullish, ignoreFalseConditions, separator) +
|
|
ToString("isTrendBearish", isTrendBearish, ignoreFalseConditions, separator) +
|
|
ToString("isTrendSwitchedToBullish", isTrendSwitchedToBullish, ignoreFalseConditions, separator) +
|
|
ToString("isTrendFinishedFromBullish", isTrendFinishedFromBullish, ignoreFalseConditions, separator) +
|
|
ToString("isTrendSwitchedToBearish", isTrendSwitchedToBearish, ignoreFalseConditions, separator) +
|
|
ToString("isTrendFinishedFromBearish", isTrendFinishedFromBearish, ignoreFalseConditions, separator) +
|
|
ToString("isSupportSameLast", isSupportSameLast, ignoreFalseConditions, separator) +
|
|
ToString("isSupportOverLast", isSupportOverLast, ignoreFalseConditions, separator) +
|
|
ToString("isSupportUnderLast", isSupportUnderLast, ignoreFalseConditions, separator) +
|
|
ToString("isLastSupportBreaked", isLastSupportBreaked, ignoreFalseConditions, separator) +
|
|
ToString("isLastSupportRejected", isLastSupportRejected, ignoreFalseConditions, separator) +
|
|
ToString("isResistanceSameLast", isResistanceSameLast, ignoreFalseConditions, separator) +
|
|
ToString("isResistanceOverLast", isResistanceOverLast, ignoreFalseConditions, separator) +
|
|
ToString("isResistanceUnderLast", isResistanceUnderLast, ignoreFalseConditions, separator) +
|
|
ToString("isLastResistanceBreaked", isLastResistanceBreaked, ignoreFalseConditions, separator) +
|
|
ToString("isLastResistanceRejected", isLastResistanceRejected, ignoreFalseConditions, separator) +
|
|
ToString("isSwingLowSameLast", isSwingLowSameLast, ignoreFalseConditions, separator) +
|
|
ToString("isSwingLowOverLast", isSwingLowOverLast, ignoreFalseConditions, separator) +
|
|
ToString("isSwingLowUnderLast", isSwingLowUnderLast, ignoreFalseConditions, separator) +
|
|
ToString("isLastSwingLowBreaked", isLastSwingLowBreaked, ignoreFalseConditions, separator) +
|
|
ToString("isLastSwingLowRejected", isLastSwingLowRejected, ignoreFalseConditions, separator) +
|
|
ToString("isSwingHighSameLast", isSwingHighSameLast, ignoreFalseConditions, separator) +
|
|
ToString("isSwingHighOverLast", isSwingHighOverLast, ignoreFalseConditions, separator) +
|
|
ToString("isSwingHighUnderLast", isSwingHighUnderLast, ignoreFalseConditions, separator) +
|
|
ToString("isLastSwingHighBreaked", isLastSwingHighBreaked, ignoreFalseConditions, separator) +
|
|
ToString("isLastSwingHighRejected", isLastSwingHighRejected, ignoreFalseConditions, separator) +
|
|
ToString("isPeakIsPivot", isPeakIsPivot, ignoreFalseConditions, separator) +
|
|
ToString("isValeIsPivot", isValeIsPivot, ignoreFalseConditions, separator) +
|
|
ToString("isPeakSwitchedToPivot", isPeakSwitchedToPivot, ignoreFalseConditions, separator) +
|
|
ToString("isPeakFinishedFromPivot", isPeakFinishedFromPivot, ignoreFalseConditions, separator) +
|
|
ToString("isValeSwitchedToPivot", isValeSwitchedToPivot, ignoreFalseConditions, separator) +
|
|
ToString("isValeFinishedFromPivot", isValeFinishedFromPivot, ignoreFalseConditions, separator) +
|
|
ToString("isSwingLowSameAsVale", isSwingLowSameAsVale, ignoreFalseConditions, separator) +
|
|
ToString("isSwingHighSameAsPeak", isSwingHighSameAsPeak, ignoreFalseConditions, separator) +
|
|
ToString("isSupportSameAsVale", isSupportSameAsVale, ignoreFalseConditions, separator) +
|
|
ToString("isResistanceSameAsPeak", isResistanceSameAsPeak, ignoreFalseConditions, separator) +
|
|
ToString("isSupportSameAsSwingLow", isSupportSameAsSwingLow, ignoreFalseConditions, separator) +
|
|
ToString("isResistanceSameAsSwingHigh", isResistanceSameAsSwingHigh, ignoreFalseConditions, separator) +
|
|
"-----------------------" + separator +
|
|
"XOCS: " + separator +
|
|
"-----------------------" + separator +
|
|
ToString("isACBullish", isACBullish, ignoreFalseConditions, separator) +
|
|
ToString("isACBearish", isACBearish, ignoreFalseConditions, separator) +
|
|
ToString("isACSwitchedToBullish", isACSwitchedToBullish, ignoreFalseConditions, separator) +
|
|
ToString("isACSwitchedToBearish", isACSwitchedToBearish, ignoreFalseConditions, separator) +
|
|
ToString("isACOverMax", isACOverMax, ignoreFalseConditions, separator) +
|
|
ToString("isACUnderMin", isACUnderMin, ignoreFalseConditions, separator) +
|
|
ToString("isADBiggerLast", isADBiggerLast, ignoreFalseConditions, separator) +
|
|
ToString("isADLesserLast", isADLesserLast, ignoreFalseConditions, separator) +
|
|
ToString("isADOverMax", isADOverMax, ignoreFalseConditions, separator) +
|
|
ToString("isADUnderMin", isADUnderMin, ignoreFalseConditions, separator) +
|
|
ToString("isADXBiggerLast", isADXBiggerLast, ignoreFalseConditions, separator) +
|
|
ToString("isADXLesserLast", isADXLesserLast, ignoreFalseConditions, separator) +
|
|
ToString("isADXOverThreshold", isADXOverThreshold, ignoreFalseConditions, separator) +
|
|
ToString("isADXUnderThreshold", isADXUnderThreshold, ignoreFalseConditions, separator) +
|
|
ToString("isDXPBiggerThanDXN", isDXPBiggerThanDXN, ignoreFalseConditions, separator) +
|
|
ToString("isDXNBiggerThanDXP", isDXNBiggerThanDXP, ignoreFalseConditions, separator) +
|
|
ToString("isADXBullish", isADXBullish, ignoreFalseConditions, separator) +
|
|
ToString("isADXBearish", isADXBearish, ignoreFalseConditions, separator) +
|
|
ToString("isADXSwitchedToBullish", isADXSwitchedToBullish, ignoreFalseConditions, separator) +
|
|
ToString("isADXSwitchedToBearish", isADXSwitchedToBearish, ignoreFalseConditions, separator) +
|
|
ToString("isATROverLast", isATROverLast, ignoreFalseConditions, separator) +
|
|
ToString("isATRUnderLast", isATRUnderLast, ignoreFalseConditions, separator) +
|
|
ToString("isCCIBullish", isCCIBullish, ignoreFalseConditions, separator) +
|
|
ToString("isCCIBearish", isCCIBearish, ignoreFalseConditions, separator) +
|
|
ToString("isCCISwitchedToBullish", isCCISwitchedToBullish, ignoreFalseConditions, separator) +
|
|
ToString("isCCISwitchedToBearish", isCCISwitchedToBearish, ignoreFalseConditions, separator) +
|
|
ToString("isCCIOB", isCCIOB, ignoreFalseConditions, separator) +
|
|
ToString("isCCIOS", isCCIOS, ignoreFalseConditions, separator) +
|
|
ToString("isCCICrossedOverOB", isCCICrossedOverOB, ignoreFalseConditions, separator) +
|
|
ToString("isCCICrossedOverOS", isCCICrossedOverOS, ignoreFalseConditions, separator) +
|
|
ToString("isCCICrossedUnderOB", isCCICrossedUnderOB, ignoreFalseConditions, separator) +
|
|
ToString("isCCICrossedUnderOS", isCCICrossedUnderOS, ignoreFalseConditions, separator) +
|
|
ToString("isRSIBullish", isRSIBullish, ignoreFalseConditions, separator) +
|
|
ToString("isRSIBearish", isRSIBearish, ignoreFalseConditions, separator) +
|
|
ToString("isRSISwitchedToBullish", isRSISwitchedToBullish, ignoreFalseConditions, separator) +
|
|
ToString("isRSISwitchedToBearish", isRSISwitchedToBearish, ignoreFalseConditions, separator) +
|
|
ToString("isRSIOB", isRSIOB, ignoreFalseConditions, separator) +
|
|
ToString("isRSIOS", isRSIOS, ignoreFalseConditions, separator) +
|
|
ToString("isRSICrossedOverOB", isRSICrossedOverOB, ignoreFalseConditions, separator) +
|
|
ToString("isRSICrossedOverOS", isRSICrossedOverOS, ignoreFalseConditions, separator) +
|
|
ToString("isRSICrossedUnderOB", isRSICrossedUnderOB, ignoreFalseConditions, separator) +
|
|
ToString("isRSICrossedUnderOS", isRSICrossedUnderOS, ignoreFalseConditions, separator) +
|
|
ToString("isMFIBullish", isMFIBullish, ignoreFalseConditions, separator) +
|
|
ToString("isMFIBearish", isMFIBearish, ignoreFalseConditions, separator) +
|
|
ToString("isMFISwitchedToBullish", isMFISwitchedToBullish, ignoreFalseConditions, separator) +
|
|
ToString("isMFISwitchedToBearish", isMFISwitchedToBearish, ignoreFalseConditions, separator) +
|
|
ToString("isMFIOB", isMFIOB, ignoreFalseConditions, separator) +
|
|
ToString("isMFIOS", isMFIOS, ignoreFalseConditions, separator) +
|
|
ToString("isMFICrossedOverOB", isMFICrossedOverOB, ignoreFalseConditions, separator) +
|
|
ToString("isMFICrossedOverOS", isMFICrossedOverOS, ignoreFalseConditions, separator) +
|
|
ToString("isMFICrossedUnderOB", isMFICrossedUnderOB, ignoreFalseConditions, separator) +
|
|
ToString("isMFICrossedUnderOS", isMFICrossedUnderOS, ignoreFalseConditions, separator) +
|
|
ToString("isRVIBullish", isRVIBullish, ignoreFalseConditions, separator) +
|
|
ToString("isRVIBearish", isRVIBearish, ignoreFalseConditions, separator) +
|
|
ToString("isRVISwitchedToBullish", isRVISwitchedToBullish, ignoreFalseConditions, separator) +
|
|
ToString("isRVISwitchedToBearish", isRVISwitchedToBearish, ignoreFalseConditions, separator) +
|
|
ToString("isRVIOverSignal", isRVIOverSignal, ignoreFalseConditions, separator) +
|
|
ToString("isRVIUnderSignal", isRVIUnderSignal, ignoreFalseConditions, separator) +
|
|
ToString("isRVICrossedOverSignal", isRVICrossedOverSignal, ignoreFalseConditions, separator) +
|
|
ToString("isRVICrossedUnderSignal", isRVICrossedUnderSignal, ignoreFalseConditions, separator) +
|
|
ToString("isMACDBullish", isMACDBullish, ignoreFalseConditions, separator) +
|
|
ToString("isMACDBearish", isMACDBearish, ignoreFalseConditions, separator) +
|
|
ToString("isMACDSwitchedToBullish", isMACDSwitchedToBullish, ignoreFalseConditions, separator) +
|
|
ToString("isMACDSwitchedToBearish", isMACDSwitchedToBearish, ignoreFalseConditions, separator) +
|
|
ToString("isMACDOverSignal", isMACDOverSignal, ignoreFalseConditions, separator) +
|
|
ToString("isMACDUnderSignal", isMACDUnderSignal, ignoreFalseConditions, separator) +
|
|
ToString("isMACDCrossedOverSignal", isMACDCrossedOverSignal, ignoreFalseConditions, separator) +
|
|
ToString("isMACDCrossedUnderSignal", isMACDCrossedUnderSignal, ignoreFalseConditions, separator) +
|
|
ToString("isMomentumBullish", isMomentumBullish, ignoreFalseConditions, separator) +
|
|
ToString("isMomentumBearish", isMomentumBearish, ignoreFalseConditions, separator) +
|
|
ToString("isMomentumSwitchedToBullish", isMomentumSwitchedToBullish, ignoreFalseConditions, separator) +
|
|
ToString("isMomentumSwitchedToBearish", isMomentumSwitchedToBearish, ignoreFalseConditions, separator) +
|
|
ToString("isStochasticBullish", isStochasticBullish, ignoreFalseConditions, separator) +
|
|
ToString("isStochasticBearish", isStochasticBearish, ignoreFalseConditions, separator) +
|
|
ToString("isStochasticSwitchedToBullish", isStochasticSwitchedToBullish, ignoreFalseConditions, separator) +
|
|
ToString("isStochasticSwitchedToBearish", isStochasticSwitchedToBearish, ignoreFalseConditions, separator) +
|
|
ToString("isStochasticOverSignal", isStochasticOverSignal, ignoreFalseConditions, separator) +
|
|
ToString("isStochasticUnderSignal", isStochasticUnderSignal, ignoreFalseConditions, separator) +
|
|
ToString("isStochasticCrossedOverSignal", isStochasticCrossedOverSignal, ignoreFalseConditions, separator) +
|
|
ToString("isStochasticCrossedUnderSignal", isStochasticCrossedUnderSignal, ignoreFalseConditions, separator) +
|
|
ToString("isStochasticOB", isStochasticOB, ignoreFalseConditions, separator) +
|
|
ToString("isStochasticOS", isStochasticOS, ignoreFalseConditions, separator) +
|
|
ToString("isStochasticCrossedOverOB", isStochasticCrossedOverOB, ignoreFalseConditions, separator) +
|
|
ToString("isStochasticCrossedOverOS", isStochasticCrossedOverOS, ignoreFalseConditions, separator) +
|
|
ToString("isStochasticCrossedUnderOB", isStochasticCrossedUnderOB, ignoreFalseConditions, separator) +
|
|
ToString("isStochasticCrossedUnderOS", isStochasticCrossedUnderOS, ignoreFalseConditions, separator) +
|
|
//
|
|
""
|
|
//
|
|
;
|
|
|
|
//
|
|
if (onlyCommons && !onlyConditions)
|
|
{
|
|
result += commonStr = separator;
|
|
}
|
|
else if (onlyConditions && !onlyCommons)
|
|
{
|
|
result += conditionsStr + separator;
|
|
}
|
|
else
|
|
{
|
|
//
|
|
result +=
|
|
//
|
|
commonStr + separator +
|
|
conditionsStr + separator
|
|
//
|
|
;
|
|
}
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* Retrieve nique Tag Identifier ...
|
|
*
|
|
* @return ( string )
|
|
*/
|
|
string GetTag()
|
|
{
|
|
return GetTypeName(this);
|
|
}
|
|
};
|
|
|
|
//
|
|
// Helper Class Implementation ...
|
|
class XCXCAEAHelper : XCBase
|
|
{
|
|
//
|
|
// Public ...
|
|
public:
|
|
//
|
|
// Props ...
|
|
|
|
//
|
|
XCPOIDrawer *poiDrawer;
|
|
XCPOIDetector *poiDetector;
|
|
|
|
//
|
|
XCBarAnalyser *barAnalyser;
|
|
|
|
//
|
|
XCX121XCCHelper *ccHelper;
|
|
XCX121XCTHelper *ctHelper;
|
|
XCX121XCAHelper *caHelper;
|
|
XCX121XOCSHelper *ocsHelper;
|
|
XCX121X3MAHelper *x3maHelper;
|
|
|
|
//
|
|
// Constructor ...
|
|
XCXCAEAHelper()
|
|
{
|
|
//
|
|
barAnalyser = new XCBarAnalyser();
|
|
}
|
|
|
|
//
|
|
// Deconstructor ...
|
|
~XCXCAEAHelper()
|
|
{
|
|
//
|
|
mInputs.Clean();
|
|
|
|
//
|
|
ZeroMemory(ccHelper);
|
|
ZeroMemory(ctHelper);
|
|
ZeroMemory(caHelper);
|
|
ZeroMemory(ocsHelper);
|
|
ZeroMemory(x3maHelper);
|
|
|
|
//
|
|
ZeroMemory(poiDrawer);
|
|
ZeroMemory(poiDetector);
|
|
ZeroMemory(barAnalyser);
|
|
|
|
//
|
|
IndicatorRelease(acHandler);
|
|
IndicatorRelease(adHandler);
|
|
IndicatorRelease(adxHandler);
|
|
IndicatorRelease(atrHandler);
|
|
IndicatorRelease(cciHandler);
|
|
IndicatorRelease(rsiHandler);
|
|
IndicatorRelease(mfiHandler);
|
|
IndicatorRelease(rviHandler);
|
|
IndicatorRelease(macdHandler);
|
|
IndicatorRelease(momentumHandler);
|
|
IndicatorRelease(stochasticHandler);
|
|
}
|
|
|
|
//
|
|
string GetSymbol()
|
|
{
|
|
return mSymbol;
|
|
}
|
|
|
|
//
|
|
ENUM_TIMEFRAMES GetPeriod()
|
|
{
|
|
return mPeriod;
|
|
}
|
|
|
|
//
|
|
// Tools ...
|
|
|
|
/**
|
|
* Initialize Indicator Helper ...
|
|
*
|
|
* @param symbol: String, Symbol ...
|
|
* @param period: ENUM_TIMEFRAMES member, Period ...
|
|
* @param inputs: XCAEAInputs instance, Indicator Inputs ...
|
|
*
|
|
* @return ( bool )
|
|
*/
|
|
bool Init(
|
|
string symbol, // Trading Symbol
|
|
ENUM_TIMEFRAMES period, // Trading Period
|
|
XCAEAInputs &inputs // Inputs
|
|
)
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
result =
|
|
IsValid(symbol) &&
|
|
IsValid(period) &&
|
|
inputs.IsValid();
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
mSymbol = symbol;
|
|
mPeriod = period;
|
|
|
|
//
|
|
poiDetector = new XCPOIDetector(
|
|
symbol,
|
|
period //
|
|
);
|
|
poiDetector.Init();
|
|
|
|
//
|
|
poiDrawer = new XCPOIDrawer();
|
|
|
|
//
|
|
// Setting Inputs ...
|
|
|
|
//
|
|
mInputs = inputs;
|
|
|
|
//
|
|
// Initial Helpers ...
|
|
|
|
//
|
|
// XCT ...
|
|
ctHelper = new XCX121XCTHelper();
|
|
result =
|
|
result &&
|
|
ctHelper.Init(
|
|
symbol,
|
|
period,
|
|
mInputs.ctInputs //
|
|
);
|
|
|
|
//
|
|
// XCC ...
|
|
ccHelper = new XCX121XCCHelper();
|
|
result =
|
|
result &&
|
|
ccHelper.Init(
|
|
symbol,
|
|
period,
|
|
mInputs.ccInputs //
|
|
);
|
|
|
|
//
|
|
// XCA ...
|
|
caHelper = new XCX121XCAHelper();
|
|
result =
|
|
result &&
|
|
caHelper.Init(
|
|
symbol,
|
|
period,
|
|
mInputs.caInputs //
|
|
);
|
|
|
|
//
|
|
// XOSC ...
|
|
ocsHelper = new XCX121XOCSHelper();
|
|
result =
|
|
result &&
|
|
ocsHelper.Init(
|
|
symbol,
|
|
period,
|
|
mInputs.oscsInputs //
|
|
);
|
|
|
|
//
|
|
// X3MA ...
|
|
x3maHelper = new XCX121X3MAHelper();
|
|
result =
|
|
result &&
|
|
x3maHelper.Init(
|
|
symbol,
|
|
period,
|
|
mInputs.x3maInputs //
|
|
);
|
|
|
|
//
|
|
if (!result)
|
|
{
|
|
//
|
|
ZeroMemory(ccHelper);
|
|
ZeroMemory(ctHelper);
|
|
ZeroMemory(caHelper);
|
|
ZeroMemory(ocsHelper);
|
|
ZeroMemory(x3maHelper);
|
|
|
|
//
|
|
ZeroMemory(poiDrawer);
|
|
ZeroMemory(poiDetector);
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// OSCILLATORS Viewers ...
|
|
|
|
//
|
|
// AC ...
|
|
if (mInputs.showAC)
|
|
{
|
|
//
|
|
acHandler = iAC(
|
|
symbol,
|
|
period //
|
|
);
|
|
|
|
//
|
|
result =
|
|
result &&
|
|
acHandler != INVALID_HANDLE;
|
|
}
|
|
|
|
//
|
|
// AD ...
|
|
if (mInputs.showAD)
|
|
{
|
|
//
|
|
adHandler = iAD(
|
|
symbol,
|
|
period,
|
|
mInputs.oscsInputs.adAppliedTo //
|
|
);
|
|
|
|
//
|
|
result =
|
|
result &&
|
|
adHandler != INVALID_HANDLE;
|
|
}
|
|
|
|
//
|
|
// ADX ...
|
|
if (mInputs.showADX)
|
|
{
|
|
//
|
|
adxHandler = iADX(
|
|
symbol,
|
|
period,
|
|
mInputs.oscsInputs.adxLength //
|
|
);
|
|
|
|
//
|
|
result =
|
|
result &&
|
|
adxHandler != INVALID_HANDLE;
|
|
}
|
|
|
|
//
|
|
// ATR ...
|
|
if (mInputs.showATR)
|
|
{
|
|
//
|
|
atrHandler = iATR(
|
|
symbol,
|
|
period,
|
|
mInputs.oscsInputs.atrLength //
|
|
);
|
|
|
|
//
|
|
result =
|
|
result &&
|
|
atrHandler != INVALID_HANDLE;
|
|
}
|
|
|
|
//
|
|
// CCI ...
|
|
if (mInputs.showCCI)
|
|
{
|
|
//
|
|
cciHandler = iCCI(
|
|
symbol,
|
|
period,
|
|
mInputs.oscsInputs.cciLength,
|
|
mInputs.oscsInputs.cciAppliedTo //
|
|
);
|
|
|
|
//
|
|
result =
|
|
result &&
|
|
cciHandler != INVALID_HANDLE;
|
|
}
|
|
|
|
//
|
|
// RSI ...
|
|
if (mInputs.showRSI)
|
|
{
|
|
//
|
|
rsiHandler = iRSI(
|
|
symbol,
|
|
period,
|
|
mInputs.oscsInputs.rsiLength,
|
|
mInputs.oscsInputs.rsiAppliedTo //
|
|
);
|
|
|
|
//
|
|
result =
|
|
result &&
|
|
rsiHandler != INVALID_HANDLE;
|
|
}
|
|
|
|
//
|
|
// MFI ...
|
|
if (mInputs.showMFI)
|
|
{
|
|
//
|
|
mfiHandler = iMFI(
|
|
symbol,
|
|
period,
|
|
mInputs.oscsInputs.mfiLength,
|
|
mInputs.oscsInputs.mfiAppliedTo //
|
|
);
|
|
|
|
//
|
|
result =
|
|
result &&
|
|
mfiHandler != INVALID_HANDLE;
|
|
}
|
|
|
|
//
|
|
// RVI ...
|
|
if (mInputs.showRVI)
|
|
{
|
|
//
|
|
rviHandler = iRVI(
|
|
symbol,
|
|
period,
|
|
mInputs.oscsInputs.rviLength //
|
|
);
|
|
|
|
//
|
|
result =
|
|
result &&
|
|
rviHandler != INVALID_HANDLE;
|
|
}
|
|
|
|
//
|
|
// MACD ...
|
|
if (mInputs.showMACD)
|
|
{
|
|
//
|
|
macdHandler = iMACD(
|
|
symbol,
|
|
period,
|
|
mInputs.oscsInputs.macdFastLength,
|
|
mInputs.oscsInputs.macdSlowLength,
|
|
mInputs.oscsInputs.macdSignalLength,
|
|
mInputs.oscsInputs.macdAppliedTo //
|
|
);
|
|
|
|
//
|
|
result =
|
|
result &&
|
|
macdHandler != INVALID_HANDLE;
|
|
}
|
|
|
|
//
|
|
// Momentum ...
|
|
if (mInputs.showMomentum)
|
|
{
|
|
//
|
|
momentumHandler = iMomentum(
|
|
symbol,
|
|
period,
|
|
mInputs.oscsInputs.momentumLength,
|
|
mInputs.oscsInputs.momentumAppliedTo //
|
|
);
|
|
|
|
//
|
|
result =
|
|
result &&
|
|
momentumHandler != INVALID_HANDLE;
|
|
}
|
|
|
|
//
|
|
// Stochastic ...
|
|
if (mInputs.showStochastic)
|
|
{
|
|
//
|
|
stochasticHandler = iStochastic(
|
|
symbol,
|
|
period,
|
|
mInputs.oscsInputs.stochasticKLength,
|
|
mInputs.oscsInputs.stochasticDLength,
|
|
mInputs.oscsInputs.stochasticSmoothingLength,
|
|
mInputs.oscsInputs.stochasticSmoothingMethod,
|
|
mInputs.oscsInputs.stochasticAppliedTo //
|
|
);
|
|
|
|
//
|
|
result =
|
|
result &&
|
|
stochasticHandler != INVALID_HANDLE;
|
|
}
|
|
|
|
//
|
|
// If Result is False, Cleanup Resources ...
|
|
if (!result)
|
|
{
|
|
//
|
|
mInputs.Clean();
|
|
|
|
//
|
|
ZeroMemory(ccHelper);
|
|
ZeroMemory(ctHelper);
|
|
ZeroMemory(caHelper);
|
|
ZeroMemory(ocsHelper);
|
|
ZeroMemory(x3maHelper);
|
|
|
|
//
|
|
IndicatorRelease(acHandler);
|
|
IndicatorRelease(adHandler);
|
|
IndicatorRelease(adxHandler);
|
|
IndicatorRelease(atrHandler);
|
|
IndicatorRelease(cciHandler);
|
|
IndicatorRelease(rsiHandler);
|
|
IndicatorRelease(mfiHandler);
|
|
IndicatorRelease(rviHandler);
|
|
IndicatorRelease(macdHandler);
|
|
IndicatorRelease(momentumHandler);
|
|
IndicatorRelease(stochasticHandler);
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Conditions Readers ...
|
|
|
|
/**
|
|
* Retrieve Conditions ...
|
|
*
|
|
* @param conditions: Argument 1
|
|
* @param barIndex: int, Specified Bar Index ...
|
|
* @param loopback: int, Loopback looking for others ...
|
|
*
|
|
* @return ( bool )
|
|
*/
|
|
bool Get3MAConditions(
|
|
X121X3MAConditions &conditions, //
|
|
int barIndex = 0, //
|
|
int loopback = 5 //
|
|
)
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
result = x3maHelper.GetConditions(
|
|
conditions,
|
|
barIndex,
|
|
loopback //
|
|
);
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* Retrieve Conditions ...
|
|
*
|
|
* @param conditions: Argument 1
|
|
* @param barIndex: int, Specified Bar Index ...
|
|
* @param loopback: int, Loopback looking for others ...
|
|
*
|
|
* @return ( bool )
|
|
*/
|
|
bool GetCAConditions(
|
|
X121XCAConditions &conditions, //
|
|
int barIndex = 0, //
|
|
int loopback = 5 //
|
|
)
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
result = caHelper.GetConditions(
|
|
conditions,
|
|
barIndex,
|
|
loopback //
|
|
);
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
/**
|
|
* Retrieve Conditions ...
|
|
*
|
|
* @param conditions: Argument 1
|
|
* @param barIndex: int, Specified Bar Index ...
|
|
* @param loopback: int, Loopback looking for others ...
|
|
*
|
|
* @return ( bool )
|
|
*/
|
|
bool GetOSCSConditions(
|
|
X121XOCSConditions &conditions, //
|
|
int barIndex = 0, //
|
|
int loopback = 5 //
|
|
)
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
result = ocsHelper.GetConditions(
|
|
conditions,
|
|
barIndex,
|
|
loopback //
|
|
);
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Others ...
|
|
|
|
//
|
|
void Free()
|
|
{
|
|
//
|
|
caHelper.Free();
|
|
ocsHelper.Free();
|
|
x3maHelper.Free();
|
|
}
|
|
|
|
//
|
|
bool GetConditions(
|
|
XCAEAConditions &conditions, //
|
|
int barIndex = 0, //
|
|
int loopback = 5 //
|
|
)
|
|
{
|
|
//
|
|
bool result = true;
|
|
|
|
//
|
|
if (loopback < 5)
|
|
{
|
|
loopback = 5;
|
|
}
|
|
|
|
//
|
|
conditions.Clean();
|
|
|
|
//
|
|
conditions.symbol = mSymbol;
|
|
conditions.period = mPeriod;
|
|
conditions.time = TimeCurrent();
|
|
|
|
//
|
|
// Filling Bars ...
|
|
int barsCount = GetBars(
|
|
conditions.bars,
|
|
mSymbol,
|
|
mPeriod,
|
|
barIndex,
|
|
loopback //
|
|
);
|
|
result = barsCount == loopback;
|
|
if (!result)
|
|
{
|
|
//
|
|
conditions.Clean();
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
int zIndex = barIndex;
|
|
int cIndex = zIndex + 1;
|
|
int pIndex = cIndex + 1;
|
|
int ppIndex = pIndex + 1;
|
|
|
|
//
|
|
XOHCL zBar;
|
|
XOHCL cBar;
|
|
XOHCL pBar;
|
|
XOHCL fromBar;
|
|
|
|
//
|
|
X121XCAConditions xcaConditions;
|
|
X121XOCSConditions xocsConditions;
|
|
X121X3MAConditions x3maConditions;
|
|
|
|
//
|
|
result = zBar.Init(
|
|
mSymbol,
|
|
mPeriod,
|
|
zIndex //
|
|
);
|
|
result =
|
|
result &&
|
|
zBar.GetPreviousBar(cBar);
|
|
result =
|
|
result &&
|
|
cBar.GetPreviousBar(pBar);
|
|
result =
|
|
result &&
|
|
fromBar.Init(
|
|
zBar.symbol,
|
|
zBar.period,
|
|
zIndex + loopback);
|
|
|
|
//
|
|
// Conditions Retriever ...
|
|
|
|
//
|
|
// XCA ...
|
|
result =
|
|
result &&
|
|
GetCAConditions(
|
|
xcaConditions,
|
|
barIndex,
|
|
loopback //
|
|
);
|
|
|
|
//
|
|
// XOSCS ...
|
|
result =
|
|
result &&
|
|
GetOSCSConditions(
|
|
xocsConditions,
|
|
barIndex,
|
|
loopback //
|
|
);
|
|
|
|
//
|
|
// X3MA ...
|
|
result =
|
|
result &&
|
|
Get3MAConditions(
|
|
x3maConditions,
|
|
barIndex,
|
|
loopback //
|
|
);
|
|
|
|
//
|
|
// Check Result ...
|
|
if (!result)
|
|
{
|
|
//
|
|
zBar.Clean();
|
|
cBar.Clean();
|
|
pBar.Clean();
|
|
fromBar.Clean();
|
|
|
|
//
|
|
xcaConditions.Clean();
|
|
xocsConditions.Clean();
|
|
x3maConditions.Clean();
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
conditions.to = zBar.time;
|
|
conditions.from = fromBar.time;
|
|
|
|
//
|
|
// Fill X121 Conditions Reference by Using
|
|
// Retrieved Conditions ...
|
|
|
|
//
|
|
int cIDX = 1;
|
|
int pIDX = cIDX + 1;
|
|
|
|
//
|
|
// X3MA ...
|
|
|
|
//
|
|
// Buffers ...
|
|
|
|
//
|
|
Copy(
|
|
x3maConditions.fastBuffer,
|
|
conditions.fastBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
x3maConditions.mediumBuffer,
|
|
conditions.mediumBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
x3maConditions.slowBuffer,
|
|
conditions.slowBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
x3maConditions.fastStateBuffer,
|
|
conditions.fastStateBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
x3maConditions.mediumStateBuffer,
|
|
conditions.mediumStateBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
x3maConditions.slowStateBuffer,
|
|
conditions.slowStateBuffer //
|
|
);
|
|
|
|
//
|
|
// Conditions ...
|
|
|
|
//
|
|
conditions.is3MaBullish = x3maConditions.is3MaBullish;
|
|
conditions.is3MaBearish = x3maConditions.is3MaBearish;
|
|
conditions.isFastOverSlow = x3maConditions.isFastOverSlow;
|
|
conditions.isFastUnderSlow = x3maConditions.isFastUnderSlow;
|
|
conditions.isFastOverMedium = x3maConditions.isFastOverMedium;
|
|
conditions.isMediumOverSlow = x3maConditions.isMediumOverSlow;
|
|
conditions.isFastUnderMedium = x3maConditions.isFastUnderMedium;
|
|
conditions.isMediumUnderSlow = x3maConditions.isMediumUnderSlow;
|
|
conditions.is3MaBullishState = x3maConditions.is3MaBullishState;
|
|
conditions.is3MaBearishState = x3maConditions.is3MaBearishState;
|
|
conditions.is3MaBullishOrdered = x3maConditions.is3MaBullishOrdered;
|
|
conditions.is3MaBearishOrdered = x3maConditions.is3MaBearishOrdered;
|
|
conditions.isFastCrossedOverSlow = x3maConditions.isFastCrossedOverSlow;
|
|
conditions.is3MaSwitchedToBullish = x3maConditions.is3MaSwitchedToBullish;
|
|
conditions.is3MaSwitchedToBearish = x3maConditions.is3MaSwitchedToBearish;
|
|
conditions.isFastCrossedUnderSlow = x3maConditions.isFastCrossedUnderSlow;
|
|
conditions.isFastCrossedOverMedium = x3maConditions.isFastCrossedOverMedium;
|
|
conditions.isMediumCrossedOverSlow = x3maConditions.isMediumCrossedOverSlow;
|
|
conditions.is3MaFinishedFromBullish = x3maConditions.is3MaFinishedFromBullish;
|
|
conditions.is3MaFinishedFromBearish = x3maConditions.is3MaFinishedFromBearish;
|
|
conditions.isFastCrossedUnderMedium = x3maConditions.isFastCrossedUnderMedium;
|
|
conditions.isMediumCrossedUnderSlow = x3maConditions.isMediumCrossedUnderSlow;
|
|
conditions.is3MaSwitchedToBullishState = x3maConditions.is3MaSwitchedToBullishState;
|
|
conditions.is3MaSwitchedToBearishState = x3maConditions.is3MaSwitchedToBearishState;
|
|
conditions.is3MaSwitchedToBullishOrdered = x3maConditions.is3MaSwitchedToBullishOrdered;
|
|
conditions.is3MaSwitchedToBearishOrdered = x3maConditions.is3MaSwitchedToBearishOrdered;
|
|
|
|
//
|
|
// XCA ...
|
|
|
|
//
|
|
// Buffers ...
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.kiBuffer,
|
|
conditions.kiBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.tkiBuffer,
|
|
conditions.tkiBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.vidyaBuffer,
|
|
conditions.vidyaBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.sHHBuffer,
|
|
conditions.sHHBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.sLLBuffer,
|
|
conditions.sLLBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.mHHBuffer,
|
|
conditions.mHHBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.mLLBuffer,
|
|
conditions.mLLBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.lHHBuffer,
|
|
conditions.lHHBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.lLLBuffer,
|
|
conditions.lLLBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.hHHBuffer,
|
|
conditions.hHHBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.hLLBuffer,
|
|
conditions.hLLBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.sarBuffer,
|
|
conditions.sarBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.mahBuffer,
|
|
conditions.mahBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.malBuffer,
|
|
conditions.malBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.macBuffer,
|
|
conditions.macBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.peakBuffer,
|
|
conditions.peakBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.valeBuffer,
|
|
conditions.valeBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.trendBuffer,
|
|
conditions.trendBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.kiStateBuffer,
|
|
conditions.kiStateBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.tkiStateBuffer,
|
|
conditions.tkiStateBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.vidyaStateBuffer,
|
|
conditions.vidyaStateBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.supportBuffer,
|
|
conditions.supportBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.swingLowBuffer,
|
|
conditions.swingLowBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.swingHighBuffer,
|
|
conditions.swingHighBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.resistanceBuffer,
|
|
conditions.resistanceBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.peakGoldenBuffer,
|
|
conditions.peakGoldenBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.valeGoldenBuffer,
|
|
conditions.valeGoldenBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.fiboLevel1Buffer,
|
|
conditions.fiboLevel1Buffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.fiboLevel2Buffer,
|
|
conditions.fiboLevel2Buffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.fiboLevel3Buffer,
|
|
conditions.fiboLevel3Buffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.fiboLevel4Buffer,
|
|
conditions.fiboLevel4Buffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.fiboLevel5Buffer,
|
|
conditions.fiboLevel5Buffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xcaConditions.trendStateBuffer,
|
|
conditions.trendStateBuffer //
|
|
);
|
|
|
|
//
|
|
// Conditions ...
|
|
|
|
//
|
|
conditions.isOverMah = xcaConditions.isOverMah;
|
|
conditions.isOverMal = xcaConditions.isOverMal;
|
|
conditions.isOverMac = xcaConditions.isOverMac;
|
|
conditions.isUnderMah = xcaConditions.isUnderMah;
|
|
conditions.isUnderMal = xcaConditions.isUnderMal;
|
|
conditions.isUnderMac = xcaConditions.isUnderMac;
|
|
conditions.isKIBullish = xcaConditions.isKIBullish;
|
|
conditions.isKIBearish = xcaConditions.isKIBearish;
|
|
conditions.isKIRejectUp = xcaConditions.isKIRejectUp;
|
|
conditions.isTKIBullish = xcaConditions.isTKIBullish;
|
|
conditions.isTKIBearish = xcaConditions.isTKIBearish;
|
|
conditions.isSarBullish = xcaConditions.isSarBullish;
|
|
conditions.isSarBearish = xcaConditions.isSarBearish;
|
|
conditions.isTKIRejectUp = xcaConditions.isTKIRejectUp;
|
|
conditions.isPeakIsPivot = xcaConditions.isPeakIsPivot;
|
|
conditions.isValeIsPivot = xcaConditions.isValeIsPivot;
|
|
conditions.isCloseOverMah = xcaConditions.isCloseOverMah;
|
|
conditions.isCloseOverMal = xcaConditions.isCloseOverMal;
|
|
conditions.isCloseOverMac = xcaConditions.isCloseOverMac;
|
|
conditions.isVidyaBullish = xcaConditions.isVidyaBullish;
|
|
conditions.isVidyaBearish = xcaConditions.isVidyaBearish;
|
|
conditions.isKIRejectDown = xcaConditions.isKIRejectDown;
|
|
conditions.isPeakSameLast = xcaConditions.isPeakSameLast;
|
|
conditions.isPeakOverLast = xcaConditions.isPeakOverLast;
|
|
conditions.isValeSameLast = xcaConditions.isValeSameLast;
|
|
conditions.isValeOverLast = xcaConditions.isValeOverLast;
|
|
conditions.isTrendBullish = xcaConditions.isTrendBullish;
|
|
conditions.isTrendBearish = xcaConditions.isTrendBearish;
|
|
conditions.isCloseUnderMah = xcaConditions.isCloseUnderMah;
|
|
conditions.isCloseUnderMal = xcaConditions.isCloseUnderMal;
|
|
conditions.isCloseUnderMac = xcaConditions.isCloseUnderMac;
|
|
conditions.isTKIRejectDown = xcaConditions.isTKIRejectDown;
|
|
conditions.isPeakUnderLast = xcaConditions.isPeakUnderLast;
|
|
conditions.isValeUnderLast = xcaConditions.isValeUnderLast;
|
|
conditions.isTrendRejectUp = xcaConditions.isTrendRejectUp;
|
|
conditions.isCrossedOverMah = xcaConditions.isCrossedOverMah;
|
|
conditions.isCrossedOverMal = xcaConditions.isCrossedOverMal;
|
|
conditions.isCrossedOverMac = xcaConditions.isCrossedOverMac;
|
|
conditions.isCrossedUnderMah = xcaConditions.isCrossedUnderMah;
|
|
conditions.isCrossedUnderMal = xcaConditions.isCrossedUnderMal;
|
|
conditions.isCrossedUnderMac = xcaConditions.isCrossedUnderMac;
|
|
conditions.isTrendRejectDown = xcaConditions.isTrendRejectDown;
|
|
conditions.isSupportSameLast = xcaConditions.isSupportSameLast;
|
|
conditions.isSupportOverLast = xcaConditions.isSupportOverLast;
|
|
conditions.isSupportUnderLast = xcaConditions.isSupportUnderLast;
|
|
conditions.isSwingLowSameLast = xcaConditions.isSwingLowSameLast;
|
|
conditions.isSwingLowOverLast = xcaConditions.isSwingLowOverLast;
|
|
conditions.isSwingLowUnderLast = xcaConditions.isSwingLowUnderLast;
|
|
conditions.isSwingHighSameLast = xcaConditions.isSwingHighSameLast;
|
|
conditions.isSwingHighOverLast = xcaConditions.isSwingHighOverLast;
|
|
conditions.isSupportSameAsVale = xcaConditions.isSupportSameAsVale;
|
|
conditions.isMahBullishRejected = xcaConditions.isMahBullishRejected;
|
|
conditions.isMahBearishRejected = xcaConditions.isMahBearishRejected;
|
|
conditions.isMalBullishRejected = xcaConditions.isMalBullishRejected;
|
|
conditions.isMalBearishRejected = xcaConditions.isMalBearishRejected;
|
|
conditions.isMacBullishRejected = xcaConditions.isMacBullishRejected;
|
|
conditions.isMacBearishRejected = xcaConditions.isMacBearishRejected;
|
|
conditions.isLastSupportBreaked = xcaConditions.isLastSupportBreaked;
|
|
conditions.isResistanceSameLast = xcaConditions.isResistanceSameLast;
|
|
conditions.isResistanceOverLast = xcaConditions.isResistanceOverLast;
|
|
conditions.isSwingHighUnderLast = xcaConditions.isSwingHighUnderLast;
|
|
conditions.isSwingLowSameAsVale = xcaConditions.isSwingLowSameAsVale;
|
|
conditions.isCloseCrossedOverMah = xcaConditions.isCloseCrossedOverMah;
|
|
conditions.isCloseCrossedOverMal = xcaConditions.isCloseCrossedOverMal;
|
|
conditions.isCloseCrossedOverMac = xcaConditions.isCloseCrossedOverMac;
|
|
conditions.isLastSupportRejected = xcaConditions.isLastSupportRejected;
|
|
conditions.isResistanceUnderLast = xcaConditions.isResistanceUnderLast;
|
|
conditions.isKISwitchedToBullish = xcaConditions.isKISwitchedToBullish;
|
|
conditions.isKISwitchedToBearish = xcaConditions.isKISwitchedToBearish;
|
|
conditions.isLastSwingLowBreaked = xcaConditions.isLastSwingLowBreaked;
|
|
conditions.isSwingHighSameAsPeak = xcaConditions.isSwingHighSameAsPeak;
|
|
conditions.isPeakSwitchedToPivot = xcaConditions.isPeakSwitchedToPivot;
|
|
conditions.isValeSwitchedToPivot = xcaConditions.isValeSwitchedToPivot;
|
|
conditions.isCloseCrossedUnderMah = xcaConditions.isCloseCrossedUnderMah;
|
|
conditions.isCloseCrossedUnderMal = xcaConditions.isCloseCrossedUnderMal;
|
|
conditions.isCloseCrossedUnderMac = xcaConditions.isCloseCrossedUnderMac;
|
|
conditions.isTKISwitchedToBullish = xcaConditions.isTKISwitchedToBullish;
|
|
conditions.isTKISwitchedToBearish = xcaConditions.isTKISwitchedToBearish;
|
|
conditions.isLastSwingLowRejected = xcaConditions.isLastSwingLowRejected;
|
|
conditions.isSarSwitchedToBullish = xcaConditions.isSarSwitchedToBullish;
|
|
conditions.isSarSwitchedToBearish = xcaConditions.isSarSwitchedToBearish;
|
|
conditions.isLastSwingHighBreaked = xcaConditions.isLastSwingHighBreaked;
|
|
conditions.isResistanceSameAsPeak = xcaConditions.isResistanceSameAsPeak;
|
|
conditions.isPeakFinishedFromPivot = xcaConditions.isPeakFinishedFromPivot;
|
|
conditions.isValeFinishedFromPivot = xcaConditions.isValeFinishedFromPivot;
|
|
conditions.isLastSwingHighRejected = xcaConditions.isLastSwingHighRejected;
|
|
conditions.isLastResistanceBreaked = xcaConditions.isLastResistanceBreaked;
|
|
conditions.isSupportSameAsSwingLow = xcaConditions.isSupportSameAsSwingLow;
|
|
conditions.isKIFinishedFromBullish = xcaConditions.isKIFinishedFromBullish;
|
|
conditions.isKIFinishedFromBearish = xcaConditions.isKIFinishedFromBearish;
|
|
conditions.isTKIFinishedFromBullish = xcaConditions.isTKIFinishedFromBullish;
|
|
conditions.isTKIFinishedFromBearish = xcaConditions.isTKIFinishedFromBearish;
|
|
conditions.isSarFinishedFromBullish = xcaConditions.isSarFinishedFromBullish;
|
|
conditions.isSarFinishedFromBearish = xcaConditions.isSarFinishedFromBearish;
|
|
conditions.isVidyaSwitchedToBullish = xcaConditions.isVidyaSwitchedToBullish;
|
|
conditions.isVidyaSwitchedToBearish = xcaConditions.isVidyaSwitchedToBearish;
|
|
conditions.isLastResistanceRejected = xcaConditions.isLastResistanceRejected;
|
|
conditions.isTrendSwitchedToBullish = xcaConditions.isTrendSwitchedToBullish;
|
|
conditions.isTrendSwitchedToBearish = xcaConditions.isTrendSwitchedToBearish;
|
|
conditions.isVidyaFinishedFromBullish = xcaConditions.isVidyaFinishedFromBullish;
|
|
conditions.isVidyaFinishedFromBearish = xcaConditions.isVidyaFinishedFromBearish;
|
|
conditions.isTrendFinishedFromBullish = xcaConditions.isTrendFinishedFromBullish;
|
|
conditions.isTrendFinishedFromBearish = xcaConditions.isTrendFinishedFromBearish;
|
|
conditions.isResistanceSameAsSwingHigh = xcaConditions.isResistanceSameAsSwingHigh;
|
|
|
|
//
|
|
// XOSCS ...
|
|
|
|
//
|
|
// Buffers ...
|
|
|
|
//
|
|
Copy(
|
|
xocsConditions.acBuffer,
|
|
conditions.acBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xocsConditions.adBuffer,
|
|
conditions.adBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xocsConditions.atrBuffer,
|
|
conditions.atrBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xocsConditions.cciBuffer,
|
|
conditions.cciBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xocsConditions.rsiBuffer,
|
|
conditions.rsiBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xocsConditions.mfiBuffer,
|
|
conditions.mfiBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xocsConditions.rviBuffer,
|
|
conditions.rviBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xocsConditions.adxBuffer,
|
|
conditions.adxBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xocsConditions.adxpBuffer,
|
|
conditions.adxpBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xocsConditions.adxnBuffer,
|
|
conditions.adxnBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xocsConditions.macdBuffer,
|
|
conditions.macdBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xocsConditions.momentumBuffer,
|
|
conditions.momentumBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xocsConditions.rviSignalBuffer,
|
|
conditions.rviSignalBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xocsConditions.macdSignalBuffer,
|
|
conditions.macdSignalBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xocsConditions.stochasticBuffer,
|
|
conditions.stochasticBuffer //
|
|
);
|
|
|
|
//
|
|
Copy(
|
|
xocsConditions.stochasticSignalBuffer,
|
|
conditions.stochasticSignalBuffer //
|
|
);
|
|
|
|
//
|
|
// Values ...
|
|
|
|
//
|
|
conditions.adxThreshold = xocsConditions.adxThreshold;
|
|
conditions.cciOBLevel = xocsConditions.cciOBLevel;
|
|
conditions.cciOSLevel = xocsConditions.cciOSLevel;
|
|
conditions.cciReversalLevel = xocsConditions.cciReversalLevel;
|
|
conditions.rsiOBLevel = xocsConditions.rsiOBLevel;
|
|
conditions.rsiOSLevel = xocsConditions.rsiOSLevel;
|
|
conditions.rsiReversalLevel = xocsConditions.rsiReversalLevel;
|
|
conditions.mfiOBLevel = xocsConditions.mfiOBLevel;
|
|
conditions.mfiOSLevel = xocsConditions.mfiOSLevel;
|
|
conditions.mfiReversalLevel = xocsConditions.mfiReversalLevel;
|
|
conditions.rviBullishLevel = xocsConditions.rviBullishLevel;
|
|
conditions.rviBearishLevel = xocsConditions.rviBearishLevel;
|
|
conditions.macdBullishLevel = xocsConditions.macdBullishLevel;
|
|
conditions.macdBearishLevel = xocsConditions.macdBearishLevel;
|
|
conditions.momentumBullishLevel = xocsConditions.momentumBullishLevel;
|
|
conditions.momentumBearishLevel = xocsConditions.momentumBearishLevel;
|
|
conditions.stochasticOBLevel = xocsConditions.stochasticOBLevel;
|
|
conditions.stochasticOSLevel = xocsConditions.stochasticOSLevel;
|
|
conditions.stochasticReversalLevel = xocsConditions.stochasticReversalLevel;
|
|
|
|
//
|
|
// Conditions ...
|
|
|
|
//
|
|
conditions.isCCIOB = xocsConditions.isCCIOB;
|
|
conditions.isCCIOS = xocsConditions.isCCIOS;
|
|
conditions.isRSIOB = xocsConditions.isRSIOB;
|
|
conditions.isRSIOS = xocsConditions.isRSIOS;
|
|
conditions.isMFIOB = xocsConditions.isMFIOB;
|
|
conditions.isMFIOS = xocsConditions.isMFIOS;
|
|
conditions.isACBullish = xocsConditions.isACBullish;
|
|
conditions.isACBearish = xocsConditions.isACBearish;
|
|
conditions.isACOverMax = xocsConditions.isACOverMax;
|
|
conditions.isADOverMax = xocsConditions.isADOverMax;
|
|
conditions.isACUnderMin = xocsConditions.isACUnderMin;
|
|
conditions.isADUnderMin = xocsConditions.isADUnderMin;
|
|
conditions.isADXBullish = xocsConditions.isADXBullish;
|
|
conditions.isADXBearish = xocsConditions.isADXBearish;
|
|
conditions.isCCIBullish = xocsConditions.isCCIBullish;
|
|
conditions.isCCIBearish = xocsConditions.isCCIBearish;
|
|
conditions.isRSIBullish = xocsConditions.isRSIBullish;
|
|
conditions.isRSIBearish = xocsConditions.isRSIBearish;
|
|
conditions.isMFIBullish = xocsConditions.isMFIBullish;
|
|
conditions.isMFIBearish = xocsConditions.isMFIBearish;
|
|
conditions.isRVIBullish = xocsConditions.isRVIBullish;
|
|
conditions.isRVIBearish = xocsConditions.isRVIBearish;
|
|
conditions.isATROverLast = xocsConditions.isATROverLast;
|
|
conditions.isMACDBullish = xocsConditions.isMACDBullish;
|
|
conditions.isMACDBearish = xocsConditions.isMACDBearish;
|
|
conditions.isATRUnderLast = xocsConditions.isATRUnderLast;
|
|
conditions.isADBiggerLast = xocsConditions.isADBiggerLast;
|
|
conditions.isADLesserLast = xocsConditions.isADLesserLast;
|
|
conditions.isStochasticOB = xocsConditions.isStochasticOB;
|
|
conditions.isStochasticOS = xocsConditions.isStochasticOS;
|
|
conditions.isADXBiggerLast = xocsConditions.isADXBiggerLast;
|
|
conditions.isADXLesserLast = xocsConditions.isADXLesserLast;
|
|
conditions.isRVIOverSignal = xocsConditions.isRVIOverSignal;
|
|
conditions.isRVIUnderSignal = xocsConditions.isRVIUnderSignal;
|
|
conditions.isMACDOverSignal = xocsConditions.isMACDOverSignal;
|
|
conditions.isMACDUnderSignal = xocsConditions.isMACDUnderSignal;
|
|
conditions.isMomentumBullish = xocsConditions.isMomentumBullish;
|
|
conditions.isMomentumBearish = xocsConditions.isMomentumBearish;
|
|
conditions.isADXOverThreshold = xocsConditions.isADXOverThreshold;
|
|
conditions.isDXPBiggerThanDXN = xocsConditions.isDXPBiggerThanDXN;
|
|
conditions.isDXNBiggerThanDXP = xocsConditions.isDXNBiggerThanDXP;
|
|
conditions.isCCICrossedOverOB = xocsConditions.isCCICrossedOverOB;
|
|
conditions.isCCICrossedOverOS = xocsConditions.isCCICrossedOverOS;
|
|
conditions.isRSICrossedOverOB = xocsConditions.isRSICrossedOverOB;
|
|
conditions.isRSICrossedOverOS = xocsConditions.isRSICrossedOverOS;
|
|
conditions.isMFICrossedOverOB = xocsConditions.isMFICrossedOverOB;
|
|
conditions.isMFICrossedOverOS = xocsConditions.isMFICrossedOverOS;
|
|
conditions.isADXUnderThreshold = xocsConditions.isADXUnderThreshold;
|
|
conditions.isCCICrossedUnderOB = xocsConditions.isCCICrossedUnderOB;
|
|
conditions.isCCICrossedUnderOS = xocsConditions.isCCICrossedUnderOS;
|
|
conditions.isRSICrossedUnderOB = xocsConditions.isRSICrossedUnderOB;
|
|
conditions.isRSICrossedUnderOS = xocsConditions.isRSICrossedUnderOS;
|
|
conditions.isMFICrossedUnderOB = xocsConditions.isMFICrossedUnderOB;
|
|
conditions.isMFICrossedUnderOS = xocsConditions.isMFICrossedUnderOS;
|
|
conditions.isStochasticBullish = xocsConditions.isStochasticBullish;
|
|
conditions.isStochasticBearish = xocsConditions.isStochasticBearish;
|
|
conditions.isACSwitchedToBullish = xocsConditions.isACSwitchedToBullish;
|
|
conditions.isACSwitchedToBearish = xocsConditions.isACSwitchedToBearish;
|
|
conditions.isADXSwitchedToBullish = xocsConditions.isADXSwitchedToBullish;
|
|
conditions.isADXSwitchedToBearish = xocsConditions.isADXSwitchedToBearish;
|
|
conditions.isCCISwitchedToBullish = xocsConditions.isCCISwitchedToBullish;
|
|
conditions.isCCISwitchedToBearish = xocsConditions.isCCISwitchedToBearish;
|
|
conditions.isRSISwitchedToBullish = xocsConditions.isRSISwitchedToBullish;
|
|
conditions.isRSISwitchedToBearish = xocsConditions.isRSISwitchedToBearish;
|
|
conditions.isMFISwitchedToBullish = xocsConditions.isMFISwitchedToBullish;
|
|
conditions.isMFISwitchedToBearish = xocsConditions.isMFISwitchedToBearish;
|
|
conditions.isRVISwitchedToBullish = xocsConditions.isRVISwitchedToBullish;
|
|
conditions.isRVISwitchedToBearish = xocsConditions.isRVISwitchedToBearish;
|
|
conditions.isRVICrossedOverSignal = xocsConditions.isRVICrossedOverSignal;
|
|
conditions.isStochasticOverSignal = xocsConditions.isStochasticOverSignal;
|
|
conditions.isStochasticUnderSignal = xocsConditions.isStochasticUnderSignal;
|
|
conditions.isRVICrossedUnderSignal = xocsConditions.isRVICrossedUnderSignal;
|
|
conditions.isMACDSwitchedToBullish = xocsConditions.isMACDSwitchedToBullish;
|
|
conditions.isMACDSwitchedToBearish = xocsConditions.isMACDSwitchedToBearish;
|
|
conditions.isMACDCrossedOverSignal = xocsConditions.isMACDCrossedOverSignal;
|
|
conditions.isMACDCrossedUnderSignal = xocsConditions.isMACDCrossedUnderSignal;
|
|
conditions.isStochasticCrossedOverOB = xocsConditions.isStochasticCrossedOverOB;
|
|
conditions.isStochasticCrossedOverOS = xocsConditions.isStochasticCrossedOverOS;
|
|
conditions.isStochasticCrossedUnderOB = xocsConditions.isStochasticCrossedUnderOB;
|
|
conditions.isStochasticCrossedUnderOS = xocsConditions.isStochasticCrossedUnderOS;
|
|
conditions.isMomentumSwitchedToBullish = xocsConditions.isMomentumSwitchedToBullish;
|
|
conditions.isMomentumSwitchedToBearish = xocsConditions.isMomentumSwitchedToBearish;
|
|
conditions.isStochasticSwitchedToBullish = xocsConditions.isStochasticSwitchedToBullish;
|
|
conditions.isStochasticSwitchedToBearish = xocsConditions.isStochasticSwitchedToBearish;
|
|
conditions.isStochasticCrossedOverSignal = xocsConditions.isStochasticCrossedOverSignal;
|
|
conditions.isStochasticCrossedUnderSignal = xocsConditions.isStochasticCrossedUnderSignal;
|
|
|
|
//
|
|
int bodiesCount = barAnalyser.GetPriceRange(
|
|
conditions.bodies,
|
|
zBar,
|
|
true, // Force Body ...
|
|
true, // Force Price Diff ...
|
|
loopback //
|
|
);
|
|
int rangesCount = barAnalyser.GetPriceRange(
|
|
conditions.ranges,
|
|
zBar,
|
|
true, // Force Body ...
|
|
true, // Force Price Diff ...
|
|
loopback //
|
|
);
|
|
|
|
//
|
|
int velocitiesCount =
|
|
barAnalyser
|
|
.GetPriceVelocity(
|
|
conditions.velocities,
|
|
zBar,
|
|
X_PRICE_CLOSE,
|
|
loopback //
|
|
);
|
|
|
|
//
|
|
double bullishVolume = 0.0;
|
|
double bearishVolume = 0.0;
|
|
barAnalyser
|
|
.CalculateRangeVolume(
|
|
zBar,
|
|
bullishVolume,
|
|
bearishVolume,
|
|
loopback //
|
|
);
|
|
conditions.scoreBullish = bullishVolume;
|
|
conditions.scoreBearish = bearishVolume;
|
|
|
|
//
|
|
double bullishScore = 0.0;
|
|
double bearishScore = 0.0;
|
|
conditions.GenerateScore(
|
|
bullishScore,
|
|
bearishScore //
|
|
);
|
|
conditions.volumeBullish = bullishScore;
|
|
conditions.volumeBearish = bearishScore;
|
|
|
|
//
|
|
double priceChangeRate =
|
|
barAnalyser
|
|
.GetPriceChangeRate(
|
|
zBar,
|
|
X_PRICE_CLOSE,
|
|
loopback //
|
|
);
|
|
conditions.priceChangeRate = priceChangeRate;
|
|
|
|
//
|
|
// Cleanup Resource ...
|
|
|
|
//
|
|
zBar.Clean();
|
|
cBar.Clean();
|
|
pBar.Clean();
|
|
fromBar.Clean();
|
|
|
|
//
|
|
xcaConditions.Clean();
|
|
xocsConditions.Clean();
|
|
x3maConditions.Clean();
|
|
|
|
//
|
|
Free();
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Protected ...
|
|
protected:
|
|
//
|
|
// Private ...
|
|
private:
|
|
//
|
|
// Props ...
|
|
|
|
//
|
|
string mSymbol; // Trading Symbol
|
|
ENUM_TIMEFRAMES mPeriod; // Trading Period
|
|
|
|
//
|
|
// Inputs ...
|
|
XCAEAInputs mInputs;
|
|
|
|
//
|
|
// Handlers ...
|
|
int acHandler;
|
|
int adHandler;
|
|
int adxHandler;
|
|
int atrHandler;
|
|
int cciHandler;
|
|
int rsiHandler;
|
|
int mfiHandler;
|
|
int rviHandler;
|
|
int macdHandler;
|
|
int momentumHandler;
|
|
int stochasticHandler;
|
|
};
|
|
|
|
// |