4365 lines
109 KiB
Plaintext
4365 lines
109 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.xmc.helper.mq5"
|
|
#include "../Helpers/x-saherelm.xpv.helper.mq5"
|
|
#include "../Helpers/x-saherelm.xtd.helper.mq5"
|
|
#include "../Helpers/x-saherelm.xhk.helper.mq5"
|
|
#include "../Helpers/x-saherelm.xsln.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.xvlm.helper.mq5"
|
|
#include "../Helpers/x-saherelm.xhtd.helper.mq5"
|
|
#include "../Helpers/x-saherelm.xatsl.helper.mq5"
|
|
#include "../Helpers/x-saherelm.xdmnt.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.xadxtd.helper.mq5"
|
|
|
|
//
|
|
// Definitions ...
|
|
|
|
//
|
|
enum ENUM_X121_SIGNAL_PROVIDER
|
|
{
|
|
//
|
|
PROVIDER_UNKNOWN = 0,
|
|
PROVIDER_XMC = 1,
|
|
PROVIDER_XSARD = 2,
|
|
PROVIDER_XADXTD = 3,
|
|
PROVIDER_XSTR = 4,
|
|
PROVIDER_XCHE = 5,
|
|
PROVIDER_XTD = 6,
|
|
PROVIDER_XSI = 7,
|
|
PROVIDER_XCI = 8,
|
|
PROVIDER_XMCD = 9,
|
|
PROVIDER_XICH = 10,
|
|
PROVIDER_XHK = 11,
|
|
PROVIDER_XSMHK = 12,
|
|
PROVIDER_XMRB = 13,
|
|
PROVIDER_XSSLC = 14,
|
|
PROVIDER_XHULL = 15,
|
|
PROVIDER_XASCT = 16,
|
|
PROVIDER_XVLM = 17,
|
|
PROVIDER_XPVF = 18,
|
|
PROVIDER_XPVSAR = 19,
|
|
PROVIDER_XHTSRD = 20,
|
|
};
|
|
|
|
//
|
|
string ToString(ENUM_X121_SIGNAL_PROVIDER value)
|
|
{
|
|
//
|
|
string result = NULL;
|
|
|
|
//
|
|
string vStr = EnumToString(value);
|
|
if (!IsValid(vStr))
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
string parts[];
|
|
int partsCount = SplitContent(
|
|
parts,
|
|
vStr,
|
|
"_"
|
|
//
|
|
);
|
|
if (partsCount <= 0)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
bool hasLastPart = GetLastItem(
|
|
result,
|
|
parts
|
|
//
|
|
);
|
|
if (!hasLastPart)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
ENUM_X121_SIGNAL_PROVIDER FromString(string value)
|
|
{
|
|
//
|
|
ENUM_X121_SIGNAL_PROVIDER result = PROVIDER_UNKNOWN;
|
|
|
|
//
|
|
if (!IsValid(value))
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
if (Contains(value, (EnumToString(PROVIDER_XMC))))
|
|
{
|
|
result = PROVIDER_XMC;
|
|
}
|
|
else if (Contains(value, (EnumToString(PROVIDER_XSARD))))
|
|
{
|
|
result = PROVIDER_XSARD;
|
|
}
|
|
else if (Contains(value, (EnumToString(PROVIDER_XADXTD))))
|
|
{
|
|
result = PROVIDER_XADXTD;
|
|
}
|
|
else if (Contains(value, (EnumToString(PROVIDER_XSTR))))
|
|
{
|
|
result = PROVIDER_XSTR;
|
|
}
|
|
else if (Contains(value, (EnumToString(PROVIDER_XCHE))))
|
|
{
|
|
result = PROVIDER_XCHE;
|
|
}
|
|
else if (Contains(value, (EnumToString(PROVIDER_XTD))))
|
|
{
|
|
result = PROVIDER_XTD;
|
|
}
|
|
else if (Contains(value, (EnumToString(PROVIDER_XSI))))
|
|
{
|
|
result = PROVIDER_XSI;
|
|
}
|
|
else if (Contains(value, (EnumToString(PROVIDER_XCI))))
|
|
{
|
|
result = PROVIDER_XCI;
|
|
}
|
|
else if (Contains(value, (EnumToString(PROVIDER_XMCD))))
|
|
{
|
|
result = PROVIDER_XMCD;
|
|
}
|
|
else if (Contains(value, (EnumToString(PROVIDER_XICH))))
|
|
{
|
|
result = PROVIDER_XICH;
|
|
}
|
|
else if (Contains(value, (EnumToString(PROVIDER_XHK))))
|
|
{
|
|
result = PROVIDER_XHK;
|
|
}
|
|
else if (Contains(value, (EnumToString(PROVIDER_XSMHK))))
|
|
{
|
|
result = PROVIDER_XSMHK;
|
|
}
|
|
else if (Contains(value, (EnumToString(PROVIDER_XMRB))))
|
|
{
|
|
result = PROVIDER_XMRB;
|
|
}
|
|
else if (Contains(value, (EnumToString(PROVIDER_XSSLC))))
|
|
{
|
|
result = PROVIDER_XSSLC;
|
|
}
|
|
else if (Contains(value, (EnumToString(PROVIDER_XHULL))))
|
|
{
|
|
result = PROVIDER_XHULL;
|
|
}
|
|
else if (Contains(value, (EnumToString(PROVIDER_XASCT))))
|
|
{
|
|
result = PROVIDER_XASCT;
|
|
}
|
|
else if (Contains(value, (EnumToString(PROVIDER_XVLM))))
|
|
{
|
|
result = PROVIDER_XVLM;
|
|
}
|
|
else if (Contains(value, (EnumToString(PROVIDER_XPVF))))
|
|
{
|
|
result = PROVIDER_XPVF;
|
|
}
|
|
else if (Contains(value, (EnumToString(PROVIDER_XPVSAR))))
|
|
{
|
|
result = PROVIDER_XPVSAR;
|
|
}
|
|
else if (Contains(value, (EnumToString(PROVIDER_XHTSRD))))
|
|
{
|
|
result = PROVIDER_XHTSRD;
|
|
}
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Inputs ...
|
|
struct X121SetupInputs
|
|
{
|
|
//
|
|
// Commons ...
|
|
string symbol; // Symbol
|
|
ENUM_TIMEFRAMES period; // Time Frame
|
|
|
|
//
|
|
// Helpers Inputs ...
|
|
XMCInputs mcInputs; // XMC Inputs
|
|
XPVInputs pvInputs; // XPV Inputs
|
|
XTDInputs tdInputs; // XTD Inputs
|
|
XHKInputs hkInputs; // XHK Inputs
|
|
XHTDInputs htdInputs; // XHTD Inputs
|
|
XCHEInputs cheInputs; // XCHE Inputs
|
|
XICHInputs ichInputs; // XICH Inputs
|
|
XSTRInputs strInputs; // XSTR Inputs
|
|
XMRBInputs mrbInputs; // XMRB Inputs
|
|
XOSCInputs oscInputs; // XOSC Inputs
|
|
XVLMInputs vlmInputs; // XVLM Inputs
|
|
XSLNInputs slnInputs; // XSLN Inputs
|
|
XATSLInputs atslInputs; // XATSL Inputs
|
|
XDMNTInputs dmntInputs; // XDMNT 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
|
|
XMCInputs &_mcInputs, // XMC Inputs
|
|
XPVInputs &_pvInputs, // XPV Inputs
|
|
XTDInputs &_tdInputs, // XTD Inputs
|
|
XHKInputs &_hkInputs, // XHK Inputs
|
|
XHTDInputs &_htdInputs, // XHTD Inputs
|
|
XCHEInputs &_cheInputs, // XCHE Inputs
|
|
XICHInputs &_ichInputs, // XICH Inputs
|
|
XSTRInputs &_strInputs, // XSTR Inputs
|
|
XMRBInputs &_mrbInputs, // XMRB Inputs
|
|
XOSCInputs &_oscInputs, // XOSC Inputs
|
|
XVLMInputs &_vlmInputs, // XVLM Inputs
|
|
XSLNInputs &_slnInputs, // XSLN Inputs
|
|
XATSLInputs &_atslInputs, // XATSL Inputs
|
|
XDMNTInputs &_dmntInputs, // XDMNT 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.mcInputs = _mcInputs;
|
|
this.pvInputs = _pvInputs;
|
|
this.tdInputs = _tdInputs;
|
|
this.hkInputs = _hkInputs;
|
|
this.htdInputs = _htdInputs;
|
|
this.cheInputs = _cheInputs;
|
|
this.ichInputs = _ichInputs;
|
|
this.strInputs = _strInputs;
|
|
this.mrbInputs = _mrbInputs;
|
|
this.oscInputs = _oscInputs;
|
|
this.vlmInputs = _vlmInputs;
|
|
this.atslInputs = _atslInputs;
|
|
this.dmntInputs = _dmntInputs;
|
|
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;
|
|
|
|
//
|
|
mcInputs.Clean();
|
|
pvInputs.Clean();
|
|
tdInputs.Clean();
|
|
hkInputs.Clean();
|
|
cheInputs.Clean();
|
|
ichInputs.Clean();
|
|
strInputs.Clean();
|
|
mrbInputs.Clean();
|
|
oscInputs.Clean();
|
|
vlmInputs.Clean();
|
|
slnInputs.Clean();
|
|
htdInputs.Clean();
|
|
asctInputs.Clean();
|
|
sslcInputs.Clean();
|
|
hullInputs.Clean();
|
|
atslInputs.Clean();
|
|
dmntInputs.Clean();
|
|
adxtdInputs.Clean();
|
|
}
|
|
|
|
//
|
|
// Default ...
|
|
void Default()
|
|
{
|
|
//
|
|
mcInputs.Default();
|
|
pvInputs.Default();
|
|
tdInputs.Default();
|
|
hkInputs.Default();
|
|
cheInputs.Default();
|
|
ichInputs.Default();
|
|
strInputs.Default();
|
|
mrbInputs.Default();
|
|
oscInputs.Default();
|
|
vlmInputs.Default();
|
|
slnInputs.Default();
|
|
htdInputs.Default();
|
|
asctInputs.Default();
|
|
sslcInputs.Default();
|
|
hullInputs.Default();
|
|
atslInputs.Default();
|
|
dmntInputs.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 = slnInputs.IsValid();
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
result = pvInputs.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 = vlmInputs.IsValid();
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
result = mcInputs.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;
|
|
}
|
|
|
|
//
|
|
result = htdInputs.IsValid();
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
result = atslInputs.IsValid();
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
result = dmntInputs.IsValid();
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
return result;
|
|
}
|
|
};
|
|
|
|
//
|
|
// Conditions ...
|
|
struct X121SetupConditions
|
|
{
|
|
//
|
|
// Common ...
|
|
string symbol;
|
|
ENUM_TIMEFRAMES period;
|
|
datetime time;
|
|
|
|
//
|
|
// Conditions ...
|
|
XMCConditions mcConditions;
|
|
XPVConditions pvConditions;
|
|
XTDConditions tdConditions;
|
|
XHKConditions hkConditions;
|
|
XCHEConditions cheConditions;
|
|
XICHConditions ichConditions;
|
|
XSTRConditions strConditions;
|
|
XMRBConditions mrbConditions;
|
|
XVLMConditions vlmConditions;
|
|
XHTDConditions htdConditions;
|
|
XSLNConditions slnConditions;
|
|
XATSLConditions atslConditions;
|
|
XASCTConditions asctConditions;
|
|
XSSLCConditions sslcConditions;
|
|
XHULLConditions hullConditions;
|
|
XDMNTConditions dmntConditions;
|
|
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);
|
|
|
|
//
|
|
mcConditions.Clean();
|
|
tdConditions.Clean();
|
|
hkConditions.Clean();
|
|
cheConditions.Clean();
|
|
ichConditions.Clean();
|
|
strConditions.Clean();
|
|
mrbConditions.Clean();
|
|
vlmConditions.Clean();
|
|
slnConditions.Clean();
|
|
htdConditions.Clean();
|
|
atslConditions.Clean();
|
|
asctConditions.Clean();
|
|
sslcConditions.Clean();
|
|
hullConditions.Clean();
|
|
dmntConditions.Clean();
|
|
adxtdConditions.Clean();
|
|
}
|
|
|
|
//
|
|
void GenerateScore(
|
|
double &bullishScore,
|
|
double &bearishScore //
|
|
)
|
|
{
|
|
//
|
|
bullishScore = 0;
|
|
bearishScore = 0;
|
|
|
|
//
|
|
double tempBullishScore = 0;
|
|
double tempBearishScore = 0;
|
|
|
|
//
|
|
mcConditions.GenerateScore(
|
|
tempBullishScore,
|
|
tempBearishScore //
|
|
);
|
|
bullishScore += tempBullishScore;
|
|
bearishScore += tempBearishScore;
|
|
|
|
//
|
|
pvConditions.GenerateScore(
|
|
tempBullishScore,
|
|
tempBearishScore //
|
|
);
|
|
bullishScore += tempBullishScore;
|
|
bearishScore += tempBearishScore;
|
|
|
|
//
|
|
slnConditions.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;
|
|
|
|
//
|
|
vlmConditions.GenerateScore(
|
|
tempBullishScore,
|
|
tempBearishScore //
|
|
);
|
|
bullishScore += tempBullishScore;
|
|
bearishScore += tempBearishScore;
|
|
|
|
//
|
|
sslcConditions.GenerateScore(
|
|
tempBullishScore,
|
|
tempBearishScore //
|
|
);
|
|
bullishScore += tempBullishScore;
|
|
bearishScore += tempBearishScore;
|
|
|
|
//
|
|
hullConditions.GenerateScore(
|
|
tempBullishScore,
|
|
tempBearishScore //
|
|
);
|
|
bullishScore += tempBullishScore;
|
|
bearishScore += tempBearishScore;
|
|
|
|
//
|
|
htdConditions.GenerateScore(
|
|
tempBullishScore,
|
|
tempBearishScore //
|
|
);
|
|
bullishScore += tempBullishScore;
|
|
bearishScore += tempBearishScore;
|
|
|
|
//
|
|
atslConditions.GenerateScore(
|
|
tempBullishScore,
|
|
tempBearishScore //
|
|
);
|
|
bullishScore += tempBullishScore;
|
|
bearishScore += tempBearishScore;
|
|
|
|
//
|
|
dmntConditions.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 pvSummary = pvConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
|
|
string mcSummary = mcConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
|
|
string tdSummary = tdConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
|
|
string hkSummary = hkConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
|
|
string strSummary = strConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
|
|
string cheSummary = cheConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
|
|
string ichSummary = ichConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
|
|
string mrbSummary = mrbConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
|
|
string vlmSummary = vlmConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
|
|
string slnSummary = slnConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
|
|
string htdSummary = htdConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
|
|
string atsSummary = atslConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
|
|
string asctSummary = asctConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
|
|
string sslcSummary = sslcConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
|
|
string hullSummary = hullConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
|
|
string dmntSummary = dmntConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
|
|
string adxtdSummary = adxtdConditions.GenerateSummary(false, true, false, ignoreFalseConditions);
|
|
|
|
//
|
|
string conditionsStr =
|
|
//
|
|
pvSummary + separator +
|
|
mcSummary + separator +
|
|
tdSummary + separator +
|
|
hkSummary + separator +
|
|
ichSummary + separator +
|
|
mrbSummary + separator +
|
|
vlmSummary + separator +
|
|
slnSummary + separator +
|
|
strSummary + separator +
|
|
cheSummary + separator +
|
|
asctSummary + separator +
|
|
sslcSummary + separator +
|
|
hullSummary + separator +
|
|
adxtdSummary + separator +
|
|
htdSummary + separator +
|
|
atsSummary + separator +
|
|
dmntSummary + separator +
|
|
""
|
|
//
|
|
;
|
|
|
|
//
|
|
result =
|
|
//
|
|
"[" + GetTag() + "]" + separator +
|
|
(onlyConditions
|
|
? ""
|
|
: commonStr) +
|
|
(!includeScores
|
|
? ""
|
|
: scoresStr) +
|
|
" " + separator +
|
|
(onlyCommons
|
|
? ""
|
|
: conditionsStr) +
|
|
""
|
|
//
|
|
;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Add Combine Conditions ...
|
|
|
|
//
|
|
bool IsTrendBullish()
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
result =
|
|
//
|
|
(strConditions.isTrendSwitchedToBullish &&
|
|
slnConditions.isBullish &&
|
|
htdConditions.isBullish &&
|
|
atslConditions.isBullish &&
|
|
cheConditions.isStrongBullish)
|
|
//
|
|
||
|
|
//
|
|
(slnConditions.isSwitchedToBullish &&
|
|
strConditions.isTrendBullish &&
|
|
htdConditions.isBullish &&
|
|
atslConditions.isBullish &&
|
|
cheConditions.isStrongBullish)
|
|
//
|
|
||
|
|
//
|
|
(htdConditions.isSwitchedToBullish &&
|
|
strConditions.isTrendBullish &&
|
|
slnConditions.isBullish &&
|
|
atslConditions.isBullish &&
|
|
cheConditions.isStrongBullish)
|
|
//
|
|
||
|
|
//
|
|
(atslConditions.isSwitchedToBullish &&
|
|
strConditions.isTrendBullish &&
|
|
htdConditions.isBullish &&
|
|
slnConditions.isBullish &&
|
|
cheConditions.isStrongBullish)
|
|
//
|
|
||
|
|
//
|
|
(cheConditions.isStrongSwitchedToBullish &&
|
|
strConditions.isTrendBullish &&
|
|
htdConditions.isBullish &&
|
|
slnConditions.isBullish &&
|
|
atslConditions.isBullish)
|
|
//
|
|
;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
bool IsTrendBearish()
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
result =
|
|
//
|
|
(strConditions.isTrendSwitchedToBearish &&
|
|
slnConditions.isBearish &&
|
|
htdConditions.isBearish &&
|
|
atslConditions.isBearish &&
|
|
cheConditions.isStrongBearish)
|
|
//
|
|
||
|
|
//
|
|
(slnConditions.isSwitchedToBearish &&
|
|
strConditions.isTrendBearish &&
|
|
htdConditions.isBearish &&
|
|
atslConditions.isBearish &&
|
|
cheConditions.isStrongBearish)
|
|
//
|
|
||
|
|
//
|
|
(htdConditions.isSwitchedToBearish &&
|
|
strConditions.isTrendBearish &&
|
|
slnConditions.isBearish &&
|
|
atslConditions.isBearish &&
|
|
cheConditions.isStrongBearish)
|
|
//
|
|
||
|
|
//
|
|
(atslConditions.isSwitchedToBearish &&
|
|
strConditions.isTrendBearish &&
|
|
htdConditions.isBearish &&
|
|
slnConditions.isBearish &&
|
|
cheConditions.isStrongBearish)
|
|
//
|
|
||
|
|
//
|
|
(cheConditions.isStrongSwitchedToBearish &&
|
|
strConditions.isTrendBearish &&
|
|
htdConditions.isBearish &&
|
|
slnConditions.isBearish &&
|
|
atslConditions.isBearish)
|
|
//
|
|
;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
string GetTag()
|
|
{
|
|
return "X121Setup";
|
|
}
|
|
};
|
|
|
|
//
|
|
// Condition Parser ...
|
|
struct X121SignalGenerator
|
|
{
|
|
//
|
|
string version;
|
|
double hotLevels[];
|
|
|
|
//
|
|
// Constructor ...
|
|
void X121SignalGenerator()
|
|
{
|
|
//
|
|
Add(
|
|
0.25,
|
|
hotLevels //
|
|
);
|
|
|
|
//
|
|
Add(
|
|
0.20,
|
|
hotLevels //
|
|
);
|
|
|
|
//
|
|
Add(
|
|
0.15,
|
|
hotLevels //
|
|
);
|
|
}
|
|
|
|
//
|
|
// 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
|
|
string &provider // Provider
|
|
)
|
|
{
|
|
//
|
|
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 //
|
|
);
|
|
|
|
//
|
|
// XMC ...
|
|
bool long1 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.mcConditions.isSwitchedToBullish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.mcConditions.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 &&
|
|
conditions.vlmConditions.isVolumeBullish
|
|
//
|
|
;
|
|
if (long1)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XMC);
|
|
}
|
|
|
|
//
|
|
// XSARD ...
|
|
bool long2 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.mcConditions.isSARSwitchedToBullish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.mcConditions.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 &&
|
|
conditions.vlmConditions.isVolumeBullish
|
|
//
|
|
;
|
|
if (long2)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XSARD);
|
|
}
|
|
|
|
//
|
|
// XADXTD ...
|
|
bool long3 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.adxtdConditions.isStrongSwitchedToBullish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.mcConditions.isBullish &&
|
|
conditions.mcConditions.isSARBullish &&
|
|
conditions.strConditions.isTrendBullish &&
|
|
conditions.cheConditions.isStrongBullish &&
|
|
conditions.tdConditions.isBullish &&
|
|
conditions.hkConditions.isHKBullish &&
|
|
conditions.hkConditions.isSMHKBullish &&
|
|
conditions.mrbConditions.isFastOverSlow &&
|
|
conditions.sslcConditions.isBullish &&
|
|
conditions.hullConditions.isBullish &&
|
|
conditions.vlmConditions.isVolumeBullish
|
|
//
|
|
;
|
|
if (long3)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XADXTD);
|
|
}
|
|
|
|
//
|
|
// XSTR ...
|
|
bool long4 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.strConditions.isTrendSwitchedToBullish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.mcConditions.isBullish &&
|
|
conditions.mcConditions.isSARBullish &&
|
|
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 &&
|
|
conditions.vlmConditions.isVolumeBullish
|
|
//
|
|
;
|
|
if (long4)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XSTR);
|
|
}
|
|
|
|
//
|
|
// XCHE ...
|
|
bool long5 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.cheConditions.isStrongSwitchedToBullish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.mcConditions.isBullish &&
|
|
conditions.mcConditions.isSARBullish &&
|
|
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 &&
|
|
conditions.vlmConditions.isVolumeBullish
|
|
//
|
|
;
|
|
if (long5)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XCHE);
|
|
}
|
|
|
|
//
|
|
// XTD ...
|
|
bool long6 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.tdConditions.isSwitchedToBullish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.mcConditions.isBullish &&
|
|
conditions.mcConditions.isSARBullish &&
|
|
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 &&
|
|
conditions.vlmConditions.isVolumeBullish
|
|
//
|
|
;
|
|
if (long6)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XTD);
|
|
}
|
|
|
|
//
|
|
// XSI ...
|
|
bool long7 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.rsi[cIndex] > 30 &&
|
|
conditions.rsi[pIndex] <= 30 &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBullish &&
|
|
conditions.mcConditions.isBullish &&
|
|
conditions.mcConditions.isSARBullish &&
|
|
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 &&
|
|
conditions.vlmConditions.isVolumeBullish
|
|
//
|
|
;
|
|
if (long7)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XSI);
|
|
}
|
|
|
|
//
|
|
// XCI ...
|
|
bool long8 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.cci[cIndex] > -100 &&
|
|
conditions.cci[pIndex] <= -100 &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBullish &&
|
|
conditions.mcConditions.isBullish &&
|
|
conditions.mcConditions.isSARBullish &&
|
|
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 &&
|
|
conditions.vlmConditions.isVolumeBullish
|
|
//
|
|
;
|
|
if (long8)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XCI);
|
|
}
|
|
|
|
//
|
|
// XMCD ...
|
|
bool long9 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.macd[cIndex] > 0 &&
|
|
conditions.macd[cIndex] > conditions.macdSignal[cIndex] &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBullish &&
|
|
conditions.mcConditions.isBullish &&
|
|
conditions.mcConditions.isSARBullish &&
|
|
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 &&
|
|
conditions.vlmConditions.isVolumeBullish
|
|
//
|
|
;
|
|
if (long9)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XMCD);
|
|
}
|
|
|
|
//
|
|
// XICH ...
|
|
bool long10 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.ichConditions.HasLongConditions() &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBullish &&
|
|
conditions.mcConditions.isBullish &&
|
|
conditions.mcConditions.isSARBullish &&
|
|
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 &&
|
|
conditions.vlmConditions.isVolumeBullish
|
|
//
|
|
;
|
|
if (long10)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XICH);
|
|
}
|
|
|
|
//
|
|
// XHK ...
|
|
bool long11 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.hkConditions.isHKSwitchedToBullish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBullish &&
|
|
conditions.mcConditions.isBullish &&
|
|
conditions.mcConditions.isSARBullish &&
|
|
conditions.adxtdConditions.isStrong &&
|
|
conditions.adxtdConditions.isBullish &&
|
|
conditions.strConditions.isTrendBullish &&
|
|
conditions.cheConditions.isStrongBullish &&
|
|
conditions.hkConditions.isSMHKBullish &&
|
|
conditions.mrbConditions.isFastOverSlow &&
|
|
conditions.sslcConditions.isBullish &&
|
|
conditions.hullConditions.isBullish &&
|
|
conditions.vlmConditions.isVolumeBullish
|
|
//
|
|
;
|
|
if (long11)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XHK);
|
|
}
|
|
|
|
//
|
|
// XSMHK ...
|
|
bool long12 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.hkConditions.isSMHKSwitchedToBullish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBullish &&
|
|
conditions.mcConditions.isBullish &&
|
|
conditions.mcConditions.isSARBullish &&
|
|
conditions.adxtdConditions.isStrong &&
|
|
conditions.adxtdConditions.isBullish &&
|
|
conditions.strConditions.isTrendBullish &&
|
|
conditions.cheConditions.isStrongBullish &&
|
|
conditions.hkConditions.isHKBullish &&
|
|
conditions.mrbConditions.isFastOverSlow &&
|
|
conditions.sslcConditions.isBullish &&
|
|
conditions.hullConditions.isBullish &&
|
|
conditions.vlmConditions.isVolumeBullish
|
|
//
|
|
;
|
|
if (long12)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XSMHK);
|
|
}
|
|
|
|
//
|
|
// XMRB ...
|
|
bool long13 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.mrbConditions.isFastCrossedOverSlow &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBullish &&
|
|
conditions.mcConditions.isBullish &&
|
|
conditions.mcConditions.isSARBullish &&
|
|
conditions.adxtdConditions.isStrong &&
|
|
conditions.adxtdConditions.isBullish &&
|
|
conditions.strConditions.isTrendBullish &&
|
|
conditions.cheConditions.isStrongBullish &&
|
|
conditions.hkConditions.isHKBullish &&
|
|
conditions.hkConditions.isSMHKBullish &&
|
|
conditions.sslcConditions.isBullish &&
|
|
conditions.hullConditions.isBullish &&
|
|
conditions.vlmConditions.isVolumeBullish
|
|
//
|
|
;
|
|
if (long13)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XMRB);
|
|
}
|
|
|
|
//
|
|
// XSSLC ...
|
|
bool long14 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.sslcConditions.isSwitchedToBullish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBullish &&
|
|
conditions.mcConditions.isBullish &&
|
|
conditions.mcConditions.isSARBullish &&
|
|
conditions.adxtdConditions.isStrong &&
|
|
conditions.adxtdConditions.isBullish &&
|
|
conditions.strConditions.isTrendBullish &&
|
|
conditions.cheConditions.isStrongBullish &&
|
|
conditions.hkConditions.isHKBullish &&
|
|
conditions.hkConditions.isSMHKBullish &&
|
|
conditions.mrbConditions.isFastOverSlow &&
|
|
conditions.hullConditions.isBullish &&
|
|
conditions.vlmConditions.isVolumeBullish
|
|
//
|
|
;
|
|
if (long14)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XSSLC);
|
|
}
|
|
|
|
//
|
|
// XHULL ...
|
|
bool long15 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.hullConditions.isSwitchedToBullish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBullish &&
|
|
conditions.mcConditions.isBullish &&
|
|
conditions.mcConditions.isSARBullish &&
|
|
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.vlmConditions.isVolumeBullish
|
|
//
|
|
;
|
|
if (long15)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XHULL);
|
|
}
|
|
|
|
//
|
|
// XASCT ...
|
|
bool long16 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.asctConditions.isLongSignal &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBullish &&
|
|
conditions.mcConditions.isBullish &&
|
|
conditions.mcConditions.isSARBullish &&
|
|
conditions.adxtdConditions.isStrong &&
|
|
conditions.adxtdConditions.isBullish &&
|
|
conditions.strConditions.isTrendBullish &&
|
|
conditions.cheConditions.isStrongBullish &&
|
|
conditions.hkConditions.isHKBullish &&
|
|
conditions.hkConditions.isSMHKBullish &&
|
|
conditions.mrbConditions.isFastOverSlow &&
|
|
conditions.hullConditions.isBullish &&
|
|
conditions.sslcConditions.isBullish &&
|
|
conditions.vlmConditions.isVolumeBullish
|
|
//
|
|
;
|
|
if (long16)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XASCT);
|
|
}
|
|
|
|
//
|
|
// XVLM ...
|
|
bool long17 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.vlmConditions.isVolumeChangedToBullish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBullish &&
|
|
conditions.mcConditions.isBullish &&
|
|
conditions.mcConditions.isSARBullish &&
|
|
conditions.adxtdConditions.isStrong &&
|
|
conditions.adxtdConditions.isBullish &&
|
|
conditions.strConditions.isTrendBullish &&
|
|
conditions.cheConditions.isStrongBullish &&
|
|
conditions.hkConditions.isHKBullish &&
|
|
conditions.hkConditions.isSMHKBullish &&
|
|
conditions.mrbConditions.isFastOverSlow &&
|
|
conditions.hullConditions.isBullish &&
|
|
conditions.sslcConditions.isBullish
|
|
//
|
|
;
|
|
if (long17)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XVLM);
|
|
}
|
|
|
|
//
|
|
// XPVF ...
|
|
bool long18 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.pvConditions.isFiboIncreased &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBullish &&
|
|
conditions.mcConditions.isBullish &&
|
|
conditions.mcConditions.isSARBullish &&
|
|
conditions.adxtdConditions.isStrong &&
|
|
conditions.adxtdConditions.isBullish &&
|
|
conditions.strConditions.isTrendBullish &&
|
|
conditions.cheConditions.isStrongBullish &&
|
|
conditions.hkConditions.isHKBullish &&
|
|
conditions.hkConditions.isSMHKBullish &&
|
|
conditions.mrbConditions.isFastOverSlow &&
|
|
conditions.hullConditions.isBullish &&
|
|
conditions.sslcConditions.isBullish &&
|
|
conditions.vlmConditions.isVolumeBullish
|
|
//
|
|
;
|
|
if (long18)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XPVF);
|
|
}
|
|
|
|
//
|
|
// XPVSAR ...
|
|
bool long19 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.mcConditions.isSARSwitchedToBullish &&
|
|
conditions.pvConditions.vales[zIndex] == conditions.mcConditions.psar[zIndex] &&
|
|
conditions.strConditions.isTrendBullish &&
|
|
conditions.cheConditions.isStrongBullish
|
|
//
|
|
;
|
|
if (long19)
|
|
{
|
|
//
|
|
pusher += 2;
|
|
provider = ToString(PROVIDER_XPVSAR);
|
|
}
|
|
|
|
//
|
|
// XHTSRD ...
|
|
bool long20 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.IsTrendBullish() &&
|
|
conditions.dmntConditions.isBullish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBullish &&
|
|
conditions.adxtdConditions.isStrong &&
|
|
conditions.adxtdConditions.isBullish &&
|
|
conditions.vlmConditions.isVolumeBullish
|
|
//
|
|
;
|
|
if (long20)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XHTSRD);
|
|
}
|
|
|
|
//
|
|
result =
|
|
//
|
|
pusher >= 1 &&
|
|
// !isOSCShortVerified &&
|
|
// bullishScore > bearishScore * 2 &&
|
|
(
|
|
//
|
|
long1
|
|
//
|
|
||
|
|
//
|
|
long2
|
|
//
|
|
||
|
|
//
|
|
long3
|
|
//
|
|
||
|
|
//
|
|
long4
|
|
//
|
|
||
|
|
//
|
|
long5
|
|
//
|
|
||
|
|
//
|
|
long6
|
|
//
|
|
||
|
|
//
|
|
long7
|
|
//
|
|
||
|
|
//
|
|
long8
|
|
//
|
|
||
|
|
//
|
|
long9
|
|
//
|
|
||
|
|
//
|
|
long10
|
|
//
|
|
||
|
|
//
|
|
long11
|
|
//
|
|
||
|
|
//
|
|
long12
|
|
//
|
|
||
|
|
//
|
|
long13
|
|
//
|
|
||
|
|
//
|
|
long14
|
|
//
|
|
||
|
|
//
|
|
long15
|
|
//
|
|
||
|
|
//
|
|
long16
|
|
//
|
|
||
|
|
//
|
|
long17
|
|
//
|
|
||
|
|
//
|
|
long18
|
|
//
|
|
||
|
|
//
|
|
long19
|
|
//
|
|
||
|
|
//
|
|
long20
|
|
//
|
|
)
|
|
//
|
|
;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Check Market Conditions for Short Signals ...
|
|
bool HasShortConditions(
|
|
X121SetupConditions &conditions, // Conditions
|
|
int &pusher, // Pushers
|
|
string &provider // Provider
|
|
)
|
|
{
|
|
//
|
|
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 //
|
|
);
|
|
|
|
//
|
|
// XMC ...
|
|
bool short1 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.mcConditions.isSwitchedToBearish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.mcConditions.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 &&
|
|
conditions.vlmConditions.isVolumeBearish
|
|
//
|
|
;
|
|
if (short1)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XMC);
|
|
}
|
|
|
|
//
|
|
// XSARD ...
|
|
bool short2 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.mcConditions.isSARSwitchedToBearish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.mcConditions.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 &&
|
|
conditions.vlmConditions.isVolumeBearish
|
|
//
|
|
;
|
|
if (short2)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XSARD);
|
|
}
|
|
|
|
//
|
|
// XADXTD ...
|
|
bool short3 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.adxtdConditions.isStrongSwitchedToBearish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.mcConditions.isBearish &&
|
|
conditions.mcConditions.isSARBearish &&
|
|
conditions.strConditions.isTrendBearish &&
|
|
conditions.cheConditions.isStrongBearish &&
|
|
conditions.tdConditions.isBearish &&
|
|
conditions.hkConditions.isHKBearish &&
|
|
conditions.hkConditions.isSMHKBearish &&
|
|
conditions.mrbConditions.isFastUnderSlow &&
|
|
conditions.sslcConditions.isBearish &&
|
|
conditions.hullConditions.isBearish &&
|
|
conditions.vlmConditions.isVolumeBearish
|
|
//
|
|
;
|
|
if (short3)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XADXTD);
|
|
}
|
|
|
|
//
|
|
// XSTR ...
|
|
bool short4 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.strConditions.isTrendSwitchedToBearish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.mcConditions.isBearish &&
|
|
conditions.mcConditions.isSARBearish &&
|
|
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 &&
|
|
conditions.vlmConditions.isVolumeBearish
|
|
//
|
|
;
|
|
if (short4)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XSTR);
|
|
}
|
|
|
|
//
|
|
// XCHE ...
|
|
bool short5 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.cheConditions.isStrongSwitchedToBearish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.mcConditions.isBearish &&
|
|
conditions.mcConditions.isSARBearish &&
|
|
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 &&
|
|
conditions.vlmConditions.isVolumeBearish
|
|
//
|
|
;
|
|
if (short5)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XCHE);
|
|
}
|
|
|
|
//
|
|
// XTD ...
|
|
bool short6 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.tdConditions.isSwitchedToBearish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.mcConditions.isBearish &&
|
|
conditions.mcConditions.isSARBearish &&
|
|
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 &&
|
|
conditions.vlmConditions.isVolumeBearish
|
|
//
|
|
;
|
|
if (short6)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XTD);
|
|
}
|
|
|
|
//
|
|
// XSI ...
|
|
bool short7 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.rsi[cIndex] < 70 &&
|
|
conditions.rsi[pIndex] >= 70 &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBearish &&
|
|
conditions.mcConditions.isBearish &&
|
|
conditions.mcConditions.isSARBearish &&
|
|
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 &&
|
|
conditions.vlmConditions.isVolumeBearish
|
|
//
|
|
;
|
|
if (short7)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XSI);
|
|
}
|
|
|
|
//
|
|
// XCI ...
|
|
bool short8 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.cci[cIndex] < 100 &&
|
|
conditions.cci[pIndex] >= 100 &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBearish &&
|
|
conditions.mcConditions.isBearish &&
|
|
conditions.mcConditions.isSARBearish &&
|
|
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 &&
|
|
conditions.vlmConditions.isVolumeBearish
|
|
//
|
|
;
|
|
if (short8)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XCI);
|
|
}
|
|
|
|
//
|
|
// XMCD ...
|
|
bool short9 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.macd[cIndex] < 0 &&
|
|
conditions.macd[cIndex] < conditions.macdSignal[cIndex] &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBearish &&
|
|
conditions.mcConditions.isBearish &&
|
|
conditions.mcConditions.isSARBearish &&
|
|
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 &&
|
|
conditions.vlmConditions.isVolumeBearish
|
|
//
|
|
;
|
|
if (short9)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XMCD);
|
|
}
|
|
|
|
//
|
|
// XICH ...
|
|
bool short10 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.ichConditions.HasShortConditions() &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBearish &&
|
|
conditions.mcConditions.isBearish &&
|
|
conditions.mcConditions.isSARBearish &&
|
|
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 &&
|
|
conditions.vlmConditions.isVolumeBearish
|
|
//
|
|
;
|
|
if (short10)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XICH);
|
|
}
|
|
|
|
//
|
|
// XHK ...
|
|
bool short11 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.hkConditions.isHKSwitchedToBearish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBearish &&
|
|
conditions.mcConditions.isBearish &&
|
|
conditions.mcConditions.isSARBearish &&
|
|
conditions.adxtdConditions.isStrong &&
|
|
conditions.adxtdConditions.isBearish &&
|
|
conditions.strConditions.isTrendBearish &&
|
|
conditions.cheConditions.isStrongBearish &&
|
|
conditions.hkConditions.isSMHKBearish &&
|
|
conditions.mrbConditions.isFastUnderSlow &&
|
|
conditions.sslcConditions.isBearish &&
|
|
conditions.hullConditions.isBearish &&
|
|
conditions.vlmConditions.isVolumeBearish
|
|
//
|
|
;
|
|
if (short11)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XHK);
|
|
}
|
|
|
|
//
|
|
// XSMHK ...
|
|
bool short12 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.hkConditions.isSMHKSwitchedToBearish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBearish &&
|
|
conditions.mcConditions.isBearish &&
|
|
conditions.mcConditions.isSARBearish &&
|
|
conditions.adxtdConditions.isStrong &&
|
|
conditions.adxtdConditions.isBearish &&
|
|
conditions.strConditions.isTrendBearish &&
|
|
conditions.cheConditions.isStrongBearish &&
|
|
conditions.hkConditions.isHKBearish &&
|
|
conditions.mrbConditions.isFastUnderSlow &&
|
|
conditions.sslcConditions.isBearish &&
|
|
conditions.hullConditions.isBearish &&
|
|
conditions.vlmConditions.isVolumeBearish
|
|
//
|
|
;
|
|
if (short12)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XSMHK);
|
|
}
|
|
|
|
//
|
|
// XMRB ...
|
|
bool short13 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.mrbConditions.isFastCrossedUnderSlow &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBearish &&
|
|
conditions.mcConditions.isBearish &&
|
|
conditions.mcConditions.isSARBearish &&
|
|
conditions.adxtdConditions.isStrong &&
|
|
conditions.adxtdConditions.isBearish &&
|
|
conditions.strConditions.isTrendBearish &&
|
|
conditions.cheConditions.isStrongBearish &&
|
|
conditions.hkConditions.isHKBearish &&
|
|
conditions.hkConditions.isSMHKBearish &&
|
|
conditions.sslcConditions.isBearish &&
|
|
conditions.hullConditions.isBearish &&
|
|
conditions.vlmConditions.isVolumeBearish
|
|
//
|
|
;
|
|
if (short13)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XMRB);
|
|
}
|
|
|
|
//
|
|
// XSSLC ...
|
|
bool short14 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.sslcConditions.isSwitchedToBearish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBearish &&
|
|
conditions.mcConditions.isBearish &&
|
|
conditions.mcConditions.isSARBearish &&
|
|
conditions.adxtdConditions.isStrong &&
|
|
conditions.adxtdConditions.isBearish &&
|
|
conditions.strConditions.isTrendBearish &&
|
|
conditions.cheConditions.isStrongBearish &&
|
|
conditions.hkConditions.isHKBearish &&
|
|
conditions.hkConditions.isSMHKBearish &&
|
|
conditions.mrbConditions.isFastUnderSlow &&
|
|
conditions.hullConditions.isBearish &&
|
|
conditions.vlmConditions.isVolumeBearish
|
|
//
|
|
;
|
|
if (short14)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XSSLC);
|
|
}
|
|
|
|
//
|
|
// XHULL ...
|
|
bool short15 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.hullConditions.isSwitchedToBearish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBearish &&
|
|
conditions.mcConditions.isBearish &&
|
|
conditions.mcConditions.isSARBearish &&
|
|
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.vlmConditions.isVolumeBearish
|
|
//
|
|
;
|
|
if (short15)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XHULL);
|
|
}
|
|
|
|
//
|
|
// XASCT ...
|
|
bool short16 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.asctConditions.isShortSignal &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBearish &&
|
|
conditions.mcConditions.isBearish &&
|
|
conditions.mcConditions.isSARBearish &&
|
|
conditions.adxtdConditions.isStrong &&
|
|
conditions.adxtdConditions.isBearish &&
|
|
conditions.strConditions.isTrendBearish &&
|
|
conditions.cheConditions.isStrongBearish &&
|
|
conditions.hkConditions.isHKBearish &&
|
|
conditions.hkConditions.isSMHKBearish &&
|
|
conditions.mrbConditions.isFastUnderSlow &&
|
|
conditions.hullConditions.isBearish &&
|
|
conditions.sslcConditions.isBearish &&
|
|
conditions.vlmConditions.isVolumeBearish
|
|
//
|
|
;
|
|
if (short16)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XASCT);
|
|
}
|
|
|
|
//
|
|
// XVLM ...
|
|
bool short17 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.vlmConditions.isVolumeChangedToBearish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBearish &&
|
|
conditions.mcConditions.isBearish &&
|
|
conditions.mcConditions.isSARBearish &&
|
|
conditions.adxtdConditions.isStrong &&
|
|
conditions.adxtdConditions.isBearish &&
|
|
conditions.strConditions.isTrendBearish &&
|
|
conditions.cheConditions.isStrongBearish &&
|
|
conditions.hkConditions.isHKBearish &&
|
|
conditions.hkConditions.isSMHKBearish &&
|
|
conditions.mrbConditions.isFastUnderSlow &&
|
|
conditions.hullConditions.isBearish &&
|
|
conditions.sslcConditions.isBearish
|
|
//
|
|
;
|
|
if (short17)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XVLM);
|
|
}
|
|
|
|
//
|
|
// XPVF ...
|
|
bool short18 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.pvConditions.isFiboDecreased &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBearish &&
|
|
conditions.mcConditions.isBearish &&
|
|
conditions.mcConditions.isSARBearish &&
|
|
conditions.adxtdConditions.isStrong &&
|
|
conditions.adxtdConditions.isBearish &&
|
|
conditions.strConditions.isTrendBearish &&
|
|
conditions.cheConditions.isStrongBearish &&
|
|
conditions.hkConditions.isHKBearish &&
|
|
conditions.hkConditions.isSMHKBearish &&
|
|
conditions.mrbConditions.isFastUnderSlow &&
|
|
conditions.hullConditions.isBearish &&
|
|
conditions.sslcConditions.isBearish &&
|
|
conditions.vlmConditions.isVolumeBearish
|
|
//
|
|
;
|
|
if (short18)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XPVF);
|
|
}
|
|
|
|
//
|
|
// XPVSAR ...
|
|
bool short19 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.mcConditions.isSARSwitchedToBearish &&
|
|
conditions.pvConditions.peaks[zIndex] == conditions.mcConditions.psar[zIndex] &&
|
|
conditions.strConditions.isTrendBearish &&
|
|
conditions.cheConditions.isStrongBearish
|
|
//
|
|
;
|
|
if (short19)
|
|
{
|
|
//
|
|
pusher += 2;
|
|
provider = ToString(PROVIDER_XPVSAR);
|
|
}
|
|
|
|
//
|
|
// XHTSRD ...
|
|
bool short20 =
|
|
//
|
|
// Starting Conditions ...
|
|
conditions.IsTrendBearish() &&
|
|
conditions.dmntConditions.isBearish &&
|
|
//
|
|
// Verifications ...
|
|
conditions.tdConditions.isBearish &&
|
|
conditions.adxtdConditions.isStrong &&
|
|
conditions.adxtdConditions.isBearish &&
|
|
conditions.vlmConditions.isVolumeBearish
|
|
//
|
|
;
|
|
if (short20)
|
|
{
|
|
//
|
|
pusher++;
|
|
provider = ToString(PROVIDER_XHTSRD);
|
|
}
|
|
|
|
//
|
|
result =
|
|
//
|
|
pusher >= 1 &&
|
|
// !isOSCLongVerified &&
|
|
// bearishScore > bullishScore * 2 &&
|
|
(
|
|
//
|
|
short1
|
|
//
|
|
||
|
|
//
|
|
short2
|
|
//
|
|
||
|
|
//
|
|
short3
|
|
//
|
|
||
|
|
//
|
|
short4
|
|
//
|
|
||
|
|
//
|
|
short5
|
|
//
|
|
||
|
|
//
|
|
short6
|
|
//
|
|
||
|
|
//
|
|
short7
|
|
//
|
|
||
|
|
//
|
|
short8
|
|
//
|
|
||
|
|
//
|
|
short9
|
|
//
|
|
||
|
|
//
|
|
short10
|
|
//
|
|
||
|
|
//
|
|
short11
|
|
//
|
|
||
|
|
//
|
|
short12
|
|
//
|
|
||
|
|
//
|
|
short13
|
|
//
|
|
||
|
|
//
|
|
short14
|
|
//
|
|
||
|
|
//
|
|
short15
|
|
//
|
|
||
|
|
//
|
|
short16
|
|
//
|
|
||
|
|
//
|
|
short17
|
|
//
|
|
||
|
|
//
|
|
short18
|
|
//
|
|
||
|
|
//
|
|
short19
|
|
//
|
|
||
|
|
//
|
|
short20
|
|
//
|
|
)
|
|
//
|
|
;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Retrieve Long Verifications ...
|
|
bool HasLongVerifications(
|
|
X121SetupConditions &conditions[] // Conditions Collection
|
|
)
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
int count = ArraySize(conditions);
|
|
result = IsValidSize(count);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Loop through Conditions to Get Verifications ...
|
|
for (int i = count - 1; i >= 0; i--)
|
|
{
|
|
//
|
|
X121SetupConditions iConditions = conditions[i];
|
|
|
|
//
|
|
result = IsConditionsValidForLong(iConditions);
|
|
if (result)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Count Number of Long Validations ...
|
|
int CountLongValidations(
|
|
X121SetupConditions &conditions // Conditions
|
|
)
|
|
{
|
|
//
|
|
int result = 0;
|
|
|
|
//
|
|
// XTD ...
|
|
bool isTDPassed =
|
|
//
|
|
conditions.tdConditions.isBullish ||
|
|
conditions.tdConditions.isSwitchedToBullish
|
|
//
|
|
;
|
|
if (isTDPassed)
|
|
{
|
|
result++;
|
|
}
|
|
|
|
//
|
|
// XHK ...
|
|
bool isHKPassed =
|
|
//
|
|
(conditions.hkConditions.isHKBullish ||
|
|
conditions.hkConditions.isHKSwitchedToBullish)
|
|
//
|
|
||
|
|
//
|
|
(conditions.hkConditions.isSMHKBullish ||
|
|
conditions.hkConditions.isSMHKSwitchedToBullish)
|
|
//
|
|
;
|
|
if (isHKPassed)
|
|
{
|
|
result++;
|
|
}
|
|
|
|
//
|
|
// XCHE ...
|
|
bool isCHEPassed =
|
|
//
|
|
conditions.cheConditions.isBullish ||
|
|
conditions.cheConditions.isStrongBullish ||
|
|
conditions.cheConditions.isSwitchedToBullish ||
|
|
conditions.cheConditions.isStrongSwitchedToBullish
|
|
//
|
|
;
|
|
if (isCHEPassed)
|
|
{
|
|
result++;
|
|
}
|
|
|
|
//
|
|
// XICH ...
|
|
bool isICHPassed =
|
|
//
|
|
(conditions.ichConditions.isTenkanSenOverKijunSen ||
|
|
conditions.ichConditions.isTenkanSenCrossedOverKijunSen)
|
|
//
|
|
&&
|
|
//
|
|
(conditions.ichConditions.isSenkouSpanAOverB ||
|
|
conditions.ichConditions.isSenkouSpanAOverLast ||
|
|
conditions.ichConditions.isSenkouSpanACrossedOverB ||
|
|
conditions.ichConditions.isSenkouSpanACrossedOverLast)
|
|
//
|
|
&&
|
|
//
|
|
(conditions.ichConditions.isFutureSenkouSpanAOverB ||
|
|
conditions.ichConditions.isFutureSenkouSpanAOverLast ||
|
|
conditions.ichConditions.isFutureSenkouSpanACrossedOverB ||
|
|
conditions.ichConditions.isFutureSenkouSpanACrossedOverLast)
|
|
//
|
|
;
|
|
if (isICHPassed)
|
|
{
|
|
result++;
|
|
}
|
|
|
|
//
|
|
// XSTR ...
|
|
bool isSTRPassed =
|
|
//
|
|
conditions.strConditions.isTrendBullish ||
|
|
conditions.strConditions.isTrendSwitchedToBullish
|
|
//
|
|
;
|
|
if (isSTRPassed)
|
|
{
|
|
result++;
|
|
}
|
|
|
|
//
|
|
// XMRB ...
|
|
bool isMRBPassed =
|
|
//
|
|
conditions.mrbConditions.isFastOverSlow ||
|
|
conditions.mrbConditions.isFastCrossedOverSlow
|
|
//
|
|
;
|
|
if (isMRBPassed)
|
|
{
|
|
result++;
|
|
}
|
|
|
|
//
|
|
// XVLM ...
|
|
bool isVLMPassed =
|
|
//
|
|
conditions.vlmConditions.isVolumeBullish ||
|
|
conditions.vlmConditions.isVolumeOverLast ||
|
|
conditions.vlmConditions.isVolumeChangedToBullish
|
|
//
|
|
;
|
|
if (isVLMPassed)
|
|
{
|
|
result++;
|
|
}
|
|
|
|
//
|
|
// XSSLC ...
|
|
bool isSSLCPassed =
|
|
//
|
|
conditions.sslcConditions.isBullish ||
|
|
conditions.sslcConditions.isSwitchedToBullish
|
|
//
|
|
;
|
|
if (isSSLCPassed)
|
|
{
|
|
result++;
|
|
}
|
|
|
|
//
|
|
// XHULL ...
|
|
bool isHULLPassed =
|
|
//
|
|
conditions.hullConditions.isBullish ||
|
|
conditions.hullConditions.isUpBullish ||
|
|
conditions.hullConditions.isDownBullish ||
|
|
conditions.hullConditions.isSwitchedToBullish
|
|
//
|
|
;
|
|
if (isHULLPassed)
|
|
{
|
|
result++;
|
|
}
|
|
|
|
//
|
|
// XADX ...
|
|
bool isADXTDPassed =
|
|
//
|
|
conditions.adxtdConditions.isBullish ||
|
|
conditions.adxtdConditions.isSwitchedToBullish ||
|
|
conditions.adxtdConditions.isStrongSwitchedToBullish
|
|
//
|
|
;
|
|
if (isADXTDPassed)
|
|
{
|
|
result++;
|
|
}
|
|
|
|
//
|
|
// XMC ...
|
|
bool isMATDPassed =
|
|
//
|
|
((conditions.mcConditions.isBullish ||
|
|
conditions.mcConditions.isSwitchedToBullish)
|
|
//
|
|
||
|
|
//
|
|
((conditions.mcConditions.isFastOverVerifier ||
|
|
conditions.mcConditions.isFastCrossedOverVerifier)
|
|
//
|
|
&&
|
|
//
|
|
(conditions.mcConditions.isSlowOverVerifier ||
|
|
conditions.mcConditions.isSlowCrossedOverVerifier)))
|
|
//
|
|
||
|
|
//
|
|
(conditions.mcConditions.isSARBullish ||
|
|
conditions.mcConditions.isSARSwitchedToBullish)
|
|
//
|
|
;
|
|
if (isMATDPassed)
|
|
{
|
|
result++;
|
|
}
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
bool IsConditionsValidForLong(
|
|
X121SetupConditions &conditions, // Conditions
|
|
int verifications = 4 // Number of Verifications
|
|
)
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
int signs = CountLongValidations(conditions);
|
|
|
|
//
|
|
result =
|
|
//
|
|
verifications <= 0
|
|
? signs > 0
|
|
: signs >= verifications
|
|
//
|
|
;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Retrieve Short Verifications ...
|
|
bool HasShortVerifications(
|
|
X121SetupConditions &conditions[] // Conditions Collection
|
|
)
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
int count = ArraySize(conditions);
|
|
result = IsValidSize(count);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Loop through Conditions to Get Verifications ...
|
|
for (int i = count - 1; i >= 0; i--)
|
|
{
|
|
//
|
|
X121SetupConditions iConditions = conditions[i];
|
|
|
|
//
|
|
result = IsConditionsValidForShort(iConditions);
|
|
if (result)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
int CountShortValidations(
|
|
X121SetupConditions &conditions // Conditions
|
|
)
|
|
{
|
|
//
|
|
int result = 0;
|
|
|
|
//
|
|
// XTD ...
|
|
bool isTDPassed =
|
|
//
|
|
conditions.tdConditions.isBearish ||
|
|
conditions.tdConditions.isSwitchedToBearish
|
|
//
|
|
;
|
|
if (isTDPassed)
|
|
{
|
|
result++;
|
|
}
|
|
|
|
//
|
|
// XHK ...
|
|
bool isHKPassed =
|
|
//
|
|
(conditions.hkConditions.isHKBearish ||
|
|
conditions.hkConditions.isHKSwitchedToBearish)
|
|
//
|
|
||
|
|
//
|
|
(conditions.hkConditions.isSMHKBearish ||
|
|
conditions.hkConditions.isSMHKSwitchedToBearish)
|
|
//
|
|
;
|
|
if (isHKPassed)
|
|
{
|
|
result++;
|
|
}
|
|
|
|
//
|
|
// XCHE ...
|
|
bool isCHEPassed =
|
|
//
|
|
conditions.cheConditions.isBearish ||
|
|
conditions.cheConditions.isStrongBearish ||
|
|
conditions.cheConditions.isSwitchedToBearish ||
|
|
conditions.cheConditions.isStrongSwitchedToBearish
|
|
//
|
|
;
|
|
if (isCHEPassed)
|
|
{
|
|
result++;
|
|
}
|
|
|
|
//
|
|
// XICH ...
|
|
bool isICHPassed =
|
|
//
|
|
(conditions.ichConditions.isTenkanSenUnderKijunSen ||
|
|
conditions.ichConditions.isTenkanSenCrossedUnderKijunSen)
|
|
//
|
|
&&
|
|
//
|
|
(conditions.ichConditions.isSenkouSpanAUnderB ||
|
|
conditions.ichConditions.isSenkouSpanAUnderLast ||
|
|
conditions.ichConditions.isSenkouSpanACrossedUnderB ||
|
|
conditions.ichConditions.isSenkouSpanACrossedUnderLast)
|
|
//
|
|
&&
|
|
//
|
|
(conditions.ichConditions.isFutureSenkouSpanAUnderB ||
|
|
conditions.ichConditions.isFutureSenkouSpanAUnderLast ||
|
|
conditions.ichConditions.isFutureSenkouSpanACrossedUnderB ||
|
|
conditions.ichConditions.isFutureSenkouSpanACrossedUnderLast)
|
|
//
|
|
;
|
|
if (isICHPassed)
|
|
{
|
|
result++;
|
|
}
|
|
|
|
//
|
|
// XSTR ...
|
|
bool isSTRPassed =
|
|
//
|
|
conditions.strConditions.isTrendBearish ||
|
|
conditions.strConditions.isTrendSwitchedToBearish
|
|
//
|
|
;
|
|
if (isSTRPassed)
|
|
{
|
|
result++;
|
|
}
|
|
|
|
//
|
|
// XMRB ...
|
|
bool isMRBPassed =
|
|
//
|
|
conditions.mrbConditions.isFastUnderSlow ||
|
|
conditions.mrbConditions.isFastCrossedUnderSlow
|
|
//
|
|
;
|
|
if (isMRBPassed)
|
|
{
|
|
result++;
|
|
}
|
|
|
|
//
|
|
// XVLM ...
|
|
bool isVLMPassed =
|
|
//
|
|
conditions.vlmConditions.isVolumeBearish ||
|
|
conditions.vlmConditions.isVolumeUnderLast ||
|
|
conditions.vlmConditions.isVolumeChangedToBearish
|
|
//
|
|
;
|
|
if (isVLMPassed)
|
|
{
|
|
result++;
|
|
}
|
|
|
|
//
|
|
// XSSLC ...
|
|
bool isSSLCPassed =
|
|
//
|
|
conditions.sslcConditions.isBearish ||
|
|
conditions.sslcConditions.isSwitchedToBearish
|
|
//
|
|
;
|
|
if (isSSLCPassed)
|
|
{
|
|
result++;
|
|
}
|
|
|
|
//
|
|
// XHULL ...
|
|
bool isHULLPassed =
|
|
//
|
|
conditions.hullConditions.isBearish ||
|
|
conditions.hullConditions.isUpBearish ||
|
|
conditions.hullConditions.isDownBearish ||
|
|
conditions.hullConditions.isSwitchedToBearish
|
|
//
|
|
;
|
|
if (isHULLPassed)
|
|
{
|
|
result++;
|
|
}
|
|
|
|
//
|
|
// XADX ...
|
|
bool isADXTDPassed =
|
|
//
|
|
conditions.adxtdConditions.isBearish ||
|
|
conditions.adxtdConditions.isSwitchedToBearish ||
|
|
conditions.adxtdConditions.isStrongSwitchedToBearish
|
|
//
|
|
;
|
|
if (isADXTDPassed)
|
|
{
|
|
result++;
|
|
}
|
|
|
|
//
|
|
// XMC ...
|
|
bool isMATDPassed =
|
|
//
|
|
((conditions.mcConditions.isBearish ||
|
|
conditions.mcConditions.isSwitchedToBearish)
|
|
//
|
|
||
|
|
//
|
|
((conditions.mcConditions.isFastUnderVerifier ||
|
|
conditions.mcConditions.isFastCrossedUnderVerifier)
|
|
//
|
|
&&
|
|
//
|
|
(conditions.mcConditions.isSlowUnderVerifier ||
|
|
conditions.mcConditions.isSlowCrossedUnderVerifier)))
|
|
//
|
|
||
|
|
//
|
|
(conditions.mcConditions.isSARBearish ||
|
|
conditions.mcConditions.isSARSwitchedToBearish)
|
|
//
|
|
;
|
|
if (isMATDPassed)
|
|
{
|
|
result++;
|
|
}
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
bool IsConditionsValidForShort(
|
|
X121SetupConditions &conditions, // Conditions
|
|
int verifications = 4 // Number of Verifications
|
|
)
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
int signs = CountShortValidations(conditions);
|
|
|
|
//
|
|
result =
|
|
//
|
|
verifications <= 0
|
|
? signs > 0
|
|
: signs >= verifications
|
|
//
|
|
;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Filter Long Conditions ...
|
|
bool FilterLongConditions(
|
|
X121SetupConditions &conditions, // Conditions
|
|
int pusher, // Pushers
|
|
string provider // Provider
|
|
)
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
// TODO Filter ...
|
|
result = false; // provider == ToString(PROVIDER_XHTSRD);
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Filter Short Conditions ...
|
|
bool FilterShortConditions(
|
|
X121SetupConditions &conditions, // Conditions
|
|
int pusher, // Pushers
|
|
string provider // Provider
|
|
)
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
// TODO Filter ...
|
|
result = false; // provider == ToString(PROVIDER_XHTSRD);
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Check Conditions for Generating Possible Signals ...
|
|
bool HasSignal(
|
|
X121SetupConditions &conditions, // Conditions
|
|
XSignal &signal, // Signal if Exists
|
|
int &pusher, // Pushers
|
|
string &provider, // Signal Provider Name
|
|
bool _useSupport, // Generate Support Signals
|
|
bool _allowLong, // Allow Long Signals
|
|
bool _allowShort, // Allow Short Signals
|
|
double _volume = 0.01, // Volume
|
|
double _slPoint = 0, // SL Point
|
|
bool _ignoreSL = false, // Ignore Calculated SL
|
|
double _tpPoint = 30, // TP Point
|
|
bool _ignoreTP = false // Ignore Calculated TP
|
|
)
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
signal.Clean();
|
|
|
|
//
|
|
result = _allowLong || _allowShort;
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
bool hasLong = false;
|
|
bool hasShort = false;
|
|
|
|
//
|
|
if (_allowLong)
|
|
{
|
|
//
|
|
hasLong =
|
|
HasLongConditions(
|
|
conditions,
|
|
pusher,
|
|
provider //
|
|
);
|
|
|
|
//
|
|
if (hasLong)
|
|
{
|
|
//
|
|
hasLong = FilterLongConditions(
|
|
conditions,
|
|
pusher,
|
|
provider //
|
|
);
|
|
}
|
|
}
|
|
|
|
//
|
|
if (_allowShort && !hasLong)
|
|
{
|
|
//
|
|
hasShort =
|
|
HasShortConditions(
|
|
conditions,
|
|
pusher,
|
|
provider //
|
|
);
|
|
|
|
//
|
|
if (hasShort)
|
|
{
|
|
//
|
|
hasShort = FilterShortConditions(
|
|
conditions,
|
|
pusher,
|
|
provider //
|
|
);
|
|
}
|
|
}
|
|
|
|
//
|
|
result = hasLong || hasShort;
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
string mProvider =
|
|
IsValid(provider)
|
|
? provider
|
|
: GetTag();
|
|
|
|
//
|
|
// 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,
|
|
mProvider,
|
|
conditions.period,
|
|
mType,
|
|
X_ORDER_MODE_MARKET,
|
|
mEntry,
|
|
_volume,
|
|
_ignoreSL
|
|
? 0
|
|
: mSL,
|
|
_ignoreTP
|
|
? 0
|
|
: mTP //
|
|
);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Calculate Ticks Zone ...
|
|
XSCZones *zones = new XSCZones(
|
|
signal.symbol,
|
|
signal.period //
|
|
);
|
|
|
|
//
|
|
XSCZonesInput zonesInput;
|
|
zonesInput.length = 26;
|
|
zonesInput.numberOfZones = 10;
|
|
|
|
//
|
|
zonesInput.AddLevelColor(
|
|
hotLevels[0],
|
|
clrRed //
|
|
);
|
|
zonesInput.AddLevelColor(
|
|
hotLevels[1],
|
|
clrOrange //
|
|
);
|
|
zonesInput.AddLevelColor(
|
|
hotLevels[2],
|
|
clrLightCoral //
|
|
);
|
|
|
|
//
|
|
bool canUseZones = zones.Init(zonesInput);
|
|
if (canUseZones)
|
|
{
|
|
signal.zones = zones;
|
|
}
|
|
|
|
//
|
|
// Calculate Trend ...
|
|
XSCTrend *trend = new XSCTrend(
|
|
signal.symbol,
|
|
signal.period //
|
|
);
|
|
|
|
//
|
|
XSCTrendInput tInputs;
|
|
tInputs.Default();
|
|
bool canUseTrend = trend.Init(tInputs);
|
|
if (canUseTrend)
|
|
{
|
|
//
|
|
signal.trend = trend;
|
|
}
|
|
|
|
//
|
|
XSCCFInput cfInputs;
|
|
cfInputs.Default();
|
|
XSCCF *cf = new XSCCF(
|
|
signal.symbol,
|
|
signal.period //
|
|
);
|
|
bool canUseCF = cf.Init(cfInputs);
|
|
if (canUseCF)
|
|
{
|
|
signal.cf = cf;
|
|
}
|
|
|
|
//
|
|
// Generate Support Signals ...
|
|
// if (_useSupport)
|
|
// {
|
|
// //
|
|
// GenerateSupportSignals(
|
|
// signal //
|
|
// );
|
|
// }
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
void GenerateSupportSignals(
|
|
XSignal &signal // Source Signal for Support Generating ...
|
|
)
|
|
{
|
|
//
|
|
double pivots[];
|
|
int pivotsCount = GenerateSupportPivots(
|
|
signal,
|
|
pivots //
|
|
);
|
|
if (!IsValidSize(pivotsCount))
|
|
{
|
|
return;
|
|
}
|
|
|
|
//
|
|
XSignal supports[];
|
|
int indirectionalsCount =
|
|
PrepareInDirectionalSupportSignals(
|
|
supports,
|
|
signal,
|
|
pivots //
|
|
);
|
|
if (IsValidSize(indirectionalsCount))
|
|
{
|
|
//
|
|
Copy(
|
|
supports,
|
|
signal.supports //
|
|
);
|
|
|
|
//
|
|
Clean(supports);
|
|
}
|
|
}
|
|
|
|
//
|
|
int GenerateSupportPivots(
|
|
XSignal &signal, // Source Signal for Support Generating ...
|
|
double &pivots[] //
|
|
)
|
|
{
|
|
//
|
|
int result = 0;
|
|
|
|
//
|
|
// Validate Signal ...
|
|
if (!signal.IsValid())
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Retrieve Signal Direction ...
|
|
bool isLong = IsLong(signal.type);
|
|
|
|
//
|
|
bool canUseCF = signal.cf != NULL &&
|
|
signal.cf.IsValid();
|
|
bool canUseZones = signal.zones != NULL &&
|
|
signal.zones.IsValid();
|
|
bool canUseTrend = signal.trend != NULL &&
|
|
signal.trend.IsValid();
|
|
|
|
//
|
|
datetime prevTime = iTime(
|
|
signal.symbol,
|
|
signal.period,
|
|
1 //
|
|
);
|
|
|
|
//
|
|
datetime cTime = TimeCurrent();
|
|
|
|
//
|
|
string entryLineName = "sEntry" + signal.symbol;
|
|
DrawTrendLine(
|
|
0,
|
|
entryLineName,
|
|
0,
|
|
prevTime,
|
|
signal.entry,
|
|
cTime,
|
|
signal.entry,
|
|
clrYellow,
|
|
STYLE_SOLID,
|
|
2,
|
|
false,
|
|
false,
|
|
true //
|
|
);
|
|
|
|
//
|
|
Clean(pivots);
|
|
double tmpPivots[];
|
|
|
|
//
|
|
if (canUseCF)
|
|
{
|
|
//
|
|
signal.cf.Draw();
|
|
XOHCL cfBULLBar = signal.cf.GetBullishBar();
|
|
XOHCL cfBEARBar = signal.cf.GetBearishBar();
|
|
|
|
//
|
|
Add(
|
|
cfBULLBar.high,
|
|
tmpPivots //
|
|
);
|
|
Add(
|
|
cfBULLBar.low,
|
|
tmpPivots //
|
|
);
|
|
Add(
|
|
cfBEARBar.high,
|
|
tmpPivots //
|
|
);
|
|
Add(
|
|
cfBEARBar.low,
|
|
tmpPivots //
|
|
);
|
|
|
|
//
|
|
signal.cf.Remove();
|
|
}
|
|
|
|
//
|
|
if (canUseTrend)
|
|
{
|
|
//
|
|
signal.trend.Draw();
|
|
|
|
//
|
|
// Lows ...
|
|
Add(
|
|
signal.trend.GetLows(),
|
|
tmpPivots //
|
|
);
|
|
|
|
//
|
|
// Highs ...
|
|
Add(
|
|
signal.trend.GetHighs(),
|
|
tmpPivots //
|
|
);
|
|
|
|
//
|
|
// Support ...
|
|
Add(
|
|
signal.trend.GetSupport(),
|
|
tmpPivots //
|
|
);
|
|
|
|
//
|
|
// Resistance ...
|
|
Add(
|
|
signal.trend.GetResistance(),
|
|
tmpPivots //
|
|
);
|
|
|
|
//
|
|
signal.trend.Remove();
|
|
}
|
|
|
|
//
|
|
if (canUseZones)
|
|
{
|
|
//
|
|
signal.zones.Draw();
|
|
|
|
//
|
|
// Find Hot Zones ...
|
|
for (int i = 0; i < signal.zones.CountZones(); i++)
|
|
{
|
|
//
|
|
// Retrieve Indexed Zone ...
|
|
XSCZone *iZone = signal.zones.GetZone(i);
|
|
|
|
//
|
|
// Check Zone is Hot Zone or not ...
|
|
bool isHotZone = false;
|
|
for (int j = 0; j < ArraySize(hotLevels); j++)
|
|
{
|
|
//
|
|
isHotZone = (iZone.percent / 100) >= hotLevels[j];
|
|
if (isHotZone)
|
|
{
|
|
break;
|
|
}
|
|
}
|
|
|
|
//
|
|
// Prevent Moving Forward if there isn't Hot Zone ...
|
|
if (!isHotZone)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
//
|
|
// Zone High ...
|
|
Add(
|
|
iZone.high,
|
|
tmpPivots //
|
|
);
|
|
|
|
//
|
|
// Zone Low ...
|
|
Add(
|
|
iZone.low,
|
|
tmpPivots //
|
|
);
|
|
}
|
|
|
|
//
|
|
signal.zones.Remove();
|
|
}
|
|
|
|
//
|
|
int tmpPivotsCount = ArraySize(tmpPivots);
|
|
if (!IsValidSize(tmpPivotsCount))
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
for (int i = 0; i < tmpPivotsCount; i++)
|
|
{
|
|
//
|
|
double iPivot = tmpPivots[i];
|
|
|
|
//
|
|
bool isValidPivot =
|
|
isLong
|
|
? signal.entry > iPivot
|
|
: signal.entry < iPivot;
|
|
if (isValidPivot)
|
|
{
|
|
//
|
|
Add(
|
|
iPivot,
|
|
pivots //
|
|
);
|
|
}
|
|
}
|
|
|
|
//
|
|
ArrayFree(tmpPivots);
|
|
|
|
//
|
|
RemoveDraws(entryLineName);
|
|
|
|
//
|
|
result = ArraySize(pivots);
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
bool PrepareDirectionalSupportSignals(
|
|
XPosition &support,
|
|
XPosition &parent,
|
|
XSignal &result //
|
|
)
|
|
{
|
|
//
|
|
bool mResult = false;
|
|
|
|
//
|
|
result.Clean();
|
|
|
|
//
|
|
mResult = support.IsValid() && parent.IsValid();
|
|
if (!mResult)
|
|
{
|
|
return mResult;
|
|
}
|
|
|
|
//
|
|
mResult = support.provider == XEQMSupportToken + XINDirectionalToken;
|
|
if (!mResult)
|
|
{
|
|
return mResult;
|
|
}
|
|
|
|
//
|
|
// Indirectional Supports Updated Using Directional ...
|
|
|
|
//
|
|
double entryPrice = GetEntry(
|
|
parent.symbol,
|
|
parent.type //
|
|
);
|
|
|
|
//
|
|
ENUM_X_ORDER_MODES rMode = X_ORDER_MODE_NOTHING;
|
|
bool isParentLong = IsLong(parent.type);
|
|
if (isParentLong)
|
|
{
|
|
//
|
|
if (entryPrice < parent.entry)
|
|
{
|
|
rMode = X_ORDER_MODE_STOP;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
//
|
|
if (entryPrice > parent.entry)
|
|
{
|
|
rMode = X_ORDER_MODE_STOP;
|
|
}
|
|
}
|
|
|
|
//
|
|
mResult = rMode != X_ORDER_MODE_NOTHING;
|
|
if (!mResult)
|
|
{
|
|
return mResult;
|
|
}
|
|
|
|
//
|
|
mResult = result.Prepare(
|
|
parent.symbol,
|
|
XEQMSupportToken + XDirectionalToken,
|
|
parent.period,
|
|
parent.type,
|
|
rMode,
|
|
parent.entry,
|
|
parent.volume,
|
|
0,
|
|
0 //
|
|
);
|
|
|
|
//
|
|
if (mResult)
|
|
{
|
|
//
|
|
string comment = GenerateSupportTag(parent.ticket);
|
|
result.comment = comment;
|
|
}
|
|
else
|
|
{
|
|
result.Clean();
|
|
}
|
|
|
|
//
|
|
return mResult;
|
|
}
|
|
|
|
//
|
|
int PrepareInDirectionalSupportSignals(
|
|
XSignal &supports[],
|
|
XSignal &source,
|
|
double &pivots[] //
|
|
)
|
|
{
|
|
//
|
|
int result = 0;
|
|
|
|
//
|
|
Clean(supports);
|
|
|
|
//
|
|
int pivotsCount = ArraySize(pivots);
|
|
if (!IsValidSize(pivotsCount))
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
bool isLong = IsLong(source.type);
|
|
|
|
//
|
|
XSignal rSignal; // Recovery Signal ...
|
|
|
|
//
|
|
double rSL = 0; // Recovery Stop Loss ...
|
|
double rTP = 0; // Recovery Take Profit ...
|
|
double rEntry = 0; // Recovery Entry Point ...
|
|
double rVolume = 0; // Recovery Volume ...
|
|
ENUM_POSITION_TYPE rType; // Recovery Signal Type ...
|
|
ENUM_X_ORDER_MODES rMode; // Recovery Signal Mode ...
|
|
bool isSignalPrepared = false; // Check Signal Preparation Succeed ...
|
|
|
|
//
|
|
bool condition = false;
|
|
|
|
//
|
|
double onePointValue = PointToPrice(1, source.symbol);
|
|
|
|
//
|
|
double directionalVolumeMultiplier = 1;
|
|
double inDirectionalVolumeMultiplier = 2;
|
|
|
|
//
|
|
// if Long we are Looking for lower prices than
|
|
// entry price and vise verse ...
|
|
|
|
//
|
|
for (int i = 0; i < pivotsCount; i++)
|
|
{
|
|
//
|
|
double iPivot = pivots[i];
|
|
|
|
//
|
|
bool isValidPrice =
|
|
isLong
|
|
? source.entry > iPivot
|
|
: source.entry < iPivot;
|
|
if (!isValidPrice)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
//
|
|
// InDirectional ...
|
|
if (isLong)
|
|
{
|
|
//
|
|
rType = POSITION_TYPE_SELL;
|
|
rMode = X_ORDER_MODE_STOP;
|
|
}
|
|
else
|
|
{
|
|
//
|
|
rType = POSITION_TYPE_BUY;
|
|
rMode = X_ORDER_MODE_STOP;
|
|
}
|
|
|
|
//
|
|
rEntry = iPivot;
|
|
rVolume = source.volume;
|
|
|
|
//
|
|
isSignalPrepared = rSignal.Prepare(
|
|
source.symbol,
|
|
XEQMSupportToken + XINDirectionalToken,
|
|
source.period,
|
|
rType,
|
|
rMode,
|
|
rEntry,
|
|
rVolume,
|
|
rSL,
|
|
rTP //
|
|
);
|
|
if (isSignalPrepared)
|
|
{
|
|
//
|
|
AddRef(
|
|
rSignal,
|
|
supports //
|
|
);
|
|
|
|
//
|
|
rSignal.Clean();
|
|
|
|
//
|
|
rSL = 0;
|
|
rTP = 0;
|
|
rEntry = 0;
|
|
isSignalPrepared = false;
|
|
}
|
|
}
|
|
|
|
//
|
|
result = ArraySize(supports);
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
string GetTag()
|
|
{
|
|
return "X121";
|
|
}
|
|
};
|
|
|
|
//
|
|
// Class ...
|
|
class XSCX121Setup : public XSCBaseAlert
|
|
{
|
|
//
|
|
// Public ...
|
|
public:
|
|
//
|
|
// Props ...
|
|
XSCXMCHelper *mcHelper;
|
|
XSCXPVHelper *pvHelper;
|
|
XSCXTDHelper *tdHelper;
|
|
XSCXHKHelper *hkHelper;
|
|
XSCXCHEHelper *cheHelper;
|
|
XSCXICHHelper *ichHelper;
|
|
XSCXSTRHelper *strHelper;
|
|
XSCXMRBHelper *mrbHelper;
|
|
XSCXOSCHelper *oscHelper;
|
|
XSCXVLMHelper *vlmHelper;
|
|
XSCXSLNHelper *slnHelper;
|
|
XSCXHTDHelper *hdtHelper;
|
|
XSCXASCTHelper *asctHelper;
|
|
XSCXSSLCHelper *sslcHelper;
|
|
XSCXHULLHelper *hullHelper;
|
|
XSCXATSLHelper *atslHelper;
|
|
XSCXDMNTHelper *dmntHelper;
|
|
XSCXADXTDHelper *adxtdHelper;
|
|
|
|
//
|
|
// Constructor(s) ...
|
|
void XSCX121Setup() {}
|
|
|
|
//
|
|
// Deconstructor ...
|
|
void ~XSCX121Setup()
|
|
{
|
|
//
|
|
delete mcHelper;
|
|
delete pvHelper;
|
|
delete tdHelper;
|
|
delete hkHelper;
|
|
delete cheHelper;
|
|
delete ichHelper;
|
|
delete strHelper;
|
|
delete mrbHelper;
|
|
delete oscHelper;
|
|
delete vlmHelper;
|
|
delete hdtHelper;
|
|
delete asctHelper;
|
|
delete sslcHelper;
|
|
delete hullHelper;
|
|
delete atslHelper;
|
|
delete dmntHelper;
|
|
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 ...
|
|
|
|
//
|
|
// XPV ...
|
|
pvHelper = new XSCXPVHelper();
|
|
result = pvHelper.Init(
|
|
inputs.symbol,
|
|
inputs.period,
|
|
inputs.pvInputs //
|
|
);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// XSLN ...
|
|
slnHelper = new XSCXSLNHelper();
|
|
result = slnHelper.Init(
|
|
inputs.symbol,
|
|
inputs.period,
|
|
inputs.slnInputs //
|
|
);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// XTD ...
|
|
tdHelper = new XSCXTDHelper();
|
|
result = tdHelper.Init(
|
|
inputs.symbol,
|
|
inputs.period,
|
|
inputs.tdInputs //
|
|
);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// XHTD ...
|
|
hdtHelper = new XSCXHTDHelper();
|
|
result = hdtHelper.Init(
|
|
inputs.symbol,
|
|
inputs.period,
|
|
inputs.htdInputs //
|
|
);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// XATSL ...
|
|
atslHelper = new XSCXATSLHelper();
|
|
result = atslHelper.Init(
|
|
inputs.symbol,
|
|
inputs.period,
|
|
inputs.atslInputs //
|
|
);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// XDMNT ...
|
|
dmntHelper = new XSCXDMNTHelper();
|
|
result = dmntHelper.Init(
|
|
inputs.symbol,
|
|
inputs.period,
|
|
inputs.dmntInputs //
|
|
);
|
|
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;
|
|
}
|
|
|
|
//
|
|
// XVLM ...
|
|
vlmHelper = new XSCXVLMHelper();
|
|
result = vlmHelper.Init(
|
|
inputs.symbol,
|
|
inputs.period,
|
|
inputs.vlmInputs //
|
|
);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// XMC ...
|
|
mcHelper = new XSCXMCHelper();
|
|
result = mcHelper.Init(
|
|
inputs.symbol,
|
|
inputs.period,
|
|
inputs.mcInputs //
|
|
);
|
|
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();
|
|
result = adxtdHelper.Init(
|
|
inputs.symbol,
|
|
inputs.period,
|
|
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 = hdtHelper.GetConditions(
|
|
conditions.htdConditions,
|
|
barIndex,
|
|
loopback //
|
|
);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
result = slnHelper.GetConditions(
|
|
conditions.slnConditions,
|
|
barIndex,
|
|
loopback //
|
|
);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
result = atslHelper.GetConditions(
|
|
conditions.atslConditions,
|
|
barIndex,
|
|
loopback //
|
|
);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
result = dmntHelper.GetConditions(
|
|
conditions.dmntConditions,
|
|
barIndex,
|
|
loopback //
|
|
);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
result = pvHelper.GetConditions(
|
|
conditions.pvConditions,
|
|
barIndex,
|
|
loopback //
|
|
);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
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 = mcHelper.GetConditions(
|
|
conditions.mcConditions,
|
|
barIndex,
|
|
loopback //
|
|
);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
result = asctHelper.GetConditions(
|
|
conditions.asctConditions,
|
|
barIndex,
|
|
loopback //
|
|
);
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
result = vlmHelper.GetConditions(
|
|
conditions.vlmConditions,
|
|
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 ...
|
|
};
|
|
|
|
//
|
|
// Tools ...
|
|
|
|
//
|
|
int FindSignalConditionsIndex(
|
|
XSignal &signal,
|
|
X121SetupConditions &conditions[] //
|
|
)
|
|
{
|
|
//
|
|
int result = -1;
|
|
|
|
//
|
|
// Check Signal is Valid ...
|
|
if (!signal.IsValid())
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Check Conditions Count ...
|
|
int conditionsCount = ArraySize(conditions);
|
|
if (!IsValidSize(conditionsCount))
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
for (int i = 0; i < conditionsCount; i++)
|
|
{
|
|
//
|
|
X121SetupConditions iConditions = conditions[i];
|
|
|
|
//
|
|
if (signal.symbol == iConditions.symbol &&
|
|
signal.period == iConditions.period)
|
|
{
|
|
//
|
|
result = i;
|
|
break;
|
|
}
|
|
}
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
// |