start developing X5 provider and testing it ...
This commit is contained in:
@@ -84,6 +84,7 @@ class X5ProviderInputs : public XSCBaseProviderInpts
|
|||||||
public:
|
public:
|
||||||
//
|
//
|
||||||
// Props ...
|
// Props ...
|
||||||
|
XTSInputs tsInputs;
|
||||||
XTMInputs tmInputs;
|
XTMInputs tmInputs;
|
||||||
XLHInputs lhInputs;
|
XLHInputs lhInputs;
|
||||||
XTDInputs tdInputs;
|
XTDInputs tdInputs;
|
||||||
@@ -107,6 +108,11 @@ public:
|
|||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
result = tsInputs.IsValid();
|
||||||
|
if (!result) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
result = ctInputs.IsValid();
|
result = ctInputs.IsValid();
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
@@ -188,6 +194,7 @@ public:
|
|||||||
virtual void Clean()
|
virtual void Clean()
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
|
tsInputs.Clean();
|
||||||
ctInputs.Clean();
|
ctInputs.Clean();
|
||||||
ccInputs.Clean();
|
ccInputs.Clean();
|
||||||
tmInputs.Clean();
|
tmInputs.Clean();
|
||||||
@@ -206,6 +213,7 @@ public:
|
|||||||
virtual void Default()
|
virtual void Default()
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
|
tsInputs.Default();
|
||||||
ctInputs.Default();
|
ctInputs.Default();
|
||||||
ccInputs.Default();
|
ccInputs.Default();
|
||||||
tmInputs.Default();
|
tmInputs.Default();
|
||||||
@@ -230,6 +238,7 @@ public:
|
|||||||
result = MathMax(lhInputs.Max(), tmInputs.Max());
|
result = MathMax(lhInputs.Max(), tmInputs.Max());
|
||||||
|
|
||||||
//
|
//
|
||||||
|
result = MathMax(result, tsInputs.Max());
|
||||||
result = MathMax(result, ctInputs.Max());
|
result = MathMax(result, ctInputs.Max());
|
||||||
result = MathMax(result, ccInputs.Max());
|
result = MathMax(result, ccInputs.Max());
|
||||||
result = MathMax(result, tdInputs.Max());
|
result = MathMax(result, tdInputs.Max());
|
||||||
@@ -286,7 +295,7 @@ class X5MarketConditions : public XSCBaseProviderMarketConditions
|
|||||||
|
|
||||||
//
|
//
|
||||||
// X5 Provider Class ...
|
// X5 Provider Class ...
|
||||||
class XSC5Provider : public XSCBaseProvider
|
class XSCX5Provider : public XSCBaseProvider
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Public ...
|
// Public ...
|
||||||
@@ -298,6 +307,8 @@ public:
|
|||||||
XSCXTDHelper *tdHelper;
|
XSCXTDHelper *tdHelper;
|
||||||
XSCXLHHelper *lhHelper;
|
XSCXLHHelper *lhHelper;
|
||||||
XSCXTMHelper *tmHelper;
|
XSCXTMHelper *tmHelper;
|
||||||
|
XSCXCCHelper *ccHelper;
|
||||||
|
XSCXCTHelper *ctHelper;
|
||||||
XSCXOBDHelper *obdHelper;
|
XSCXOBDHelper *obdHelper;
|
||||||
XSCXRSIHelper *rsiHelper;
|
XSCXRSIHelper *rsiHelper;
|
||||||
XSCXAMAHelper *amaHelper;
|
XSCXAMAHelper *amaHelper;
|
||||||
@@ -306,12 +317,24 @@ public:
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Constructor ...
|
// Constructor ...
|
||||||
XSC5Provider(
|
XSCX5Provider(
|
||||||
string symbol, // Trading Symbol
|
string symbol, // Trading Symbol
|
||||||
ENUM_TIMEFRAMES period // Trading PEriod
|
ENUM_TIMEFRAMES period // Trading PEriod
|
||||||
) : XSCBaseProvider(symbol, period)
|
) : XSCBaseProvider(symbol, period)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
|
tsHelper = new XSCXTSHelper();
|
||||||
|
fiHelper = new XSCXFIHelper();
|
||||||
|
tdHelper = new XSCXTDHelper();
|
||||||
|
lhHelper = new XSCXLHHelper();
|
||||||
|
tmHelper = new XSCXTMHelper();
|
||||||
|
ccHelper = new XSCXCCHelper();
|
||||||
|
ctHelper = new XSCXCTHelper();
|
||||||
|
obdHelper = new XSCXOBDHelper();
|
||||||
|
rsiHelper = new XSCXRSIHelper();
|
||||||
|
amaHelper = new XSCXAMAHelper();
|
||||||
|
chmaHelper = new XSCXCHMAHelper();
|
||||||
|
chlhHelper = new XSCXCHLHHelper();
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -338,6 +361,162 @@ public:
|
|||||||
//
|
//
|
||||||
mInputs = inputs;
|
mInputs = inputs;
|
||||||
|
|
||||||
|
//
|
||||||
|
string mSymbol = GetSymbol();
|
||||||
|
ENUM_TIMEFRAMES mPeriod = GetPeriod();
|
||||||
|
|
||||||
|
//
|
||||||
|
result = tsHelper
|
||||||
|
.Init(
|
||||||
|
mSymbol,
|
||||||
|
mPeriod,
|
||||||
|
mInputs.tsInputs
|
||||||
|
//
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = fiHelper
|
||||||
|
.Init(
|
||||||
|
mSymbol,
|
||||||
|
mPeriod,
|
||||||
|
mInputs.fiInputs
|
||||||
|
//
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = tdHelper
|
||||||
|
.Init(
|
||||||
|
mSymbol,
|
||||||
|
mPeriod,
|
||||||
|
mInputs.tdInputs
|
||||||
|
//
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = lhHelper
|
||||||
|
.Init(
|
||||||
|
mSymbol,
|
||||||
|
mPeriod,
|
||||||
|
mInputs.lhInputs
|
||||||
|
//
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = tmHelper
|
||||||
|
.Init(
|
||||||
|
mSymbol,
|
||||||
|
mPeriod,
|
||||||
|
mInputs.tmInputs
|
||||||
|
//
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ccHelper
|
||||||
|
.Init(
|
||||||
|
mSymbol,
|
||||||
|
mPeriod,
|
||||||
|
mInputs.ccInputs
|
||||||
|
//
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ctHelper
|
||||||
|
.Init(
|
||||||
|
mSymbol,
|
||||||
|
mPeriod,
|
||||||
|
mInputs.ctInputs
|
||||||
|
//
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = obdHelper
|
||||||
|
.Init(
|
||||||
|
mSymbol,
|
||||||
|
mPeriod,
|
||||||
|
mInputs.obdInputs
|
||||||
|
//
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = rsiHelper
|
||||||
|
.Init(
|
||||||
|
mSymbol,
|
||||||
|
mPeriod,
|
||||||
|
mInputs.rsiInputs
|
||||||
|
//
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = amaHelper
|
||||||
|
.Init(
|
||||||
|
mSymbol,
|
||||||
|
mPeriod,
|
||||||
|
mInputs.amaInputs
|
||||||
|
//
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = chmaHelper
|
||||||
|
.Init(
|
||||||
|
mSymbol,
|
||||||
|
mPeriod,
|
||||||
|
mInputs.chmaInputs
|
||||||
|
//
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = chlhHelper
|
||||||
|
.Init(
|
||||||
|
mSymbol,
|
||||||
|
mPeriod,
|
||||||
|
mInputs.chlhInputs
|
||||||
|
//
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -346,6 +525,19 @@ public:
|
|||||||
// DeInit all Requirements ...
|
// DeInit all Requirements ...
|
||||||
virtual void DeInit()
|
virtual void DeInit()
|
||||||
{
|
{
|
||||||
|
//
|
||||||
|
delete tsHelper;
|
||||||
|
delete fiHelper;
|
||||||
|
delete tdHelper;
|
||||||
|
delete lhHelper;
|
||||||
|
delete tmHelper;
|
||||||
|
delete ccHelper;
|
||||||
|
delete ctHelper;
|
||||||
|
delete obdHelper;
|
||||||
|
delete rsiHelper;
|
||||||
|
delete amaHelper;
|
||||||
|
delete chmaHelper;
|
||||||
|
delete chlhHelper;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -383,7 +575,7 @@ public:
|
|||||||
// Protected ...
|
// Protected ...
|
||||||
protected:
|
protected:
|
||||||
//
|
//
|
||||||
// X5MarketConditions mInputs;
|
X5ProviderInputs mInputs;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Private ...
|
// Private ...
|
||||||
|
|||||||
@@ -133,31 +133,15 @@ public:
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Init all Requirements ...
|
// Init all Requirements ...
|
||||||
virtual bool Init(XSCBaseProviderInpts &inputs)
|
virtual bool Init(XSCBaseProviderInpts &inputs);
|
||||||
{
|
|
||||||
//
|
|
||||||
mInputs = inputs;
|
|
||||||
|
|
||||||
//
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Get Inputs ...
|
// Get Inputs ...
|
||||||
virtual void GetInputs(XSCBaseProviderInpts &inputs)
|
virtual void GetInputs(XSCBaseProviderInpts &inputs);
|
||||||
{
|
|
||||||
inputs = mInputs;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Set Inputs and Reinitial ...
|
// Set Inputs and Reinitial ...
|
||||||
virtual bool setInputs(XSCBaseProviderInpts &inputs)
|
virtual bool setInputs(XSCBaseProviderInpts &inputs);
|
||||||
{
|
|
||||||
return Init(inputs);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// DeInit all Requirements ...
|
// DeInit all Requirements ...
|
||||||
@@ -218,7 +202,6 @@ protected:
|
|||||||
|
|
||||||
//
|
//
|
||||||
XMarketCycle mCycle;
|
XMarketCycle mCycle;
|
||||||
XSCBaseProviderInpts mInputs;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
bool mWaitsUntilNewBar;
|
bool mWaitsUntilNewBar;
|
||||||
|
|||||||
@@ -1,280 +0,0 @@
|
|||||||
///////////////////////////////////////////////////////
|
|
||||||
//
|
|
||||||
// SaherElm IT Center MQL5 Helper Class Library
|
|
||||||
// ----------------------------------------------
|
|
||||||
// Name: XSCXZGHelper
|
|
||||||
// Description: provides all Indicator
|
|
||||||
// Helper requirements ...
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// 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 "../Classes/x-saherelm.xhelper.class.mq5"
|
|
||||||
|
|
||||||
//
|
|
||||||
// Definitions ...
|
|
||||||
|
|
||||||
//
|
|
||||||
enum ENUM_XZG_BUFFERS
|
|
||||||
{
|
|
||||||
XZG_MAIN_LINE = 0
|
|
||||||
};
|
|
||||||
|
|
||||||
//
|
|
||||||
// Input Models ...
|
|
||||||
struct XZGInputs
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Props ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Constructor(s) ...
|
|
||||||
XZGInputs()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
Clean();
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Tools ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Clean ...
|
|
||||||
void Clean()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Default ...
|
|
||||||
void Default()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Validate ...
|
|
||||||
bool IsValid()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
result =
|
|
||||||
//
|
|
||||||
false
|
|
||||||
//
|
|
||||||
;
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Retrieve MAx Length ...
|
|
||||||
int Max()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
int result = 0;
|
|
||||||
|
|
||||||
//
|
|
||||||
result = MathMax(0, 0);
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
//
|
|
||||||
// Class ...
|
|
||||||
class XSCXZGHelper : public XSCBaseHelper
|
|
||||||
{
|
|
||||||
//
|
|
||||||
// Public ...
|
|
||||||
public:
|
|
||||||
//
|
|
||||||
// Props ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Constructors ...
|
|
||||||
XSCXZGHelper() : XSCBaseHelper(_Symbol, _Period)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Deconstructor ...
|
|
||||||
~XSCXZGHelper() {}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Tools ...
|
|
||||||
bool Init(
|
|
||||||
string symbol, // Trading Symbol
|
|
||||||
ENUM_TIMEFRAMES period, // Trading Period
|
|
||||||
XZGInputs &inputs // Inputs
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
mSymbol = symbol;
|
|
||||||
mPeriod = period;
|
|
||||||
|
|
||||||
//
|
|
||||||
result = inputs.IsValid();
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
mInputs = inputs;
|
|
||||||
|
|
||||||
//
|
|
||||||
// ArraySetAsSeries(mainBuffer, true);
|
|
||||||
// mHandler = iCustom(
|
|
||||||
// mSymbol,
|
|
||||||
// mPeriod,
|
|
||||||
// "x-saherelm.xsslc",
|
|
||||||
// //
|
|
||||||
// // Inputs ...
|
|
||||||
// //
|
|
||||||
// );
|
|
||||||
// result = mHandler != INVALID_HANDLE;
|
|
||||||
// if (!result)
|
|
||||||
// {
|
|
||||||
// return result;
|
|
||||||
// }
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Inputs ...
|
|
||||||
|
|
||||||
//
|
|
||||||
XZGInputs GetInputs()
|
|
||||||
{
|
|
||||||
return mInputs;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
bool SetInputs(
|
|
||||||
XZGInputs &inputs // Configs
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
return Init(
|
|
||||||
mSymbol,
|
|
||||||
mPeriod,
|
|
||||||
inputs
|
|
||||||
//
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Buffers ...
|
|
||||||
|
|
||||||
// //
|
|
||||||
// double GetMain(
|
|
||||||
// int barIndex // Bar Index
|
|
||||||
// )
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// if (barIndex < 0)
|
|
||||||
// {
|
|
||||||
// barIndex = 0;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //
|
|
||||||
// Calculate();
|
|
||||||
|
|
||||||
// //
|
|
||||||
// int count = ArraySize(mainBuffer);
|
|
||||||
// if (barIndex >= count)
|
|
||||||
// {
|
|
||||||
// barIndex = count - 1;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //
|
|
||||||
// return mainBuffer[barIndex];
|
|
||||||
// }
|
|
||||||
|
|
||||||
// //
|
|
||||||
// // Copy Required Items ...
|
|
||||||
// int CopyMain(
|
|
||||||
// int start, // Start
|
|
||||||
// int count, // Number of Items for read
|
|
||||||
// double &buffer[], // Dest Buffer
|
|
||||||
// bool forceClean = true // Force To Clean buffer
|
|
||||||
// )
|
|
||||||
// {
|
|
||||||
// //
|
|
||||||
// // Update Calculations ...
|
|
||||||
// Calculate();
|
|
||||||
|
|
||||||
// //
|
|
||||||
// // Copy Items ...
|
|
||||||
// return Copy(
|
|
||||||
// start,
|
|
||||||
// count,
|
|
||||||
// mainBuffer,
|
|
||||||
// buffer,
|
|
||||||
// forceClean
|
|
||||||
// //
|
|
||||||
// );
|
|
||||||
// }
|
|
||||||
|
|
||||||
//
|
|
||||||
// Protected ...
|
|
||||||
protected:
|
|
||||||
//
|
|
||||||
// Private ...
|
|
||||||
private:
|
|
||||||
//
|
|
||||||
// Props ...
|
|
||||||
XZGInputs mInputs; // Inputs ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Buffers ...
|
|
||||||
// double mainBuffer[];
|
|
||||||
|
|
||||||
//
|
|
||||||
// Tools ...
|
|
||||||
|
|
||||||
//
|
|
||||||
// Calculate Values Until Now ...
|
|
||||||
void Calculate()
|
|
||||||
{
|
|
||||||
//
|
|
||||||
int totalBars = CountBars();
|
|
||||||
|
|
||||||
// //
|
|
||||||
// // Main Buffer ...
|
|
||||||
// CopyBuffer(
|
|
||||||
// mHandler,
|
|
||||||
// XZG_MAIN_LINE,
|
|
||||||
// 0,
|
|
||||||
// totalBars,
|
|
||||||
// mainBuffer
|
|
||||||
// //
|
|
||||||
// );
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Tools ...
|
|
||||||
@@ -0,0 +1,133 @@
|
|||||||
|
///////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// SaherElm IT Center X5EA MQL5 Expert Advisor
|
||||||
|
// -------------------------------------------------
|
||||||
|
// Name: X5EA
|
||||||
|
// 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 X5EA"
|
||||||
|
#property strict
|
||||||
|
|
||||||
|
//
|
||||||
|
#define ShortName "X5EA"
|
||||||
|
|
||||||
|
//
|
||||||
|
#include "../Libraries/x-saherelm.log.lib.mq5"
|
||||||
|
#include "../Libraries/x-saherelm.draw.lib.mq5"
|
||||||
|
#include "../Libraries/x-saherelm.common.lib.mq5"
|
||||||
|
#include "../Classes/x-saherelm.xtrade.class.mq5"
|
||||||
|
|
||||||
|
//
|
||||||
|
// Inputs ...
|
||||||
|
long x5EAMagicNumber = 78692110; // Magic Number
|
||||||
|
int x5EASlippage = 10; // Slippgae
|
||||||
|
|
||||||
|
//
|
||||||
|
double x5EAVolume = 0.01;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Vars ...
|
||||||
|
string x5EASymbol;
|
||||||
|
ENUM_TIMEFRAMES x5EAPeriod;
|
||||||
|
|
||||||
|
//
|
||||||
|
MqlTick x5EATick;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Event Handlers ...
|
||||||
|
//
|
||||||
|
// Initialization ...
|
||||||
|
int OnInit()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
if (x5EASymbol == NULL || StringLen(x5EASymbol) <= 0)
|
||||||
|
{
|
||||||
|
x5EASymbol = _Symbol;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (x5EAPeriod == NULL)
|
||||||
|
{
|
||||||
|
x5EAPeriod = _Period;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Inputs ...
|
||||||
|
if (!X5EAValidateInputs())
|
||||||
|
{
|
||||||
|
return INIT_PARAMETERS_INCORRECT;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
logTag = ShortName;
|
||||||
|
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 X5EA Providers ...
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// On Tick Handler ...
|
||||||
|
void OnTick()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Reading Tick ...
|
||||||
|
if (!SymbolInfoTick(x5EASymbol, x5EATick))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Custom Functions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Variables nd Inputs ...
|
||||||
|
bool X5EAValidateInputs()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
//
|
||||||
|
x5EASlippage > 0 &&
|
||||||
|
x5EAMagicNumber > 0
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
@@ -0,0 +1,159 @@
|
|||||||
|
///////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// SaherElm IT Center X5EA MQL5 Expert Advisor
|
||||||
|
// -------------------------------------------------
|
||||||
|
// Name: X5EA
|
||||||
|
// 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 X5EA"
|
||||||
|
#property strict
|
||||||
|
|
||||||
|
//
|
||||||
|
#define ShortName "X5EA"
|
||||||
|
|
||||||
|
//
|
||||||
|
#include "../Libraries/x-saherelm.log.lib.mq5"
|
||||||
|
#include "../Libraries/x-saherelm.draw.lib.mq5"
|
||||||
|
#include "../Libraries/x-saherelm.common.lib.mq5"
|
||||||
|
#include "../Classes/x-saherelm.xtrade.class.mq5"
|
||||||
|
#include "../Classes/x-saherelm.x5.provider.class.mq5"
|
||||||
|
|
||||||
|
//
|
||||||
|
// Inputs ...
|
||||||
|
long x5EAMagicNumber = 78692110; // Magic Number
|
||||||
|
int x5EASlippage = 10; // Slippgae
|
||||||
|
|
||||||
|
//
|
||||||
|
double x5EAVolume = 0.01;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Vars ...
|
||||||
|
string x5EASymbol;
|
||||||
|
ENUM_TIMEFRAMES x5EAPeriod;
|
||||||
|
|
||||||
|
//
|
||||||
|
MqlTick x5EATick;
|
||||||
|
|
||||||
|
//
|
||||||
|
// X5Provider ...
|
||||||
|
X5ProviderInputs x5Inputs;
|
||||||
|
XSCX5Provider *x5Provider;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Event Handlers ...
|
||||||
|
//
|
||||||
|
// Initialization ...
|
||||||
|
int OnInit()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
if (x5EASymbol == NULL || StringLen(x5EASymbol) <= 0)
|
||||||
|
{
|
||||||
|
x5EASymbol = _Symbol;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (x5EAPeriod == NULL)
|
||||||
|
{
|
||||||
|
x5EAPeriod = _Period;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Inputs ...
|
||||||
|
if (!X5EAValidateInputs())
|
||||||
|
{
|
||||||
|
return INIT_PARAMETERS_INCORRECT;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
logTag = ShortName;
|
||||||
|
drawPrefix = ShortName;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Set Default and Validate X5Provider Inputs ...
|
||||||
|
x5Inputs.Default();
|
||||||
|
if (!x5Inputs.IsValid())
|
||||||
|
{
|
||||||
|
return INIT_PARAMETERS_INCORRECT;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Init X5Provider Class ...
|
||||||
|
x5Provider = new XSCX5Provider(
|
||||||
|
x5EASymbol,
|
||||||
|
x5EAPeriod
|
||||||
|
//
|
||||||
|
);
|
||||||
|
if (!x5Provider.Init(x5Inputs))
|
||||||
|
{
|
||||||
|
return INIT_PARAMETERS_INCORRECT;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// 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 X5EA Providers ...
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// On Tick Handler ...
|
||||||
|
void OnTick()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Reading Tick ...
|
||||||
|
if (!SymbolInfoTick(x5EASymbol, x5EATick))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Custom Functions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Variables nd Inputs ...
|
||||||
|
bool X5EAValidateInputs()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
//
|
||||||
|
x5EASlippage > 0 &&
|
||||||
|
x5EAMagicNumber > 0
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
@@ -38,7 +38,7 @@ enum ENUM_XTS_BUFFERS
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Input Models ...
|
// Input Models ...
|
||||||
struct XXTSInputs
|
struct XTSInputs
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Props ...
|
// Props ...
|
||||||
@@ -63,7 +63,7 @@ struct XXTSInputs
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Constructor(s) ...
|
// Constructor(s) ...
|
||||||
XXTSInputs()
|
XTSInputs()
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
Clean();
|
Clean();
|
||||||
@@ -180,7 +180,7 @@ public:
|
|||||||
bool Init(
|
bool Init(
|
||||||
string symbol, // Trading Symbol
|
string symbol, // Trading Symbol
|
||||||
ENUM_TIMEFRAMES period, // Trading Period
|
ENUM_TIMEFRAMES period, // Trading Period
|
||||||
XXTSInputs &inputs // Inputs
|
XTSInputs &inputs // Inputs
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -251,14 +251,14 @@ public:
|
|||||||
// Inputs ...
|
// Inputs ...
|
||||||
|
|
||||||
//
|
//
|
||||||
XXTSInputs GetInputs()
|
XTSInputs GetInputs()
|
||||||
{
|
{
|
||||||
return mInputs;
|
return mInputs;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
bool SetInputs(
|
bool SetInputs(
|
||||||
XXTSInputs &inputs // Configs
|
XTSInputs &inputs // Configs
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -481,7 +481,7 @@ protected:
|
|||||||
private:
|
private:
|
||||||
//
|
//
|
||||||
// Props ...
|
// Props ...
|
||||||
XXTSInputs mInputs; // Inputs ...
|
XTSInputs mInputs; // Inputs ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// Buffers ...
|
// Buffers ...
|
||||||
|
|||||||
Reference in New Issue
Block a user