Files
xMQL5/MQLTestWorkspace/BKPS/14030322/Classes/x-saherelm.x121.setup.class.mq5
T

2121 lines
54 KiB
Plaintext

///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Class Library
// ----------------------------------------------
// Name: XSCX121Setup
// Description: provides implementation of X121
// Setup ...
//
//
// 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 "../Libraries/x-saherelm.xtrade.lib.mq5"
//
#include "../Classes/x-saherelm.xalert.class.mq5"
//
#include "../Helpers/x-saherelm.xtd.helper.mq5"
#include "../Helpers/x-saherelm.xhk.helper.mq5"
#include "../Helpers/x-saherelm.xstr.helper.mq5"
#include "../Helpers/x-saherelm.xche.helper.mq5"
#include "../Helpers/x-saherelm.xich.helper.mq5"
#include "../Helpers/x-saherelm.xmrb.helper.mq5"
#include "../Helpers/x-saherelm.xosc.helper.mq5"
#include "../Helpers/x-saherelm.xasct.helper.mq5"
#include "../Helpers/x-saherelm.xsslc.helper.mq5"
#include "../Helpers/x-saherelm.xhull.helper.mq5"
#include "../Helpers/x-saherelm.xmatd.helper.mq5"
#include "../Helpers/x-saherelm.xadxtd.helper.mq5"
//
// Definitions ...
//
// Inputs ...
struct X121SetupInputs
{
//
// Commons ...
string symbol; // Symbol
ENUM_TIMEFRAMES period; // Time Frame
//
// Helpers Inputs ...
XTDInputs tdInputs; // XTD Inputs
XHKInputs hkInputs; // XHK Inputs
XCHEInputs cheInputs; // XCHE Inputs
XICHInputs ichInputs; // XICH Inputs
XSTRInputs strInputs; // XSTR Inputs
XMRBInputs mrbInputs; // XMRB Inputs
XOSCInputs oscInputs; // XOSC Inputs
XMATDInputs matdInputs; // XMATD Inputs
XASCTInputs asctInputs; // XASCT Inputs
XSSLCInputs sslcInputs; // XSSLC Inputs
XHULLInputs hullInputs; // XHULL Inputs
XADXTDInputs adxtdInputs; // XADXTD Inputs
//
// Constructor ...
void X121SetupInputs()
{
Clean();
}
//
bool Init()
{
//
Default();
//
bool result = IsValid();
//
return result;
}
bool Init(
string _symbol, // Symbol
ENUM_TIMEFRAMES _period, // Time Frame
XTDInputs &_tdInputs, // XTD Inputs
XHKInputs &_hkInputs, // XHK Inputs
XCHEInputs &_cheInputs, // XCHE Inputs
XICHInputs &_ichInputs, // XICH Inputs
XSTRInputs &_strInputs, // XSTR Inputs
XMRBInputs &_mrbInputs, // XMRB Inputs
XOSCInputs &_oscInputs, // XOSC Inputs
XMATDInputs &_matdInputs, // XMATD Inputs
XASCTInputs &_asctInputs, // XASCT Inputs
XSSLCInputs &_sslcInputs, // XSSLC Inputs
XHULLInputs &_hullInputs, // XHULL Inputs
XADXTDInputs &_adxtdInputs // XADXTD Inputs
)
{
//
this.symbol = _symbol;
this.period = _period;
//
// Helpers Inputs ...
this.tdInputs = _tdInputs;
this.hkInputs = _hkInputs;
this.cheInputs = _cheInputs;
this.ichInputs = _ichInputs;
this.strInputs = _strInputs;
this.mrbInputs = _mrbInputs;
this.oscInputs = _oscInputs;
this.matdInputs = _matdInputs;
this.asctInputs = _asctInputs;
this.sslcInputs = _sslcInputs;
this.hullInputs = _hullInputs;
this.adxtdInputs = _adxtdInputs;
//
bool result = IsValid();
//
return result;
}
//
// Tools ...
//
// Cleanup ...
void Clean()
{
//
symbol = NULL;
period = NULL;
//
tdInputs.Clean();
hkInputs.Clean();
cheInputs.Clean();
ichInputs.Clean();
strInputs.Clean();
mrbInputs.Clean();
oscInputs.Clean();
matdInputs.Clean();
asctInputs.Clean();
sslcInputs.Clean();
hullInputs.Clean();
adxtdInputs.Clean();
}
//
// Default ...
void Default()
{
//
tdInputs.Default();
hkInputs.Default();
cheInputs.Default();
ichInputs.Default();
strInputs.Default();
mrbInputs.Default();
oscInputs.Default();
matdInputs.Default();
asctInputs.Default();
sslcInputs.Default();
hullInputs.Default();
adxtdInputs.Default();
}
//
// Validate ...
bool IsValid()
{
//
bool result = false;
//
result =
//
IsValid(symbol) &&
IsValid(period)
//
;
if (!result)
{
return result;
}
//
result = tdInputs.IsValid();
if (!result)
{
return result;
}
result = hkInputs.IsValid();
if (!result)
{
return result;
}
result = cheInputs.IsValid();
if (!result)
{
return result;
}
result = ichInputs.IsValid();
if (!result)
{
return result;
}
result = strInputs.IsValid();
if (!result)
{
return result;
}
result = mrbInputs.IsValid();
if (!result)
{
return result;
}
result = oscInputs.IsValid();
if (!result)
{
return result;
}
result = matdInputs.IsValid();
if (!result)
{
return result;
}
result = asctInputs.IsValid();
if (!result)
{
return result;
}
result = sslcInputs.IsValid();
if (!result)
{
return result;
}
result = hullInputs.IsValid();
if (!result)
{
return result;
}
result = adxtdInputs.IsValid();
if (!result)
{
return result;
}
//
return result;
}
};
//
// Conditions ...
struct X121SetupConditions
{
//
// Common ...
string symbol;
ENUM_TIMEFRAMES period;
datetime time;
//
// Conditions ...
XTDConditions tdConditions;
XHKConditions hkConditions;
XCHEConditions cheConditions;
XICHConditions ichConditions;
XSTRConditions strConditions;
XMRBConditions mrbConditions;
XMATDConditions matdConditions;
XASCTConditions asctConditions;
XSSLCConditions sslcConditions;
XHULLConditions hullConditions;
XADXTDConditions adxtdConditions;
//
// Oscillators ...
double cci[];
double rsi[];
double macd[];
double macdSignal[];
//
// Tools ...
//
// Cleanup ...
void Clean()
{
//
time = NULL;
symbol = NULL;
period = NULL;
//
Clean(cci);
Clean(rsi);
Clean(macd);
Clean(macdSignal);
//
tdConditions.Clean();
hkConditions.Clean();
cheConditions.Clean();
ichConditions.Clean();
strConditions.Clean();
mrbConditions.Clean();
matdConditions.Clean();
asctConditions.Clean();
sslcConditions.Clean();
hullConditions.Clean();
adxtdConditions.Clean();
}
//
void GenerateScore(
double &bullishScore,
double &bearishScore //
)
{
//
bullishScore = 0;
bearishScore = 0;
//
double tempBullishScore = 0;
double tempBearishScore = 0;
//
matdConditions.GenerateScore(
tempBullishScore,
tempBearishScore //
);
bullishScore += tempBullishScore;
bearishScore += tempBearishScore;
//
adxtdConditions.GenerateScore(
tempBullishScore,
tempBearishScore //
);
bullishScore += tempBullishScore;
bearishScore += tempBearishScore;
//
strConditions.GenerateScore(
tempBullishScore,
tempBearishScore //
);
bullishScore += tempBullishScore;
bearishScore += tempBearishScore;
//
cheConditions.GenerateScore(
tempBullishScore,
tempBearishScore //
);
bullishScore += tempBullishScore;
bearishScore += tempBearishScore;
//
asctConditions.GenerateScore(
tempBullishScore,
tempBearishScore //
);
bullishScore += tempBullishScore;
bearishScore += tempBearishScore;
//
tdConditions.GenerateScore(
tempBullishScore,
tempBearishScore //
);
bullishScore += tempBullishScore;
bearishScore += tempBearishScore;
//
ichConditions.GenerateScore(
tempBullishScore,
tempBearishScore //
);
bullishScore += tempBullishScore;
bearishScore += tempBearishScore;
//
hkConditions.GenerateScore(
tempBullishScore,
tempBearishScore //
);
bullishScore += tempBullishScore;
bearishScore += tempBearishScore;
//
mrbConditions.GenerateScore(
tempBullishScore,
tempBearishScore //
);
bullishScore += tempBullishScore;
bearishScore += tempBearishScore;
//
sslcConditions.GenerateScore(
tempBullishScore,
tempBearishScore //
);
bullishScore += tempBullishScore;
bearishScore += tempBearishScore;
//
hullConditions.GenerateScore(
tempBullishScore,
tempBearishScore //
);
bullishScore += tempBullishScore;
bearishScore += tempBearishScore;
}
//
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 matdSummary = matdConditions.GenerateSummary(false, true, false);
string adxtdSummary = adxtdConditions.GenerateSummary(false, true, false);
string strSummary = strConditions.GenerateSummary(false, true, false);
string cheSummary = cheConditions.GenerateSummary(false, true, false);
string asctSummary = asctConditions.GenerateSummary(false, true, false);
string tdSummary = tdConditions.GenerateSummary(false, true, false);
string ichSummary = ichConditions.GenerateSummary(false, true, false);
string hkSummary = hkConditions.GenerateSummary(false, true, false);
string mrbSummary = mrbConditions.GenerateSummary(false, true, false);
string sslcSummary = sslcConditions.GenerateSummary(false, true, false);
string hullSummary = hullConditions.GenerateSummary(false, true, false);
//
string conditionsStr =
//
matdSummary + separator +
adxtdSummary + separator +
strSummary + separator +
cheSummary + separator +
asctSummary + separator +
tdSummary + separator +
ichSummary + separator +
hkSummary + separator +
mrbSummary + separator +
sslcSummary + separator +
hullSummary + separator +
""
//
;
//
result =
//
"[" + GetTag() + "]" + separator +
(onlyConditions
? ""
: commonStr) +
(!includeScores
? ""
: scoresStr) +
" " + separator +
(onlyCommons
? ""
: conditionsStr) +
""
//
;
//
return result;
}
//
string GetTag()
{
return "X121Setup";
}
};
//
// Condition Parser ...
struct X121SignalGenerator
{
//
string version;
//
// Retrieve OSC Based Long Verifications ...
bool IsOSCLongVerified(
X121SetupConditions &conditions // Conditions
)
{
//
bool result = false;
//
int zIndex = 0;
int cIndex = zIndex + 1;
int pIndex = cIndex + 1;
//
result =
//
// CCI ...
conditions.cci[cIndex] < 96 &&
conditions.cci[cIndex] > conditions.cci[pIndex]
//
&&
//
// RSI ...
conditions.rsi[cIndex] < 70 &&
conditions.rsi[cIndex] > conditions.rsi[pIndex]
//
&&
//
// MACD ...
conditions.macd[cIndex] > 0 &&
conditions.macdSignal[cIndex] > 0 &&
conditions.macd[cIndex] > conditions.macdSignal[cIndex]
//
;
//
return result;
}
//
// Retrieve OSC Based Short Verifications ...
bool IsOSCShortVerified(
X121SetupConditions &conditions // Conditions
)
{
//
bool result = false;
//
int zIndex = 0;
int cIndex = zIndex + 1;
int pIndex = cIndex + 1;
//
result =
//
// CCI ...
conditions.cci[cIndex] > -96 &&
conditions.cci[cIndex] < conditions.cci[pIndex]
//
&&
//
// RSI ...
conditions.rsi[cIndex] > 30 &&
conditions.rsi[cIndex] < conditions.rsi[pIndex]
//
&&
//
// MACD ...
conditions.macd[cIndex] < 0 &&
conditions.macdSignal[cIndex] < 0 &&
conditions.macd[cIndex] < conditions.macdSignal[cIndex]
//
;
//
return result;
}
//
// Check Market Conditions for Long Signals ...
bool HasLongConditions(
X121SetupConditions &conditions, // Conditions
int &pusher // Pushers
)
{
//
bool result = false;
//
pusher = 0;
//
bool isOSCShortVerified = IsOSCShortVerified(conditions);
//
int zIndex = 0;
int cIndex = zIndex + 1;
int pIndex = cIndex + 1;
//
double bullishScore = 0;
double bearishScore = 0;
conditions.GenerateScore(
bullishScore,
bearishScore //
);
//
bool long1 =
//
// Starting Conditions ...
conditions.matdConditions.isSwitchedToBullish &&
//
// Verifications ...
conditions.matdConditions.isSARBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
conditions.cheConditions.isStrongBullish &&
conditions.tdConditions.isBullish &&
conditions.hkConditions.isHKBullish &&
conditions.hkConditions.isSMHKBullish &&
conditions.mrbConditions.isFastOverSlow &&
conditions.sslcConditions.isBullish &&
conditions.hullConditions.isBullish
//
;
if (long1)
{
pusher++;
}
//
bool long2 =
//
// Starting Conditions ...
conditions.matdConditions.isSARSwitchedToBullish &&
//
// Verifications ...
conditions.matdConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
conditions.cheConditions.isStrongBullish &&
conditions.tdConditions.isBullish &&
conditions.hkConditions.isHKBullish &&
conditions.hkConditions.isSMHKBullish &&
conditions.mrbConditions.isFastOverSlow &&
conditions.sslcConditions.isBullish &&
conditions.hullConditions.isBullish
//
;
if (long2)
{
pusher++;
}
//
bool long3 =
//
// Starting Conditions ...
conditions.adxtdConditions.isStrongSwitchedToBullish &&
//
// Verifications ...
conditions.matdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
conditions.cheConditions.isStrongBullish &&
conditions.tdConditions.isBullish &&
conditions.hkConditions.isHKBullish &&
conditions.hkConditions.isSMHKBullish &&
conditions.mrbConditions.isFastOverSlow &&
conditions.sslcConditions.isBullish &&
conditions.hullConditions.isBullish
//
;
if (long3)
{
pusher++;
}
//
bool long4 =
//
// Starting Conditions ...
conditions.strConditions.isTrendSwitchedToBullish &&
//
// Verifications ...
conditions.matdConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.cheConditions.isStrongBullish &&
conditions.tdConditions.isBullish &&
conditions.hkConditions.isHKBullish &&
conditions.hkConditions.isSMHKBullish &&
conditions.mrbConditions.isFastOverSlow &&
conditions.sslcConditions.isBullish &&
conditions.hullConditions.isBullish
//
;
if (long4)
{
pusher++;
}
//
bool long5 =
//
// Starting Conditions ...
conditions.cheConditions.isStrongSwitchedToBullish &&
//
// Verifications ...
conditions.matdConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
conditions.tdConditions.isBullish &&
conditions.hkConditions.isHKBullish &&
conditions.hkConditions.isSMHKBullish &&
conditions.mrbConditions.isFastOverSlow &&
conditions.sslcConditions.isBullish &&
conditions.hullConditions.isBullish
//
;
if (long5)
{
pusher++;
}
//
bool long6 =
//
// Starting Conditions ...
conditions.tdConditions.isSwitchedToBullish &&
//
// Verifications ...
conditions.matdConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
conditions.cheConditions.isStrongBullish &&
conditions.hkConditions.isHKBullish &&
conditions.hkConditions.isSMHKBullish &&
conditions.mrbConditions.isFastOverSlow &&
conditions.sslcConditions.isBullish &&
conditions.hullConditions.isBullish
//
;
if (long6)
{
pusher++;
}
//
bool long7 =
//
// Starting Conditions ...
conditions.rsi[cIndex] > 30 &&
conditions.rsi[pIndex] <= 30 &&
//
// Verifications ...
conditions.tdConditions.isBullish &&
conditions.matdConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
conditions.cheConditions.isStrongBullish &&
conditions.hkConditions.isHKBullish &&
conditions.hkConditions.isSMHKBullish &&
conditions.mrbConditions.isFastOverSlow &&
conditions.sslcConditions.isBullish &&
conditions.hullConditions.isBullish
//
;
if (long7)
{
pusher++;
}
//
bool long8 =
//
// Starting Conditions ...
conditions.cci[cIndex] > -100 &&
conditions.cci[pIndex] <= -100 &&
//
// Verifications ...
conditions.tdConditions.isBullish &&
conditions.matdConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
conditions.cheConditions.isStrongBullish &&
conditions.hkConditions.isHKBullish &&
conditions.hkConditions.isSMHKBullish &&
conditions.mrbConditions.isFastOverSlow &&
conditions.sslcConditions.isBullish &&
conditions.hullConditions.isBullish
//
;
if (long8)
{
pusher++;
}
//
bool long9 =
//
// Starting Conditions ...
conditions.macd[cIndex] > 0 &&
conditions.macd[cIndex] > conditions.macdSignal[cIndex] &&
//
// Verifications ...
conditions.tdConditions.isBullish &&
conditions.matdConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
conditions.cheConditions.isStrongBullish &&
conditions.hkConditions.isHKBullish &&
conditions.hkConditions.isSMHKBullish &&
conditions.mrbConditions.isFastOverSlow &&
conditions.sslcConditions.isBullish &&
conditions.hullConditions.isBullish
//
;
if (long9)
{
pusher++;
}
//
bool long10 =
//
// Starting Conditions ...
conditions.ichConditions.HasLongConditions() &&
//
// Verifications ...
conditions.tdConditions.isBullish &&
conditions.matdConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
conditions.cheConditions.isStrongBullish &&
conditions.hkConditions.isHKBullish &&
conditions.hkConditions.isSMHKBullish &&
conditions.mrbConditions.isFastOverSlow &&
conditions.sslcConditions.isBullish &&
conditions.hullConditions.isBullish
//
;
if (long10)
{
pusher++;
}
//
bool long11 =
//
// Starting Conditions ...
conditions.hkConditions.isHKSwitchedToBullish &&
//
// Verifications ...
conditions.tdConditions.isBullish &&
conditions.matdConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
conditions.cheConditions.isStrongBullish &&
conditions.hkConditions.isSMHKBullish &&
conditions.mrbConditions.isFastOverSlow &&
conditions.sslcConditions.isBullish &&
conditions.hullConditions.isBullish
//
;
if (long11)
{
pusher++;
}
//
bool long12 =
//
// Starting Conditions ...
conditions.hkConditions.isSMHKSwitchedToBullish &&
//
// Verifications ...
conditions.tdConditions.isBullish &&
conditions.matdConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
conditions.cheConditions.isStrongBullish &&
conditions.hkConditions.isHKBullish &&
conditions.mrbConditions.isFastOverSlow &&
conditions.sslcConditions.isBullish &&
conditions.hullConditions.isBullish
//
;
if (long12)
{
pusher++;
}
//
bool long13 =
//
// Starting Conditions ...
conditions.mrbConditions.isFastCrossedOverSlow &&
//
// Verifications ...
conditions.tdConditions.isBullish &&
conditions.matdConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
conditions.cheConditions.isStrongBullish &&
conditions.hkConditions.isHKBullish &&
conditions.hkConditions.isSMHKBullish &&
conditions.sslcConditions.isBullish &&
conditions.hullConditions.isBullish
//
;
if (long13)
{
pusher++;
}
//
bool long14 =
//
// Starting Conditions ...
conditions.sslcConditions.isSwitchedToBullish &&
//
// Verifications ...
conditions.tdConditions.isBullish &&
conditions.matdConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
conditions.cheConditions.isStrongBullish &&
conditions.hkConditions.isHKBullish &&
conditions.hkConditions.isSMHKBullish &&
conditions.mrbConditions.isFastOverSlow &&
conditions.hullConditions.isBullish
//
;
if (long14)
{
pusher++;
}
//
bool long15 =
//
// Starting Conditions ...
conditions.hullConditions.isSwitchedToBullish &&
//
// Verifications ...
conditions.tdConditions.isBullish &&
conditions.matdConditions.isBullish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBullish &&
conditions.strConditions.isTrendBullish &&
conditions.cheConditions.isStrongBullish &&
conditions.hkConditions.isHKBullish &&
conditions.hkConditions.isSMHKBullish &&
conditions.mrbConditions.isFastOverSlow &&
conditions.sslcConditions.isBullish
//
;
if (long15)
{
pusher++;
}
//
result =
//
pusher >= 1 &&
!isOSCShortVerified &&
conditions.asctConditions.isLongSignal &&
bullishScore > bearishScore * 2 &&
(
//
long1
//
||
//
long2
//
||
//
long3
//
||
//
long4
//
||
//
long5
//
||
//
long6
//
||
//
long7
//
||
//
long8
//
||
//
long9
//
||
//
long10
//
||
//
long11
//
||
//
long12
//
||
//
long13
//
||
//
long14
//
||
//
long15
//
)
//
;
//
return result;
}
//
// Check Market Conditions for Short Signals ...
bool HasShortConditions(
X121SetupConditions &conditions, // Conditions
int &pusher // Pushers
)
{
//
bool result = false;
//
pusher = 0;
//
bool isOSCLongVerified = IsOSCLongVerified(conditions);
//
int zIndex = 0;
int cIndex = zIndex + 1;
int pIndex = cIndex + 1;
//
double bullishScore = 0;
double bearishScore = 0;
conditions.GenerateScore(
bullishScore,
bearishScore //
);
//
bool short1 =
//
// Starting Conditions ...
conditions.matdConditions.isSwitchedToBearish &&
//
// Verifications ...
conditions.matdConditions.isSARBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
conditions.cheConditions.isStrongBearish &&
conditions.tdConditions.isBearish &&
conditions.hkConditions.isHKBearish &&
conditions.hkConditions.isSMHKBearish &&
conditions.mrbConditions.isFastUnderSlow &&
conditions.sslcConditions.isBearish &&
conditions.hullConditions.isBearish
//
;
if (short1)
{
pusher++;
}
//
bool short2 =
//
// Starting Conditions ...
conditions.matdConditions.isSARSwitchedToBearish &&
//
// Verifications ...
conditions.matdConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
conditions.cheConditions.isStrongBearish &&
conditions.tdConditions.isBearish &&
conditions.hkConditions.isHKBearish &&
conditions.hkConditions.isSMHKBearish &&
conditions.mrbConditions.isFastUnderSlow &&
conditions.sslcConditions.isBearish &&
conditions.hullConditions.isBearish
//
;
if (short2)
{
pusher++;
}
//
bool short3 =
//
// Starting Conditions ...
conditions.adxtdConditions.isStrongSwitchedToBearish &&
//
// Verifications ...
conditions.matdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
conditions.cheConditions.isStrongBearish &&
conditions.tdConditions.isBearish &&
conditions.hkConditions.isHKBearish &&
conditions.hkConditions.isSMHKBearish &&
conditions.mrbConditions.isFastUnderSlow &&
conditions.sslcConditions.isBearish &&
conditions.hullConditions.isBearish
//
;
if (short3)
{
pusher++;
}
//
bool short4 =
//
// Starting Conditions ...
conditions.strConditions.isTrendSwitchedToBearish &&
//
// Verifications ...
conditions.matdConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.cheConditions.isStrongBearish &&
conditions.tdConditions.isBearish &&
conditions.hkConditions.isHKBearish &&
conditions.hkConditions.isSMHKBearish &&
conditions.mrbConditions.isFastUnderSlow &&
conditions.sslcConditions.isBearish &&
conditions.hullConditions.isBearish
//
;
if (short4)
{
pusher++;
}
//
bool short5 =
//
// Starting Conditions ...
conditions.cheConditions.isStrongSwitchedToBearish &&
//
// Verifications ...
conditions.matdConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
conditions.tdConditions.isBearish &&
conditions.hkConditions.isHKBearish &&
conditions.hkConditions.isSMHKBearish &&
conditions.mrbConditions.isFastUnderSlow &&
conditions.sslcConditions.isBearish &&
conditions.hullConditions.isBearish
//
;
if (short5)
{
pusher++;
}
//
bool short6 =
//
// Starting Conditions ...
conditions.tdConditions.isSwitchedToBearish &&
//
// Verifications ...
conditions.matdConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
conditions.cheConditions.isStrongBearish &&
conditions.hkConditions.isHKBearish &&
conditions.hkConditions.isSMHKBearish &&
conditions.mrbConditions.isFastUnderSlow &&
conditions.sslcConditions.isBearish &&
conditions.hullConditions.isBearish
//
;
if (short6)
{
pusher++;
}
//
bool short7 =
//
// Starting Conditions ...
conditions.rsi[cIndex] < 70 &&
conditions.rsi[pIndex] >= 70 &&
//
// Verifications ...
conditions.tdConditions.isBearish &&
conditions.matdConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
conditions.cheConditions.isStrongBearish &&
conditions.hkConditions.isHKBearish &&
conditions.hkConditions.isSMHKBearish &&
conditions.mrbConditions.isFastUnderSlow &&
conditions.sslcConditions.isBearish &&
conditions.hullConditions.isBearish
//
;
if (short7)
{
pusher++;
}
//
bool short8 =
//
// Starting Conditions ...
conditions.cci[cIndex] < 100 &&
conditions.cci[pIndex] >= 100 &&
//
// Verifications ...
conditions.tdConditions.isBearish &&
conditions.matdConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
conditions.cheConditions.isStrongBearish &&
conditions.hkConditions.isHKBearish &&
conditions.hkConditions.isSMHKBearish &&
conditions.mrbConditions.isFastUnderSlow &&
conditions.sslcConditions.isBearish &&
conditions.hullConditions.isBearish
//
;
if (short8)
{
pusher++;
}
//
bool short9 =
//
// Starting Conditions ...
conditions.macd[cIndex] < 0 &&
conditions.macd[cIndex] < conditions.macdSignal[cIndex] &&
//
// Verifications ...
conditions.tdConditions.isBearish &&
conditions.matdConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
conditions.cheConditions.isStrongBearish &&
conditions.hkConditions.isHKBearish &&
conditions.hkConditions.isSMHKBearish &&
conditions.mrbConditions.isFastUnderSlow &&
conditions.sslcConditions.isBearish &&
conditions.hullConditions.isBearish
//
;
if (short9)
{
pusher++;
}
//
bool short10 =
//
// Starting Conditions ...
conditions.ichConditions.HasShortConditions() &&
//
// Verifications ...
conditions.tdConditions.isBearish &&
conditions.matdConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
conditions.cheConditions.isStrongBearish &&
conditions.hkConditions.isHKBearish &&
conditions.hkConditions.isSMHKBearish &&
conditions.mrbConditions.isFastUnderSlow &&
conditions.sslcConditions.isBearish &&
conditions.hullConditions.isBearish
//
;
if (short10)
{
pusher++;
}
//
bool short11 =
//
// Starting Conditions ...
conditions.hkConditions.isHKSwitchedToBearish &&
//
// Verifications ...
conditions.tdConditions.isBearish &&
conditions.matdConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
conditions.cheConditions.isStrongBearish &&
conditions.hkConditions.isSMHKBearish &&
conditions.mrbConditions.isFastUnderSlow &&
conditions.sslcConditions.isBearish &&
conditions.hullConditions.isBearish
//
;
if (short11)
{
pusher++;
}
//
bool short12 =
//
// Starting Conditions ...
conditions.hkConditions.isSMHKSwitchedToBearish &&
//
// Verifications ...
conditions.tdConditions.isBearish &&
conditions.matdConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
conditions.cheConditions.isStrongBearish &&
conditions.hkConditions.isHKBearish &&
conditions.mrbConditions.isFastUnderSlow &&
conditions.sslcConditions.isBearish &&
conditions.hullConditions.isBearish
//
;
if (short12)
{
pusher++;
}
//
bool short13 =
//
// Starting Conditions ...
conditions.mrbConditions.isFastCrossedUnderSlow &&
//
// Verifications ...
conditions.tdConditions.isBearish &&
conditions.matdConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
conditions.cheConditions.isStrongBearish &&
conditions.hkConditions.isHKBearish &&
conditions.hkConditions.isSMHKBearish &&
conditions.sslcConditions.isBearish &&
conditions.hullConditions.isBearish
//
;
if (short13)
{
pusher++;
}
//
bool short14 =
//
// Starting Conditions ...
conditions.sslcConditions.isSwitchedToBearish &&
//
// Verifications ...
conditions.tdConditions.isBearish &&
conditions.matdConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
conditions.cheConditions.isStrongBearish &&
conditions.hkConditions.isHKBearish &&
conditions.hkConditions.isSMHKBearish &&
conditions.mrbConditions.isFastUnderSlow &&
conditions.hullConditions.isBearish
//
;
if (short14)
{
pusher++;
}
//
bool short15 =
//
// Starting Conditions ...
conditions.hullConditions.isSwitchedToBearish &&
//
// Verifications ...
conditions.tdConditions.isBearish &&
conditions.matdConditions.isBearish &&
conditions.adxtdConditions.isStrong &&
conditions.adxtdConditions.isBearish &&
conditions.strConditions.isTrendBearish &&
conditions.cheConditions.isStrongBearish &&
conditions.hkConditions.isHKBearish &&
conditions.hkConditions.isSMHKBearish &&
conditions.mrbConditions.isFastUnderSlow &&
conditions.sslcConditions.isBearish
//
;
if (short15)
{
pusher++;
}
//
result =
//
pusher >= 1 &&
!isOSCLongVerified &&
conditions.asctConditions.isShortSignal &&
bearishScore > bullishScore * 2 &&
(
//
short1
//
||
//
short2
//
||
//
short3
//
||
//
short4
//
||
//
short5
//
||
//
short6
//
||
//
short7
//
||
//
short8
//
||
//
short9
//
||
//
short10
//
||
//
short11
//
||
//
short12
//
||
//
short13
//
||
//
short14
//
||
//
short15
//
)
//
;
//
return result;
}
//
// Check Conditions for Generating Possible Signals ...
bool HasSignal(
X121SetupConditions &conditions, // Conditions
XSignal &signal, // Signal if Exists
int &pusher, // Pushers
bool _allowLong, // Allow Long Signals
bool _allowShort, // Allow Short Signals
double _volume = 0.01, // Volume
double _slPoint = 0, // SL Point
double _tpPoint = 30 // TP Point
)
{
//
bool result = false;
//
signal.Clean();
//
result = _allowLong || _allowShort;
if (!result)
{
return result;
}
//
bool hasLong =
!_allowLong
? false
: HasLongConditions(
conditions,
pusher //
);
//
bool hasShort =
!_allowShort
? false
: HasShortConditions(
conditions,
pusher //
);
//
result = hasLong || hasShort;
if (!result)
{
return result;
}
//
// Prepare Signals ...
ENUM_POSITION_TYPE mType =
hasLong
? POSITION_TYPE_BUY
: POSITION_TYPE_SELL;
//
double mEntry = GetEntry(
conditions.symbol,
mType //
);
//
double mSL = 0;
double mTP = 0;
double mPointValue =
GetPoints(conditions.symbol);
result = CalculateTPSLByPoint(
mSL,
mTP,
mType,
mEntry,
mPointValue,
1,
_slPoint,
_tpPoint //
);
if (!result)
{
return result;
}
//
result = signal.Prepare(
conditions.symbol,
GetTag() + ToString(pusher),
conditions.period,
mType,
X_ORDER_MODE_MARKET,
mEntry,
_volume,
0, // mSL,
mTP //
);
if (!result)
{
return result;
}
//
return result;
}
//
string GetTag()
{
return "X121";
}
};
//
// Class ...
class XSCX121Setup : public XSCBaseAlert
{
//
// Public ...
public:
//
// Props ...
XSCXTDHelper *tdHelper;
XSCXHKHelper *hkHelper;
XSCXCHEHelper *cheHelper;
XSCXICHHelper *ichHelper;
XSCXSTRHelper *strHelper;
XSCXMRBHelper *mrbHelper;
XSCXOSCHelper *oscHelper;
XSCXMATDHelper *matdHelper;
XSCXASCTHelper *asctHelper;
XSCXSSLCHelper *sslcHelper;
XSCXHULLHelper *hullHelper;
XSCXADXTDHelper *adxtdHelper;
//
// Constructor(s) ...
void XSCX121Setup() {}
//
// Deconstructor ...
void ~XSCX121Setup()
{
//
delete tdHelper;
delete hkHelper;
delete cheHelper;
delete ichHelper;
delete strHelper;
delete mrbHelper;
delete oscHelper;
delete matdHelper;
delete asctHelper;
delete sslcHelper;
delete hullHelper;
delete adxtdHelper;
}
//
// Getter(s) / Setter(s) ...
//
string GetSymbol()
{
return inputs.symbol;
}
//
ENUM_TIMEFRAMES GetPeriod()
{
return inputs.period;
}
//
// Tools ...
//
bool Init(
X121SetupInputs &_inputs // Configurations
)
{
//
bool result = false;
//
result = _inputs.IsValid();
if (!result)
{
return result;
}
//
inputs = _inputs;
//
// Initialize Helpers ...
//
// XTD ...
tdHelper = new XSCXTDHelper();
result = tdHelper.Init(
inputs.symbol,
inputs.period,
inputs.tdInputs //
);
if (!result)
{
return result;
}
//
// XHK ...
hkHelper = new XSCXHKHelper();
result = hkHelper.Init(
inputs.symbol,
inputs.period,
inputs.hkInputs //
);
if (!result)
{
return result;
}
//
// XCHE ...
cheHelper = new XSCXCHEHelper();
result = cheHelper.Init(
inputs.symbol,
inputs.period,
inputs.cheInputs //
);
if (!result)
{
return result;
}
//
// XICH ...
ichHelper = new XSCXICHHelper();
result = ichHelper.Init(
inputs.symbol,
inputs.period,
inputs.ichInputs //
);
if (!result)
{
return result;
}
//
// XSTR ...
strHelper = new XSCXSTRHelper();
result = strHelper.Init(
inputs.symbol,
inputs.period,
inputs.strInputs //
);
if (!result)
{
return result;
}
//
// XMRB ...
mrbHelper = new XSCXMRBHelper();
result = mrbHelper.Init(
inputs.symbol,
inputs.period,
inputs.mrbInputs //
);
if (!result)
{
return result;
}
//
// XOSC ...
oscHelper = new XSCXOSCHelper();
result = oscHelper.Init(
inputs.symbol,
inputs.period,
inputs.oscInputs //
);
if (!result)
{
return result;
}
//
// XMATD ...
matdHelper = new XSCXMATDHelper(
inputs.symbol,
inputs.period //
);
result = matdHelper.Init(
inputs.matdInputs //
);
if (!result)
{
return result;
}
//
// XASCT ...
asctHelper = new XSCXASCTHelper();
result = asctHelper.Init(
inputs.symbol,
inputs.period,
inputs.asctInputs //
);
if (!result)
{
return result;
}
//
// XSSLC ...
sslcHelper = new XSCXSSLCHelper();
result = sslcHelper.Init(
inputs.symbol,
inputs.period,
inputs.sslcInputs //
);
if (!result)
{
return result;
}
//
// XHULL ...
hullHelper = new XSCXHULLHelper();
result = hullHelper.Init(
inputs.symbol,
inputs.period,
inputs.hullInputs //
);
if (!result)
{
return result;
}
//
// XADXTD ...
adxtdHelper = new XSCXADXTDHelper(
inputs.symbol,
inputs.period //
);
result = adxtdHelper.Init(
inputs.adxtdInputs //
);
if (!result)
{
return result;
}
//
return result;
}
//
X121SetupInputs GetInputs()
{
return inputs;
}
//
bool SetInputs(
X121SetupInputs &_inputs // Configurations
)
{
return Init(_inputs);
}
//
bool GetConditions(
X121SetupConditions &conditions, //
int barIndex = 0, //
int loopback = 5 //
)
{
//
bool result = true;
//
conditions.Clean();
//
conditions.symbol = GetSymbol();
conditions.period = GetPeriod();
conditions.time = TimeCurrent();
//
result = tdHelper.GetConditions(
conditions.tdConditions,
barIndex,
loopback //
);
if (!result)
{
return result;
}
//
result = hkHelper.GetConditions(
conditions.hkConditions,
barIndex,
loopback //
);
if (!result)
{
return result;
}
//
result = cheHelper.GetConditions(
conditions.cheConditions,
barIndex,
loopback //
);
if (!result)
{
return result;
}
//
result = ichHelper.GetConditions(
conditions.ichConditions,
barIndex,
loopback //
);
if (!result)
{
return result;
}
//
result = strHelper.GetConditions(
conditions.strConditions,
barIndex,
loopback //
);
if (!result)
{
return result;
}
//
result = mrbHelper.GetConditions(
conditions.mrbConditions,
barIndex,
loopback //
);
if (!result)
{
return result;
}
//
result = matdHelper.GetConditions(
conditions.matdConditions,
barIndex,
loopback //
);
if (!result)
{
return result;
}
//
result = asctHelper.GetConditions(
conditions.asctConditions,
barIndex,
loopback //
);
if (!result)
{
return result;
}
//
result = sslcHelper.GetConditions(
conditions.sslcConditions,
barIndex,
loopback //
);
if (!result)
{
return result;
}
//
result = hullHelper.GetConditions(
conditions.hullConditions,
barIndex,
loopback //
);
if (!result)
{
return result;
}
//
result = adxtdHelper.GetConditions(
conditions.adxtdConditions,
barIndex,
loopback //
);
if (!result)
{
return result;
}
//
oscHelper.CopyCCI(
barIndex,
loopback,
conditions.cci //
);
oscHelper.CopyRSI(
barIndex,
loopback,
conditions.rsi //
);
oscHelper.CopyMACD(
barIndex,
loopback,
conditions.macd //
);
oscHelper.CopyMACDSignal(
barIndex,
loopback,
conditions.macdSignal //
);
//
return result;
}
//
// Protected ...
protected:
//
// Private ...
private:
//
// Props ...
X121SetupInputs inputs; // Setup Configurations ...
};