add MQL5Test Workspace Content as BKP Solution ...
This commit is contained in:
@@ -0,0 +1,443 @@
|
||||
///////////////////////////////////////////////////////
|
||||
//
|
||||
// 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 ...
|
||||
//
|
||||
Reference in New Issue
Block a user