444 lines
14 KiB
Plaintext
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 ...
|
|
//
|