last works ...
This commit is contained in:
File diff suppressed because it is too large
Load Diff
@@ -0,0 +1,329 @@
|
|||||||
|
///////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// SaherElm IT Center MQL5 Class Library
|
||||||
|
// ----------------------------------------------
|
||||||
|
// Name: XSCX121EA
|
||||||
|
// Description: provides all X121 EA requirements ...
|
||||||
|
// - X5 Provider;
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// 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.xea.class.mq5"
|
||||||
|
#include "../Classes/x-saherelm.x121.provider.class.mq5"
|
||||||
|
|
||||||
|
//
|
||||||
|
// Define On Signal Event Handler Type Specified for X5 ...
|
||||||
|
typedef void (*TX121OnSignal)(X121ProviderDescriptor &descriptor);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Class Definition ...
|
||||||
|
|
||||||
|
class XSCX121EA : public XSCBaseEA
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Public ...
|
||||||
|
public:
|
||||||
|
//
|
||||||
|
// Props ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Constructors ...
|
||||||
|
XSCX121EA(
|
||||||
|
//
|
||||||
|
// XTrade Class Requirements ...
|
||||||
|
int slippage, // Specify Slippage
|
||||||
|
ulong magicNumber, // Specify Magic Number
|
||||||
|
int manageInterval, // Manager Check Intervals Seconds
|
||||||
|
double maxAllowedSpread, // Max Allowed Spred for Opening Trades
|
||||||
|
int maxAllowedPositions, // Max Allowed Positions
|
||||||
|
double maxAllowedDrawdownFactor, // Max Allowed Drawdown Factor
|
||||||
|
//
|
||||||
|
// Position Management ...
|
||||||
|
bool allowLong = true, // Allow Long Trades
|
||||||
|
bool allowShort = true, // Allow Short Trades
|
||||||
|
double minProfitPerTrade = 0, // Min Profit Per Trade based On Volume Factor (Hedge)
|
||||||
|
double minProfitPerVolumeFactor = 0, // Min Volume Factor for Calculating Profit (Hedge)
|
||||||
|
//
|
||||||
|
// Event Handlers ...
|
||||||
|
TOnStopLoss onStopLossTriggered = NULL, // On StopLoass Triggered Event Handler
|
||||||
|
TOnTakeProfit onTakeProfitTriggered = NULL, // On TakeProfit Triggered Event Handler
|
||||||
|
TOnDealsChanged onDealsChangedHandler = NULL, // On Deals Changed Event Handler
|
||||||
|
TOnOrdersChanged onOrdersChangedHandler = NULL, // On Orders Changed Event Handler
|
||||||
|
TOnPositionsChanged onPositionsChangedHandler = NULL, // On Positions Changed Event Handler
|
||||||
|
TOnTradeStateChanged onTradeStateChangedHandler = NULL, // On Trade State Changed Event Handler
|
||||||
|
//
|
||||||
|
TOnSignal onSignalHandler = NULL, // On Signal Event Handler
|
||||||
|
//
|
||||||
|
// Log Handler ...
|
||||||
|
bool enableAlerts = true, // Enable Alerts
|
||||||
|
bool logAlerts = true, // Log Alerts
|
||||||
|
bool terminalAlerts = false, // Terminal Alerts
|
||||||
|
bool mailAlerts = false, // Mail Alerts
|
||||||
|
bool pushAlerts = false // Push Alerts
|
||||||
|
) : XSCBaseEA(slippage,
|
||||||
|
magicNumber,
|
||||||
|
manageInterval,
|
||||||
|
maxAllowedSpread,
|
||||||
|
maxAllowedPositions,
|
||||||
|
maxAllowedDrawdownFactor,
|
||||||
|
allowLong,
|
||||||
|
allowShort,
|
||||||
|
minProfitPerTrade,
|
||||||
|
minProfitPerVolumeFactor,
|
||||||
|
onStopLossTriggered,
|
||||||
|
onTakeProfitTriggered,
|
||||||
|
onDealsChangedHandler,
|
||||||
|
onOrdersChangedHandler,
|
||||||
|
onPositionsChangedHandler,
|
||||||
|
onTradeStateChangedHandler,
|
||||||
|
enableAlerts,
|
||||||
|
logAlerts,
|
||||||
|
terminalAlerts,
|
||||||
|
mailAlerts,
|
||||||
|
pushAlerts //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Deconstructor ...
|
||||||
|
~XSCX121EA() {}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Properties Getter(s) / Setter(s) ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Add X5 Specified Signal Event Handler ...
|
||||||
|
void AddOnSignalEventHandler(TX121OnSignal listener)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
listener,
|
||||||
|
mX121OnSignalEventHandlers
|
||||||
|
//
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Add Specified X5 Provider ...
|
||||||
|
bool AddProvider(X121ProviderDescriptor &descriptor)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Inputs ...
|
||||||
|
result = descriptor.Init();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
AddRef(
|
||||||
|
descriptor,
|
||||||
|
mDescriptors //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Overrides ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Customize Token ...
|
||||||
|
string GetToken() override
|
||||||
|
{
|
||||||
|
return GetSpecificToken(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
string GetTag() override
|
||||||
|
{
|
||||||
|
return this.GetToken();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
void Draw() override
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int descriptorsCount = CountDescriptors();
|
||||||
|
if (descriptorsCount <= 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
for (int i = 0; i < descriptorsCount; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
X121ProviderDescriptor iDescriptor = mDescriptors[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
iDescriptor.provider.Draw();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Provider for any Guards ...
|
||||||
|
bool CheckForGuard(XGuard &guards[]) override
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// TODO: Implement this ...
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Request Provider to Collect all
|
||||||
|
// Potentially Signals and then
|
||||||
|
// filters theme here and passed them
|
||||||
|
// for Executing ...
|
||||||
|
int RequestForSignal(
|
||||||
|
XSignal &signals[] // Holds Signals ...
|
||||||
|
) override
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = 0;
|
||||||
|
|
||||||
|
//
|
||||||
|
Clean(signals);
|
||||||
|
|
||||||
|
//
|
||||||
|
int descriptorsCount = CountDescriptors();
|
||||||
|
if (descriptorsCount <= 0)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
for (int i = 0; i < descriptorsCount; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
X121ProviderDescriptor iDescriptor = mDescriptors[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
bool iHasSignal = iDescriptor.HasSignal();
|
||||||
|
if (iHasSignal)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Here we Can double check Signals by Conditions
|
||||||
|
// for Score Base Filtering ...
|
||||||
|
|
||||||
|
//
|
||||||
|
AddRef(
|
||||||
|
iDescriptor.signal,
|
||||||
|
signals
|
||||||
|
//
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
NotifyX121OnSignalEventHandlers(iDescriptor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(signals);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Handl Management Actions ...
|
||||||
|
// if returns true, it is going to prevent for processing forward ...
|
||||||
|
bool HandleStateManagement() override
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// TODO: Implement this ...
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Request for Support Signals using Guard ...
|
||||||
|
bool RequestForSupport(
|
||||||
|
XSignal &support, // Holds Support Signal, if Provided
|
||||||
|
string provider, // Positions Provided by Specific Provider
|
||||||
|
string symbol, // Trading Symbol
|
||||||
|
ENUM_POSITION_TYPE type, // Trading Type
|
||||||
|
ENUM_TIMEFRAMES period // Specified Time Frame
|
||||||
|
) override
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// TODO: Implement this ...
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Tools ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Protected ...
|
||||||
|
protected:
|
||||||
|
//
|
||||||
|
// Tools ...
|
||||||
|
|
||||||
|
//
|
||||||
|
void NotifyX121OnSignalEventHandlers(X121ProviderDescriptor &descriptor)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int listenersCount = ArraySize(mX121OnSignalEventHandlers);
|
||||||
|
if (listenersCount <= 0)
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
for (int i = 0; i < listenersCount; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
TX121OnSignal iListener = mX121OnSignalEventHandlers[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
iListener(descriptor);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Private ...
|
||||||
|
private:
|
||||||
|
//
|
||||||
|
// Props ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Collection of Signal Event Listeners ...
|
||||||
|
TX121OnSignal mX121OnSignalEventHandlers[];
|
||||||
|
|
||||||
|
//
|
||||||
|
// a Collection of X5 Provider Descriptors ...
|
||||||
|
X121ProviderDescriptor mDescriptors[];
|
||||||
|
|
||||||
|
//
|
||||||
|
int CountDescriptors()
|
||||||
|
{
|
||||||
|
return ArraySize(mDescriptors);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Tools ...
|
||||||
|
};
|
||||||
|
|
||||||
|
//
|
||||||
|
// Tools ...
|
||||||
|
|
||||||
|
//
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -2,7 +2,7 @@
|
|||||||
//
|
//
|
||||||
// SaherElm IT Center MQL5 Class Library
|
// SaherElm IT Center MQL5 Class Library
|
||||||
// ----------------------------------------------
|
// ----------------------------------------------
|
||||||
// Name: XSCBaseX5Provider
|
// Name: XSCX5Provider
|
||||||
// Description: provides all Base Provider
|
// Description: provides all Base Provider
|
||||||
// requirements For X5 ...
|
// requirements For X5 ...
|
||||||
//
|
//
|
||||||
@@ -547,6 +547,7 @@ public:
|
|||||||
bool isXCHMALCFastCrossedUnderSlow;
|
bool isXCHMALCFastCrossedUnderSlow;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
// Tools ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// Conditions ...
|
// Conditions ...
|
||||||
@@ -1757,6 +1758,41 @@ public:
|
|||||||
//
|
//
|
||||||
string result = NULL;
|
string result = NULL;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = GenerateSummaryBody(
|
||||||
|
onlySummary,
|
||||||
|
multiplier,
|
||||||
|
separator,
|
||||||
|
ignoreFalseConditions
|
||||||
|
//
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Generating Full Result by Combining parts ...
|
||||||
|
result =
|
||||||
|
//
|
||||||
|
"[" + GetToken() + "]" + separator +
|
||||||
|
"-----------------------------" + separator +
|
||||||
|
result +
|
||||||
|
""
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
string GenerateSummaryBody(
|
||||||
|
const bool onlySummary = false, // Only Generate Conditions Summary
|
||||||
|
double multiplier = 1, // Score Multiplier
|
||||||
|
const string separator = "\n", // Separator
|
||||||
|
const bool ignoreFalseConditions = true // Ignore False Conditions
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
string result = NULL;
|
||||||
|
|
||||||
//
|
//
|
||||||
double bullScore = 0;
|
double bullScore = 0;
|
||||||
double bearScore = 0;
|
double bearScore = 0;
|
||||||
@@ -2007,8 +2043,6 @@ public:
|
|||||||
// Generating Full Result by Combining parts ...
|
// Generating Full Result by Combining parts ...
|
||||||
result =
|
result =
|
||||||
//
|
//
|
||||||
"[" + GetToken() + "]" + separator +
|
|
||||||
"-----------------------------" + separator +
|
|
||||||
commonStr +
|
commonStr +
|
||||||
(onlySummary
|
(onlySummary
|
||||||
? ""
|
? ""
|
||||||
@@ -2031,6 +2065,43 @@ public:
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
string GenerateSummary(
|
||||||
|
string provided, // Additional Info about Type, Provider and Symbol
|
||||||
|
const bool onlySummary = false, // Only Generate Conditions Summary
|
||||||
|
double multiplier = 1, // Score Multiplier
|
||||||
|
const string separator = "\n", // Separator
|
||||||
|
const bool ignoreFalseConditions = true // Ignore False Conditions
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
string result = NULL;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = GenerateSummaryBody(
|
||||||
|
onlySummary,
|
||||||
|
multiplier,
|
||||||
|
separator,
|
||||||
|
ignoreFalseConditions
|
||||||
|
//
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Generating Full Result by Combining parts ...
|
||||||
|
result =
|
||||||
|
//
|
||||||
|
"[" + GetToken() + "]" + separator +
|
||||||
|
provided + separator +
|
||||||
|
"-----------------------------" + separator +
|
||||||
|
result +
|
||||||
|
""
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// For Data Collector ...
|
// For Data Collector ...
|
||||||
string GetToken()
|
string GetToken()
|
||||||
@@ -2109,11 +2180,33 @@ public:
|
|||||||
// Properties Gettr(s) / Setter(s) ...
|
// Properties Gettr(s) / Setter(s) ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// Inheritance ...
|
// Overrides ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// DeInit all Requirements ...
|
||||||
|
void DeInit() override
|
||||||
|
{
|
||||||
|
//
|
||||||
|
delete tsHelper;
|
||||||
|
delete fiHelper;
|
||||||
|
delete tdHelper;
|
||||||
|
delete lhHelper;
|
||||||
|
delete tmHelper;
|
||||||
|
delete ccHelper;
|
||||||
|
delete ctHelper;
|
||||||
|
delete obdHelper;
|
||||||
|
delete rsiHelper;
|
||||||
|
delete amaHelper;
|
||||||
|
delete chmaHelper;
|
||||||
|
delete chlhHelper;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Functions ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// Init all Requirements ...
|
// Init all Requirements ...
|
||||||
virtual bool Init(X5ProviderInputs &inputs)
|
bool Init(X5ProviderInputs &inputs)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
bool result = false;
|
bool result = false;
|
||||||
@@ -2289,28 +2382,6 @@ public:
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
|
||||||
// DeInit all Requirements ...
|
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
// Functions ...
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Set Default Position's Type ...
|
// Set Default Position's Type ...
|
||||||
// Enable / Disable Long (Buy), Short (Sell) ...
|
// Enable / Disable Long (Buy), Short (Sell) ...
|
||||||
@@ -2783,16 +2854,59 @@ public:
|
|||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
mWaitsUntilNewBar = true;
|
// Here We Have to Prepare Signal ...
|
||||||
|
|
||||||
//
|
//
|
||||||
string mConditionsStr = mConditions.GenerateSummary(true);
|
// TODO: Make this Configurable ...
|
||||||
|
string symbol = GetSymbol();
|
||||||
|
ENUM_TIMEFRAMES period = GetPeriod();
|
||||||
|
double tpPoint = 30;
|
||||||
|
double volume = 0.01;
|
||||||
|
double tpPrice = PointToPrice(
|
||||||
|
tpPoint,
|
||||||
|
symbol //
|
||||||
|
);
|
||||||
|
ENUM_POSITION_TYPE type = hasLong
|
||||||
|
? POSITION_TYPE_BUY
|
||||||
|
: POSITION_TYPE_SELL;
|
||||||
|
ENUM_X_ORDER_MODES mode = X_ORDER_MODE_MARKET;
|
||||||
|
double entry = GetEntry(
|
||||||
|
symbol,
|
||||||
|
type //
|
||||||
|
);
|
||||||
|
double tp = hasLong
|
||||||
|
? entry + tpPrice
|
||||||
|
: entry - tpPrice;
|
||||||
|
double sl = 0;
|
||||||
|
ENUM_X_SIGNAL_MANAGING_ACTIONS action = X_SIGNAL_USE_NOTHING;
|
||||||
|
|
||||||
//
|
//
|
||||||
string providerTypeStr = GetSymbol() + ", " + provider + "(" + (hasLong ? "Long" : "Short") + ")";
|
result = mSignal.Prepare(
|
||||||
mConditionsStr = providerTypeStr + "\n" + mConditionsStr;
|
symbol,
|
||||||
mConditionsCollector.Add(mConditionsStr);
|
provider,
|
||||||
Print(mConditionsStr);
|
period,
|
||||||
|
type,
|
||||||
|
mode,
|
||||||
|
entry,
|
||||||
|
volume,
|
||||||
|
action,
|
||||||
|
sl,
|
||||||
|
tp
|
||||||
|
//
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
mWaitsUntilNewBar = true;
|
||||||
|
|
||||||
|
//
|
||||||
|
string providerTypeStr = GetSymbol() + ", " + provider + "(" + (hasLong ? "Long" : "Short") + ")";
|
||||||
|
string mConditionsStr = mConditions.GenerateSummary(providerTypeStr, true);
|
||||||
|
mConditionsCollector.Add(mConditionsStr);
|
||||||
|
Print(mConditionsStr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -95066,7 +95180,7 @@ struct X5ProviderDescriptor
|
|||||||
//
|
//
|
||||||
ENUM_X5_SIGNAL_PROVIDERS tmp[];
|
ENUM_X5_SIGNAL_PROVIDERS tmp[];
|
||||||
Copy(
|
Copy(
|
||||||
mSignallers,
|
mSignallers,
|
||||||
tmp //
|
tmp //
|
||||||
);
|
);
|
||||||
Copy(
|
Copy(
|
||||||
@@ -95171,7 +95285,8 @@ struct X5ProviderDescriptor
|
|||||||
result = provider.HasSignal(
|
result = provider.HasSignal(
|
||||||
barIndex,
|
barIndex,
|
||||||
signal,
|
signal,
|
||||||
conditions);
|
conditions //
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
|
|||||||
@@ -210,6 +210,9 @@ public:
|
|||||||
signals
|
signals
|
||||||
//
|
//
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
NotifyX5OnSignalEventHandlers(iDescriptor);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -385,6 +385,10 @@ public:
|
|||||||
// OnTick Handler ...
|
// OnTick Handler ...
|
||||||
virtual void OnTick()
|
virtual void OnTick()
|
||||||
{
|
{
|
||||||
|
//
|
||||||
|
// Draw ...
|
||||||
|
Draw();
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check Trade Events ...
|
// Check Trade Events ...
|
||||||
OnTrade();
|
OnTrade();
|
||||||
@@ -528,6 +532,10 @@ public:
|
|||||||
// TODO: Implement this ...
|
// TODO: Implement this ...
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Draw On Chart if anything is required ...
|
||||||
|
virtual void Draw() {}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check For any Guard Actions ...
|
// Check For any Guard Actions ...
|
||||||
virtual bool CheckForGuard(XGuard &guards[])
|
virtual bool CheckForGuard(XGuard &guards[])
|
||||||
@@ -628,7 +636,19 @@ public:
|
|||||||
string message = NULL;
|
string message = NULL;
|
||||||
if (executedSignalsCount == 0)
|
if (executedSignalsCount == 0)
|
||||||
{
|
{
|
||||||
|
//
|
||||||
message = "(" + ToString(filteredSignalsCount) + ") Signals Execution Failed ...";
|
message = "(" + ToString(filteredSignalsCount) + ") Signals Execution Failed ...";
|
||||||
|
|
||||||
|
//
|
||||||
|
for (int j = 0; j < ArraySize(reasons); j++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
string iReason = ToString(reasons[j]);
|
||||||
|
|
||||||
|
//
|
||||||
|
// ToString(GetSpread(filteredSignals[j].symbol)) + ","
|
||||||
|
message += "\n" + ToString(j) + ": " + iReason;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
else if (executedSignalsCount < filteredSignalsCount)
|
else if (executedSignalsCount < filteredSignalsCount)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -0,0 +1,420 @@
|
|||||||
|
///////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// SaherElm IT Center X121EA MQL5 Expert Advisor
|
||||||
|
// -------------------------------------------------
|
||||||
|
// Name: X121EA
|
||||||
|
// 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 X121EA"
|
||||||
|
#property strict
|
||||||
|
|
||||||
|
//
|
||||||
|
#define ShortName "X121EA"
|
||||||
|
|
||||||
|
//
|
||||||
|
#include "../Classes/x-saherelm.x121.xea.class.mq5"
|
||||||
|
|
||||||
|
//
|
||||||
|
// "EURUSDb,USDCHFb,USDJPYb,XAUUSDb"
|
||||||
|
|
||||||
|
//
|
||||||
|
// Inputs ...
|
||||||
|
long x121EAMagicNumber = 78692110; // Magic Number
|
||||||
|
int x121EASlippage = 10; // Slippgae
|
||||||
|
string x121EASymbols = "EURUSDb,USDCHFb"; // Symbols
|
||||||
|
//
|
||||||
|
bool x121EAAllowLong = true; // Allow Long Trades
|
||||||
|
bool x121EAAllowShort = true; // Allow Short Trades
|
||||||
|
int x121EAManageInterval = 5; // Manager Check Intervals Seconds
|
||||||
|
int x121EAMaxAllowedPositions = 15; // Max Allowed Positions
|
||||||
|
double x121EAMaxAllowedSpread = 0; // Max Allowed Spred for Opening Trades
|
||||||
|
double x121EAMinProfitPerTrade = 0; // Min Profit Per Trade based On Volume Factor (Hedge)
|
||||||
|
double x121EAMinProfitPerVolumeFactor = 0; // Min Volume Factor for Calculating Profit (Hedge)
|
||||||
|
double x121EAMaxAllowedDrawdownFactor = 0; // Max Allowed Drawdown Factor
|
||||||
|
//
|
||||||
|
double x121EAVolume = 0.01;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Vars ...
|
||||||
|
string x121EASymbol;
|
||||||
|
ENUM_TIMEFRAMES x121EAPeriod;
|
||||||
|
|
||||||
|
//
|
||||||
|
MqlTick x121EATick;
|
||||||
|
|
||||||
|
//
|
||||||
|
// X121EA ...
|
||||||
|
XSCX121EA *mX121EA;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Event Handlers ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Initialization ...
|
||||||
|
int OnInit()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
if (x121EASymbol == NULL || StringLen(x121EASymbol) <= 0)
|
||||||
|
{
|
||||||
|
x121EASymbol = _Symbol;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (x121EAPeriod == NULL)
|
||||||
|
{
|
||||||
|
x121EAPeriod = _Period;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Inputs ...
|
||||||
|
if (!X121EAValidateInputs())
|
||||||
|
{
|
||||||
|
return INIT_PARAMETERS_INCORRECT;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Initial EA ...
|
||||||
|
if (!InitialEA())
|
||||||
|
{
|
||||||
|
return INIT_PARAMETERS_INCORRECT;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// TesterHideIndicators(true);
|
||||||
|
|
||||||
|
//
|
||||||
|
// 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 X121EA Providers ...
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// On Tick Handler ...
|
||||||
|
void OnTick()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Reading Tick ...
|
||||||
|
if (!SymbolInfoTick(x121EASymbol, x121EATick))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
mX121EA.OnTick();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Custom Functions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Variables nd Inputs ...
|
||||||
|
bool X121EAValidateInputs()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
//
|
||||||
|
x121EASlippage > 0 &&
|
||||||
|
x121EAMagicNumber > 0
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Initialize Specific Providers ...
|
||||||
|
bool InitialEA()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Here We Have to Initial 4 instance of X5Provider ...
|
||||||
|
// - EURUSD/M5;
|
||||||
|
// - USDCHF/M5;
|
||||||
|
// - USDJPY/M5;
|
||||||
|
// - XAUUSD/M5;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = IsValid(x121EASymbols);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
string symbols[];
|
||||||
|
int symbolsCount = SplitContent(
|
||||||
|
symbols,
|
||||||
|
x121EASymbols);
|
||||||
|
result = symbolsCount > 0;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Define Signallers ...
|
||||||
|
ENUM_X121_SIGNAL_PROVIDERS signallers[];
|
||||||
|
GetAllX121SignalProviders(signallers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Instantiate X121EA Class ...
|
||||||
|
mX121EA = new XSCX121EA(
|
||||||
|
x121EASlippage, // Slippgae
|
||||||
|
x121EAMagicNumber, // Magic Number
|
||||||
|
x121EAManageInterval, // Manager Check Intervals Seconds
|
||||||
|
x121EAMaxAllowedSpread, // Max Allowed Spred for Opening Trades
|
||||||
|
x121EAMaxAllowedPositions, // Max Allowed Positions
|
||||||
|
x121EAMaxAllowedDrawdownFactor, // Max Allowed Drawdown Factor
|
||||||
|
x121EAAllowLong, // Allow Long Trades
|
||||||
|
x121EAAllowShort, // Allow Short Trades
|
||||||
|
x121EAMinProfitPerTrade, // Min Profit Per Trade based On Volume Factor (Hedge)
|
||||||
|
x121EAMinProfitPerVolumeFactor // Min Volume Factor for Calculating Profit (Hedge)
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Providers and Add them into mX121EA class ...
|
||||||
|
for (int i = 0; i < symbolsCount; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Requirements ...
|
||||||
|
string iSymbol = symbols[i];
|
||||||
|
ENUM_TIMEFRAMES iPeriod = PERIOD_M5;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Define Structure ...
|
||||||
|
X121ProviderDescriptor iDescriptor;
|
||||||
|
|
||||||
|
//
|
||||||
|
iDescriptor.symbol = iSymbol;
|
||||||
|
iDescriptor.period = iPeriod;
|
||||||
|
iDescriptor.allowLong = x121EAAllowLong;
|
||||||
|
iDescriptor.allowShort = x121EAAllowShort;
|
||||||
|
Copy(
|
||||||
|
signallers,
|
||||||
|
iDescriptor.signallers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Set Inputs to Default ...
|
||||||
|
iDescriptor.inputs.Default();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Input Requirements ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// XMC ...
|
||||||
|
iDescriptor.inputs.mcInputs.showFastMa = false;
|
||||||
|
iDescriptor.inputs.mcInputs.showSlowMa = false;
|
||||||
|
iDescriptor.inputs.mcInputs.showVerifierMa = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// XICH ...
|
||||||
|
iDescriptor.inputs.ichInputs.showKumo = false;
|
||||||
|
iDescriptor.inputs.ichInputs.showKijunSen = false;
|
||||||
|
iDescriptor.inputs.ichInputs.showTenkanSen = false;
|
||||||
|
iDescriptor.inputs.ichInputs.showChikouSpan = false;
|
||||||
|
iDescriptor.inputs.ichInputs.showSenkouSpanA = false;
|
||||||
|
iDescriptor.inputs.ichInputs.showSenkouSpanB = false;
|
||||||
|
iDescriptor.inputs.ichInputs.showKijunSenPlus = false;
|
||||||
|
iDescriptor.inputs.ichInputs.showKijunSenNegative = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// XSTR ...
|
||||||
|
iDescriptor.inputs.cheInputs.showLongExit1Line = false;
|
||||||
|
iDescriptor.inputs.cheInputs.showShortExit1Line = false;
|
||||||
|
iDescriptor.inputs.cheInputs.showLongExit2Line = false;
|
||||||
|
iDescriptor.inputs.cheInputs.showShortExit2Line = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// XSTR ...
|
||||||
|
iDescriptor.inputs.strInputs.showTrends = false;
|
||||||
|
iDescriptor.inputs.strInputs.fillTrends = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
iDescriptor.inputs.symbol = iSymbol;
|
||||||
|
iDescriptor.inputs.period = iPeriod;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Short MArket ...
|
||||||
|
iDescriptor.inputs.sMarketPeriod = NULL;
|
||||||
|
iDescriptor.inputs.sMarketMethod = X_PERIOD_AUTO;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Medium Market ...
|
||||||
|
iDescriptor.inputs.mMarketPeriod = NULL;
|
||||||
|
iDescriptor.inputs.mMarketMethod = X_PERIOD_AUTO;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Long Market ...
|
||||||
|
iDescriptor.inputs.lMarketPeriod = NULL;
|
||||||
|
iDescriptor.inputs.lMarketMethod = X_PERIOD_AUTO;
|
||||||
|
|
||||||
|
//
|
||||||
|
int fontSize = 12;
|
||||||
|
double fontAngel = 90;
|
||||||
|
string fontName = "Arial";
|
||||||
|
ENUM_ANCHOR_POINT fontAnchor = ANCHOR_LEFT_UPPER;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Hind Market ...
|
||||||
|
iDescriptor.inputs.hMarketPeriod = NULL;
|
||||||
|
iDescriptor.inputs.hMarketMethod = X_PERIOD_AUTO;
|
||||||
|
iDescriptor.inputs.hMarketInputs.drawLabels = true;
|
||||||
|
iDescriptor.inputs.hMarketInputs.drawCBar = true;
|
||||||
|
iDescriptor.inputs.hMarketInputs.drawPBar = true;
|
||||||
|
iDescriptor.inputs.hMarketInputs.drawCBarMid = true;
|
||||||
|
iDescriptor.inputs.hMarketInputs.drawPBarMid = true;
|
||||||
|
iDescriptor.inputs.hMarketInputs.cBarDrawSpecs.Default();
|
||||||
|
iDescriptor.inputs.hMarketInputs.pBarDrawSpecs.Default();
|
||||||
|
|
||||||
|
//
|
||||||
|
iDescriptor.inputs.hMarketInputs.cBarDrawSpecs.openStyle.Label(
|
||||||
|
"C Hind Open",
|
||||||
|
iDescriptor.inputs.hMarketInputs.cBarDrawSpecs.openStyle.clr,
|
||||||
|
fontName,
|
||||||
|
fontSize,
|
||||||
|
fontAnchor,
|
||||||
|
fontAngel //
|
||||||
|
);
|
||||||
|
iDescriptor.inputs.hMarketInputs.cBarDrawSpecs.highStyle.Label(
|
||||||
|
"C Hind High",
|
||||||
|
iDescriptor.inputs.hMarketInputs.cBarDrawSpecs.highStyle.clr,
|
||||||
|
fontName,
|
||||||
|
fontSize,
|
||||||
|
fontAnchor,
|
||||||
|
fontAngel //
|
||||||
|
);
|
||||||
|
iDescriptor.inputs.hMarketInputs.cBarDrawSpecs.closeStyle.Label(
|
||||||
|
"C Hind Close",
|
||||||
|
iDescriptor.inputs.hMarketInputs.cBarDrawSpecs.closeStyle.clr,
|
||||||
|
fontName,
|
||||||
|
fontSize,
|
||||||
|
fontAnchor,
|
||||||
|
fontAngel //
|
||||||
|
);
|
||||||
|
iDescriptor.inputs.hMarketInputs.cBarDrawSpecs.lowStyle.Label(
|
||||||
|
"C Hind Low",
|
||||||
|
iDescriptor.inputs.hMarketInputs.cBarDrawSpecs.lowStyle.clr,
|
||||||
|
fontName,
|
||||||
|
fontSize,
|
||||||
|
fontAnchor,
|
||||||
|
fontAngel //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
iDescriptor.inputs.hMarketInputs.pBarDrawSpecs.openStyle.Label(
|
||||||
|
"P Hind Open",
|
||||||
|
iDescriptor.inputs.hMarketInputs.pBarDrawSpecs.openStyle.clr,
|
||||||
|
fontName,
|
||||||
|
fontSize,
|
||||||
|
fontAnchor,
|
||||||
|
fontAngel //
|
||||||
|
);
|
||||||
|
iDescriptor.inputs.hMarketInputs.pBarDrawSpecs.highStyle.Label(
|
||||||
|
"P Hind High",
|
||||||
|
iDescriptor.inputs.hMarketInputs.pBarDrawSpecs.highStyle.clr,
|
||||||
|
fontName,
|
||||||
|
fontSize,
|
||||||
|
fontAnchor,
|
||||||
|
fontAngel //
|
||||||
|
);
|
||||||
|
iDescriptor.inputs.hMarketInputs.pBarDrawSpecs.closeStyle.Label(
|
||||||
|
"P Hind Close",
|
||||||
|
iDescriptor.inputs.hMarketInputs.pBarDrawSpecs.closeStyle.clr,
|
||||||
|
fontName,
|
||||||
|
fontSize,
|
||||||
|
fontAnchor,
|
||||||
|
fontAngel //
|
||||||
|
);
|
||||||
|
iDescriptor.inputs.hMarketInputs.pBarDrawSpecs.lowStyle.Label(
|
||||||
|
"P Hind Low",
|
||||||
|
iDescriptor.inputs.hMarketInputs.pBarDrawSpecs.lowStyle.clr,
|
||||||
|
fontName,
|
||||||
|
fontSize,
|
||||||
|
fontAnchor,
|
||||||
|
fontAngel //
|
||||||
|
);
|
||||||
|
|
||||||
|
iDescriptor.inputs.hMarketInputs.cBarMidDrawSpecs.clr = clrYellow;
|
||||||
|
iDescriptor.inputs.hMarketInputs.cBarMidDrawSpecs.Label(
|
||||||
|
"C Hind Mid",
|
||||||
|
clrYellow,
|
||||||
|
fontName,
|
||||||
|
fontSize,
|
||||||
|
fontAnchor,
|
||||||
|
fontAngel //
|
||||||
|
);
|
||||||
|
iDescriptor.inputs.hMarketInputs.pBarMidDrawSpecs.clr = clrYellow;
|
||||||
|
iDescriptor.inputs.hMarketInputs.pBarMidDrawSpecs.Label(
|
||||||
|
"P Hind Mid",
|
||||||
|
clrYellow,
|
||||||
|
fontName,
|
||||||
|
fontSize,
|
||||||
|
fontAnchor,
|
||||||
|
fontAngel //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Init Inputs ...
|
||||||
|
result = iDescriptor.inputs.Init();
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Inputs ...
|
||||||
|
bool isInputsValid = iDescriptor.inputs.IsValid();
|
||||||
|
if (!isInputsValid)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = mX121EA.AddProvider(iDescriptor);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
@@ -0,0 +1,251 @@
|
|||||||
|
///////////////////////////////////////////////////////
|
||||||
|
//
|
||||||
|
// SaherElm IT Center X5121EA MQL5 Expert Advisor
|
||||||
|
// -------------------------------------------------
|
||||||
|
// Name: X5121EA and X121EA
|
||||||
|
// 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 X5121EA"
|
||||||
|
#property strict
|
||||||
|
|
||||||
|
//
|
||||||
|
#define ShortName "X5121EA"
|
||||||
|
|
||||||
|
//
|
||||||
|
#include "../Classes/x-saherelm.x5.xea.class.mq5"
|
||||||
|
|
||||||
|
//
|
||||||
|
// "EURUSDb,USDCHFb,USDJPYb,XAUUSDb"
|
||||||
|
|
||||||
|
//
|
||||||
|
// Inputs ...
|
||||||
|
long x5EAMagicNumber = 78692110; // Magic Number
|
||||||
|
int x5EASlippage = 10; // Slippgae
|
||||||
|
string x5EASymbols = "EURUSDb,USDCHFb,USDJPYb,XAUUSDb"; // Symbols
|
||||||
|
//
|
||||||
|
bool x5EAAllowLong = true; // Allow Long Trades
|
||||||
|
bool x5EAAllowShort = true; // Allow Short Trades
|
||||||
|
int x5EAManageInterval = 5; // Manager Check Intervals Seconds
|
||||||
|
int x5EAMaxAllowedPositions = 15; // Max Allowed Positions
|
||||||
|
double x5EAMaxAllowedSpread = 0; // Max Allowed Spred for Opening Trades
|
||||||
|
double x5EAMinProfitPerTrade = 0; // Min Profit Per Trade based On Volume Factor (Hedge)
|
||||||
|
double x5EAMinProfitPerVolumeFactor = 0; // Min Volume Factor for Calculating Profit (Hedge)
|
||||||
|
double x5EAMaxAllowedDrawdownFactor = 0; // Max Allowed Drawdown Factor
|
||||||
|
//
|
||||||
|
double x5EAVolume = 0.01;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Vars ...
|
||||||
|
string x5EASymbol;
|
||||||
|
ENUM_TIMEFRAMES x5EAPeriod;
|
||||||
|
|
||||||
|
//
|
||||||
|
MqlTick x5EATick;
|
||||||
|
|
||||||
|
//
|
||||||
|
// X5121EA ...
|
||||||
|
XSCX5121EA *mX5121EA;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Event Handlers ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Initialization ...
|
||||||
|
int OnInit()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
if (x5EASymbol == NULL || StringLen(x5EASymbol) <= 0)
|
||||||
|
{
|
||||||
|
x5EASymbol = _Symbol;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (x5EAPeriod == NULL)
|
||||||
|
{
|
||||||
|
x5EAPeriod = _Period;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Inputs ...
|
||||||
|
if (!X5121EAValidateInputs())
|
||||||
|
{
|
||||||
|
return INIT_PARAMETERS_INCORRECT;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Initial EA ...
|
||||||
|
if (!InitialX5EA())
|
||||||
|
{
|
||||||
|
return INIT_PARAMETERS_INCORRECT;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
TesterHideIndicators(true);
|
||||||
|
|
||||||
|
//
|
||||||
|
// 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 X5121EA Providers ...
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// On Tick Handler ...
|
||||||
|
void OnTick()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Reading Tick ...
|
||||||
|
if (!SymbolInfoTick(x5EASymbol, x5EATick))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
mX5121EA.OnTick();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Custom Functions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Variables nd Inputs ...
|
||||||
|
bool X5121EAValidateInputs()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
//
|
||||||
|
x5EASlippage > 0 &&
|
||||||
|
x5EAMagicNumber > 0
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Initialize Specific Providers ...
|
||||||
|
bool InitialX5EA()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Here We Have to Initial 4 instance of X5Provider ...
|
||||||
|
// - EURUSD/M5;
|
||||||
|
// - USDCHF/M5;
|
||||||
|
// - USDJPY/M5;
|
||||||
|
// - XAUUSD/M5;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = IsValid(x5EASymbols);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
string symbols[];
|
||||||
|
int symbolsCount = SplitContent(
|
||||||
|
symbols,
|
||||||
|
x5EASymbols);
|
||||||
|
result = symbolsCount > 0;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Define Signallers ...
|
||||||
|
ENUM_X5_SIGNAL_PROVIDERS signallers[];
|
||||||
|
GetAllX5SignalProviders(signallers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Instantiate X5121EA Class ...
|
||||||
|
mX5121EA = new XSCX5121EA(
|
||||||
|
x5EASlippage, // Slippgae
|
||||||
|
x5EAMagicNumber, // Magic Number
|
||||||
|
x5EAManageInterval, // Manager Check Intervals Seconds
|
||||||
|
x5EAMaxAllowedSpread, // Max Allowed Spred for Opening Trades
|
||||||
|
x5EAMaxAllowedPositions, // Max Allowed Positions
|
||||||
|
x5EAMaxAllowedDrawdownFactor, // Max Allowed Drawdown Factor
|
||||||
|
x5EAAllowLong, // Allow Long Trades
|
||||||
|
x5EAAllowShort, // Allow Short Trades
|
||||||
|
x5EAMinProfitPerTrade, // Min Profit Per Trade based On Volume Factor (Hedge)
|
||||||
|
x5EAMinProfitPerVolumeFactor // Min Volume Factor for Calculating Profit (Hedge)
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Prepare Providers and Add them into mX5121EA class ...
|
||||||
|
for (int i = 0; i < symbolsCount; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Define Structure ...
|
||||||
|
X5ProviderDescriptor iDescriptor;
|
||||||
|
|
||||||
|
//
|
||||||
|
iDescriptor.symbol = symbols[i];
|
||||||
|
iDescriptor.period = PERIOD_M5;
|
||||||
|
iDescriptor.allowLong = x5EAAllowLong;
|
||||||
|
iDescriptor.allowShort = x5EAAllowShort;
|
||||||
|
Copy(
|
||||||
|
signallers,
|
||||||
|
iDescriptor.signallers);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Set Inputs to Default ...
|
||||||
|
iDescriptor.inputs.Default();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate Inputs ...
|
||||||
|
bool isInputsValid = iDescriptor.inputs.IsValid();
|
||||||
|
if (!isInputsValid)
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = mX5121EA.AddProvider(iDescriptor);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
+14
-11
@@ -30,18 +30,18 @@
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Inputs ...
|
// Inputs ...
|
||||||
long x5EAMagicNumber = 78692110; // Magic Number
|
long x5EAMagicNumber = 78692110; // Magic Number
|
||||||
int x5EASlippage = 10; // Slippgae
|
int x5EASlippage = 10; // Slippgae
|
||||||
string x5EASymbols = "EURUSDb"; // Symbols
|
string x5EASymbols = "EURUSDb,USDCHFb,USDJPYb,XAUUSDb"; // Symbols
|
||||||
//
|
//
|
||||||
bool x5EAAllowLong = true; // Allow Long Trades
|
bool x5EAAllowLong = true; // Allow Long Trades
|
||||||
bool x5EAAllowShort = true; // Allow Short Trades
|
bool x5EAAllowShort = true; // Allow Short Trades
|
||||||
int x5EAManageInterval = 5; // Manager Check Intervals Seconds
|
int x5EAManageInterval = 5; // Manager Check Intervals Seconds
|
||||||
int x5EAMaxAllowedPositions = 15; // Max Allowed Positions
|
int x5EAMaxAllowedPositions = 15; // Max Allowed Positions
|
||||||
double x5EAMaxAllowedSpread = 15; // Max Allowed Spred for Opening Trades
|
double x5EAMaxAllowedSpread = 0; // Max Allowed Spred for Opening Trades
|
||||||
double x5EAMinProfitPerTrade = 0; // Min Profit Per Trade based On Volume Factor (Hedge)
|
double x5EAMinProfitPerTrade = 0; // Min Profit Per Trade based On Volume Factor (Hedge)
|
||||||
double x5EAMinProfitPerVolumeFactor = 0; // Min Volume Factor for Calculating Profit (Hedge)
|
double x5EAMinProfitPerVolumeFactor = 0; // Min Volume Factor for Calculating Profit (Hedge)
|
||||||
double x5EAMaxAllowedDrawdownFactor = 0.015; // Max Allowed Drawdown Factor
|
double x5EAMaxAllowedDrawdownFactor = 0; // Max Allowed Drawdown Factor
|
||||||
//
|
//
|
||||||
double x5EAVolume = 0.01;
|
double x5EAVolume = 0.01;
|
||||||
|
|
||||||
@@ -90,6 +90,9 @@ int OnInit()
|
|||||||
return INIT_PARAMETERS_INCORRECT;
|
return INIT_PARAMETERS_INCORRECT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
TesterHideIndicators(true);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Init Succeed ...
|
// Init Succeed ...
|
||||||
return INIT_SUCCEEDED;
|
return INIT_SUCCEEDED;
|
||||||
|
|||||||
@@ -217,8 +217,8 @@ struct XCHLHInputs
|
|||||||
lcHHColor = clrAqua;
|
lcHHColor = clrAqua;
|
||||||
lcLLColor = clrFuchsia;
|
lcLLColor = clrFuchsia;
|
||||||
// LC Drawings ...
|
// LC Drawings ...
|
||||||
lcDrawHH = true;
|
lcDrawHH = false;
|
||||||
lcDrawLL = true;
|
lcDrawLL = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Medium Cycle ...
|
// Medium Cycle ...
|
||||||
@@ -234,8 +234,8 @@ struct XCHLHInputs
|
|||||||
mcHHColor = clrLime;
|
mcHHColor = clrLime;
|
||||||
mcLLColor = clrRed;
|
mcLLColor = clrRed;
|
||||||
// MC Drawings ...
|
// MC Drawings ...
|
||||||
mcDrawHH = true;
|
mcDrawHH = false;
|
||||||
mcDrawLL = true;
|
mcDrawLL = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Short Cycle ...
|
// Short Cycle ...
|
||||||
@@ -251,8 +251,8 @@ struct XCHLHInputs
|
|||||||
scHHColor = clrLightBlue;
|
scHHColor = clrLightBlue;
|
||||||
scLLColor = clrLightSalmon;
|
scLLColor = clrLightSalmon;
|
||||||
// SC Drawings ...
|
// SC Drawings ...
|
||||||
scDrawHH = true;
|
scDrawHH = false;
|
||||||
scDrawLL = true;
|
scDrawLL = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -218,8 +218,8 @@ struct XCHMAInputs
|
|||||||
lcFastColor = clrAqua;
|
lcFastColor = clrAqua;
|
||||||
lcSlowColor = clrFuchsia;
|
lcSlowColor = clrFuchsia;
|
||||||
// LC Drawings ...
|
// LC Drawings ...
|
||||||
lcDrawFast = true;
|
lcDrawFast = false;
|
||||||
lcDrawSlow = true;
|
lcDrawSlow = false;
|
||||||
lcDrawCrosses = false;
|
lcDrawCrosses = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -236,8 +236,8 @@ struct XCHMAInputs
|
|||||||
mcFastColor = clrLime;
|
mcFastColor = clrLime;
|
||||||
mcSlowColor = clrRed;
|
mcSlowColor = clrRed;
|
||||||
// MC Drawings ...
|
// MC Drawings ...
|
||||||
mcDrawFast = true;
|
mcDrawFast = false;
|
||||||
mcDrawSlow = true;
|
mcDrawSlow = false;
|
||||||
mcDrawCrosses = false;
|
mcDrawCrosses = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -254,8 +254,8 @@ struct XCHMAInputs
|
|||||||
scFastColor = clrLightBlue;
|
scFastColor = clrLightBlue;
|
||||||
scSlowColor = clrLightSalmon;
|
scSlowColor = clrLightSalmon;
|
||||||
// SC Drawings ...
|
// SC Drawings ...
|
||||||
scDrawFast = true;
|
scDrawFast = false;
|
||||||
scDrawSlow = true;
|
scDrawSlow = false;
|
||||||
scDrawCrosses = false;
|
scDrawCrosses = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -68,9 +68,9 @@ struct XOBDInputs
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
length = 0;
|
length = 0;
|
||||||
swingHighArrowCode = 108;
|
swingHighArrowCode = 0;
|
||||||
swingHighArrowColor = CLR_NONE;
|
swingHighArrowColor = CLR_NONE;
|
||||||
swingLowArrowCode = 108;
|
swingLowArrowCode = 0;
|
||||||
swingLowArrowColor = CLR_NONE;
|
swingLowArrowColor = CLR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -80,9 +80,9 @@ struct XOBDInputs
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
length = 5;
|
length = 5;
|
||||||
swingHighArrowCode = 108;
|
swingHighArrowCode = 0;
|
||||||
swingHighArrowColor = CLR_NONE;
|
swingHighArrowColor = CLR_NONE;
|
||||||
swingLowArrowCode = 108;
|
swingLowArrowCode = 0;
|
||||||
swingLowArrowColor = CLR_NONE;
|
swingLowArrowColor = CLR_NONE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -242,7 +242,10 @@ struct XPVInputs
|
|||||||
//
|
//
|
||||||
result =
|
result =
|
||||||
//
|
//
|
||||||
false
|
IsValid(scMethod, scPeriod) &&
|
||||||
|
IsValid(mcMethod, mcPeriod) &&
|
||||||
|
IsValid(lcMethod, lcPeriod) &&
|
||||||
|
IsValid(hcMethod, hcPeriod)
|
||||||
//
|
//
|
||||||
;
|
;
|
||||||
|
|
||||||
@@ -290,7 +293,7 @@ public:
|
|||||||
bool Init(
|
bool Init(
|
||||||
string symbol, // Trading Symbol
|
string symbol, // Trading Symbol
|
||||||
ENUM_TIMEFRAMES period, // Trading Period
|
ENUM_TIMEFRAMES period, // Trading Period
|
||||||
XPVInputs &inputs // Inputs
|
XPVInputs &inputs // Inputs
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -72,7 +72,7 @@ struct XTDInputs
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
length = 0;
|
length = 0;
|
||||||
drawCrosses = true;
|
drawCrosses = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Bullish ...
|
// Bullish ...
|
||||||
@@ -91,7 +91,7 @@ struct XTDInputs
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
length = 14;
|
length = 14;
|
||||||
drawCrosses = true;
|
drawCrosses = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Bullish ...
|
// Bullish ...
|
||||||
|
|||||||
@@ -350,6 +350,14 @@ void DrawSwingArrow(
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
bool isSwingHigh = type == 1;
|
bool isSwingHigh = type == 1;
|
||||||
|
|
||||||
|
//
|
||||||
|
if ((isSwingHigh && swingHighArrowCode == 0) ||
|
||||||
|
(!isSwingHigh && swingLowArrowCode == 0))
|
||||||
|
{
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
XOHCL candle;
|
XOHCL candle;
|
||||||
candle.Init(
|
candle.Init(
|
||||||
_Symbol,
|
_Symbol,
|
||||||
|
|||||||
@@ -2477,6 +2477,11 @@ bool IsValid(string value)
|
|||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
bool IsSpecifiedValid(string value)
|
||||||
|
{
|
||||||
|
return IsValid(value);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Validate a Date ...
|
// Validate a Date ...
|
||||||
@@ -2509,6 +2514,11 @@ bool IsValid(ENUM_TIMEFRAMES value)
|
|||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
bool IsSpecifiedValid(ENUM_TIMEFRAMES value)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
return IsValid(value);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Validate Specified Cycle ...
|
// Validate Specified Cycle ...
|
||||||
@@ -2556,6 +2566,17 @@ bool IsValid(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool IsSpecifiedValid(
|
||||||
|
ENUM_X_PERIOD_METHOD mMethod, // Period Select Method
|
||||||
|
ENUM_TIMEFRAMES mPeriod // Selected Period
|
||||||
|
)
|
||||||
|
{
|
||||||
|
return IsValid(mMethod,
|
||||||
|
mPeriod //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Validate Swing Mode ...
|
// Validate Swing Mode ...
|
||||||
bool IsValid(ENUM_X_SWING_TYPE value)
|
bool IsValid(ENUM_X_SWING_TYPE value)
|
||||||
@@ -2633,16 +2654,17 @@ bool IsRunningOnTestMode()
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Find Chart ID ...
|
// Find Chart ID ...
|
||||||
ulong FindChartID(
|
long FindChartID(
|
||||||
string mSymbol = NULL, // Trading Symbol
|
string mSymbol = NULL, // Trading Symbol
|
||||||
ENUM_TIMEFRAMES mPeriod = NULL // Trading Period
|
ENUM_TIMEFRAMES mPeriod = NULL // Trading Period
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
ulong result = ChartFirst();
|
long result = ChartFirst();
|
||||||
|
long first = result;
|
||||||
|
|
||||||
//
|
//
|
||||||
while (result >= 0)
|
while (result > 0)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
string chSymbol = ChartSymbol(result);
|
string chSymbol = ChartSymbol(result);
|
||||||
|
|||||||
@@ -218,15 +218,16 @@ struct XSignal
|
|||||||
|
|
||||||
//
|
//
|
||||||
bool Prepare(
|
bool Prepare(
|
||||||
string mSymbol, // Trading Symbol
|
string mSymbol, // Trading Symbol
|
||||||
string mProvider, // Signal Provider
|
string mProvider, // Signal Provider
|
||||||
ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame
|
ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame
|
||||||
ENUM_POSITION_TYPE mType, // Long (Buy) or Short (Sell)
|
ENUM_POSITION_TYPE mType, // Long (Buy) or Short (Sell)
|
||||||
ENUM_X_ORDER_MODES mMode, // Execution Mode
|
ENUM_X_ORDER_MODES mMode, // Execution Mode
|
||||||
double mEntry, // Entry Price
|
double mEntry, // Entry Price
|
||||||
double mVolume, // Volume
|
double mVolume, // Volume
|
||||||
double sl = 0, // Stop Loss
|
ENUM_X_SIGNAL_MANAGING_ACTIONS mAction = X_SIGNAL_USE_NOTHING, // Signal Management Action
|
||||||
double tp = 0 // Take Profit
|
double sl = 0, // Stop Loss
|
||||||
|
double tp = 0 // Take Profit
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -284,6 +285,9 @@ struct XSignal
|
|||||||
entry = mEntry;
|
entry = mEntry;
|
||||||
volume = mVolume;
|
volume = mVolume;
|
||||||
|
|
||||||
|
//
|
||||||
|
action = mAction;
|
||||||
|
|
||||||
//
|
//
|
||||||
Add(
|
Add(
|
||||||
sl,
|
sl,
|
||||||
@@ -313,6 +317,7 @@ struct XSignal
|
|||||||
ENUM_X_ORDER_MODES mMode, // Execution Mode
|
ENUM_X_ORDER_MODES mMode, // Execution Mode
|
||||||
double mEntry, // Entry Price
|
double mEntry, // Entry Price
|
||||||
double mVolume, // Volume
|
double mVolume, // Volume
|
||||||
|
ENUM_X_SIGNAL_MANAGING_ACTIONS mAction = X_SIGNAL_USE_NOTHING, // Signal Management Action
|
||||||
double sl = 0, // Stop Loss
|
double sl = 0, // Stop Loss
|
||||||
double tp = 0 // Take Profit
|
double tp = 0 // Take Profit
|
||||||
)
|
)
|
||||||
@@ -326,6 +331,7 @@ struct XSignal
|
|||||||
mMode,
|
mMode,
|
||||||
mEntry,
|
mEntry,
|
||||||
mVolume,
|
mVolume,
|
||||||
|
mAction,
|
||||||
sl,
|
sl,
|
||||||
tp
|
tp
|
||||||
//
|
//
|
||||||
@@ -340,6 +346,7 @@ struct XSignal
|
|||||||
ENUM_X_ORDER_MODES mMode, // Execution Mode
|
ENUM_X_ORDER_MODES mMode, // Execution Mode
|
||||||
double mEntry, // Entry Price
|
double mEntry, // Entry Price
|
||||||
double mVolume, // Volume
|
double mVolume, // Volume
|
||||||
|
ENUM_X_SIGNAL_MANAGING_ACTIONS mAction = X_SIGNAL_USE_NOTHING, // Signal Management Action
|
||||||
double sl = 0, // Stop Loss
|
double sl = 0, // Stop Loss
|
||||||
double tp = 0 // Take Profit
|
double tp = 0 // Take Profit
|
||||||
)
|
)
|
||||||
@@ -353,6 +360,7 @@ struct XSignal
|
|||||||
mMode,
|
mMode,
|
||||||
mEntry,
|
mEntry,
|
||||||
mVolume,
|
mVolume,
|
||||||
|
mAction,
|
||||||
sl,
|
sl,
|
||||||
tp
|
tp
|
||||||
//
|
//
|
||||||
@@ -369,6 +377,7 @@ struct XSignal
|
|||||||
ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame
|
ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame
|
||||||
double mEntry, // Entry Price
|
double mEntry, // Entry Price
|
||||||
double mVolume, // Volume
|
double mVolume, // Volume
|
||||||
|
ENUM_X_SIGNAL_MANAGING_ACTIONS mAction = X_SIGNAL_USE_NOTHING, // Signal Management Action
|
||||||
double sl = 0, // Stop Loss
|
double sl = 0, // Stop Loss
|
||||||
double tp = 0 // Take Profit
|
double tp = 0 // Take Profit
|
||||||
)
|
)
|
||||||
@@ -381,6 +390,7 @@ struct XSignal
|
|||||||
X_ORDER_MODE_MARKET,
|
X_ORDER_MODE_MARKET,
|
||||||
mEntry,
|
mEntry,
|
||||||
mVolume,
|
mVolume,
|
||||||
|
mAction,
|
||||||
sl,
|
sl,
|
||||||
tp
|
tp
|
||||||
//
|
//
|
||||||
@@ -394,6 +404,7 @@ struct XSignal
|
|||||||
ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame
|
ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame
|
||||||
double mEntry, // Entry Price
|
double mEntry, // Entry Price
|
||||||
double mVolume, // Volume
|
double mVolume, // Volume
|
||||||
|
ENUM_X_SIGNAL_MANAGING_ACTIONS mAction = X_SIGNAL_USE_NOTHING, // Signal Management Action
|
||||||
double sl = 0, // Stop Loss
|
double sl = 0, // Stop Loss
|
||||||
double tp = 0 // Take Profit
|
double tp = 0 // Take Profit
|
||||||
)
|
)
|
||||||
@@ -406,6 +417,7 @@ struct XSignal
|
|||||||
X_ORDER_MODE_MARKET,
|
X_ORDER_MODE_MARKET,
|
||||||
mEntry,
|
mEntry,
|
||||||
mVolume,
|
mVolume,
|
||||||
|
mAction,
|
||||||
sl,
|
sl,
|
||||||
tp
|
tp
|
||||||
//
|
//
|
||||||
@@ -422,6 +434,7 @@ struct XSignal
|
|||||||
ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame
|
ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame
|
||||||
double mEntry, // Entry Price
|
double mEntry, // Entry Price
|
||||||
double mVolume, // Volume
|
double mVolume, // Volume
|
||||||
|
ENUM_X_SIGNAL_MANAGING_ACTIONS mAction = X_SIGNAL_USE_NOTHING, // Signal Management Action
|
||||||
double sl = 0, // Stop Loss
|
double sl = 0, // Stop Loss
|
||||||
double tp = 0 // Take Profit
|
double tp = 0 // Take Profit
|
||||||
)
|
)
|
||||||
@@ -434,6 +447,7 @@ struct XSignal
|
|||||||
X_ORDER_MODE_STOP,
|
X_ORDER_MODE_STOP,
|
||||||
mEntry,
|
mEntry,
|
||||||
mVolume,
|
mVolume,
|
||||||
|
mAction,
|
||||||
sl,
|
sl,
|
||||||
tp
|
tp
|
||||||
//
|
//
|
||||||
@@ -447,6 +461,7 @@ struct XSignal
|
|||||||
ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame
|
ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame
|
||||||
double mEntry, // Entry Price
|
double mEntry, // Entry Price
|
||||||
double mVolume, // Volume
|
double mVolume, // Volume
|
||||||
|
ENUM_X_SIGNAL_MANAGING_ACTIONS mAction = X_SIGNAL_USE_NOTHING, // Signal Management Action
|
||||||
double sl = 0, // Stop Loss
|
double sl = 0, // Stop Loss
|
||||||
double tp = 0 // Take Profit
|
double tp = 0 // Take Profit
|
||||||
)
|
)
|
||||||
@@ -459,6 +474,7 @@ struct XSignal
|
|||||||
X_ORDER_MODE_STOP,
|
X_ORDER_MODE_STOP,
|
||||||
mEntry,
|
mEntry,
|
||||||
mVolume,
|
mVolume,
|
||||||
|
mAction,
|
||||||
sl,
|
sl,
|
||||||
tp
|
tp
|
||||||
//
|
//
|
||||||
@@ -475,6 +491,7 @@ struct XSignal
|
|||||||
ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame
|
ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame
|
||||||
double mEntry, // Entry Price
|
double mEntry, // Entry Price
|
||||||
double mVolume, // Volume
|
double mVolume, // Volume
|
||||||
|
ENUM_X_SIGNAL_MANAGING_ACTIONS mAction = X_SIGNAL_USE_NOTHING, // Signal Management Action
|
||||||
double sl = 0, // Stop Loss
|
double sl = 0, // Stop Loss
|
||||||
double tp = 0 // Take Profit
|
double tp = 0 // Take Profit
|
||||||
)
|
)
|
||||||
@@ -487,6 +504,7 @@ struct XSignal
|
|||||||
X_ORDER_MODE_LIMIT,
|
X_ORDER_MODE_LIMIT,
|
||||||
mEntry,
|
mEntry,
|
||||||
mVolume,
|
mVolume,
|
||||||
|
mAction,
|
||||||
sl,
|
sl,
|
||||||
tp
|
tp
|
||||||
//
|
//
|
||||||
@@ -500,6 +518,7 @@ struct XSignal
|
|||||||
ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame
|
ENUM_TIMEFRAMES mPeriod, // Trading TimeFrame
|
||||||
double mEntry, // Entry Price
|
double mEntry, // Entry Price
|
||||||
double mVolume, // Volume
|
double mVolume, // Volume
|
||||||
|
ENUM_X_SIGNAL_MANAGING_ACTIONS mAction = X_SIGNAL_USE_NOTHING, // Signal Management Action
|
||||||
double sl = 0, // Stop Loss
|
double sl = 0, // Stop Loss
|
||||||
double tp = 0 // Take Profit
|
double tp = 0 // Take Profit
|
||||||
)
|
)
|
||||||
@@ -512,6 +531,7 @@ struct XSignal
|
|||||||
X_ORDER_MODE_LIMIT,
|
X_ORDER_MODE_LIMIT,
|
||||||
mEntry,
|
mEntry,
|
||||||
mVolume,
|
mVolume,
|
||||||
|
mAction,
|
||||||
sl,
|
sl,
|
||||||
tp
|
tp
|
||||||
//
|
//
|
||||||
|
|||||||
Reference in New Issue
Block a user