Files
MQL5Data/Experts/x-sample.ea.mq5
T
2024-06-04 05:13:36 +03:30

2453 lines
51 KiB
Plaintext

///////////////////////////////////////////////////////
//
// SaherElm IT Center XSAMPLE MQL5 Expert Advisor
// -------------------------------------------------
// Name: XSAMPLE
// Description: an Exper Advisor which used RSI and MA
// to Analyse Market ...
//
// Maintainer:
// ------------
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
//
//////////////////////////////////////////////////////x
//
// Global Properties ...
#property copyright "Copyright 2023, SaherElm IT Center"
#property link "https://saherelm.ir"
#property version "1.00"
#property description "SaherElm XSAMPLE"
#property strict
//
#define ShortName "XSAMPLE"
//
#include "../Libraries/x-saherelm.draw.lib.mq5"
#include "../Helpers/x-saherelm.xcc.helper.mq5"
#include "../Helpers/x-saherelm.xct.helper.mq5"
#include "../Classes/x-saherelm.xtrade.class.mq5"
#include "../Libraries/x-saherelm.common.lib.mq5"
#include "../Classes/x-saherelm.xalert.class.mq5"
#include "../Classes/x-saherelm.x121.xmcycle.class.mq5"
#include "../Classes/x-saherelm.x121.xmcycle.class.mq5"
//
// Inputs ...
//
input group "Market";
//
input group "Short";
input ENUM_X_PERIOD_METHOD scMethod = X_PERIOD_AUTO; // Method
input ENUM_TIMEFRAMES scPeriod = NULL; // Period
//
input group "Medium";
input ENUM_X_PERIOD_METHOD mcMethod = X_PERIOD_AUTO; // Method
input ENUM_TIMEFRAMES mcPeriod = NULL; // Period
//
input group "Long";
input ENUM_X_PERIOD_METHOD lcMethod = X_PERIOD_AUTO; // Method
input ENUM_TIMEFRAMES lcPeriod = NULL; // Period
//
input group "Hind";
input ENUM_X_PERIOD_METHOD hcMethod = X_PERIOD_AUTO; // Method
input ENUM_TIMEFRAMES hcPeriod = NULL; // Period
//
long xSampleEAMagicNumber = 78692110; // Magic Number
int xSampleEASlippage = 10; // Slippgae
//
double xSampleEAVolume = 0.01;
//
// Vars ...
string xSampleEASymbol;
ENUM_TIMEFRAMES xSampleEAPeriod;
//
int maxBuys = 1;
int maxSells = 1;
int buyCount = 0;
int sellCount = 0;
//
double _tp = 0;
double _sl = 0;
double _entry = 0;
ENUM_POSITION_TYPE _type = NULL;
//
MqlTick xSampleEATick;
//
XBarTracker xSamplEABarTracker;
//
// Cycles ...
//
double bullishBuffer[];
double bearishBuffer[];
double nBullishBuffer[];
double nBearishBuffer[];
double longVFBuffer[];
double shortVFBuffer[];
//
double lastVale = 0;
double lastPeak = 0;
double lastSupport = 0;
double lastResistance = 0;
//
double xBullishScore = 0;
double xBearishScore = 0;
//
double normalizeBullishScore = 0;
double normalizeBearishScore = 0;
//
double xLongVerifications = 0;
double xShortVerifications = 0;
bool isScoreBalanced = false;
//
double lastBullishPivot = 0;
double lastBearishPivot = 0;
//
int normalizationLength = 15;
//
datetime lastTradeOn = NULL;
//
// Indicators ...
XCCInputs ccInputs;
XCTInputs ctInputs;
//
XZGInputs zgInputs;
XPVInputs pvInputs;
XHKInputs hkInputs;
XMCInputs mcInputs;
XTDInputs tdInputs;
XMRBInputs mrbInputs;
XICHInputs ichInputs;
XCHEInputs cheInputs;
XSTRInputs strInputs;
XDONInputs donInputs;
XOSCInputs oscInputs;
//
X121MCycleInputs cMarketInputs; // Curent Market Inputs
X121MCycleInputs sMarketInputs; // Short Market Inputs
X121MCycleInputs mMarketInputs; // Medium Market Inputs
X121MCycleInputs lMarketInputs; // Long Market Inputs
X121MCycleInputs hMarketInputs; // Hind Market Inputs
//
XSCX121Market *cMarket;
XSCX121Market *sMarket;
XSCX121Market *mMarket;
XSCX121Market *lMarket;
XSCX121Market *hMarket;
//
X121MCycleConditions cConditions;
X121MCycleConditions sConditions;
X121MCycleConditions mConditions;
X121MCycleConditions lConditions;
X121MCycleConditions hConditions;
//
XSCTrade *mTrader;
XSCAlert *mAlert;
//
XPivotTracker mPivotTracker;
XSignal mSignals[];
//
// Event Handlers ...
//
// Initialization ...
int OnInit()
{
//
if (xSampleEASymbol == NULL || StringLen(xSampleEASymbol) <= 0)
{
xSampleEASymbol = _Symbol;
}
//
if (xSampleEAPeriod == NULL)
{
xSampleEAPeriod = _Period;
}
//
// Validate Inputs ...
if (!XSampleEAValidateInputs())
{
return INIT_PARAMETERS_INCORRECT;
}
//
if (!InitialTrader())
{
return INIT_PARAMETERS_INCORRECT;
}
//
// Initial Cycles ...
if (!InitCycles())
{
return INIT_PARAMETERS_INCORRECT;
}
//
drawPrefix = ShortName;
//
// Init Succeed ...
return INIT_SUCCEEDED;
}
//
// DeInitialization ...
void OnDeinit(const int reason)
{
//
// REASON_PROGRAM 0 The EA has stopped working calling the ExpertRemove() function
// REASON_REMOVE 1 Program removed from a chart
// REASON_RECOMPILE 2 Program recompiled
// REASON_CHARTCHANGE 3 A symbol or a chart period is changed
// REASON_CHARTCLOSE 4 Chart closed
// REASON_PARAMETERS 5 Inputs changed by a user
// REASON_ACCOUNT 6 Another account has been activated or reconnection to the trade server has occurred due to changes in the account settings
// REASON_TEMPLATE 7 Another chart template applied
// REASON_INITFAILED 8 The OnInit() handler returned a non-zero value
// REASON_CLOSE 9 Terminal closed
//
// De Initialize XSampleEA Providers ...
//
delete mAlert;
delete mTrader;
//
delete cMarket;
delete sMarket;
delete mMarket;
delete lMarket;
delete hMarket;
}
//
// On Tick Handler ...
void OnTick()
{
//
if (!xSamplEABarTracker.IsNewBar())
{
return;
}
//
// Reading Tick ...
if (!GetTick(
xSampleEASymbol,
xSampleEATick //
))
{
return;
}
//
Analyze();
//
Manage();
}
//
// Custom Functions ...
//
// Validate Variables nd Inputs ...
bool XSampleEAValidateInputs()
{
//
bool result = false;
//
result =
//
xSampleEASlippage > 0 &&
xSampleEAMagicNumber > 0 &&
IsValid(scMethod, scPeriod) &&
IsValid(mcMethod, mcPeriod) &&
IsValid(lcMethod, lcPeriod) &&
IsValid(hcMethod, hcPeriod)
//
;
//
return result;
}
//
// Tools ...
//
// Do Market Analyziation ...
void Analyze()
{
//
GenerateMarketConditions();
//
xBullishScore = 0;
xBearishScore = 0;
CalculateScores(
xBullishScore,
xBearishScore //
);
//
normalizeBullishScore = 0;
normalizeBearishScore = 0;
CalculateNormalizedScores(
normalizeBullishScore,
normalizeBearishScore //
);
//
xLongVerifications = 0;
xShortVerifications = 0;
CalculateVerifications(
xLongVerifications,
xShortVerifications //
);
//
// Check Conditions on Pivots ...
HandleSignalDetection();
//
// Execute Signals ...
HandleSignalExecution();
//
// SUMMARY ...
//
string strSuumarry =
"[XTEA]" + "\n" +
"---------------------" + "\n" +
ToString(cMarketInputs.cycle.cycle) + ": " + ToString(cMarket.GetPeriod()) + "\n" +
ToString(sMarketInputs.cycle.cycle) + ": " + ToString(sMarket.GetPeriod()) + "\n" +
ToString(mMarketInputs.cycle.cycle) + ": " + ToString(mMarket.GetPeriod()) + "\n" +
ToString(lMarketInputs.cycle.cycle) + ": " + ToString(lMarket.GetPeriod()) + "\n" +
ToString(hMarketInputs.cycle.cycle) + ": " + ToString(hMarket.GetPeriod()) + "\n" +
"---------------------" + "\n" +
"Scores:" + "\n" +
"---------------------" + "\n" +
"Bullish: " + ToString(xBullishScore) + ", " + ToString(normalizeBullishScore) + ", " + ToString(xLongVerifications) + "\n" +
"Bearish: " + ToString(xBearishScore) + ", " + ToString(normalizeBearishScore) + ", " + ToString(xShortVerifications) + "\n" +
"";
//
Comment(strSuumarry);
//
}
//
void Manage()
{
}
//
// Inbitial Classes ...
bool InitialTrader()
{
//
bool result = true;
//
mAlert = new XSCAlert();
mAlert.SetLogAlerts(true);
mAlert.SetPrefix(ShortName);
mAlert.SetEnableAlerts(true);
mAlert.SetPushAlerts(false);
mAlert.SetMailAlerts(false);
mAlert.SetTerminalAlerts(false);
//
mTrader = new XSCTrade(
xSampleEASlippage,
xSampleEAMagicNumber,
0,
0,
0,
0 //
);
//
return result;
}
//
// Initial Market Conditions ...
bool InitCycles()
{
//
bool result = false;
//
// Define an Input Object and Configure it ...
// then use same Input for Separate Markets ...
//
string symbol = _Symbol;
ENUM_TIMEFRAMES period = _Period;
//
// Set Inputs to Default ...
ccInputs.Default();
ctInputs.Default();
zgInputs.Default();
pvInputs.Default();
hkInputs.Default();
mcInputs.Default();
tdInputs.Default();
mrbInputs.Default();
ichInputs.Default();
cheInputs.Default();
strInputs.Default();
donInputs.Default();
oscInputs.Default();
//
cMarketInputs.Default();
sMarketInputs.Default();
mMarketInputs.Default();
lMarketInputs.Default();
hMarketInputs.Default();
//
// XHK ...
hkInputs.drawHikenAshi = false;
hkInputs.drawSmoothedHikenAshi = false;
//
// XMRB ...
mrbInputs.showFastMa = false;
mrbInputs.showSlowMa = false;
mrbInputs.showRibbon = false;
//
// XMC ...
mcInputs.showFastMa = false;
mcInputs.showSlowMa = false;
mcInputs.showVerifierMa = false;
//
// XICH ...
ichInputs.showKumo = false;
ichInputs.showKijunSen = false;
ichInputs.showTenkanSen = false;
ichInputs.showChikouSpan = false;
ichInputs.showSenkouSpanA = false;
ichInputs.showSenkouSpanB = false;
ichInputs.showKijunSenPlus = false;
ichInputs.showKijunSenNegative = false;
//
// XCHE ...
cheInputs.showLongExit1Line = false;
cheInputs.showShortExit1Line = false;
cheInputs.showLongExit2Line = false;
cheInputs.showShortExit2Line = false;
//
// XPV ...
pvInputs.showPeaksAndVales = false;
pvInputs.showLevels = false;
pvInputs.showConsolidations = false;
pvInputs.showFibo1Levels = false;
pvInputs.showFibo2Levels = false;
pvInputs.showFibo3Levels = false;
pvInputs.showFibo4Levels = false;
pvInputs.showFibo5Levels = false;
//
// XZG ...
zgInputs.showZigZag = false;
zgInputs.showPeaksAndVales = false;
//
// XDON ...
donInputs.showOpen = false;
donInputs.showHigh = false;
donInputs.showClose = false;
donInputs.showLow = false;
//
// XSTR ...
strInputs.showTrends = false;
strInputs.fillTrends = false;
//
// Current Cycle ...
//
ConfigureCurrentCycles();
//
cMarketInputs.cycle.symbol = symbol;
cMarketInputs.cycle.period = period;
//
cMarketInputs.pvInputs = pvInputs;
cMarketInputs.zgInputs = zgInputs;
cMarketInputs.tdInputs = tdInputs;
cMarketInputs.mcInputs = mcInputs;
cMarketInputs.hkInputs = hkInputs;
cMarketInputs.mrbInputs = mrbInputs;
cMarketInputs.strInputs = strInputs;
cMarketInputs.oscInputs = oscInputs;
cMarketInputs.cheInputs = cheInputs;
cMarketInputs.ichInputs = ichInputs;
cMarketInputs.donInputs = donInputs;
//
result = cMarketInputs.Init(
symbol,
period,
X_MARKET_CYCLE_SHORT,
period,
X_PERIOD_MANUALLY,
"HOST",
false //
);
if (!result)
{
return result;
}
//
cMarket = new XSCX121Market();
result = cMarket.Init(cMarketInputs);
if (!result)
{
return result;
}
//
// Short Cycle ...
//
ConfigureShortCycles();
//
sMarketInputs.cycle.symbol = symbol;
sMarketInputs.cycle.period = period;
//
sMarketInputs.pvInputs = pvInputs;
sMarketInputs.zgInputs = zgInputs;
sMarketInputs.tdInputs = tdInputs;
sMarketInputs.mcInputs = mcInputs;
sMarketInputs.hkInputs = hkInputs;
sMarketInputs.mrbInputs = mrbInputs;
sMarketInputs.strInputs = strInputs;
sMarketInputs.oscInputs = oscInputs;
sMarketInputs.cheInputs = cheInputs;
sMarketInputs.ichInputs = ichInputs;
sMarketInputs.donInputs = donInputs;
//
result = sMarketInputs.Init(
symbol,
period,
X_MARKET_CYCLE_SHORT,
scPeriod,
scMethod,
NULL,
false //
);
if (!result)
{
return result;
}
//
sMarket = new XSCX121Market();
result = sMarket.Init(sMarketInputs);
if (!result)
{
return result;
}
//
// Medium Cycle ...
//
ConfigureMediumCycles();
//
mMarketInputs.cycle.symbol = symbol;
mMarketInputs.cycle.period = period;
//
mMarketInputs.pvInputs = pvInputs;
mMarketInputs.zgInputs = zgInputs;
mMarketInputs.tdInputs = tdInputs;
mMarketInputs.mcInputs = mcInputs;
mMarketInputs.hkInputs = hkInputs;
mMarketInputs.mrbInputs = mrbInputs;
mMarketInputs.strInputs = strInputs;
mMarketInputs.oscInputs = oscInputs;
mMarketInputs.cheInputs = cheInputs;
mMarketInputs.ichInputs = ichInputs;
mMarketInputs.donInputs = donInputs;
//
result = mMarketInputs.Init(
symbol,
period,
X_MARKET_CYCLE_MEDIUM,
mcPeriod,
mcMethod,
NULL,
false //
);
if (!result)
{
return result;
}
//
mMarket = new XSCX121Market();
result = mMarket.Init(mMarketInputs);
if (!result)
{
return result;
}
//
// Long Cycle ...
//
ConfigureLongCycles();
//
lMarketInputs.cycle.symbol = symbol;
lMarketInputs.cycle.period = period;
//
lMarketInputs.pvInputs = pvInputs;
lMarketInputs.zgInputs = zgInputs;
lMarketInputs.tdInputs = tdInputs;
lMarketInputs.mcInputs = mcInputs;
lMarketInputs.hkInputs = hkInputs;
lMarketInputs.mrbInputs = mrbInputs;
lMarketInputs.strInputs = strInputs;
lMarketInputs.oscInputs = oscInputs;
lMarketInputs.cheInputs = cheInputs;
lMarketInputs.ichInputs = ichInputs;
lMarketInputs.donInputs = donInputs;
//
result = lMarketInputs.Init(
symbol,
period,
X_MARKET_CYCLE_LONG,
lcPeriod,
lcMethod,
NULL,
false //
);
if (!result)
{
return result;
}
//
lMarket = new XSCX121Market();
result = lMarket.Init(lMarketInputs);
if (!result)
{
return result;
}
//
// Hind Cycle ...
//
ConfigureHindCycles();
//
hMarketInputs.cycle.symbol = symbol;
hMarketInputs.cycle.period = period;
//
hMarketInputs.pvInputs = pvInputs;
hMarketInputs.zgInputs = zgInputs;
hMarketInputs.tdInputs = tdInputs;
hMarketInputs.mcInputs = mcInputs;
hMarketInputs.hkInputs = hkInputs;
hMarketInputs.mrbInputs = mrbInputs;
hMarketInputs.strInputs = strInputs;
hMarketInputs.oscInputs = oscInputs;
hMarketInputs.cheInputs = cheInputs;
hMarketInputs.ichInputs = ichInputs;
hMarketInputs.donInputs = donInputs;
//
result = hMarketInputs.Init(
symbol,
period,
X_MARKET_CYCLE_HIND,
hcPeriod,
hcMethod,
NULL,
false //
);
if (!result)
{
return result;
}
//
hMarket = new XSCX121Market();
result = hMarket.Init(hMarketInputs);
if (!result)
{
return result;
}
//
return result;
}
//
// Generate and Update Market Conditions ...
void GenerateMarketConditions()
{
//
cConditions.Clear();
cMarket.GetMarketConditions(cConditions);
//
sConditions.Clear();
sMarket.GetMarketConditions(sConditions);
//
mConditions.Clear();
mMarket.GetMarketConditions(mConditions);
//
lConditions.Clear();
lMarket.GetMarketConditions(lConditions);
//
hConditions.Clear();
hMarket.GetMarketConditions(hConditions);
}
//
// Calculate Markets Score Summary ...
void CalculateScores(
double &mBullishScore,
double &mBearishScore //
)
{
//
// Current Market ...
//
double cBullScore = 0;
double cBearScore = 0;
double cScoreMultiplier = 1;
//
cConditions.GenerateScore(
cBullScore,
cBearScore,
cScoreMultiplier //
);
//
// Short Market ...
//
double sBullScore = 0;
double sBearScore = 0;
double sScoreMultiplier = 1.25;
//
sConditions.GenerateScore(
sBullScore,
sBearScore,
sScoreMultiplier //
);
//
// Medium Market ...
//
double mBullScore = 0;
double mBearScore = 0;
double mScoreMultiplier = 1.5;
//
mConditions.GenerateScore(
mBullScore,
mBearScore,
mScoreMultiplier //
);
//
// Long Market ...
//
double lBullScore = 0;
double lBearScore = 0;
double lScoreMultiplier = 2;
//
lConditions.GenerateScore(
lBullScore,
lBearScore,
lScoreMultiplier //
);
//
// Hind Market ...
//
double hBullScore = 0;
double hBearScore = 0;
double hScoreMultiplier = 2.5;
//
hConditions.GenerateScore(
hBullScore,
hBearScore,
hScoreMultiplier //
);
//
mBullishScore = cBullScore +
sBullScore +
mBullScore +
lBullScore +
hBullScore;
//
mBearishScore = cBearScore +
sBearScore +
mBearScore +
lBearScore +
hBearScore;
//
Add(
mBullishScore,
bullishBuffer
//
);
//
Add(
mBearishScore,
bearishBuffer
//
);
}
//
// Calculate Market Normalized Scores ...
void CalculateNormalizedScores(
double &mBullishScore,
double &mBearishScore //
)
{
//
CalculateNormalization(
mBullishScore,
mBearishScore
//
);
Add(
mBullishScore,
nBullishBuffer //
);
Add(
mBearishScore,
nBearishBuffer //
);
}
//
// Calculate Normalization Value ...
void CalculateNormalization(
double &normalBullish,
double &normalBearish //
)
{
//
normalBullish = GetNormalizedValueMethod2(
bullishBuffer,
ArraySize(bullishBuffer),
1,
-1,
0 //
);
//
normalBearish = GetNormalizedValueMethod2(
bearishBuffer,
ArraySize(bearishBuffer),
1,
-1,
0 //
);
}
//
// Calculate Market Verifications ...
void CalculateVerifications(
double &longVerifications,
double &shortVerifications //
)
{
//
// Generate Long ans Short Verifiers ...
//
// XSTR ...
//
bool isTrendBullish =
//
hConditions.isTrendBullish &&
lConditions.isTrendBullish &&
mConditions.isTrendBullish &&
sConditions.isTrendBullish &&
cConditions.isTrendBullish
//
;
//
if (isTrendBullish)
{
longVerifications++;
}
//
bool isTrendBearish =
//
hConditions.isTrendBearish &&
lConditions.isTrendBearish &&
mConditions.isTrendBearish &&
sConditions.isTrendBearish &&
cConditions.isTrendBearish
//
;
//
if (isTrendBearish)
{
shortVerifications++;
}
//
// XTD ...
//
bool isTDBullish =
//
hConditions.isTDBullish &&
lConditions.isTDBullish &&
mConditions.isTDBullish &&
sConditions.isTDBullish &&
cConditions.isTDBullish
//
;
//
if (isTDBullish)
{
longVerifications++;
}
//
bool isTDBearish =
//
hConditions.isTDBearish &&
lConditions.isTDBearish &&
mConditions.isTDBearish &&
sConditions.isTDBearish &&
cConditions.isTDBearish
//
;
//
if (isTDBearish)
{
shortVerifications++;
}
//
// XCHE ...
//
bool isCHEBullish =
//
hConditions.isCHEBullish &&
lConditions.isCHEBullish &&
mConditions.isCHEBullish &&
sConditions.isCHEBullish &&
cConditions.isCHEBullish
//
;
//
if (isCHEBullish)
{
longVerifications++;
}
//
bool isCHEBearish =
//
hConditions.isCHEBearish &&
lConditions.isCHEBearish &&
mConditions.isCHEBearish &&
sConditions.isCHEBearish &&
cConditions.isCHEBearish
//
;
//
if (isCHEBearish)
{
shortVerifications++;
}
//
// XHK ...
//
bool isHKBullish =
//
(hConditions.isHKBullish &&
lConditions.isHKBullish &&
mConditions.isHKBullish &&
sConditions.isHKBullish &&
cConditions.isHKBullish)
//
||
//
(hConditions.isSMHKBullish &&
lConditions.isSMHKBullish &&
mConditions.isSMHKBullish &&
sConditions.isSMHKBullish &&
cConditions.isSMHKBullish)
//
;
//
if (isHKBullish)
{
longVerifications++;
}
//
bool isHKBearish =
//
(hConditions.isHKBearish &&
lConditions.isHKBearish &&
mConditions.isHKBearish &&
sConditions.isHKBearish &&
cConditions.isHKBearish)
//
||
//
(hConditions.isSMHKBearish &&
lConditions.isSMHKBearish &&
mConditions.isSMHKBearish &&
sConditions.isSMHKBearish &&
cConditions.isSMHKBearish)
//
;
//
if (isHKBearish)
{
shortVerifications++;
}
//
// XMC ...
//
bool isMCBullish =
//
(hConditions.isMCFastOverSlow &&
lConditions.isMCFastOverSlow &&
mConditions.isMCFastOverSlow &&
sConditions.isMCFastOverSlow &&
cConditions.isMCFastOverSlow)
//
||
//
(hConditions.isMCFastOverVerifier &&
lConditions.isMCFastOverVerifier &&
mConditions.isMCFastOverVerifier &&
sConditions.isMCFastOverVerifier &&
cConditions.isMCFastOverVerifier)
//
;
//
if (isMCBullish)
{
longVerifications++;
}
//
bool isMCBearish =
//
(hConditions.isMCFastUnderSlow &&
lConditions.isMCFastUnderSlow &&
mConditions.isMCFastUnderSlow &&
sConditions.isMCFastUnderSlow &&
cConditions.isMCFastUnderSlow)
//
||
//
(hConditions.isMCFastUnderVerifier &&
lConditions.isMCFastUnderVerifier &&
mConditions.isMCFastUnderVerifier &&
sConditions.isMCFastUnderVerifier &&
cConditions.isMCFastUnderVerifier)
//
;
//
if (isMCBearish)
{
shortVerifications++;
}
//
// XMRB ...
//
bool isMRBBullish =
//
(hConditions.isMRBFastOverSlow &&
lConditions.isMRBFastOverSlow &&
mConditions.isMRBFastOverSlow &&
sConditions.isMRBFastOverSlow &&
cConditions.isMRBFastOverSlow)
//
||
//
(hConditions.isMRBFastOverVerifier &&
lConditions.isMRBFastOverVerifier &&
mConditions.isMRBFastOverVerifier &&
sConditions.isMRBFastOverVerifier &&
cConditions.isMRBFastOverVerifier)
//
||
//
(hConditions.isMRBSlowOverVerifier &&
lConditions.isMRBSlowOverVerifier &&
mConditions.isMRBSlowOverVerifier &&
sConditions.isMRBSlowOverVerifier &&
cConditions.isMRBSlowOverVerifier)
//
;
//
if (isMRBBullish)
{
longVerifications++;
}
//
bool isMRBBearish =
//
(hConditions.isMRBFastUnderSlow &&
lConditions.isMRBFastUnderSlow &&
mConditions.isMRBFastUnderSlow &&
sConditions.isMRBFastUnderSlow &&
cConditions.isMRBFastUnderSlow)
//
||
//
(hConditions.isMRBFastUnderVerifier &&
lConditions.isMRBFastUnderVerifier &&
mConditions.isMRBFastUnderVerifier &&
sConditions.isMRBFastUnderVerifier &&
cConditions.isMRBFastUnderVerifier)
//
||
//
(hConditions.isMRBSlowUnderVerifier &&
lConditions.isMRBSlowUnderVerifier &&
mConditions.isMRBSlowUnderVerifier &&
sConditions.isMRBSlowUnderVerifier &&
cConditions.isMRBSlowUnderVerifier)
//
;
//
if (isMRBBearish)
{
shortVerifications++;
}
//
// X786 ...
//
bool isX786CLong =
//
(cConditions.isSMHKSwitchedToBullish &&
(cConditions.isTDBullish &&
cConditions.isCHEBullish &&
cConditions.isTrendBullish))
//
||
//
(cConditions.isTDSwitchedToBullish &&
(cConditions.isSMHKBullish &&
cConditions.isCHEBullish &&
cConditions.isTrendBullish))
//
||
//
(cConditions.isCHESwitchedToBullish &&
(cConditions.isTDBullish &&
cConditions.isSMHKBullish &&
cConditions.isTrendBullish))
//
||
//
(cConditions.isTrendSwitchedToBullish &&
(cConditions.isTDBullish &&
cConditions.isCHEBullish &&
cConditions.isSMHKBullish))
//
;
//
if (isX786CLong)
{
xLongVerifications++;
}
//
bool isX786SLong =
//
(sConditions.isSMHKSwitchedToBullish &&
(sConditions.isTDBullish &&
sConditions.isCHEBullish &&
sConditions.isTrendBullish))
//
||
//
(sConditions.isTDSwitchedToBullish &&
(sConditions.isSMHKBullish &&
sConditions.isCHEBullish &&
sConditions.isTrendBullish))
//
||
//
(sConditions.isCHESwitchedToBullish &&
(sConditions.isTDBullish &&
sConditions.isSMHKBullish &&
sConditions.isTrendBullish))
//
||
//
(sConditions.isTrendSwitchedToBullish &&
(sConditions.isTDBullish &&
sConditions.isCHEBullish &&
sConditions.isSMHKBullish))
//
;
//
if (isX786SLong)
{
xLongVerifications++;
}
//
bool isX786MLong =
//
(mConditions.isSMHKSwitchedToBullish &&
(mConditions.isTDBullish &&
mConditions.isCHEBullish &&
mConditions.isTrendBullish))
//
||
//
(mConditions.isTDSwitchedToBullish &&
(mConditions.isSMHKBullish &&
mConditions.isCHEBullish &&
mConditions.isTrendBullish))
//
||
//
(mConditions.isCHESwitchedToBullish &&
(mConditions.isTDBullish &&
mConditions.isSMHKBullish &&
mConditions.isTrendBullish))
//
||
//
(mConditions.isTrendSwitchedToBullish &&
(mConditions.isTDBullish &&
mConditions.isCHEBullish &&
mConditions.isSMHKBullish))
//
;
//
if (isX786MLong)
{
xLongVerifications++;
}
//
bool isX786LLong =
//
(lConditions.isSMHKSwitchedToBullish &&
(lConditions.isTDBullish &&
lConditions.isCHEBullish &&
lConditions.isTrendBullish))
//
||
//
(lConditions.isTDSwitchedToBullish &&
(lConditions.isSMHKBullish &&
lConditions.isCHEBullish &&
lConditions.isTrendBullish))
//
||
//
(lConditions.isCHESwitchedToBullish &&
(lConditions.isTDBullish &&
lConditions.isSMHKBullish &&
lConditions.isTrendBullish))
//
||
//
(lConditions.isTrendSwitchedToBullish &&
(lConditions.isTDBullish &&
lConditions.isCHEBullish &&
lConditions.isSMHKBullish))
//
;
//
if (isX786LLong)
{
xLongVerifications++;
}
//
bool isX786HLong =
//
(hConditions.isSMHKSwitchedToBullish &&
(hConditions.isTDBullish &&
hConditions.isCHEBullish &&
hConditions.isTrendBullish))
//
||
//
(hConditions.isTDSwitchedToBullish &&
(hConditions.isSMHKBullish &&
hConditions.isCHEBullish &&
hConditions.isTrendBullish))
//
||
//
(hConditions.isCHESwitchedToBullish &&
(hConditions.isTDBullish &&
hConditions.isSMHKBullish &&
hConditions.isTrendBullish))
//
||
//
(hConditions.isTrendSwitchedToBullish &&
(hConditions.isTDBullish &&
hConditions.isCHEBullish &&
hConditions.isSMHKBullish))
//
;
//
if (isX786HLong)
{
xLongVerifications++;
}
//
bool isX786CShort =
//
(cConditions.isSMHKSwitchedToBearish &&
(cConditions.isTDBearish &&
cConditions.isCHEBearish &&
cConditions.isTrendBearish))
//
||
//
(cConditions.isTDSwitchedToBearish &&
(cConditions.isSMHKBearish &&
cConditions.isCHEBearish &&
cConditions.isTrendBearish))
//
||
//
(cConditions.isCHESwitchedToBearish &&
(cConditions.isTDBearish &&
cConditions.isSMHKBearish &&
cConditions.isTrendBearish))
//
||
//
(cConditions.isTrendSwitchedToBearish &&
(cConditions.isTDBearish &&
cConditions.isCHEBearish &&
cConditions.isSMHKBearish))
//
;
//
if (isX786CShort)
{
xShortVerifications++;
}
//
bool isX786SShort =
//
(sConditions.isSMHKSwitchedToBearish &&
(sConditions.isTDBearish &&
sConditions.isCHEBearish &&
sConditions.isTrendBearish))
//
||
//
(sConditions.isTDSwitchedToBearish &&
(sConditions.isSMHKBearish &&
sConditions.isCHEBearish &&
sConditions.isTrendBearish))
//
||
//
(sConditions.isCHESwitchedToBearish &&
(sConditions.isTDBearish &&
sConditions.isSMHKBearish &&
sConditions.isTrendBearish))
//
||
//
(sConditions.isTrendSwitchedToBearish &&
(sConditions.isTDBearish &&
sConditions.isCHEBearish &&
sConditions.isSMHKBearish))
//
;
//
if (isX786SShort)
{
xShortVerifications++;
}
//
bool isX786MShort =
//
(mConditions.isSMHKSwitchedToBearish &&
(mConditions.isTDBearish &&
mConditions.isCHEBearish &&
mConditions.isTrendBearish))
//
||
//
(mConditions.isTDSwitchedToBearish &&
(mConditions.isSMHKBearish &&
mConditions.isCHEBearish &&
mConditions.isTrendBearish))
//
||
//
(mConditions.isCHESwitchedToBearish &&
(mConditions.isTDBearish &&
mConditions.isSMHKBearish &&
mConditions.isTrendBearish))
//
||
//
(mConditions.isTrendSwitchedToBearish &&
(mConditions.isTDBearish &&
mConditions.isCHEBearish &&
mConditions.isSMHKBearish))
//
;
//
if (isX786MShort)
{
xShortVerifications++;
}
//
bool isX786LShort =
//
(lConditions.isSMHKSwitchedToBearish &&
(lConditions.isTDBearish &&
lConditions.isCHEBearish &&
lConditions.isTrendBearish))
//
||
//
(lConditions.isTDSwitchedToBearish &&
(lConditions.isSMHKBearish &&
lConditions.isCHEBearish &&
lConditions.isTrendBearish))
//
||
//
(lConditions.isCHESwitchedToBearish &&
(lConditions.isTDBearish &&
lConditions.isSMHKBearish &&
lConditions.isTrendBearish))
//
||
//
(lConditions.isTrendSwitchedToBearish &&
(lConditions.isTDBearish &&
lConditions.isCHEBearish &&
lConditions.isSMHKBearish))
//
;
//
if (isX786LShort)
{
xShortVerifications++;
}
//
bool isX786HShort =
//
(hConditions.isSMHKSwitchedToBearish &&
(hConditions.isTDBearish &&
hConditions.isCHEBearish &&
hConditions.isTrendBearish))
//
||
//
(hConditions.isTDSwitchedToBearish &&
(hConditions.isSMHKBearish &&
hConditions.isCHEBearish &&
hConditions.isTrendBearish))
//
||
//
(hConditions.isCHESwitchedToBearish &&
(hConditions.isTDBearish &&
hConditions.isSMHKBearish &&
hConditions.isTrendBearish))
//
||
//
(hConditions.isTrendSwitchedToBearish &&
(hConditions.isTDBearish &&
hConditions.isCHEBearish &&
hConditions.isSMHKBearish))
//
;
//
if (isX786HShort)
{
xShortVerifications++;
}
//
Add(
xLongVerifications,
longVFBuffer //
);
//
Add(
xShortVerifications,
shortVFBuffer //
);
}
//
void HandleSignalDetection()
{
//
// Define Using Variables ...
int zIndex = 0;
int cIndex = zIndex + 1;
int pIndex = cIndex + 1;
//
// Define Global Variables ...
double r2r = 1.5;
double tpPrice = 0;
double slPrice = 0;
bool hasLong = false;
bool hasShort = false;
bool hasSignal = false;
//
double scroeDetectionMultiplier = 2;
double verificationDetectionCount = 4;
//
if (ArraySize(bullishBuffer) < 3)
{
return;
}
//
// Set Arrays As Series ...
ArraySetAsSeries(bullishBuffer, true);
ArraySetAsSeries(bearishBuffer, true);
ArraySetAsSeries(longVFBuffer, true);
ArraySetAsSeries(shortVFBuffer, true);
//
bool isZScoreBullish = bullishBuffer[zIndex] >
bearishBuffer[zIndex] * scroeDetectionMultiplier;
//
bool isCScoreBullish = bullishBuffer[cIndex] >
bearishBuffer[cIndex] * scroeDetectionMultiplier;
//
bool isPScoreBullish = bullishBuffer[pIndex] >
bearishBuffer[pIndex] * scroeDetectionMultiplier;
//
bool isZScoreBearish = bearishBuffer[zIndex] >
bullishBuffer[zIndex] * scroeDetectionMultiplier;
//
bool isCScoreBearish = bearishBuffer[cIndex] >
bullishBuffer[cIndex] * scroeDetectionMultiplier;
//
bool isPScoreBearish = bearishBuffer[pIndex] >
bullishBuffer[pIndex] * scroeDetectionMultiplier;
//
bool isZLongVerificationsBullish = longVFBuffer[zIndex] > longVFBuffer[cIndex] &&
longVFBuffer[zIndex] > shortVFBuffer[cIndex] &&
longVFBuffer[cIndex] >= verificationDetectionCount;
//
bool isCLongVerificationsBullish = longVFBuffer[cIndex] > longVFBuffer[pIndex] &&
longVFBuffer[cIndex] > shortVFBuffer[pIndex] &&
longVFBuffer[pIndex] >= verificationDetectionCount;
//
bool isZShortVerificationsBearish = shortVFBuffer[zIndex] > shortVFBuffer[cIndex] &&
shortVFBuffer[zIndex] > longVFBuffer[cIndex] &&
shortVFBuffer[cIndex] >= verificationDetectionCount;
//
bool isCShortVerificationsBearish = shortVFBuffer[cIndex] > shortVFBuffer[pIndex] &&
shortVFBuffer[cIndex] > longVFBuffer[pIndex] &&
shortVFBuffer[pIndex] >= verificationDetectionCount;
//
bool lookingLong =
//
isZScoreBullish
//
||
//
(isZLongVerificationsBullish &&
!isCLongVerificationsBullish)
//
;
//
bool lookingShort =
//
isZScoreBearish
//
||
//
(isZShortVerificationsBearish &&
!isCShortVerificationsBearish)
//
;
//
if (lookingLong)
{
//
bool cHasX786 = cMarket.HasX786LongConditions();
bool sHasX786 = sMarket.HasX786LongConditions();
bool mHasX786 = mMarket.HasX786LongConditions();
bool lHasX786 = lMarket.HasX786LongConditions();
bool hHasX786 = hMarket.HasX786LongConditions();
//
double cMarketSL = cMarket.don.GetLowerH(cIndex);
double sMarketSL = sMarket.don.GetLowerH(cIndex);
double mMarketSL = mMarket.don.GetLowerH(cIndex);
double lMarketSL = lMarket.don.GetLowerH(cIndex);
double hMarketSL = hMarket.don.GetLowerH(cIndex);
//
bool condition1 =
//
((cHasX786 &&
sHasX786 &&
mHasX786)
//
||
//
(cHasX786 &&
mHasX786 &&
lHasX786))
//
;
//
bool condition2 =
//
((sHasX786 &&
mHasX786 &&
lHasX786)
//
||
//
(sHasX786 &&
lHasX786 &&
hHasX786))
//
;
//
bool condition3 =
//
((mHasX786 &&
lHasX786 &&
hHasX786)
//
||
//
(mHasX786 &&
hHasX786 &&
sHasX786))
//
;
//
bool condition4 =
//
(lHasX786 &&
hHasX786 &&
mHasX786)
//
;
//
bool condition5 = (isZLongVerificationsBullish &&
!isCLongVerificationsBullish);
//
if (condition1)
{
//
double sls[] = {
cMarketSL,
sMarketSL,
mMarketSL //
};
//
slPrice = GetAverage(sls);
}
else if (condition2)
{
//
double sls[] = {
sMarketSL,
mMarketSL,
lMarketSL //
};
//
slPrice = GetAverage(sls);
}
else if (condition3)
{
//
double sls[] = {
mMarketSL,
lMarketSL,
hMarketSL //
};
//
slPrice = GetAverage(sls);
}
else if (condition4)
{
//
double sls[] = {
lMarketSL,
hMarketSL //
};
//
slPrice = GetAverage(sls);
}
else if (condition5)
{
slPrice = sMarketSL;
}
//
hasLong =
//
condition1
//
||
//
condition2
//
||
//
condition3
//
||
//
condition4
//
||
//
condition5
//
;
}
else if (lookingShort)
{
//
bool cHasX786 = cMarket.HasX786ShortConditions();
bool sHasX786 = sMarket.HasX786ShortConditions();
bool mHasX786 = mMarket.HasX786ShortConditions();
bool lHasX786 = lMarket.HasX786ShortConditions();
bool hHasX786 = hMarket.HasX786ShortConditions();
//
double cMarketSL = cMarket.don.GetUpperL(cIndex);
double sMarketSL = sMarket.don.GetUpperL(cIndex);
double mMarketSL = mMarket.don.GetUpperL(cIndex);
double lMarketSL = lMarket.don.GetUpperL(cIndex);
double hMarketSL = hMarket.don.GetUpperL(cIndex);
//
bool condition1 =
//
((cHasX786 &&
sHasX786)
//
||
//
(cHasX786 &&
mHasX786))
//
;
//
bool condition2 =
//
((sHasX786 &&
mHasX786)
//
||
//
(sHasX786 &&
lHasX786))
//
;
//
bool condition3 =
//
((mHasX786 &&
lHasX786)
//
||
//
(mHasX786 &&
hHasX786))
//
;
//
bool condition4 =
//
(lHasX786 &&
hHasX786)
//
;
//
bool condition5 = (isZShortVerificationsBearish &&
!isCShortVerificationsBearish);
//
if (condition1)
{
//
double sls[] = {
cMarketSL,
sMarketSL,
mMarketSL //
};
//
slPrice = GetAverage(sls);
}
else if (condition2)
{
//
double sls[] = {
sMarketSL,
mMarketSL,
lMarketSL //
};
//
slPrice = GetAverage(sls);
}
else if (condition3)
{
//
double sls[] = {
mMarketSL,
lMarketSL,
hMarketSL //
};
//
slPrice = GetAverage(sls);
}
else if (condition4)
{
//
double sls[] = {
lMarketSL,
hMarketSL //
};
//
slPrice = GetAverage(sls);
}
else if (condition5)
{
slPrice = sMarketSL;
}
//
hasShort =
//
condition1
//
||
//
condition2
//
||
//
condition3
//
||
//
condition4
//
||
//
condition5
//
;
// //
// XPivot pivot;
// pivot.pivot = pivotPrice;
// //
// DrawPivot(
// pivot,
// clrOrange //
// );
}
//
// Set Arrays As Series ...
ArraySetAsSeries(bullishBuffer, false);
ArraySetAsSeries(bearishBuffer, false);
ArraySetAsSeries(longVFBuffer, false);
ArraySetAsSeries(shortVFBuffer, false);
//
// Handle Signal Generating ...
hasSignal = hasLong || hasShort;
if (!hasSignal)
{
return;
}
//
// Generate Signal ...
//
ENUM_POSITION_TYPE mType =
hasLong
? POSITION_TYPE_BUY
: POSITION_TYPE_SELL;
//
double mEntry = GetEntry(
xSampleEASymbol,
mType //
);
//
double mSL = 0;
double mTP = 0;
CalculateTPSL(
mSL,
mTP,
mType,
mEntry,
r2r,
slPrice //
);
//
if (mTP == 0 && mSL == 0)
{
Print("Zero");
}
//
lastBullishPivot =
hasLong
? slPrice
: lastBullishPivot;
lastBearishPivot =
hasShort
? slPrice
: lastBearishPivot;
//
XSignal signal;
bool isPrepared = signal.Prepare(
xSampleEASymbol,
"X92",
xSampleEAPeriod,
mType,
X_ORDER_MODE_MARKET,
mEntry,
0.01,
mSL,
mTP //
);
//
if (isPrepared)
{
//
AddRef(
signal,
mSignals //
);
}
}
//
// Execute Signals ...
void HandleSignalExecution()
{
//
int signalsCount = ArraySize(mSignals);
if (!IsValidSize(signalsCount))
{
return;
}
//
XSignal tmp[];
Copy(
mSignals,
tmp //
);
//
for (int i = 0; i < signalsCount; i++)
{
//
XSignal iSignal = tmp[i];
//
if (!iSignal.IsValid())
{
continue;
}
//
// TODO:
// Validate Signal Execution based on lastTradeOn ...
//
ENUM_X_SIGNAL_EXECUTION_RESULT state;
bool isExecuted = mTrader.ExecuteSignal(
iSignal,
state //
);
if (isExecuted)
{
//
// Remove Signal from mSignals ...
//
bool isRemoved = ArrayRemove(
mSignals,
i,
1 //
);
//
if (isRemoved)
{
//
string message = "Signal Executed Successfully ...";
//
mAlert.Alert(message);
//
long chartID = ChartID();
//
iSignal.Draw(
chartID //
);
//
// Remove Drawn Pivot ...
RemovePivotDraw(lastPeak);
RemovePivotDraw(lastVale);
RemovePivotDraw(lastSupport);
RemovePivotDraw(lastResistance);
//
lastPeak = 0;
lastVale = 0;
lastSupport = 0;
lastResistance = 0;
mPivotTracker.Clean();
//
// Check Last Trade ON ...
lastTradeOn =
//
TimeCurrent()
//
;
//
// Detect All In Profit Positions and Trail their Stops ...
XPosition positions[];
int positionsCount = mTrader.GetInProfitPositions(
positions,
iSignal.symbol,
iSignal.provider,
iSignal.period,
iSignal.type //
);
if (IsValidSize(positionsCount))
{
//
// Trial Stops ...
for (int i = 0; i < positionsCount; i++)
{
//
XPosition iPosition = positions[i];
if (iPosition.ticket == iSignal.positionId)
{
continue;
}
//
string comment = "Modify SL ...";
//
bool isLong = IsLong(iPosition.type);
double slDiff = PointToPrice(30, iPosition.symbol);
double sl = iSignal.entry + (isLong
? -1 * slDiff
: slDiff);
sl = MathMin(sl, iPosition.sl);
// XPivot slPivot;
// slPivot.pivot = sl;
// DrawPivot(
// slPivot,
// clrAqua //
// );
//
bool isModified = mTrader.Modify(
iPosition.ticket,
sl,
iPosition.tp,
comment //
);
//
if (isModified)
{
mAlert.Alert(comment);
}
}
}
}
}
}
}
//
void HandleDrawPivots()
{
//
// return;
bool hasChild = mPivotTracker.HasChild();
if (!hasChild)
{
return;
}
//
int pivotsCount = mPivotTracker.Count();
//
for (int i = 0; i < pivotsCount; i++)
{
//
XPivot iPivot = mPivotTracker.GetPivot(i);
if (!iPivot.IsValid())
{
continue;
}
//
DrawPivot(iPivot);
}
}
//
void RemovePivotDraw(double pivot)
{
//
if (pivot <= 0)
{
return;
}
//
long chartID = ChartID();
//
string pPrefix = "P_" +
ToString(pivot);
//
if (!IsDrawExists(pPrefix))
{
return;
}
//
RemoveDraw(pPrefix);
}
//
void DrawPivot(
XPivot &pivot,
color crl = clrLime //
)
{
//
if (!pivot.IsValid())
{
return;
}
//
long chartID = ChartID();
datetime time1 = iTime(
xSampleEASymbol,
xSampleEAPeriod,
2 //
);
datetime time = iTime(
xSampleEASymbol,
xSampleEAPeriod,
0 //
);
//
bool currentPrice = MathMax(xSampleEATick.ask, xSampleEATick.bid);
//
string pPrefix = "P_" +
ToString(pivot.pivot);
//
// RemoveDraws(pPrefix);
//
if (IsDrawExists(pPrefix))
{
return;
}
//
DrawTrendLine(
chartID,
pPrefix,
0,
time1,
pivot.pivot,
time,
pivot.pivot,
crl,
STYLE_SOLID,
2,
false,
false,
true //
);
}
//
void ConfigureCurrentCycles()
{
//
// XHK ...
hkInputs.drawHikenAshi = false;
hkInputs.drawSmoothedHikenAshi = false;
//
// XMRB ...
mrbInputs.showFastMa = false;
mrbInputs.showSlowMa = false;
mrbInputs.showRibbon = false;
//
// XMC ...
mcInputs.showFastMa = false;
mcInputs.showSlowMa = false;
mcInputs.showVerifierMa = false;
//
// XICH ...
ichInputs.showKumo = false;
ichInputs.showKijunSen = false;
ichInputs.showTenkanSen = false;
ichInputs.showChikouSpan = false;
ichInputs.showSenkouSpanA = false;
ichInputs.showSenkouSpanB = false;
ichInputs.showKijunSenPlus = false;
ichInputs.showKijunSenNegative = false;
//
// XCHE ...
cheInputs.showLongExit1Line = true;
cheInputs.showShortExit1Line = true;
cheInputs.showLongExit2Line = true;
cheInputs.showShortExit2Line = true;
//
// XPV ...
pvInputs.showPeaksAndVales = true;
pvInputs.showLevels = false;
pvInputs.showConsolidations = false;
pvInputs.showFibo1Levels = false;
pvInputs.showFibo2Levels = false;
pvInputs.showFibo3Levels = false;
pvInputs.showFibo4Levels = false;
pvInputs.showFibo5Levels = false;
//
// XZG ...
zgInputs.showZigZag = false;
zgInputs.showPeaksAndVales = true;
//
// XDON ...
donInputs.showOpen = false;
donInputs.showHigh = false;
donInputs.showClose = false;
donInputs.showLow = false;
//
// XSTR ...
strInputs.showTrends = false;
strInputs.fillTrends = false;
}
//
void ConfigureShortCycles() {}
//
void ConfigureMediumCycles() {}
//
void ConfigureLongCycles() {}
//
void ConfigureHindCycles() {}
//
// Add Score ...
void AddBullishScroe()
{
//
}
//