complete xea class ...

This commit is contained in:
2024-05-21 04:36:05 +03:30
parent 74ffc15d04
commit 57371b9343
15 changed files with 3227 additions and 1505 deletions
+3 -2
View File
@@ -35,10 +35,10 @@ public:
// //
// Represent Basic Unique Tag ... // Represent Basic Unique Tag ...
virtual string GetTag(); virtual string GetTag();
protected:
// //
// Retrieve Class Token ... // Retrieve Class Token ...
string GetToken() virtual string GetToken()
{ {
// //
string result = NULL; string result = NULL;
@@ -81,6 +81,7 @@ protected:
return result; return result;
} }
protected:
// //
// Private ... // Private ...
private: private:
+1 -1
View File
@@ -2035,7 +2035,7 @@ public:
// For Data Collector ... // For Data Collector ...
string GetToken() string GetToken()
{ {
return GetToken(this); return GetSpecificToken(this);
} }
bool IsModelValid() bool IsModelValid()
{ {
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+373
View File
@@ -0,0 +1,373 @@
///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Class Library
// ----------------------------------------------
// Name: XSCHttp
// Description: provides all HTTP 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
//
// Definitions ...
//
enum X_HTTP_METHOD
{
X_HTTP_GET,
X_HTTP_POST
};
//
// Imports ...
//
// Includes ...
#include "../Classes/x-saherelm.base.class.mq5"
#include "../Libraries/x-saherelm.common.lib.mq5"
//
// a Class for Manage Account ...
class XSCHttp : public XSCBase
{
//
// Public ...
public:
//
// Constructor ...
void XSCHttp()
{
XSCHttp("", 10000);
}
void XSCHttp(
string path, // Base Folder to Store Data
int timeout // base timeout for Requests
)
{
//
Path(path);
Timeout(timeout);
}
//
// Deconstructor ...
void ~XSCHttp()
{
}
//
// Properties Getter(s) / Setter(s) ...
//
// Path ...
void Path(string value)
{
//
mPath = value;
//
if (!IsValid(mPath))
{
mPath = GetTag();
}
}
string Path()
{
return mPath;
}
//
// Timeout ...
void Timeout(int value)
{
mTimeout = value;
}
//
int Timeout()
{
return mTimeout;
}
//
// Error ...
int Error()
{
return mError;
}
//
// Response ...
string Response()
{
return mResponse;
}
//
// Overrides ...
string GetTag() override
{
return GetSpecificToken(this);
}
//
// Tools ...
//
// Send Global Request ...
int SendRequest(
X_HTTP_METHOD method, // Httm Request Method
const string url, // Server Address
const string headers, // Headers providing
const char &payload[], // the Data which needs to Send
char &response[], // Response of request
string responseHeaders, // Response Headers
int timeout = 500 // Timeout for response default is 500
)
{
//
int result = -1;
//
string strMethod = ToString(method);
if (StringLen(strMethod) == 0)
{
return result;
}
//
// Reset State ...
ResetState();
//
result = WebRequest(
strMethod,
url,
headers,
timeout,
payload,
response,
responseHeaders);
//
if (result < 0)
{
mError = GetLastError();
}
else
{
mResponse = CharArrayToString(response);
}
//
return result;
}
//
// Get Request ...
int GetRequest(
const string url, // Server Address
const string headers, // Headers providing
const char &payload[], // the Data which needs to Send
char &response[], // Response of request
string responseHeaders, // Response Headers
int timeout = 500 // Timeout for response default is 500
)
{
//
int result = SendRequest(
X_HTTP_GET,
url,
headers,
payload,
response,
responseHeaders,
timeout);
//
return result;
}
//
// Post Request ...
int PostRequest(
const string url, // Server Address
const string headers, // Headers providing
const char &payload[], // the Data which needs to Send
char &response[], // Response of request
string responseHeaders, // Response Headers
int timeout = 500 // Timeout for response default is 500
)
{
//
int result = SendRequest(
X_HTTP_POST,
url,
headers,
payload,
response,
responseHeaders,
timeout);
//
return result;
}
//
// Handle Download Specific URL Content to Specific Path and File Name ...
bool Download(
string url, // the URL address which going to download
string fileName // Specify Destination file name to Store Response
)
{
//
bool result = false;
//
string filePath = GetFilePath(fileName);
string cookie = NULL;
string referer = NULL;
int timeout = Timeout();
//
char payload[];
string headers;
char response[];
string responseHeaders;
//
// Send Request ...
int requestResult = GetRequest(
url,
headers,
payload,
response,
responseHeaders,
timeout);
//
// Define File Handler ...
int mFileHandler = FileOpen(
filePath,
FILE_WRITE | FILE_BIN);
if (mFileHandler == INVALID_HANDLE)
{
//
mError = GetLastError();
return result;
}
//
// Write Response to File ...
uint writed = FileWriteArray(
mFileHandler,
response,
0,
ArraySize(response));
FileFlush(mFileHandler);
FileClose(mFileHandler);
//
result = writed > 0;
//
return result;
}
//
// END Provided Functions ...
//
//
// Protected ...
protected:
//
// Destintion Folder Path ...
string mPath;
//
// WEB Request Timeout Value ...
int mTimeout;
//
// WEB Request's Response ...
string mResponse;
//
// Error Value ...
int mError;
//
// Private ...
private:
//
// Reset Errors State ...
void ResetState()
{
//
// Reset Errors ...
mError = -1;
mResponse = "";
ResetLastError();
}
//
// Generate Full File Path ...
string GetFilePath(string fileName)
{
//
string result = "";
//
result =
//
Path() + "\\" + fileName
//
;
//
return result;
}
};
//
// Tools ...
//
// Convert enum to String ...
string ToString(X_HTTP_METHOD method)
{
//
string result = "";
//
switch (method)
{
//
case X_HTTP_GET:
result = "GET";
break;
//
case X_HTTP_POST:
result = "POST";
break;
}
//
return result;
}
//
+2 -2
View File
@@ -994,7 +994,7 @@ public:
// //
// Check Account Policy ... // Check Account Policy ...
bool CheckAccountPolicy( bool CheckAccountPolicy(
XSignal &mSignal, // For Executing Signal XSignal &mSignal, // For Executing Signal
ENUM_X_SIGNAL_EXECUTION_RESULT &state // State Holder ENUM_X_SIGNAL_EXECUTION_RESULT &state // State Holder
) )
{ {
@@ -1078,7 +1078,7 @@ public:
// //
// Execute a Signal ... // Execute a Signal ...
bool ExecuteSignal( bool ExecuteSignal(
XSignal &mSignal, // Signal XSignal &mSignal, // Signal
ENUM_X_SIGNAL_EXECUTION_RESULT &state, // Result ENUM_X_SIGNAL_EXECUTION_RESULT &state, // Result
ENUM_ORDER_TYPE_TIME lifetime = ORDER_TIME_GTC, // Order LifeTime ENUM_ORDER_TYPE_TIME lifetime = ORDER_TIME_GTC, // Order LifeTime
datetime expiration = NULL, // order expiration time datetime expiration = NULL, // order expiration time
-2
View File
@@ -23,7 +23,6 @@
#define ShortName "X5EA" #define ShortName "X5EA"
// //
#include "../Libraries/x-saherelm.log.lib.mq5"
#include "../Libraries/x-saherelm.draw.lib.mq5" #include "../Libraries/x-saherelm.draw.lib.mq5"
#include "../Libraries/x-saherelm.common.lib.mq5" #include "../Libraries/x-saherelm.common.lib.mq5"
#include "../Classes/x-saherelm.xtrade.class.mq5" #include "../Classes/x-saherelm.xtrade.class.mq5"
@@ -70,7 +69,6 @@ int OnInit()
} }
// //
logTag = ShortName;
drawPrefix = ShortName; drawPrefix = ShortName;
// //
-4
View File
@@ -23,7 +23,6 @@
#define ShortName "X5EA" #define ShortName "X5EA"
// //
#include "../Libraries/x-saherelm.log.lib.mq5"
#include "../Classes/x-saherelm.x5.provider.class.mq5" #include "../Classes/x-saherelm.x5.provider.class.mq5"
// //
@@ -76,9 +75,6 @@ int OnInit()
return INIT_PARAMETERS_INCORRECT; return INIT_PARAMETERS_INCORRECT;
} }
//
logTag = ShortName;
// //
// Initial Providers ... // Initial Providers ...
if (!InitialProviders()) if (!InitialProviders())
-4
View File
@@ -107,10 +107,6 @@ input bool scDrawLL = true; // Draw Lowest Low
// END Inputs ... // END Inputs ...
// //
//
// Includes Logging Library ...
#include "../Libraries/x-saherelm.log.lib.mq5";
// //
// Includes Common Library ... // Includes Common Library ...
#include "../Libraries/x-saherelm.common.lib.mq5"; #include "../Libraries/x-saherelm.common.lib.mq5";
+4 -27
View File
@@ -59,8 +59,8 @@ input ENUM_APPLIED_PRICE verifierMaAppliedTo = PRICE_CLOSE; // Applied To
// //
input group "Presentation"; input group "Presentation";
input bool showFastMa = true; // Show Fast input bool showFastMa = true; // Show Fast
input bool showSlowMa = true; // Show Slow input bool showSlowMa = true; // Show Slow
input bool showVerifierMa = true; // Show Verifier input bool showVerifierMa = true; // Show Verifier
// //
@@ -71,10 +71,6 @@ input bool showVerifierMa = true; // Show Verifier
// START Includes and Imports ... // START Includes and Imports ...
// //
//
// Includes Logging Library ...
#include "../Libraries/x-saherelm.log.lib.mq5"
// //
// Includes Common Library ... // Includes Common Library ...
#include "../Libraries/x-saherelm.common.lib.mq5" #include "../Libraries/x-saherelm.common.lib.mq5"
@@ -169,9 +165,6 @@ int OnInit()
return INIT_PARAMETERS_INCORRECT; return INIT_PARAMETERS_INCORRECT;
} }
//
logTag = ShortName;
// //
// because in some cases we may have more than one input for // because in some cases we may have more than one input for
// calculation and we must prevent any calculation // calculation and we must prevent any calculation
@@ -201,11 +194,6 @@ int OnInit()
fastMaAppliedTo); fastMaAppliedTo);
if (fastMaHandler == INVALID_HANDLE) if (fastMaHandler == INVALID_HANDLE)
{ {
//
string msg = "Error in Initilizing Indicator ...";
LogMessage(msg);
//
return INIT_FAILED; return INIT_FAILED;
} }
@@ -220,11 +208,6 @@ int OnInit()
slowMaAppliedTo); slowMaAppliedTo);
if (slowMaHandler == INVALID_HANDLE) if (slowMaHandler == INVALID_HANDLE)
{ {
//
string msg = "Error in Initilizing Indicator ...";
LogMessage(msg);
//
return INIT_FAILED; return INIT_FAILED;
} }
@@ -239,11 +222,6 @@ int OnInit()
verifierMaAppliedTo); verifierMaAppliedTo);
if (verifierMaHandler == INVALID_HANDLE) if (verifierMaHandler == INVALID_HANDLE)
{ {
//
string msg = "Error in Initilizing Indicator ...";
LogMessage(msg);
//
return INIT_FAILED; return INIT_FAILED;
} }
@@ -332,7 +310,7 @@ int OnCalculate(
int slowMaCalculatedBars = BarsCalculated(slowMaHandler); int slowMaCalculatedBars = BarsCalculated(slowMaHandler);
int verifierMaCalculatedBars = BarsCalculated(verifierMaHandler); int verifierMaCalculatedBars = BarsCalculated(verifierMaHandler);
if (fastMaCalculatedBars < maxLength || if (fastMaCalculatedBars < maxLength ||
slowMaCalculatedBars < maxLength || slowMaCalculatedBars < maxLength ||
verifierMaCalculatedBars < maxLength) verifierMaCalculatedBars < maxLength)
{ {
return prev_calculated; return prev_calculated;
@@ -348,8 +326,7 @@ int OnCalculate(
int copiedVerifierMas = CopyBuffer(verifierMaHandler, 0, 0, limit, verifierMaBuffer); int copiedVerifierMas = CopyBuffer(verifierMaHandler, 0, 0, limit, verifierMaBuffer);
if (copiedFastMas <= 0 || if (copiedFastMas <= 0 ||
copiedSlowMas <= 0 || copiedSlowMas <= 0 ||
copiedVerifierMas <= 0 copiedVerifierMas <= 0)
)
{ {
return prev_calculated; return prev_calculated;
} }
-187
View File
@@ -1,187 +0,0 @@
///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Alert Library
// --------------------------------------
// Name: XAlert
// Description: provides Alerts abilities ...
//
//
// 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 Inputs ...
//
input group "Alerts";
input bool enableAlerts = true; // Enable Alerts
input bool logAlerts = true; // Log Alerts
input bool terminalAlerts = false; // Terminal Alerts
input bool mailAlerts = false; // Mail Alerts
input bool pushAlerts = false; // Push Alerts
//
// END Inputs ...
//
//
#include "x-saherelm.log.lib.mq5"
//
// START Global Definitions: Variables, Properties and etc ...
//
string alertPrefix = "X-Alert";
//
// END Global Definitions: Variables, Properties and etc ...
//
//
// START Provided Functions ...
//
//
// Initial Library if required ...
bool OnInInitAlertLibrary()
{
return false;
}
//
// DeInitial Library if required ...
void OnDeinitAlertLibrary()
{
}
//
// Attach Alert Prefix to Message ...
string PrepareAlertMessage(string message)
{
//
StringReplace(message, "\n", " | ");
//
StringConcatenate(message, alertPrefix, " > ", message);
//
return message;
}
//
// Logging an Alert ...
void LogAlert(string message)
{
//
// Validate Args ...
if (!enableAlerts || !logAlerts)
{
return;
}
//
LogMessage(alertPrefix, message);
}
//
// Terminal Alert ...
void TerminalAlert(string message)
{
//
// Validate Args ...
if (!enableAlerts || !terminalAlerts)
{
return;
}
//
// Prepare Message ...
message = PrepareAlertMessage(message);
// Send Terminal Alert ...
Alert(message);
}
//
// Mail Alert ...
void MailAlert(string message)
{
//
// Validate Args ...
if (!enableAlerts || !mailAlerts)
{
return;
}
//
// Send Mail Alert ...
SendMail(alertPrefix, message);
}
//
// Send Push Notification ...
void PushAlert(string message)
{
//
// Validate Args ...
if (!enableAlerts || !pushAlerts)
{
return;
}
//
// Prepare Message ...
message = PrepareAlertMessage(message);
//
// Send Push Notification Alert ...
SendNotification(message);
}
//
// Alert Sending ...
void SendAlert(string message)
{
//
// Validate Args ...
if (!enableAlerts)
{
return;
}
//
// Log ...
if (logAlerts)
{
LogAlert(message);
}
//
// Terminal ...
if (terminalAlerts)
{
TerminalAlert(message);
}
//
// Mail ...
if (mailAlerts)
{
MailAlert(message);
}
//
// Push ...
if (pushAlerts)
{
PushAlert(message);
}
}
//
// END Provided Functions ...
//
+61 -15
View File
@@ -1023,8 +1023,8 @@ struct XOHCL
// //
ENUM_SERIESMODE mMode = swing == X_SWING_HIGH ENUM_SERIESMODE mMode = swing == X_SWING_HIGH
? MODE_HIGH ? MODE_HIGH
: MODE_LOW; : MODE_LOW;
// //
result = swing == X_SWING_HIGH result = swing == X_SWING_HIGH
@@ -1048,7 +1048,7 @@ struct XOHCL
// //
// Find Lowest Bar Index ... // Find Lowest Bar Index ...
int FindHighestIndex( int FindHighestIndex(
int mLength, // Loopback ... int mLength, // Loopback ...
ENUM_SERIESMODE mMode // Calculation mode ENUM_SERIESMODE mMode // Calculation mode
) )
{ {
@@ -1082,7 +1082,7 @@ struct XOHCL
// //
// Find Lowest ... // Find Lowest ...
double FindHighest( double FindHighest(
int mLength, // Loopback ... int mLength, // Loopback ...
ENUM_SERIESMODE mMode // Calculation mode ENUM_SERIESMODE mMode // Calculation mode
) )
{ {
@@ -1127,7 +1127,7 @@ struct XOHCL
// //
// Find Lowest Bar Index ... // Find Lowest Bar Index ...
int FindLowestIndex( int FindLowestIndex(
int mLength, // Loopback ... int mLength, // Loopback ...
ENUM_SERIESMODE mMode // Calculation mode ENUM_SERIESMODE mMode // Calculation mode
) )
{ {
@@ -1161,7 +1161,7 @@ struct XOHCL
// //
// Find Lowest ... // Find Lowest ...
double FindLowest( double FindLowest(
int mLength, // Loopback ... int mLength, // Loopback ...
ENUM_SERIESMODE mMode // Calculation mode ENUM_SERIESMODE mMode // Calculation mode
) )
{ {
@@ -3877,6 +3877,49 @@ string GetToken(T &item)
return result; return result;
} }
//
// Same as Get Token for Use in Classes ...
template <typename T>
string GetSpecificToken(T &item)
{
//
string mType = GetTypeName(item);
//
string result = mType;
//
string parts[];
int partsCount = SplitContent(
parts,
result,
" "
//
);
if (partsCount <= 0)
{
//
result = mType;
return result;
}
//
bool hasLastPart = GetLastItem(
result,
parts
//
);
if (!hasLastPart)
{
//
result = mType;
return result;
}
//
return result;
}
// //
// Generate Unique Tags ... // Generate Unique Tags ...
template <typename T> template <typename T>
@@ -4855,14 +4898,14 @@ bool Contains(
// //
result = queryIdx >= 0; result = queryIdx >= 0;
// //
return result; return result;
} }
// //
bool Contains( bool Contains(
string &mQueries[], // Search Strings string &mQueries[], // Search Strings
string mContent, // Search Content string mContent, // Search Content
bool ignoreCase = true // Ignore Case bool ignoreCase = true // Ignore Case
) )
@@ -4874,29 +4917,32 @@ bool Contains(
// Validate Queries ... // Validate Queries ...
int queriesCount = ArraySize(mQueries); int queriesCount = ArraySize(mQueries);
result = queriesCount > 0; result = queriesCount > 0;
if (!result) { if (!result)
{
return result; return result;
} }
// //
// Validate Content ... // Validate Content ...
result = IsValid(mContent); result = IsValid(mContent);
if (!result) { if (!result)
{
return result; return result;
} }
// //
int containsCount = 0; int containsCount = 0;
for (int i = 0; i < queriesCount; i++) { for (int i = 0; i < queriesCount; i++)
{
// //
bool isContains = Contains( bool isContains = Contains(
mQueries[i], mQueries[i],
mContent, mContent,
ignoreCase ignoreCase);
);
// //
if (!isContains) { if (!isContains)
{
// //
result = false; result = false;
break; break;
@@ -4908,7 +4954,7 @@ bool Contains(
// //
result = containsCount == queriesCount; result = containsCount == queriesCount;
// //
return result; return result;
} }
-177
View File
@@ -1,177 +0,0 @@
///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Http Library
// ------------------------------------------
// Name: XHttp
// Description: provide http communication
// abilities ...
//
//
// 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 Model Definition ...
//
enum X_HTTP_METHOD
{
X_HTTP_GET,
X_HTTP_POST
};
//
// END Model Definition ...
//
//
// START Inputs ...
//
//
// END Inputs ...
//
//
// START Global Definitions: Variables, Properties and etc ...
//
//
// END Global Definitions: Variables, Properties and etc ...
//
//
// START Provided Functions ...
//
//
// Initial Library if required ...
bool OnInInitHttpLibrary()
{
return false;
}
//
// DeInitial Library if required ...
void OnDeinitHttpLibrary()
{
}
//
// Convert enum to String ...
string ToString(X_HTTP_METHOD method)
{
//
string result = "";
//
switch (method)
{
//
case X_HTTP_GET:
result = "GET";
break;
//
case X_HTTP_POST:
result = "POST";
break;
}
//
return result;
}
//
// Send Global Request ...
int SendRequest(
X_HTTP_METHOD method, // Httm Request Method
const string url, // Server Address
const string headers, // Headers providing
const char &payload[], // the Data which needs to Send
char &response[], // Response of request
string responseHeaders, // Response Headers
int timeout = 500 // Timeout for response default is 500
)
{
//
int result = -1;
//
string strMethod = ToString(method);
if (StringLen(strMethod) == 0) {
return result;
}
//
result = WebRequest(
strMethod,
url,
headers,
timeout,
payload,
response,
responseHeaders
);
//
return result;
}
//
// Get Request ...
int GetRequest(
const string url, // Server Address
const string headers, // Headers providing
const char &payload[], // the Data which needs to Send
char &response[], // Response of request
string responseHeaders, // Response Headers
int timeout = 500 // Timeout for response default is 500
) {
//
int result = SendRequest(
X_HTTP_GET,
url,
headers,
payload,
response,
responseHeaders,
timeout
);
//
return result;
}
//
// Post Request ...
int PostRequest(
const string url, // Server Address
const string headers, // Headers providing
const char &payload[], // the Data which needs to Send
char &response[], // Response of request
string responseHeaders, // Response Headers
int timeout = 500 // Timeout for response default is 500
) {
//
int result = SendRequest(
X_HTTP_POST,
url,
headers,
payload,
response,
responseHeaders,
timeout
);
//
return result;
}
//
// END Provided Functions ...
//
File diff suppressed because it is too large Load Diff
+266
View File
@@ -53,6 +53,9 @@ string XSymbolToken = "SMBL";
string XSupportToken = "SP"; string XSupportToken = "SP";
string XEQMSupportToken = "EQM"; string XEQMSupportToken = "EQM";
//
string XSLTrailToken = "SLT";
// //
string XActionToken = "A"; string XActionToken = "A";
@@ -107,6 +110,19 @@ enum ENUM_X_SIGNAL_MANAGING_ACTIONS
X_SIGNAL_PARTIAL_TRAIL, // Use 0 index as SL and Trail Stop on TP Levels and also Partial Close on TP Levels X_SIGNAL_PARTIAL_TRAIL, // Use 0 index as SL and Trail Stop on TP Levels and also Partial Close on TP Levels
}; };
//
// Available Guard Action ...
enum ENUM_X_GUARD_ACTIONS
{
X_GUARD_ACTION_NOTHING, // Nothing
X_GUARD_ACTION_HEDGE, // Hedge
X_GUARD_PARTIAL_CLOSE, // Partial Close
X_GUARD_ACTION_TRAIL_STOP, // Trail StopLoss
X_GUARD_ACTION_FORCE_CLOSE, // Force Close
X_GUARD_ACTION_ADD_SUPPORT_SIGNAL, // Add Support Signal
X_GUARD_ACTION_CANCEL_PENDING_ORDERS, // Cancel Pending Orders
};
// //
// Structs ... // Structs ...
@@ -2427,6 +2443,96 @@ struct XOnTradeHandlerState
} }
}; };
//
// Model Guard Info ...
struct XGuard
{
//
string symbol; // Trading Symbol ...
string provider; // Signal Provider ...
ENUM_TIMEFRAMES period; // Trading Timeframe ...
ENUM_POSITION_TYPE type; // Position Type ...
ENUM_X_GUARD_ACTIONS action; // Which Action to Do ...
//
double dblPayLoad;
string strPayload;
//
// Constructor ...
XGuard()
{
Clean();
}
//
// Initialize ...
//
// Global Initializer ...
bool Init(
string mSymbol, // Trading Symbol ...
ENUM_TIMEFRAMES mPeriod, // Trading Timeframe ...
ENUM_X_GUARD_ACTIONS mAction, // Which Action to Do ...
ENUM_POSITION_TYPE mType = NULL, // Position Type ...
string mProvider = NULL, // Signal Provider ...
double mDblPayLoad = NULL,
string mStrPayload = NULL //
)
{
//
type = mType;
symbol = mSymbol;
period = mPeriod;
action = mAction;
provider = mProvider;
dblPayLoad = mDblPayLoad;
strPayload = mStrPayload;
//
bool result = IsValid();
//
return result;
}
//
// Tools ...
//
// Cleanup ...
void Clean()
{
//
symbol = NULL;
provider = NULL;
period = NULL;
action = X_GUARD_ACTION_NOTHING;
//
strPayload = NULL;
dblPayLoad = EMPTY_VALUE;
}
//
// Validate ...
bool IsValid()
{
//
bool result = false;
//
result =
//
action != X_GUARD_ACTION_NOTHING
//
;
//
return result;
}
};
// //
// Model a Position with all of it's Supports ... // Model a Position with all of it's Supports ...
struct XPositionPack struct XPositionPack
@@ -3717,6 +3823,73 @@ int FindIndex(
return result; return result;
} }
//
// Retrieve String Representation ...
string ToString(ENUM_X_SIGNAL_EXECUTION_RESULT value)
{
//
string result = NULL;
//
switch (value)
{
//
case X_SIGNAL_EXECUTION_UNKNOWN:
result = "Unknown";
break;
//
case X_SIGNAL_EXECUTION_SUCCEED:
result = "Succed";
break;
//
case X_SIGNAL_EXECUTION_FAILED_SPREAD:
result = "Spread more than Max Allowed";
break;
//
case X_SIGNAL_EXECUTION_FAILED_NO_EQUITY:
result = "No Equity for Trade";
break;
//
case X_SIGNAL_EXECUTION_FAILED_PRICE_ERROR:
result = "Price Error";
break;
//
case X_SIGNAL_EXECUTION_FAILED_MAX_REACHED:
result = "Max Allowed Positions Reached";
break;
//
case X_SIGNAL_EXECUTION_FAILED_INVALID_PARAMS:
result = "Invalid Params";
break;
}
//
return result;
}
//
// Converts Position Type to Order Type ...
ENUM_ORDER_TYPE ToOrderType(ENUM_POSITION_TYPE value)
{
//
bool isLong = IsLong(value);
//
ENUM_ORDER_TYPE result =
isLong
? ORDER_TYPE_BUY
: ORDER_TYPE_SELL;
//
return result;
}
// //
// Tagging ... // Tagging ...
@@ -3830,3 +4003,96 @@ ulong ExtractEQMSupportedTicket(string value)
} }
// //
// SL Trails ...
//
// Extract SL Trail Level ...
int ExtractSLTrailLevel(string comment)
{
//
int result = 0;
//
if (!IsValid(comment))
{
return result;
}
//
result = ParseIntSurrounded(
comment,
XSLTrailToken
//
);
//
return result;
}
//
// Generate SL Trail Comment Tag ...
string GenerateSLTrailTag(int level)
{
//
string result = NULL;
//
if (level <= 0)
{
return result;
}
//
result = Surround(
XSLTrailToken,
level
//
);
//
return result;
}
//
// Prepare SL Trail Comment ...
string PrepareSLTrailTag(
const string comment // Original Position Comment ...
)
{
//
string result = NULL;
//
int level = 0;
result = comment;
//
// Check Comment Contains SL Trailing or not ...
int lastTrailLevel = ExtractSLTrailLevel(comment);
if (lastTrailLevel <= 0)
{
level++;
}
else
{
//
level = lastTrailLevel + 1;
string lastLevelStr = GenerateSLTrailTag(lastTrailLevel);
StringReplace(
result,
lastLevelStr,
""
//
);
}
//
// Generate level Comment ...
string levelStr = GenerateSLTrailTag(level);
result += levelStr;
//
return result;
}
//