Files
xMQL5/MQLTestWorkspace/Classes/x-saherelm.x121.xea.class.mq5
T

444 lines
14 KiB
Plaintext

///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Class Library
// ----------------------------------------------
// Name: XSCX121EA
// Description: an Expert Class which
// used 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
//
// START Definitions ...
//
//
// END Definitions ...
//
//
// START Import and Inclused requirements ...
//
//
// Includes ...
#include "../Classes/x-saherelm.xea.class.mq5"
#include "../Libraries/x-saherelm.x121.draw.lib.mq5"
#include "../Classes/x-saherelm.x121.provider.class.mq5"
//
// END Import and Inclused requirements ...
//
//
// START Overrides ...
//
//
// END Overrides ...
//
//
// an Expert Advisor Class by X121Provider ...
class XSCX121EA : public XSCBaseEA
{
//
// Public ...
public:
//
// Props ...
XSCX121Provider *mProvider;
//
// Constructor ...
void XSCX121EA(
string symbol, // Trading Symbol
ENUM_TIMEFRAMES period, // Trading Time Frame
ulong magic, // Magic Number
int slippage, // Slippgae
OnStopLoss onStopLossTriggered = NULL, // On StopLoass Triggered Event Handler
OnTakeProfit onTakeProfitTriggered = NULL, // On TakeProfit Triggered Event Handler
OnDealsChanged onDealsChangedHandler = NULL, // On Deals Changed Event Handler
OnOrdersChanged onOrdersChangedHandler = NULL, // On Orders Changed Event Handler
OnPositionsChanged onPositionsChangedHandler = NULL, // On Positions Changed Event Handler
OnTradeStateChanged onTradeStateChangedHandler = NULL, // On Trade State Changed Event Handler
TOnSignalConditions onSignalConditions = NULL // On SignalConditions Event Handler
) : XSCBaseEA(symbol,
period,
magic,
slippage,
onStopLossTriggered,
onTakeProfitTriggered,
onDealsChangedHandler,
onOrdersChangedHandler,
onPositionsChangedHandler,
onTradeStateChangedHandler)
{
//
mOnSignalConditions = onSignalConditions;
//
InitProvider();
}
//
// DeConstructor ...
void ~XSCX121EA()
{
delete mProvider;
}
//
// START Inheritance Functions ...
//
//
void PrepareTag()
{
mTag = "X121EA:" + mSymbol + "," + ToString(mPeriod) + (string)mMagic;
}
//
bool CheckGuard(XGuard &guards[])
{
return mProvider.GuardCheck(guards);
}
//
bool SignalCheck(XSignal &signals[])
{
//
// Detect Pivot Points ...
int foundedPivots = mProvider.CountPivots();
int reuiredPivots = mProvider.GetMinPivots();
if (foundedPivots < reuiredPivots)
{
//
mProvider.ProccessPivotPoints();
//
LogMessage("Founding Pivots: " + ToString(foundedPivots) + "/" + ToString(reuiredPivots));
return false;
}
//
X121MarketConditions conditions;
bool result = mProvider.ProcessTick(conditions);
//
if (result)
{
//
// TODO: Here we Do all Signal Preparations such as TP/SL Calculations
// or Support and Resistance usage or Volume Calculations ...
// then pass prepared Signal to Execution ...
//
ulong mTicket = MathRand() * 100000;
//
DrawSignal(
mTicket,
conditions.signal);
//
DrawSupportResistance(
0,
conditions.supportResistances,
conditions.signal.providers[0]);
//
// IGNORE SIGNAL EXECUTTION ...
return false;
//
Add(
conditions.signal,
signals);
}
//
return result;
}
//
// END Inheritance Functions ...
//
//
// START Provided Actions ...
//
//
// END Provided Actions ...
//
//
// Protected ...
protected:
//
// Private ...
private:
//
// Props ...
X121ProviderInputs mProviderConfig;
TOnSignalConditions mOnSignalConditions;
//
// Actions ...
//
// Prepare Default Configurations for X121Provider Setup ...
void PrepareProviderConfig()
{
//
// XCT ...
// Candle Timing ...
mProviderConfig.xctConfig.clr = clrBlueViolet;
mProviderConfig.xctConfig.corner = CORNER_RIGHT_UPPER;
mProviderConfig.xctConfig.showCandleTime = true;
//
// XCC ...
// Candle Styling ...
mProviderConfig.xccConfig.upColor = clrLime;
mProviderConfig.xccConfig.downColor = clrRed;
mProviderConfig.xccConfig.lineColor = clrLime;
mProviderConfig.xccConfig.bearishColor = clrRed;
mProviderConfig.xccConfig.bullishColor = clrLime;
mProviderConfig.xccConfig.volumesColor = clrGreen;
mProviderConfig.xccConfig.showCandles = true;
//
// XHK ...
// HikenAshi Candle Representing ...
mProviderConfig.xhkConfig.drawCandleLines = false;
//
// XTM ...
// Trend Magic ...
mProviderConfig.xtmConfig.length = 35;
mProviderConfig.xtmConfig.shift = 0;
mProviderConfig.xtmConfig.method = MODE_SMA;
mProviderConfig.xtmConfig.appliedTo = PRICE_LOW;
mProviderConfig.xtmConfig.showLine = false;
//
// XPV ...
// Peaks And Vales ...
mProviderConfig.xpvConfig.shortLength = 9;
mProviderConfig.xpvConfig.mediumLength = 17;
mProviderConfig.xpvConfig.longLength = 26;
mProviderConfig.xpvConfig.hindLength = 35;
mProviderConfig.xpvConfig.fiboLevel1 = 0.382;
mProviderConfig.xpvConfig.fiboLevel2 = 0.5;
mProviderConfig.xpvConfig.fiboLevel3 = 0.618;
mProviderConfig.xpvConfig.hhMode = MODE_HIGH;
mProviderConfig.xpvConfig.llMode = MODE_LOW;
mProviderConfig.xpvConfig.showPeaksAndVales = false;
mProviderConfig.xpvConfig.showLevels = false;
mProviderConfig.xpvConfig.showFibo1Levels = false;
mProviderConfig.xpvConfig.showFibo2Levels = false;
mProviderConfig.xpvConfig.showFibo3Levels = false;
//
// XAMA ...
// Adaptive Moving Average ...
mProviderConfig.xamaConfig.length = 52;
mProviderConfig.xamaConfig.fastEMA = 2;
mProviderConfig.xamaConfig.slowEMA = 30;
mProviderConfig.xamaConfig.maShift = 0;
mProviderConfig.xamaConfig.appliedTo = PRICE_LOW;
mProviderConfig.xamaConfig.showLine = false;
//
// XMRB ...
// Moving Average Ribbon ...
mProviderConfig.xmrbConfig.fast1Length = 3;
mProviderConfig.xmrbConfig.slow1Length = 5;
mProviderConfig.xmrbConfig.fast2Length = 8;
mProviderConfig.xmrbConfig.slow2Length = 13;
mProviderConfig.xmrbConfig.fast3Length = 21;
mProviderConfig.xmrbConfig.slow3Length = 34;
mProviderConfig.xmrbConfig.fast4Length = 55;
mProviderConfig.xmrbConfig.slow4Length = 89;
mProviderConfig.xmrbConfig.fast5Length = 144;
mProviderConfig.xmrbConfig.slow5Length = 233;
mProviderConfig.xmrbConfig.ribbonMode = MODE_EMA;
mProviderConfig.xmrbConfig.ribbonAppliedTo = PRICE_CLOSE;
mProviderConfig.xmrbConfig.showFastMa = false;
mProviderConfig.xmrbConfig.showSlowMa = false;
mProviderConfig.xmrbConfig.showRibbon = false;
//
// XCHE ...
// Chandelier Exit Points ...
mProviderConfig.xcheConfig.length = 35;
mProviderConfig.xcheConfig.loopback = 26;
mProviderConfig.xcheConfig.multiplier1 = 3;
mProviderConfig.xcheConfig.multiplier2 = 3.5;
mProviderConfig.xcheConfig.upAppliedTo = PRICE_HIGH;
mProviderConfig.xcheConfig.downAppliedTo = PRICE_LOW;
mProviderConfig.xcheConfig.showLongExit1Line = false;
mProviderConfig.xcheConfig.showShortExit1Line = false;
mProviderConfig.xcheConfig.showLongExit2Line = false;
mProviderConfig.xcheConfig.showShortExit2Line = false;
//
// XICH ...
// Ichimopku Kinko Hyo ...
mProviderConfig.xichConfig.tenkanSenLength = 9;
mProviderConfig.xichConfig.tenkanSenMode = X_XICH_HH_LL_MODE;
mProviderConfig.xichConfig.kijunSenLength = 26;
mProviderConfig.xichConfig.kijunSenMode = X_XICH_HH_LL_MODE;
mProviderConfig.xichConfig.senkouSpanBLength = 52;
mProviderConfig.xichConfig.senkouSpanBMode = X_XICH_HH_LL_MODE;
mProviderConfig.xichConfig.chikuoSpanAppliedTo = PRICE_CLOSE;
mProviderConfig.xichConfig.showTenkanSen = false;
mProviderConfig.xichConfig.showKijunSen = false;
mProviderConfig.xichConfig.showKijunSenPlus = false;
mProviderConfig.xichConfig.showKijunSenNegative = false;
mProviderConfig.xichConfig.showChikouSpan = false;
mProviderConfig.xichConfig.showSenkouSpanA = false;
mProviderConfig.xichConfig.showSenkouSpanB = false;
mProviderConfig.xichConfig.showKumo = false;
mProviderConfig.xichConfig.shiftKumo = true;
//
// XTRND ...
// Trend Detector ...
mProviderConfig.xtrndConfig.cycleLength = 2;
mProviderConfig.xtrndConfig.numberOfVerifications = 2;
mProviderConfig.xtrndConfig.hhMode = MODE_HIGH;
mProviderConfig.xtrndConfig.llMode = MODE_LOW;
mProviderConfig.xtrndConfig.l1Method = X_PERIOD_AUTO;
mProviderConfig.xtrndConfig.l1Period = NULL;
mProviderConfig.xtrndConfig.l2Method = X_PERIOD_AUTO;
mProviderConfig.xtrndConfig.l2Period = NULL;
mProviderConfig.xtrndConfig.l3Method = X_PERIOD_AUTO;
mProviderConfig.xtrndConfig.l3Period = NULL;
mProviderConfig.xtrndConfig.showConsolidations = false;
mProviderConfig.xtrndConfig.showTrend = false;
mProviderConfig.xtrndConfig.showL1Trend = false;
mProviderConfig.xtrndConfig.showL2Trend = false;
mProviderConfig.xtrndConfig.showL3Trend = false;
//
// XSSLC ...
// SSL Channel ...
mProviderConfig.xsslcConfig.length = 36;
mProviderConfig.xsslcConfig.method = MODE_SMA;
mProviderConfig.xsslcConfig.upAppliedTo = PRICE_HIGH;
mProviderConfig.xsslcConfig.downAppliedTo = PRICE_LOW;
mProviderConfig.xsslcConfig.showUp = false;
mProviderConfig.xsslcConfig.showDown = false;
//
// XHULL ...
// Hull Trend Detection Channel ...
mProviderConfig.xhullConfig.length = 72;
mProviderConfig.xhullConfig.divisor = 2;
mProviderConfig.xhullConfig.upAppliedTo = PRICE_HIGH;
mProviderConfig.xhullConfig.downAppliedTo = PRICE_LOW;
mProviderConfig.xhullConfig.showUpZone = false;
mProviderConfig.xhullConfig.showDownZone = false;
//
// Default Configs For Different States ...
bool showPV = true;
bool showHK = true;
bool showCHE = true;
bool showTRND = true;
bool simpleIchi = true;
//
if (showHK)
{
//
// Hiken Ashi ...
mProviderConfig.xccConfig.showCandles = false;
mProviderConfig.xhkConfig.drawCandles = true;
}
if (showPV)
{
//
// Peaks and Vales ...
mProviderConfig.xpvConfig.showFibo1Levels = true;
mProviderConfig.xpvConfig.showFibo2Levels = true;
mProviderConfig.xpvConfig.showFibo3Levels = true;
mProviderConfig.xpvConfig.showPeaksAndVales = true;
}
if (simpleIchi)
{
//
// Simple Ichimoku Kinko Hyo ...
mProviderConfig.xichConfig.showKijunSen = true;
mProviderConfig.xichConfig.showTenkanSen = true;
mProviderConfig.xichConfig.showSenkouSpanA = true;
mProviderConfig.xichConfig.showSenkouSpanB = true;
}
if (showCHE)
{
//
// Chandelier Exit ...
mProviderConfig.xcheConfig.showLongExit1Line = true;
mProviderConfig.xcheConfig.showLongExit2Line = true;
mProviderConfig.xcheConfig.showShortExit1Line = true;
mProviderConfig.xcheConfig.showShortExit2Line = true;
}
if (showTRND)
{
//
// Show Trend ...
mProviderConfig.xtrndConfig.showL1Trend = true;
mProviderConfig.xtrndConfig.showL2Trend = true;
mProviderConfig.xtrndConfig.showL3Trend = true;
}
}
//
// Initialize X121Provider ...
void InitProvider()
{
//
PrepareProviderConfig();
//
mProvider = new XSCX121Provider(
mSymbol,
mPeriod);
//
if (mOnSignalConditions != NULL)
{
//
// Attach Event Handlers ...
mProvider.AddOnSignalConditionEventHandler(mOnSignalConditions);
}
//
// Initialize Provider ...
mProvider.SetConfig(mProviderConfig);
}
};
//
// START Usefull Functions ...
//
//
// END Usefull Functions ...
//