last works ...

This commit is contained in:
2025-09-19 22:59:49 +03:30
parent 6f3639ef0b
commit 6788675c4a
9 changed files with 1122 additions and 8 deletions
@@ -1030,6 +1030,7 @@ class XCMarketPatternDetector : public XCBase
//
// Prepare ...
fvg.Clean();
CleanDirection(dir);
//
@@ -1113,6 +1114,116 @@ class XCMarketPatternDetector : public XCBase
return result;
}
//
// OB ...
/**
* Check For OB Exists in Specified Loopback Period ...
*
* @param bar: XOHCL, Specified Bar ...
* @param dir: ENUM_X_DIRECTION a reference for Direction ...
* @param ob: XBoxZone, reference for Holding OB ...
* @param maxLoopback: int, Max Allowed Loopback to Lookup OB ...
*
* @return ( bool )
*/
bool HasOB(
XOHCL &bar,
ENUM_X_DIRECTION &dir,
XBoxZone &ob,
int maxLoopback = 5 //
)
{
//
bool result = false;
//
// Prepare ...
ob.Clean();
CleanDirection(dir);
//
// Normalize ...
maxLoopback = NormalizeInt(maxLoopback, 3);
//
// Validate ...
result = bar.IsValid();
if (!result)
{
return result;
}
//
XOHCL iBar;
bool has = false;
int start = bar.Index();
int end = start + maxLoopback;
for (int i = start; i < end; i++)
{
//
// Initialize iBar ...
has = iBar.Init(
bar.symbol,
bar.period,
i //
);
if (!has)
{
continue;
}
//
// Check iBar is OB or not ...
has = barAnalyser.IsOB(
iBar,
ob,
true, // Force FVG Bar Type ...
true // Force OB First Two Bar InDirection ...
);
if (!has)
{
//
ob.Clean();
iBar.Clean();
CleanDirection(dir);
//
continue;
}
//
iBar.Clean();
dir = ob.dir;
//
break;
}
//
// Check OB Exists ...
result = ob.IsValid();
//
// Check Direction Exists ...
result =
result &&
HasDirection(dir);
//
// Cleanup Resources ...
if (!result)
{
//
ob.Clean();
CleanDirection(dir);
}
iBar.Clean();
//
return result;
}
//
// Trending ...
@@ -1382,6 +1493,16 @@ class XCMarketPatternDetector : public XCBase
return result;
}
/**
* Check Specified Bar Has Support or not ...
*
* @param bar: XOHCL, Specified Bar ...
* @param support: XOHCL, Supported Bar ...
* @param validationLength: int, Validation Length ...
* @param maxAllowedLoopback: int, Max Allowed Loopback to Detection ...
*
* @return ( bool )
*/
bool HasSupport(
XOHCL &bar,
XOHCL &support,
@@ -1476,6 +1597,16 @@ class XCMarketPatternDetector : public XCBase
return result;
}
/**
* Check Specified Bar Has Resistance or not ...
*
* @param bar: XOHCL, Specified Bar ...
* @param resistence: XOHCL, Resistanced Bar ...
* @param validationLength: int, Validation Length ...
* @param maxAllowedLoopback: int, Max Allowed Loopback to Detection ...
*
* @return ( bool )
*/
bool HasResistance(
XOHCL &bar,
XOHCL &resistence,
+3 -1
View File
@@ -37,8 +37,8 @@
//
// Imports ...
#include "../Classes/x-saherelm.base.class.mq5"
#include "../Libraries/x-saherelm.x-trade.lib.mq5"
#include "../Classes/x-saherelm.x-market.pattern.class.mq5"
#include "../Libraries/x-saherelm.x-trade.lib.mq5"
//
// Definitions ...
@@ -159,6 +159,8 @@ class XCBaseSignaller : public XCBase
IsSpecifiedValid(symbol) &&
IsSpecifiedValid(period) &&
//
patternDetector != NULL &&
//
CheckAdditionslSignallerValidations()
//
;
+47 -3
View File
@@ -139,9 +139,12 @@ input int valeArrowCode = 159; // Vales Arrow Code
//
string eaLogTag; // EA Log Prefix ...
XCBackTesterEA *eaExpert; // EA Expert ...
XCXFIMAStrategy1Signaller *fima1Signaller; // XFIMA1 Signaller ...
XCMarketPatternDetector *eaPatternDetector; // EA Pattern Detector ...
//
XCXFIMAStrategy1Signaller *fima1Signaller; // XFIMA1 Signaller ...
XCXFIMAStrategy2Signaller *fima2Signaller; // XFIMA2 Signaller ...
//
XCPOIDrawer *eaDrawer; // Ea POI Drawer ...
CArrayObj draws; // Drawn Objects ...
@@ -295,6 +298,9 @@ int OnInit()
//
// Instantiate Signaller ...
//
// XFIMA1 Signaller ...
fima1Signaller = new XCXFIMAStrategy1Signaller(
_Symbol,
_Period,
@@ -307,7 +313,22 @@ int OnInit()
fima1Signaller.AddOnSignalEventHandler(OnSignalTriggered);
//
isInited = fima1Signaller.IsValid();
// XFIMA2 Signaller ...
fima2Signaller = new XCXFIMAStrategy2Signaller(
_Symbol,
_Period,
fimaInputs,
eaProcessAllTicks, // Process All Ticks ...
eaSignallerR2R, // Signaller Risk to Reward Ratio ...
eaSignallerRiskInPoint, // Default Risk In Points ...
eaSignallerVolume // Defaul Volume ...
);
fima2Signaller.AddOnSignalEventHandler(OnSignalTriggered);
//
isInited =
fima1Signaller.IsValid() &&
fima2Signaller.IsValid();
if (!isInited)
{
//
@@ -402,6 +423,14 @@ void OnDeinit(const int reason)
delete eaPatternDetector;
ZeroMemory(eaPatternDetector);
//
delete fima1Signaller;
ZeroMemory(fima1Signaller);
//
delete fima2Signaller;
ZeroMemory(fima2Signaller);
//
delete eaExpert;
ZeroMemory(eaExpert);
@@ -429,7 +458,8 @@ void OnTick()
DetectPatterns();
//
fima1Signaller.OnTick();
// fima1Signaller.OnTick();
fima2Signaller.OnTick();
}
//
@@ -576,6 +606,15 @@ void DestroyTimer()
*/
void OnSignalTriggered(XSignal &signal)
{
//
// Validate Signal ...
if (!signal.IsValid()) {
return;
}
//
// Draw Signal Vertical Line ...
//
CChartObjectVLine *iObj = new CChartObjectVLine();
@@ -599,6 +638,11 @@ void OnSignalTriggered(XSignal &signal)
//
draws.Add(iObj);
}
//
// Alert Issued Signal ...
string message = signal.GetMessage();
}
//
@@ -24,6 +24,7 @@
// Imports ...
#include "../../Classes/x-saherelm.x-signaller.class.mq5"
#include "../../Helpers/x-saherelm.xfima.helper.mq5"
#include "../Classes/x-saherelm.xfima.x-poi.detector.class.mq5"
//
// Implementation ...
@@ -39,8 +40,9 @@ class XCXFIMABaseSignaller : public XCBaseSignaller
// Props ...
//
XFIMAInputs fimaInputs; // XFIMA Inputs ...
XCXFIMAHelper *fimaHelper; // XFIMA Indicator Helper ...
XFIMAInputs fimaInputs; // XFIMA Inputs ...
XCXFIMAHelper *fimaHelper; // XFIMA Indicator Helper ...
XCXFIMAPOIDetector *fimaPOIDetector; // XFIMA POI Detector ...
//
// Constructor ...
@@ -84,6 +86,9 @@ class XCXFIMABaseSignaller : public XCBaseSignaller
ZeroMemory(fimaHelper);
}
}
//
fimaPOIDetector = new XCXFIMAPOIDetector();
}
//
@@ -113,6 +118,10 @@ class XCXFIMABaseSignaller : public XCBaseSignaller
//
delete fimaHelper;
ZeroMemory(fimaHelper);
//
delete fimaPOIDetector;
ZeroMemory(fimaPOIDetector);
}
//
@@ -182,7 +191,8 @@ class XCXFIMABaseSignaller : public XCBaseSignaller
//
// Validate Fima Helper Requirements ...
result = fimaInputs.IsValid() &&
fimaHelper != NULL;
fimaHelper != NULL &&
fimaPOIDetector != NULL;
//
return result;
@@ -519,3 +529,245 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
};
//
// XFIMA Strategy 2 Signaller Class ...
class XCXFIMAStrategy2Signaller : public XCXFIMABaseSignaller
{
//
// Public ...
public:
//
// Props ...
//
// Constructor ...
XCXFIMAStrategy2Signaller(
string _symbol, // Symbol ...
ENUM_TIMEFRAMES _period, // Period ...
XFIMAInputs &_fimaInputs, // XFIMAInputs ...
bool _processAllTicks = false, // Process All Ticks ...
double _defaultSignalR2R = 1.5, // Default Signal Risk To Reward Ratio ...
double _defaultSignalRiskInPoint = 50, // Default Signal Risk In Point ...
double _defaultSignalVolume = 0.01 // Default Signal Volume ...
) : XCXFIMABaseSignaller("XFIMA2",
_symbol,
_period,
_fimaInputs,
_processAllTicks,
_defaultSignalR2R,
_defaultSignalRiskInPoint,
_defaultSignalVolume //
)
{
}
//
// Reading ZigZag ...
//
bool GetZigZagPoint()
{
//
bool result = false;
//
return result;
}
//
// Overrides ...
/**
* Processing Tick ...
*
* @param barIndex: int, Specified Bar Index ...
*/
virtual void ProcessTick(int barIndex = 0)
{
}
/**
* Processing New Bar ...
*
* @param barIndex: int, Specified Bar Index ...
*/
virtual void ProcessNewBar(int barIndex = 0)
{
//
// Normalize ...
barIndex = NormalizeInt(barIndex, 0);
//
// Update Helper ...
fimaHelper.Update(barIndex);
//
XOHCL bar;
XSignal signal;
bool has = false;
int cIdx = barIndex + 1;
int pIdx = cIdx + 1;
ENUM_X_DIRECTION signalDir = X_DIRECTION_NONE;
//
// Initialize Bar as CBar ...
has = bar.Init(
symbol,
period,
cIdx //
);
if (!has)
{
//
bar.Clean();
return;
}
//
// Retrieve Conditions ...
XFIMAConditions fimaConditions;
has = fimaHelper.GetConditions(
fimaConditions,
barIndex,
10 // Loopback ...
);
if (!has)
{
//
bar.Clean();
fimaConditions.Clean();
//
return;
}
//
// Analyse Conditions for Finding Signal ...
bool isBullish = false;
bool isBearish = false;
//
// Chekc Bullish or Bearish Starter Conditions ...
has =
isBullish ||
isBearish;
if (has)
{
//
// Do Conditions Validating ...
//
// Bullish Validation ...
isBullish =
//
isBullish
//
&&
//
// Validations ...
(
//
false
//
)
//
;
//
// Bearish Validation ...
isBearish =
//
isBearish
//
&&
//
// Validations ...
(
//
false
//
)
//
;
//
has =
(isBullish && !isBearish) ||
(isBearish && !isBullish);
if (has)
{
//
// Specified Signal Directions ...
signalDir =
isBullish
? X_DIRECTION_BULLISH
: X_DIRECTION_BEARISH;
}
}
//
// Check Signal Founded ...
has = HasDirection(signalDir);
if (has)
{
//
// TODO: Provided SL ...
//
// Prepare Founded Signal ...
XTarget targets[];
has = PrepareSignal(
signal,
signalDir,
targets //
);
if (has)
{
//
// Notify On Signal Event ...
NotifySignalEventListeners(signal);
}
}
//
// Cleanup Resources ...
bar.Clean();
signal.Clean();
fimaConditions.Clean();
}
/**
* Check Guards Based on MarketConditions ...
*
* @param guards: XGuard[]
* @param barIndex: int
*
* @return ( int )
*/
int virtual CheckForGuard(
XGuard &guards[],
int barIndex = 0 //
)
{
//
int result = 0;
//
SpecifiedClean(guards);
//
result = ArraySize(guards);
//
return result;
}
//
// Private ...
private:
//
// Props ...
//
};
//
@@ -0,0 +1,442 @@
///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Class
// -------------------------------------------------
// Name: XCXFIMAPoiDetector ...
// Description: XFIMA POI Detector Class ...
//
//
// Maintainer:
// ------------
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
//
//////////////////////////////////////////////////////
//
// Global Properties ...
#property library
#property copyright "Copyright 2023, SaherElm IT Center"
#property link "https://saherelm.ir"
#property version "1.00"
#property description "SaherElm XFIMA POI Detector Class"
#property strict
//
// Imports ...
#include "../../Classes/x-saherelm.base.class.mq5"
#include "../../Classes/x-saherelm.x-bar.analyser.class.mq5"
#include "../../Classes/x-saherelm.x-market.pattern.class.mq5"
#include "../Libraries/x-saherelm.xfima.lib.mq5"
//
// Implementation ...
class XCXFIMAPOIDetector : public XCBase
{
//
// Public ...
public:
//
// Props ...
XCBarAnalyser *barAnalyser; // Bar Analyser ...
XCMarketPatternDetector *patternDetector; // Bar Analyser ...
//
// Constructor ...
XCXFIMAPOIDetector()
{
//
barAnalyser = new XCBarAnalyser();
patternDetector = new XCMarketPatternDetector();
}
//
// Deconstructor ...
~XCXFIMAPOIDetector()
{
Destroy();
}
//
// Implementing Parren Detector ...
/**
* Check Specified Bar is Momentum Bar or not ...
*
* @param bar: XOHCL, Specified Bar ...
* @param dir: ENUM_X_DIRECTION a reference for Direction ...
* @param requiredBars: int, bar range for approve Momentum ...
* @param approvedMultiplier: int, a Multipler for approve Momentum ...
*
* @return ( bool )
*/
bool IsMomentumBar(
XOHCL &bar,
ENUM_X_DIRECTION &dir,
int requiredBars = 3,
int approvedMultiplier = 2 //
)
{
//
return patternDetector.IsMomentumBar(
bar,
dir,
requiredBars,
approvedMultiplier //
);
}
/**
* Check Specified Bar is Engulfed Bar or not ...
*
* @param bar: XOHCL, Specified Bar ...
* @param dir: ENUM_X_DIRECTION a reference for Direction ...
*
* @return ( bool )
*/
bool IsEngulfedBar(
XOHCL &bar,
ENUM_X_DIRECTION &dir //
)
{
//
return patternDetector.IsEngulfedBar(
bar,
dir //
);
}
/**
* Check Specified Bar is True Gapped Bar or not ...
*
* @param bar: XOHCL, Specified Bar ...
* @param dir: ENUM_X_DIRECTION a reference for Direction ...
* @param approvedPointMultiplier: double, Gap Validation Multiplier in Point ...
*
* @return ( bool )
*/
bool IsTrueGapedBar(
XOHCL &bar,
ENUM_X_DIRECTION &dir,
double approvedPointMultiplier = 1 //
)
{
//
return patternDetector.IsTrueGapedBar(
bar,
dir,
approvedPointMultiplier //
);
}
/**
* Check Specified Bar is Pinned Bar or not ...
*
* @param bar: XOHCL, Specified Bar ...
* @param dir: ENUM_X_DIRECTION a reference for Direction ...
* @param shadowApprovedMultiplier: int, Shadow Size Approve Multiplier ...
* @param minimumPinBarRangeMultiplier: doubble, Range Size Approve Multiplier in Point ...
* @param forceDirection: bool, Apply Force Bar Type ...
*
* @return ( bool )
*/
bool IsPinnedBar(
XOHCL &bar,
ENUM_X_DIRECTION &dir,
int shadowApprovedMultiplier = 3,
double minimumPinBarRangeMultiplier = 4,
bool forceDirection = false //
)
{
//
return patternDetector.IsPinnedBar(
bar,
dir,
shadowApprovedMultiplier,
minimumPinBarRangeMultiplier,
forceDirection //
);
}
/**
* Check Specified Bar has Star Pattern or not ...
* Morning Star => Bullish
* Evening Star => Bearish
*
* @param bar: XOHCL, Specified Bar ...
* @param dir: ENUM_X_DIRECTION a reference for Direction ...
*
* @return ( bool )
*/
bool IsStartPattern(
XOHCL &bar,
ENUM_X_DIRECTION &dir //
)
{
//
return patternDetector.IsStartPattern(
bar,
dir //
);
}
/**
* Check Specified Bar has Pirecing Pattern or not ...
* Piercing => Bullish
* Dark Cloud Cover => Bearish
*
* @param bar: XOHCL, Specified Bar ...
* @param dir: ENUM_X_DIRECTION a reference for Direction ...
*
* @return ( bool )
*/
bool IsPiercingPattern(
XOHCL &bar,
ENUM_X_DIRECTION &dir //
)
{
//
return patternDetector.IsPiercingPattern(
bar,
dir //
);
}
/**
* Check Specified Bar has Rising Pattern or not ...
*
* @param bar: XOHCL, Specified Bar ...
* @param dir: ENUM_X_DIRECTION a reference for Direction ...
*
* @return ( bool )
*/
bool IsRisingPattern(
XOHCL &bar,
ENUM_X_DIRECTION &dir //
)
{
//
return patternDetector.IsRisingPattern(
bar,
dir //
);
}
/**
* Check Specified Bar has Flag Pattern or not ...
*
* @param bar: XOHCL, Specified Bar ...
* @param dir: ENUM_X_DIRECTION a reference for Direction ...
* @param swingBar: XOHCL, Detected Swing Bar ...
* @param minimumPullbackBars: int, Minimum Shoulders of Swing Bar ...
* @param minimumPullbackBars: int, Minimum Shoulders of Swing Bar ...
*
* @return ( bool )
*/
bool IsFlagPattern(
XOHCL &bar,
ENUM_X_DIRECTION &dir,
XOHCL &swingBar,
int minimumPullbackBars = 3 //
)
{
//
return patternDetector.IsFlagPattern(
bar,
dir,
swingBar,
minimumPullbackBars //
);
}
/**
* Check Specified Bar has SignalKey Bar Pattern or not ...
*
* @param bar: XOHCL, Specified Bar ...
* @param dir: ENUM_X_DIRECTION a reference for Direction ...
* @param shadowApprovedMultiplier: int, Shadow Size Approve Multiplier ...
* @param minimumPinBarRangeMultiplier: doubble, Range Size Approve Multiplier in Point ...
* @param forceDirection: bool, Apply Force Bar Type ...
*
* @return ( bool )
*/
bool IsSignalKeyBarPattern(
XOHCL &bar,
ENUM_X_DIRECTION &dir,
int shadowApprovedMultiplier = 3,
double minimumPinBarRangeMultiplier = 4,
bool forceDirection = false //
)
{
//
return patternDetector.IsSignalKeyBarPattern(
bar,
dir,
shadowApprovedMultiplier,
minimumPinBarRangeMultiplier,
forceDirection //
);
}
/**
* Check For FVG Exists in Specified Loopback Period ...
*
* @param bar: XOHCL, Specified Bar ...
* @param dir: ENUM_X_DIRECTION a reference for Direction ...
* @param fvg: XBoxZone, reference for Holding FVG ...
* @param maxLoopback: int, Max Allowed Loopback to Lookup FVG ...
*
* @return ( bool )
*/
bool HasFVG(
XOHCL &bar,
ENUM_X_DIRECTION &dir,
XBoxZone &fvg,
int maxLoopback = 5 //
)
{
//
return patternDetector.HasFVG(
bar,
dir,
fvg,
maxLoopback //
);
}
/**
* Check For OB Exists in Specified Loopback Period ...
*
* @param bar: XOHCL, Specified Bar ...
* @param dir: ENUM_X_DIRECTION a reference for Direction ...
* @param ob: XBoxZone, reference for Holding OB ...
* @param maxLoopback: int, Max Allowed Loopback to Lookup OB ...
*
* @return ( bool )
*/
bool HasOB(
XOHCL &bar,
ENUM_X_DIRECTION &dir,
XBoxZone &ob,
int maxLoopback = 5 //
)
{
//
return patternDetector.HasOB(
bar,
dir,
ob,
maxLoopback //
);
}
/**
* Check Trend Exists Based on Swings ...
*
* @param bar: XOHCL, Specified Bar ...
* @param dir: ENUM_X_DIRECTION a reference for Direction ...
* @param swings: XOHCL Array, Holds Swings ...
* @param numberOfSwings: int, Number of Swing Points for Detect Trend ...
* @param swingShoulders: int, Swing Shoulders Approvement Length ...
*
* @return ( bool )
*/
bool HasSwingTrend(
XOHCL &bar,
ENUM_X_DIRECTION &dir,
XOHCL &swings[],
int numberOfSwings = 3,
int swingShoulders = 7 //
)
{
//
return patternDetector.HasSwingTrend(
bar,
dir,
swings,
numberOfSwings,
swingShoulders //
);
}
/**
* Check Specified Bar Has Support or not ...
*
* @param bar: XOHCL, Specified Bar ...
* @param support: XOHCL, Supported Bar ...
* @param validationLength: int, Validation Length ...
* @param maxAllowedLoopback: int, Max Allowed Loopback to Detection ...
*
* @return ( bool )
*/
bool HasSupport(
XOHCL &bar,
XOHCL &support,
int validationLength = 21,
int maxAllowedLoopback = 1500 //
)
{
//
return patternDetector.HasSupport(
bar,
support,
validationLength,
maxAllowedLoopback //
);
}
/**
* Check Specified Bar Has Resistance or not ...
*
* @param bar: XOHCL, Specified Bar ...
* @param resistence: XOHCL, Resistanced Bar ...
* @param validationLength: int, Validation Length ...
* @param maxAllowedLoopback: int, Max Allowed Loopback to Detection ...
*
* @return ( bool )
*/
bool HasResistance(
XOHCL &bar,
XOHCL &resistence,
int validationLength = 21,
int maxAllowedLoopback = 1500 //
)
{
//
return patternDetector.HasResistance(
bar,
resistence,
validationLength,
maxAllowedLoopback //
);
}
//
// Tools ...
/**
* Destroy ...
*/
void Destroy()
{
//
delete barAnalyser;
ZeroMemory(barAnalyser);
//
delete patternDetector;
ZeroMemory(patternDetector);
}
//
// Protected ...
protected:
//
//
// Private ...
private:
//
//
};
//
+240
View File
@@ -0,0 +1,240 @@
///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Library
// -------------------------------------------------
// Name: XCXFIMAEALib ...
// Description: XFIMAEA Library ...
//
//
// Maintainer:
// ------------
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
//
//////////////////////////////////////////////////////
//
// Global Properties ...
#property library
#property copyright "Copyright 2023, SaherElm IT Center"
#property link "https://saherelm.ir"
#property version "1.00"
#property description "SaherElm XFIMAEA Library"
#property strict
//
// Imports ...
#include "../../Helpers/x-saherelm.xfima.helper.mq5"
//
// Definitions ...
//
// Enumerations ...
//
// ZigZag Point Type ...
enum ENUM_X_ZIGZAG_POINT_TYPE
{
X_ZIGZAG_POINT_TYPE_NONE = 0, // None
X_ZIGZAG_POINT_TYPE_PEAK = 1, // PEAK
X_ZIGZAG_POINT_TYPE_VALE = 2, // VALE
};
/**
* Validate ...
*
* @param value: ENUM_X_ZIGZAG_POINT_TYPE ...
*
* @return ( bool )
*/
bool IsXValid(ENUM_X_ZIGZAG_POINT_TYPE value)
{
//
bool result = false;
//
result = value != X_ZIGZAG_POINT_TYPE_NONE;
//
return result;
}
/**
* Represent Specified ZigZag Point Type as String ...
*
* @param value: ENUM_X_ZIGZAG_POINT_TYPE ...
*
* @return ( string )
*/
string ToXString(ENUM_X_ZIGZAG_POINT_TYPE value)
{
return EnumToString(value);
}
//
// Structs ...
/**
* Specified ZigZag Point ...
**/
struct XZigZagPoint
{
//
// Props ...
double value; // Value
datetime time; // Time
ENUM_X_DIRECTION dir; // Direction
ENUM_X_ZIGZAG_POINT_TYPE type; // Type
//
// Constructor ...
XZigZagPoint()
{
Clean();
}
//
// Tools ...
/**
* Cleanup Model ...
*/
void Clean()
{
//
value = 0;
time = NULL;
dir = X_DIRECTION_NONE;
type = X_ZIGZAG_POINT_TYPE_NONE;
//
ZeroMemory(this);
}
/**
* Validate Model ...
*
* @return ( bool )
*/
bool IsValid()
{
//
bool result = false;
//
result =
value > 0 &&
IsXValid(type) &&
HasDirection(dir) &&
IsSpecifiedValid(time);
//
return result;
}
/**
* Check Point is Bullish or not ...
*
* @return ( bool )
*/
bool IsBullish()
{
//
bool result = false;
//
result = IsValid() &&
IsSpecifiedBullish(dir);
//
return result;
}
/**
* Check Point is Bearish or not ...
*
* @return ( bool )
*/
bool IsBearish()
{
//
bool result = false;
//
result = IsValid() &&
IsSpecifiedBearish(dir);
//
return result;
}
/**
* Extract Specified Token of Struct ...
*
* @return ( string )
*/
string GetTag()
{
return GetToken(this);
}
/**
* Represent an String Unique Identifier for Chart Objects ...
*
* @return ( string )
*/
string GetObjectID()
{
//
string result = "";
//
if (!IsValid())
{
return result;
}
//
result = GetTag() + "_" + ToXString(dir) + "_" + ToXString(type) + "_" + ToXString(TimeToSeconds(time));
//
return result;
}
/**
* Represent a Point as String ...
*
* @param spacer: string, How to Represent Spaces ...
*
* @return ( string )
*/
string GetMessage(string spacer = NULL)
{
//
string result = "";
//
// Normalize Spacer ...
if (!IsSpecifiedValid(spacer))
{
spacer = " ";
}
//
// Validate ...
if (!IsValid())
{
return result;
}
//
result =
ToXString(dir) + spacer + GetTag() + ":" + spacer +
"Value: " + ToXString(value) + spacer +
"Time: " + ToXString(time) + spacer;
//
return result;
}
};
//
+2 -1
View File
@@ -1,7 +1,8 @@
@echo off
@REM set METAEDITOR="C:\Program Files\MetaTrader 5 General\MetaEditor64.exe"
set METAEDITOR="C:\Program Files\MetaTrader 5 Main\MetaEditor64.exe"
@REM set METAEDITOR="C:\Program Files\MetaTrader 5 Main\MetaEditor64.exe"
set METAEDITOR="C:\Program Files\MetaTrader 5 General\MetaEditor64.exe"
set "LOGFILE=%~dpn1.log"
if "%~1"=="" (
+1
View File
@@ -0,0 +1 @@
set METAEDITOR="C:\Program Files\MetaTrader 5 General\MetaEditor64.exe"
+1
View File
@@ -0,0 +1 @@
set METAEDITOR="C:\Program Files\MetaTrader 5 Main\MetaEditor64.exe"