last ...
This commit is contained in:
@@ -26,6 +26,7 @@
|
|||||||
#include "../Classes/x-saherelm.x-alert.class.mq5"
|
#include "../Classes/x-saherelm.x-alert.class.mq5"
|
||||||
#include "../Classes/x-saherelm.x-chart.helper.class.mq5"
|
#include "../Classes/x-saherelm.x-chart.helper.class.mq5"
|
||||||
#include "../Classes/x-saherelm.x-guard.class.mq5"
|
#include "../Classes/x-saherelm.x-guard.class.mq5"
|
||||||
|
#include "../Classes/x-saherelm.x-position.drawer.class.mq5"
|
||||||
#include "../Classes/x-saherelm.x-signaller.class.mq5"
|
#include "../Classes/x-saherelm.x-signaller.class.mq5"
|
||||||
#include "../Classes/x-saherelm.x-target.class.mq5"
|
#include "../Classes/x-saherelm.x-target.class.mq5"
|
||||||
#include "../Classes/x-saherelm.x-trade-manager.class.mq5"
|
#include "../Classes/x-saherelm.x-trade-manager.class.mq5"
|
||||||
@@ -121,13 +122,14 @@ class XCBaseExpert : public XCBase
|
|||||||
// Requirements ...
|
// Requirements ...
|
||||||
|
|
||||||
//
|
//
|
||||||
XCAlert *eaAlert; // EA Scope Alert Handler ...
|
XCAlert *eaAlert; // EA Scope Alert Handler ...
|
||||||
XCGuard *eaGuard; // EA Scope Guard Handler ...
|
XCGuard *eaGuard; // EA Scope Guard Handler ...
|
||||||
XCTrade *eaTrader; // EA Scope Trade Handler ...
|
XCTrade *eaTrader; // EA Scope Trade Handler ...
|
||||||
XCVolume *eaVolume; // EA Scope Voluem Handler ...
|
XCVolume *eaVolume; // EA Scope Voluem Handler ...
|
||||||
XCTarget *eaTarget; // EA Scope Target Handler ...
|
XCTarget *eaTarget; // EA Scope Target Handler ...
|
||||||
XTimeTracker eaTimeTracker; // EA Scope Time Tracker ...
|
XTimeTracker eaTimeTracker; // EA Scope Time Tracker ...
|
||||||
XCTradeManager *eaTradeManager; // EA Scope Trade Manager Handler ...
|
XCTradeManager *eaTradeManager; // EA Scope Trade Manager Handler ...
|
||||||
|
XCPositionDrawer *eaPositionDrawer; // EA Scope Position Drawer ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// Specified Event Handlers ...
|
// Specified Event Handlers ...
|
||||||
@@ -349,6 +351,10 @@ class XCBaseExpert : public XCBase
|
|||||||
// Initialize Target Handler ...
|
// Initialize Target Handler ...
|
||||||
eaTarget = new XCTarget(eaTrader, eaAlert);
|
eaTarget = new XCTarget(eaTrader, eaAlert);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Init Position Drawer ...
|
||||||
|
eaPositionDrawer = new XCPositionDrawer(eaTrader);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Initialize Trae Manager ...
|
// Initialize Trae Manager ...
|
||||||
eaTradeManager = new XCTradeManager(
|
eaTradeManager = new XCTradeManager(
|
||||||
@@ -452,6 +458,11 @@ class XCBaseExpert : public XCBase
|
|||||||
delete eaTradeManager;
|
delete eaTradeManager;
|
||||||
ZeroMemory(eaTradeManager);
|
ZeroMemory(eaTradeManager);
|
||||||
|
|
||||||
|
//
|
||||||
|
eaPositionDrawer.Destroy();
|
||||||
|
delete eaPositionDrawer;
|
||||||
|
ZeroMemory(eaPositionDrawer);
|
||||||
|
|
||||||
//
|
//
|
||||||
eaTimeTracker.Clean();
|
eaTimeTracker.Clean();
|
||||||
|
|
||||||
@@ -494,6 +505,10 @@ class XCBaseExpert : public XCBase
|
|||||||
// Manage Trades ...
|
// Manage Trades ...
|
||||||
eaTradeManager.Manage();
|
eaTradeManager.Manage();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Manage Positions Drawings ...
|
||||||
|
eaPositionDrawer.Update();
|
||||||
|
|
||||||
//
|
//
|
||||||
int count = ArraySize(eaSignallers);
|
int count = ArraySize(eaSignallers);
|
||||||
bool has = IsValidSize(count);
|
bool has = IsValidSize(count);
|
||||||
@@ -567,6 +582,8 @@ class XCBaseExpert : public XCBase
|
|||||||
*/
|
*/
|
||||||
void HandleOnSignalExecuted(XSignal &signal)
|
void HandleOnSignalExecuted(XSignal &signal)
|
||||||
{
|
{
|
||||||
|
//
|
||||||
|
eaPositionDrawer.AddExecutedSignal(signal);
|
||||||
eaTradeManager.target.AddExecutedSignal(signal);
|
eaTradeManager.target.AddExecutedSignal(signal);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -675,6 +692,7 @@ class XCBaseExpert : public XCBase
|
|||||||
{
|
{
|
||||||
//
|
//
|
||||||
eaTradeManager.HandleSL(deal);
|
eaTradeManager.HandleSL(deal);
|
||||||
|
eaPositionDrawer.HandleStopLossTriggered(deal);
|
||||||
UpdatePanelPositionButtons();
|
UpdatePanelPositionButtons();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -686,8 +704,9 @@ class XCBaseExpert : public XCBase
|
|||||||
void virtual HandleOnTakeProfitTriggered(const XDeal &deal)
|
void virtual HandleOnTakeProfitTriggered(const XDeal &deal)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
eaTradeManager.HandleTP(deal);
|
|
||||||
UpdatePanelPositionButtons();
|
UpdatePanelPositionButtons();
|
||||||
|
eaTradeManager.HandleTP(deal);
|
||||||
|
eaPositionDrawer.HandleOnTakeProfitTriggered(deal);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -704,8 +723,13 @@ class XCBaseExpert : public XCBase
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
eaTradeManager.HandleForceClose(position);
|
|
||||||
UpdatePanelPositionButtons();
|
UpdatePanelPositionButtons();
|
||||||
|
eaTradeManager.HandleForceClose(position);
|
||||||
|
eaPositionDrawer.HandleOnPositionForceClosed(
|
||||||
|
ticket,
|
||||||
|
position,
|
||||||
|
comment //
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -776,6 +800,12 @@ class XCBaseExpert : public XCBase
|
|||||||
const string comment //
|
const string comment //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
|
//
|
||||||
|
eaPositionDrawer.HandleOnPositionModified(
|
||||||
|
ticket,
|
||||||
|
profit,
|
||||||
|
comment //
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -2025,6 +2025,7 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
// Support and Resistance ...
|
// Support and Resistance ...
|
||||||
int supportAndResistanceValidationLength = 21,
|
int supportAndResistanceValidationLength = 21,
|
||||||
int supportAndResistanceLoopbackLength = 50 //
|
int supportAndResistanceLoopbackLength = 50 //
|
||||||
|
//
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -2394,7 +2395,8 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
bool has = ToSupportBox(
|
bool has = ToSupportBox(
|
||||||
iSwing,
|
iSwing,
|
||||||
iZone,
|
iZone,
|
||||||
bar.time //
|
bar.time,
|
||||||
|
supportAndResistanceValidationLength //
|
||||||
);
|
);
|
||||||
if (has)
|
if (has)
|
||||||
{
|
{
|
||||||
@@ -2417,7 +2419,7 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
supportAndResistanceValidationLength,
|
supportAndResistanceValidationLength,
|
||||||
supportAndResistanceLoopbackLength //
|
supportAndResistanceLoopbackLength //
|
||||||
);
|
);
|
||||||
if (isMomentum)
|
if (isResistance)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
iPattern = X_BAR_PATTERN_RESISTANCE;
|
iPattern = X_BAR_PATTERN_RESISTANCE;
|
||||||
@@ -2426,7 +2428,8 @@ class XCMarketPatternDetector : public XCBase
|
|||||||
bool has = ToResistanceBox(
|
bool has = ToResistanceBox(
|
||||||
iSwing,
|
iSwing,
|
||||||
iZone,
|
iZone,
|
||||||
bar.time //
|
bar.time,
|
||||||
|
supportAndResistanceValidationLength //
|
||||||
);
|
);
|
||||||
if (has)
|
if (has)
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -408,6 +408,10 @@ class XCTradeManager : public XCBase
|
|||||||
// Handle Restrictions ...
|
// Handle Restrictions ...
|
||||||
HandleRestrictions();
|
HandleRestrictions();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Managing Targets ...
|
||||||
|
target.Manage();
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check Contains Trades for Managing ...
|
// Check Contains Trades for Managing ...
|
||||||
bool has = HasChild(trades);
|
bool has = HasChild(trades);
|
||||||
|
|||||||
@@ -4051,7 +4051,8 @@ bool SpecifiedHasChild(T &buffer[])
|
|||||||
template <typename T>
|
template <typename T>
|
||||||
bool Remove(
|
bool Remove(
|
||||||
T item,
|
T item,
|
||||||
T &buffer[])
|
T &buffer[] //
|
||||||
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|||||||
@@ -1410,7 +1410,7 @@ struct XPatternAnalysis
|
|||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
result = HasPattern(X_BAR_PATTERN_HIGH);
|
result = HasPattern(X_BAR_PATTERN_LOW);
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
@@ -1637,7 +1637,8 @@ struct XPatternAnalysis
|
|||||||
XPivot &_pivot,
|
XPivot &_pivot,
|
||||||
XBoxZone &_zone,
|
XBoxZone &_zone,
|
||||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||||
|
datetime _toTime = NULL //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -1659,7 +1660,8 @@ struct XPatternAnalysis
|
|||||||
XPivot &_pivot,
|
XPivot &_pivot,
|
||||||
XBoxZone &_zone,
|
XBoxZone &_zone,
|
||||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||||
|
datetime _toTime = NULL //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -1681,7 +1683,8 @@ struct XPatternAnalysis
|
|||||||
XPivot &_pivot,
|
XPivot &_pivot,
|
||||||
XBoxZone &_zone,
|
XBoxZone &_zone,
|
||||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||||
|
datetime _toTime = NULL //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -1703,7 +1706,8 @@ struct XPatternAnalysis
|
|||||||
XPivot &_pivot,
|
XPivot &_pivot,
|
||||||
XBoxZone &_zone,
|
XBoxZone &_zone,
|
||||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||||
|
datetime _toTime = NULL //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -1726,7 +1730,8 @@ struct XPatternAnalysis
|
|||||||
XBoxZone &_zone,
|
XBoxZone &_zone,
|
||||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||||
|
datetime _toTime = NULL //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -1748,7 +1753,8 @@ struct XPatternAnalysis
|
|||||||
XBoxZone &_zone,
|
XBoxZone &_zone,
|
||||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||||
|
datetime _toTime = NULL //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -1770,7 +1776,8 @@ struct XPatternAnalysis
|
|||||||
XBoxZone &_zone,
|
XBoxZone &_zone,
|
||||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||||
|
datetime _toTime = NULL //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -1792,7 +1799,8 @@ struct XPatternAnalysis
|
|||||||
XBoxZone &_zone,
|
XBoxZone &_zone,
|
||||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||||
|
datetime _toTime = NULL //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -1814,7 +1822,8 @@ struct XPatternAnalysis
|
|||||||
XBoxZone &_zone,
|
XBoxZone &_zone,
|
||||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||||
|
datetime _toTime = NULL //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -1836,7 +1845,8 @@ struct XPatternAnalysis
|
|||||||
XBoxZone &_zone,
|
XBoxZone &_zone,
|
||||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||||
|
datetime _toTime = NULL //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -1858,7 +1868,8 @@ struct XPatternAnalysis
|
|||||||
XBoxZone &_zone,
|
XBoxZone &_zone,
|
||||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||||
|
datetime _toTime = NULL //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -1880,7 +1891,8 @@ struct XPatternAnalysis
|
|||||||
XBoxZone &_zone,
|
XBoxZone &_zone,
|
||||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||||
|
datetime _toTime = NULL //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -1902,7 +1914,8 @@ struct XPatternAnalysis
|
|||||||
XBoxZone &_zone,
|
XBoxZone &_zone,
|
||||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||||
|
datetime _toTime = NULL //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -1924,7 +1937,8 @@ struct XPatternAnalysis
|
|||||||
XBoxZone &_zone,
|
XBoxZone &_zone,
|
||||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||||
|
datetime _toTime = NULL //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -1946,7 +1960,8 @@ struct XPatternAnalysis
|
|||||||
XBoxZone &_zone,
|
XBoxZone &_zone,
|
||||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||||
|
datetime _toTime = NULL //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -2057,6 +2072,7 @@ struct XPatternAnalysis
|
|||||||
* @param _patternDir: ENUM_X_DIRECTION, Specified Pattern Direction ...
|
* @param _patternDir: ENUM_X_DIRECTION, Specified Pattern Direction ...
|
||||||
* @param _peakPriceType: ENUM_X_PRICE, Specified Peak Price Type ...
|
* @param _peakPriceType: ENUM_X_PRICE, Specified Peak Price Type ...
|
||||||
* @param _valePriceType: ENUM_X_PRICE, Specified Vale Price Type ...
|
* @param _valePriceType: ENUM_X_PRICE, Specified Vale Price Type ...
|
||||||
|
* @param _toTime: datetime, Specified Time to Update Pivot and Zones ...
|
||||||
*
|
*
|
||||||
* @return ( bool )
|
* @return ( bool )
|
||||||
*/
|
*/
|
||||||
@@ -2067,7 +2083,8 @@ struct XPatternAnalysis
|
|||||||
ENUM_X_BAR_PATTERN _pattern,
|
ENUM_X_BAR_PATTERN _pattern,
|
||||||
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
ENUM_X_DIRECTION _patternDir = X_DIRECTION_NONE,
|
||||||
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
ENUM_X_PRICE _peakPriceType = X_PRICE_HIGH,
|
||||||
ENUM_X_PRICE _valePriceType = X_PRICE_LOW //
|
ENUM_X_PRICE _valePriceType = X_PRICE_LOW,
|
||||||
|
datetime _toTime = NULL //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -2089,6 +2106,7 @@ struct XPatternAnalysis
|
|||||||
{
|
{
|
||||||
_valePriceType = X_PRICE_LOW;
|
_valePriceType = X_PRICE_LOW;
|
||||||
}
|
}
|
||||||
|
_toTime = NormalizeTime(_toTime);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Validate ...
|
// Validate ...
|
||||||
@@ -2131,6 +2149,10 @@ struct XPatternAnalysis
|
|||||||
_peakPriceType,
|
_peakPriceType,
|
||||||
_valePriceType //
|
_valePriceType //
|
||||||
);
|
);
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
_zone.to = _toTime;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Use Custom Data if Pattern Staisfied ...
|
// Use Custom Data if Pattern Staisfied ...
|
||||||
@@ -2281,4 +2303,135 @@ struct XPatternAnalysis
|
|||||||
//
|
//
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct XPatternAnalysisDrawConfig
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Props ...
|
||||||
|
ENUM_X_BAR_PATTERN allowedDraws[]; // Allowed Draw Patterns
|
||||||
|
ENUM_X_BAR_PATTERN allowedDrawZones[]; // Allowed Draw Pattern Zones
|
||||||
|
ENUM_X_BAR_PATTERN allowedDrawPivots[]; // Allowed Draw Pattern Pivots
|
||||||
|
|
||||||
|
//
|
||||||
|
// Constructor ...
|
||||||
|
XPatternAnalysisDrawConfig()
|
||||||
|
{
|
||||||
|
Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Tools ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Cleanup ...
|
||||||
|
*/
|
||||||
|
void Clean()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XClean(allowedDraws);
|
||||||
|
XClean(allowedDrawZones);
|
||||||
|
XClean(allowedDrawPivots);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Default Drawing Config ...
|
||||||
|
*/
|
||||||
|
void Default()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
FullDraw();
|
||||||
|
|
||||||
|
//
|
||||||
|
// Remove Unused From Zones ...
|
||||||
|
Remove(X_BAR_PATTERN_PINNED, allowedDrawZones);
|
||||||
|
Remove(X_BAR_PATTERN_MOMENTUM, allowedDrawZones);
|
||||||
|
Remove(X_BAR_PATTERN_ENGULFED, allowedDrawZones);
|
||||||
|
Remove(X_BAR_PATTERN_TRUE_GAPED, allowedDrawZones);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Remove Unused From Pivots ...
|
||||||
|
Remove(X_BAR_PATTERN_OB, allowedDrawPivots);
|
||||||
|
Remove(X_BAR_PATTERN_FVG, allowedDrawPivots);
|
||||||
|
Remove(X_BAR_PATTERN_SUPPORT, allowedDrawPivots);
|
||||||
|
Remove(X_BAR_PATTERN_RESISTANCE, allowedDrawPivots);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Configure Full Draws ...
|
||||||
|
*/
|
||||||
|
void FullDraw()
|
||||||
|
{
|
||||||
|
//
|
||||||
|
GetAllBarPatters(allowedDraws);
|
||||||
|
GetAllBarPatters(allowedDrawZones);
|
||||||
|
GetAllBarPatters(allowedDrawPivots);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Checkers ...
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Can Draw Specified Pattern ...
|
||||||
|
*
|
||||||
|
* @param pattern: ENUM_X_BAR_PATTERN, Specified Pattern ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool CanDraw(ENUM_X_BAR_PATTERN pattern)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = HasChild(allowedDraws) &&
|
||||||
|
Contains(pattern, allowedDraws);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Can Draw Specified Pattern's Zone ...
|
||||||
|
*
|
||||||
|
* @param pattern: ENUM_X_BAR_PATTERN, Specified Pattern ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool CanDrawZone(ENUM_X_BAR_PATTERN pattern)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
CanDraw(pattern) &&
|
||||||
|
HasChild(allowedDrawZones) &&
|
||||||
|
Contains(pattern, allowedDrawZones);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Check Can Draw Specified Pattern's Pivot ...
|
||||||
|
*
|
||||||
|
* @param pattern: ENUM_X_BAR_PATTERN, Specified Pattern ...
|
||||||
|
*
|
||||||
|
* @return ( bool )
|
||||||
|
*/
|
||||||
|
bool CanDrawPivot(ENUM_X_BAR_PATTERN pattern)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
result =
|
||||||
|
CanDraw(pattern) &&
|
||||||
|
HasChild(allowedDrawPivots) &&
|
||||||
|
Contains(pattern, allowedDrawPivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -4433,32 +4433,64 @@ bool ToFVGBox(
|
|||||||
bool ToSupportBox(
|
bool ToSupportBox(
|
||||||
XOHCL &bar,
|
XOHCL &bar,
|
||||||
XBoxZone &box,
|
XBoxZone &box,
|
||||||
datetime toTime = NULL //
|
datetime toTime = NULL,
|
||||||
|
int validationLength = 0 //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
// Prepare ...
|
||||||
box.Clean();
|
box.Clean();
|
||||||
toTime = NormalizeTime(toTime);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
// Normalize ...
|
||||||
|
toTime = NormalizeTime(toTime);
|
||||||
|
validationLength = NormalizeInt(validationLength, 0);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
result = bar.IsValid();
|
result = bar.IsValid();
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL breaker;
|
||||||
|
result = GetBreakerBar(
|
||||||
|
bar,
|
||||||
|
breaker,
|
||||||
|
X_PRICE_LOW,
|
||||||
|
X_PRICE_DOWN,
|
||||||
|
X_DIRECTION_BEARISH,
|
||||||
|
500 //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
breaker.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
box.to = toTime;
|
box.to = toTime;
|
||||||
box.from = bar.time;
|
box.at = bar.time;
|
||||||
|
box.from =
|
||||||
|
breaker.IsValid()
|
||||||
|
? breaker.time
|
||||||
|
: validationLength <= 0
|
||||||
|
? bar.time
|
||||||
|
: GetBarTime(
|
||||||
|
bar.symbol,
|
||||||
|
bar.period,
|
||||||
|
bar.Index() + validationLength //
|
||||||
|
);
|
||||||
box.lower = bar.low;
|
box.lower = bar.low;
|
||||||
box.symbol = bar.symbol;
|
box.symbol = bar.symbol;
|
||||||
box.period = bar.period;
|
box.period = bar.period;
|
||||||
box.upper = bar.GetDown();
|
box.upper = bar.GetDown();
|
||||||
box.dir = X_DIRECTION_BULLISH;
|
box.dir = X_DIRECTION_BULLISH;
|
||||||
box.type = "Support";
|
box.type = ToXString(X_BAR_PATTERN_SUPPORT);
|
||||||
|
|
||||||
//
|
//
|
||||||
result = box.IsValid();
|
result = box.IsValid();
|
||||||
@@ -4483,32 +4515,65 @@ bool ToSupportBox(
|
|||||||
bool ToResistanceBox(
|
bool ToResistanceBox(
|
||||||
XOHCL &bar,
|
XOHCL &bar,
|
||||||
XBoxZone &box,
|
XBoxZone &box,
|
||||||
datetime toTime = NULL //
|
datetime toTime = NULL,
|
||||||
|
int validationLength = 0 //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
bool result = false;
|
bool result = false;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
// Prepare ...
|
||||||
box.Clean();
|
box.Clean();
|
||||||
toTime = NormalizeTime(toTime);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
|
// Normalize ...
|
||||||
|
toTime = NormalizeTime(toTime);
|
||||||
|
validationLength = NormalizeInt(validationLength, 0);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Validate ...
|
||||||
result = bar.IsValid();
|
result = bar.IsValid();
|
||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL breaker;
|
||||||
|
result = GetBreakerBar(
|
||||||
|
bar,
|
||||||
|
breaker,
|
||||||
|
X_PRICE_HIGH,
|
||||||
|
X_PRICE_UP,
|
||||||
|
X_DIRECTION_BULLISH,
|
||||||
|
500 //
|
||||||
|
);
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
breaker.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
box.to = toTime;
|
box.to = toTime;
|
||||||
box.from = bar.time;
|
box.at = bar.time;
|
||||||
|
box.from =
|
||||||
|
breaker.IsValid()
|
||||||
|
? breaker.time
|
||||||
|
: validationLength <= 0
|
||||||
|
? bar.time
|
||||||
|
: GetBarTime(
|
||||||
|
bar.symbol,
|
||||||
|
bar.period,
|
||||||
|
bar.Index() + validationLength //
|
||||||
|
);
|
||||||
box.upper = bar.high;
|
box.upper = bar.high;
|
||||||
box.symbol = bar.symbol;
|
box.symbol = bar.symbol;
|
||||||
box.period = bar.period;
|
box.period = bar.period;
|
||||||
box.lower = bar.GetUp();
|
box.lower = bar.GetUp();
|
||||||
box.dir = X_DIRECTION_BEARISH;
|
box.dir = X_DIRECTION_BEARISH;
|
||||||
box.type = "Resistance";
|
box.type = ToXString(X_BAR_PATTERN_RESISTANCE);
|
||||||
|
;
|
||||||
|
|
||||||
//
|
//
|
||||||
result = box.IsValid();
|
result = box.IsValid();
|
||||||
|
|||||||
@@ -252,6 +252,39 @@ ENUM_X_BAR_PATTERN ToBarPattern(string value)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get All Available Valid Bar Patterns ...
|
||||||
|
*
|
||||||
|
* @param dest: ENUM_X_BAR_PATTERN, reference collection to fill ...
|
||||||
|
*
|
||||||
|
* @return ( int )
|
||||||
|
*/
|
||||||
|
int GetAllBarPatters(ENUM_X_BAR_PATTERN &dest[])
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XClean(dest);
|
||||||
|
|
||||||
|
//
|
||||||
|
Add(X_BAR_PATTERN_HIGH, dest);
|
||||||
|
Add(X_BAR_PATTERN_LOW, dest);
|
||||||
|
Add(X_BAR_PATTERN_MOMENTUM, dest);
|
||||||
|
Add(X_BAR_PATTERN_ENGULFED, dest);
|
||||||
|
Add(X_BAR_PATTERN_TRUE_GAPED, dest);
|
||||||
|
Add(X_BAR_PATTERN_PINNED, dest);
|
||||||
|
Add(X_BAR_PATTERN_STAR, dest);
|
||||||
|
Add(X_BAR_PATTERN_PIERCING, dest);
|
||||||
|
Add(X_BAR_PATTERN_RISING, dest);
|
||||||
|
Add(X_BAR_PATTERN_FLAG, dest);
|
||||||
|
Add(X_BAR_PATTERN_SIGNALKEY, dest);
|
||||||
|
Add(X_BAR_PATTERN_OB, dest);
|
||||||
|
Add(X_BAR_PATTERN_FVG, dest);
|
||||||
|
Add(X_BAR_PATTERN_SUPPORT, dest);
|
||||||
|
Add(X_BAR_PATTERN_RESISTANCE, dest);
|
||||||
|
|
||||||
|
//
|
||||||
|
return ArraySize(dest);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Structures ...
|
// Structures ...
|
||||||
|
|
||||||
|
|||||||
@@ -585,6 +585,7 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
//
|
//
|
||||||
// Use Default Config ...
|
// Use Default Config ...
|
||||||
);
|
);
|
||||||
|
DrawBarPatternAnalysis(iBarAnalysis);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Disable Signallers ...
|
// Disable Signallers ...
|
||||||
@@ -594,14 +595,14 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
//
|
//
|
||||||
// Strategy 1 ...
|
// Strategy 1 ...
|
||||||
// Works on Support or Resistances Areas ...
|
// Works on Support or Resistances Areas ...
|
||||||
has = Strategy1HasSignal(
|
// has = Strategy1HasSignal(
|
||||||
iBar,
|
// iBar,
|
||||||
iZone,
|
// iZone,
|
||||||
iTargets,
|
// iTargets,
|
||||||
iDir,
|
// iDir,
|
||||||
iFIMAConditions,
|
// iFIMAConditions,
|
||||||
iStructure //
|
// iStructure //
|
||||||
);
|
// );
|
||||||
|
|
||||||
//
|
//
|
||||||
// Strategy 2 ...
|
// Strategy 2 ...
|
||||||
@@ -1247,7 +1248,7 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
IsXBullish(_patternDir)
|
IsXBullish(_patternDir)
|
||||||
? ANCHOR_TOP
|
? ANCHOR_TOP
|
||||||
: ANCHOR_BOTTOM,
|
: ANCHOR_BOTTOM,
|
||||||
_pivot.prefix + "_" + ToXString(TimeToSeconds(_pivot.time)),
|
"Pivot_" + _pivot.prefix + "_" + ToXString(TimeToSeconds(_pivot.time)),
|
||||||
true, // Ignore Bar Tag ...
|
true, // Ignore Bar Tag ...
|
||||||
arrowThreshold // Threshold ...
|
arrowThreshold // Threshold ...
|
||||||
);
|
);
|
||||||
@@ -1270,7 +1271,7 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
_zone,
|
_zone,
|
||||||
iObj,
|
iObj,
|
||||||
ignoreBoxAt,
|
ignoreBoxAt,
|
||||||
_zone.type + "_" + ToXString(TimeToSeconds(_zone.from)) //
|
"Zone_" + _zone.type + "_" + ToXString(TimeToSeconds(_zone.from)) //
|
||||||
);
|
);
|
||||||
if (has)
|
if (has)
|
||||||
{
|
{
|
||||||
@@ -1319,6 +1320,44 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// Configure Draws ...
|
||||||
|
XPatternAnalysisDrawConfig config;
|
||||||
|
config.Default();
|
||||||
|
XClean(config.allowedDraws);
|
||||||
|
XClean(config.allowedDrawZones);
|
||||||
|
XClean(config.allowedDrawPivots);
|
||||||
|
|
||||||
|
//
|
||||||
|
// MOMENTUM ...
|
||||||
|
Add(
|
||||||
|
X_BAR_PATTERN_MOMENTUM,
|
||||||
|
config.allowedDraws //
|
||||||
|
);
|
||||||
|
Add(
|
||||||
|
X_BAR_PATTERN_MOMENTUM,
|
||||||
|
config.allowedDrawZones //
|
||||||
|
);
|
||||||
|
Add(
|
||||||
|
X_BAR_PATTERN_MOMENTUM,
|
||||||
|
config.allowedDrawPivots //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// ENGULFED ...
|
||||||
|
Add(
|
||||||
|
X_BAR_PATTERN_ENGULFED,
|
||||||
|
config.allowedDraws //
|
||||||
|
);
|
||||||
|
Add(
|
||||||
|
X_BAR_PATTERN_ENGULFED,
|
||||||
|
config.allowedDrawZones //
|
||||||
|
);
|
||||||
|
Add(
|
||||||
|
X_BAR_PATTERN_ENGULFED,
|
||||||
|
config.allowedDrawPivots //
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Draw Bar Patterns Analysis ...
|
// Draw Bar Patterns Analysis ...
|
||||||
|
|
||||||
@@ -1331,6 +1370,11 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
ENUM_X_BAR_PATTERN pattern;
|
ENUM_X_BAR_PATTERN pattern;
|
||||||
ENUM_X_DIRECTION patternDir;
|
ENUM_X_DIRECTION patternDir;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool canDraw;
|
||||||
|
bool canDrawZone;
|
||||||
|
bool canDrawPivot;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Support and Resistance ...
|
// Support and Resistance ...
|
||||||
|
|
||||||
@@ -1344,23 +1388,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
//
|
//
|
||||||
pattern = X_BAR_PATTERN_SUPPORT;
|
pattern = X_BAR_PATTERN_SUPPORT;
|
||||||
patternDir = X_DIRECTION_BULLISH;
|
patternDir = X_DIRECTION_BULLISH;
|
||||||
has = barAnalysis.GetPattern(
|
canDraw = config.CanDraw(pattern);
|
||||||
patternBar,
|
if (canDraw)
|
||||||
patternPivot,
|
|
||||||
patternBox,
|
|
||||||
pattern,
|
|
||||||
patternDir //
|
|
||||||
);
|
|
||||||
if (has)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
DrawPattern(
|
has = barAnalysis.GetPattern(
|
||||||
patternBar,
|
patternBar,
|
||||||
patternPivot,
|
patternPivot,
|
||||||
patternBox,
|
patternBox,
|
||||||
pattern,
|
pattern,
|
||||||
patternDir //
|
patternDir //
|
||||||
);
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
canDrawZone = config.CanDrawZone(pattern);
|
||||||
|
if (!canDrawZone)
|
||||||
|
{
|
||||||
|
patternBox.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
canDrawPivot = config.CanDrawPivot(pattern);
|
||||||
|
if (!canDrawPivot)
|
||||||
|
{
|
||||||
|
patternPivot.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
DrawPattern(
|
||||||
|
patternBar,
|
||||||
|
patternPivot,
|
||||||
|
patternBox,
|
||||||
|
pattern,
|
||||||
|
patternDir //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1372,25 +1435,44 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
if (has)
|
if (has)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
pattern = X_BAR_PATTERN_SUPPORT;
|
pattern = X_BAR_PATTERN_RESISTANCE;
|
||||||
patternDir = X_DIRECTION_BEARISH;
|
patternDir = X_DIRECTION_BEARISH;
|
||||||
has = barAnalysis.GetPattern(
|
canDraw = config.CanDraw(pattern);
|
||||||
patternBar,
|
if (canDraw)
|
||||||
patternPivot,
|
|
||||||
patternBox,
|
|
||||||
pattern,
|
|
||||||
patternDir //
|
|
||||||
);
|
|
||||||
if (has)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
DrawPattern(
|
has = barAnalysis.GetPattern(
|
||||||
patternBar,
|
patternBar,
|
||||||
patternPivot,
|
patternPivot,
|
||||||
patternBox,
|
patternBox,
|
||||||
pattern,
|
pattern,
|
||||||
patternDir //
|
patternDir //
|
||||||
);
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
canDrawZone = config.CanDrawZone(pattern);
|
||||||
|
if (!canDrawZone)
|
||||||
|
{
|
||||||
|
patternBox.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
canDrawPivot = config.CanDrawPivot(pattern);
|
||||||
|
if (!canDrawPivot)
|
||||||
|
{
|
||||||
|
patternPivot.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
DrawPattern(
|
||||||
|
patternBar,
|
||||||
|
patternPivot,
|
||||||
|
patternBox,
|
||||||
|
pattern,
|
||||||
|
patternDir //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1407,23 +1489,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
//
|
//
|
||||||
pattern = X_BAR_PATTERN_LOW;
|
pattern = X_BAR_PATTERN_LOW;
|
||||||
patternDir = X_DIRECTION_BULLISH;
|
patternDir = X_DIRECTION_BULLISH;
|
||||||
has = barAnalysis.GetPattern(
|
canDraw = config.CanDraw(pattern);
|
||||||
patternBar,
|
if (canDraw)
|
||||||
patternPivot,
|
|
||||||
patternBox,
|
|
||||||
pattern,
|
|
||||||
patternDir //
|
|
||||||
);
|
|
||||||
if (has)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
DrawPattern(
|
has = barAnalysis.GetPattern(
|
||||||
patternBar,
|
patternBar,
|
||||||
patternPivot,
|
patternPivot,
|
||||||
patternBox,
|
patternBox,
|
||||||
pattern,
|
pattern,
|
||||||
patternDir //
|
patternDir //
|
||||||
);
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
canDrawZone = config.CanDrawZone(pattern);
|
||||||
|
if (!canDrawZone)
|
||||||
|
{
|
||||||
|
patternBox.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
canDrawPivot = config.CanDrawPivot(pattern);
|
||||||
|
if (!canDrawPivot)
|
||||||
|
{
|
||||||
|
patternPivot.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
DrawPattern(
|
||||||
|
patternBar,
|
||||||
|
patternPivot,
|
||||||
|
patternBox,
|
||||||
|
pattern,
|
||||||
|
patternDir //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1437,23 +1538,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
//
|
//
|
||||||
pattern = X_BAR_PATTERN_HIGH;
|
pattern = X_BAR_PATTERN_HIGH;
|
||||||
patternDir = X_DIRECTION_BEARISH;
|
patternDir = X_DIRECTION_BEARISH;
|
||||||
has = barAnalysis.GetPattern(
|
canDraw = config.CanDraw(pattern);
|
||||||
patternBar,
|
if (canDraw)
|
||||||
patternPivot,
|
|
||||||
patternBox,
|
|
||||||
pattern,
|
|
||||||
patternDir //
|
|
||||||
);
|
|
||||||
if (has)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
DrawPattern(
|
has = barAnalysis.GetPattern(
|
||||||
patternBar,
|
patternBar,
|
||||||
patternPivot,
|
patternPivot,
|
||||||
patternBox,
|
patternBox,
|
||||||
pattern,
|
pattern,
|
||||||
patternDir //
|
patternDir //
|
||||||
);
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
canDrawZone = config.CanDrawZone(pattern);
|
||||||
|
if (!canDrawZone)
|
||||||
|
{
|
||||||
|
patternBox.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
canDrawPivot = config.CanDrawPivot(pattern);
|
||||||
|
if (!canDrawPivot)
|
||||||
|
{
|
||||||
|
patternPivot.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
DrawPattern(
|
||||||
|
patternBar,
|
||||||
|
patternPivot,
|
||||||
|
patternBox,
|
||||||
|
pattern,
|
||||||
|
patternDir //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1470,23 +1590,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
isBullish
|
isBullish
|
||||||
? X_DIRECTION_BULLISH
|
? X_DIRECTION_BULLISH
|
||||||
: X_DIRECTION_BEARISH;
|
: X_DIRECTION_BEARISH;
|
||||||
has = barAnalysis.GetPattern(
|
canDraw = config.CanDraw(pattern);
|
||||||
patternBar,
|
if (canDraw)
|
||||||
patternPivot,
|
|
||||||
patternBox,
|
|
||||||
pattern,
|
|
||||||
patternDir //
|
|
||||||
);
|
|
||||||
if (has)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
DrawPattern(
|
has = barAnalysis.GetPattern(
|
||||||
patternBar,
|
patternBar,
|
||||||
patternPivot,
|
patternPivot,
|
||||||
patternBox,
|
patternBox,
|
||||||
pattern,
|
pattern,
|
||||||
patternDir //
|
patternDir //
|
||||||
);
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
canDrawZone = config.CanDrawZone(pattern);
|
||||||
|
if (!canDrawZone)
|
||||||
|
{
|
||||||
|
patternBox.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
canDrawPivot = config.CanDrawPivot(pattern);
|
||||||
|
if (!canDrawPivot)
|
||||||
|
{
|
||||||
|
patternPivot.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
DrawPattern(
|
||||||
|
patternBar,
|
||||||
|
patternPivot,
|
||||||
|
patternBox,
|
||||||
|
pattern,
|
||||||
|
patternDir //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1503,23 +1642,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
isBullish
|
isBullish
|
||||||
? X_DIRECTION_BULLISH
|
? X_DIRECTION_BULLISH
|
||||||
: X_DIRECTION_BEARISH;
|
: X_DIRECTION_BEARISH;
|
||||||
has = barAnalysis.GetPattern(
|
canDraw = config.CanDraw(pattern);
|
||||||
patternBar,
|
if (canDraw)
|
||||||
patternPivot,
|
|
||||||
patternBox,
|
|
||||||
pattern,
|
|
||||||
patternDir //
|
|
||||||
);
|
|
||||||
if (has)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
DrawPattern(
|
has = barAnalysis.GetPattern(
|
||||||
patternBar,
|
patternBar,
|
||||||
patternPivot,
|
patternPivot,
|
||||||
patternBox,
|
patternBox,
|
||||||
pattern,
|
pattern,
|
||||||
patternDir //
|
patternDir //
|
||||||
);
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
canDrawZone = config.CanDrawZone(pattern);
|
||||||
|
if (!canDrawZone)
|
||||||
|
{
|
||||||
|
patternBox.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
canDrawPivot = config.CanDrawPivot(pattern);
|
||||||
|
if (!canDrawPivot)
|
||||||
|
{
|
||||||
|
patternPivot.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
DrawPattern(
|
||||||
|
patternBar,
|
||||||
|
patternPivot,
|
||||||
|
patternBox,
|
||||||
|
pattern,
|
||||||
|
patternDir //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1536,23 +1694,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
isBullish
|
isBullish
|
||||||
? X_DIRECTION_BULLISH
|
? X_DIRECTION_BULLISH
|
||||||
: X_DIRECTION_BEARISH;
|
: X_DIRECTION_BEARISH;
|
||||||
has = barAnalysis.GetPattern(
|
canDraw = config.CanDraw(pattern);
|
||||||
patternBar,
|
if (canDraw)
|
||||||
patternPivot,
|
|
||||||
patternBox,
|
|
||||||
pattern,
|
|
||||||
patternDir //
|
|
||||||
);
|
|
||||||
if (has)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
DrawPattern(
|
has = barAnalysis.GetPattern(
|
||||||
patternBar,
|
patternBar,
|
||||||
patternPivot,
|
patternPivot,
|
||||||
patternBox,
|
patternBox,
|
||||||
pattern,
|
pattern,
|
||||||
patternDir //
|
patternDir //
|
||||||
);
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
canDrawZone = config.CanDrawZone(pattern);
|
||||||
|
if (!canDrawZone)
|
||||||
|
{
|
||||||
|
patternBox.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
canDrawPivot = config.CanDrawPivot(pattern);
|
||||||
|
if (!canDrawPivot)
|
||||||
|
{
|
||||||
|
patternPivot.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
DrawPattern(
|
||||||
|
patternBar,
|
||||||
|
patternPivot,
|
||||||
|
patternBox,
|
||||||
|
pattern,
|
||||||
|
patternDir //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1569,23 +1746,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
isBullish
|
isBullish
|
||||||
? X_DIRECTION_BULLISH
|
? X_DIRECTION_BULLISH
|
||||||
: X_DIRECTION_BEARISH;
|
: X_DIRECTION_BEARISH;
|
||||||
has = barAnalysis.GetPattern(
|
canDraw = config.CanDraw(pattern);
|
||||||
patternBar,
|
if (canDraw)
|
||||||
patternPivot,
|
|
||||||
patternBox,
|
|
||||||
pattern,
|
|
||||||
patternDir //
|
|
||||||
);
|
|
||||||
if (has)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
DrawPattern(
|
has = barAnalysis.GetPattern(
|
||||||
patternBar,
|
patternBar,
|
||||||
patternPivot,
|
patternPivot,
|
||||||
patternBox,
|
patternBox,
|
||||||
pattern,
|
pattern,
|
||||||
patternDir //
|
patternDir //
|
||||||
);
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
canDrawZone = config.CanDrawZone(pattern);
|
||||||
|
if (!canDrawZone)
|
||||||
|
{
|
||||||
|
patternBox.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
canDrawPivot = config.CanDrawPivot(pattern);
|
||||||
|
if (!canDrawPivot)
|
||||||
|
{
|
||||||
|
patternPivot.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
DrawPattern(
|
||||||
|
patternBar,
|
||||||
|
patternPivot,
|
||||||
|
patternBox,
|
||||||
|
pattern,
|
||||||
|
patternDir //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1602,23 +1798,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
isBullish
|
isBullish
|
||||||
? X_DIRECTION_BULLISH
|
? X_DIRECTION_BULLISH
|
||||||
: X_DIRECTION_BEARISH;
|
: X_DIRECTION_BEARISH;
|
||||||
has = barAnalysis.GetPattern(
|
canDraw = config.CanDraw(pattern);
|
||||||
patternBar,
|
if (canDraw)
|
||||||
patternPivot,
|
|
||||||
patternBox,
|
|
||||||
pattern,
|
|
||||||
patternDir //
|
|
||||||
);
|
|
||||||
if (has)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
DrawPattern(
|
has = barAnalysis.GetPattern(
|
||||||
patternBar,
|
patternBar,
|
||||||
patternPivot,
|
patternPivot,
|
||||||
patternBox,
|
patternBox,
|
||||||
pattern,
|
pattern,
|
||||||
patternDir //
|
patternDir //
|
||||||
);
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
canDrawZone = config.CanDrawZone(pattern);
|
||||||
|
if (!canDrawZone)
|
||||||
|
{
|
||||||
|
patternBox.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
canDrawPivot = config.CanDrawPivot(pattern);
|
||||||
|
if (!canDrawPivot)
|
||||||
|
{
|
||||||
|
patternPivot.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
DrawPattern(
|
||||||
|
patternBar,
|
||||||
|
patternPivot,
|
||||||
|
patternBox,
|
||||||
|
pattern,
|
||||||
|
patternDir //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1635,23 +1850,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
isBullish
|
isBullish
|
||||||
? X_DIRECTION_BULLISH
|
? X_DIRECTION_BULLISH
|
||||||
: X_DIRECTION_BEARISH;
|
: X_DIRECTION_BEARISH;
|
||||||
has = barAnalysis.GetPattern(
|
canDraw = config.CanDraw(pattern);
|
||||||
patternBar,
|
if (canDraw)
|
||||||
patternPivot,
|
|
||||||
patternBox,
|
|
||||||
pattern,
|
|
||||||
patternDir //
|
|
||||||
);
|
|
||||||
if (has)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
DrawPattern(
|
has = barAnalysis.GetPattern(
|
||||||
patternBar,
|
patternBar,
|
||||||
patternPivot,
|
patternPivot,
|
||||||
patternBox,
|
patternBox,
|
||||||
pattern,
|
pattern,
|
||||||
patternDir //
|
patternDir //
|
||||||
);
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
canDrawZone = config.CanDrawZone(pattern);
|
||||||
|
if (!canDrawZone)
|
||||||
|
{
|
||||||
|
patternBox.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
canDrawPivot = config.CanDrawPivot(pattern);
|
||||||
|
if (!canDrawPivot)
|
||||||
|
{
|
||||||
|
patternPivot.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
DrawPattern(
|
||||||
|
patternBar,
|
||||||
|
patternPivot,
|
||||||
|
patternBox,
|
||||||
|
pattern,
|
||||||
|
patternDir //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1668,23 +1902,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
isBullish
|
isBullish
|
||||||
? X_DIRECTION_BULLISH
|
? X_DIRECTION_BULLISH
|
||||||
: X_DIRECTION_BEARISH;
|
: X_DIRECTION_BEARISH;
|
||||||
has = barAnalysis.GetPattern(
|
canDraw = config.CanDraw(pattern);
|
||||||
patternBar,
|
if (canDraw)
|
||||||
patternPivot,
|
|
||||||
patternBox,
|
|
||||||
pattern,
|
|
||||||
patternDir //
|
|
||||||
);
|
|
||||||
if (has)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
DrawPattern(
|
has = barAnalysis.GetPattern(
|
||||||
patternBar,
|
patternBar,
|
||||||
patternPivot,
|
patternPivot,
|
||||||
patternBox,
|
patternBox,
|
||||||
pattern,
|
pattern,
|
||||||
patternDir //
|
patternDir //
|
||||||
);
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
canDrawZone = config.CanDrawZone(pattern);
|
||||||
|
if (!canDrawZone)
|
||||||
|
{
|
||||||
|
patternBox.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
canDrawPivot = config.CanDrawPivot(pattern);
|
||||||
|
if (!canDrawPivot)
|
||||||
|
{
|
||||||
|
patternPivot.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
DrawPattern(
|
||||||
|
patternBar,
|
||||||
|
patternPivot,
|
||||||
|
patternBox,
|
||||||
|
pattern,
|
||||||
|
patternDir //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1701,23 +1954,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
isBullish
|
isBullish
|
||||||
? X_DIRECTION_BULLISH
|
? X_DIRECTION_BULLISH
|
||||||
: X_DIRECTION_BEARISH;
|
: X_DIRECTION_BEARISH;
|
||||||
has = barAnalysis.GetPattern(
|
canDraw = config.CanDraw(pattern);
|
||||||
patternBar,
|
if (canDraw)
|
||||||
patternPivot,
|
|
||||||
patternBox,
|
|
||||||
pattern,
|
|
||||||
patternDir //
|
|
||||||
);
|
|
||||||
if (has)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
DrawPattern(
|
has = barAnalysis.GetPattern(
|
||||||
patternBar,
|
patternBar,
|
||||||
patternPivot,
|
patternPivot,
|
||||||
patternBox,
|
patternBox,
|
||||||
pattern,
|
pattern,
|
||||||
patternDir //
|
patternDir //
|
||||||
);
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
canDrawZone = config.CanDrawZone(pattern);
|
||||||
|
if (!canDrawZone)
|
||||||
|
{
|
||||||
|
patternBox.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
canDrawPivot = config.CanDrawPivot(pattern);
|
||||||
|
if (!canDrawPivot)
|
||||||
|
{
|
||||||
|
patternPivot.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
DrawPattern(
|
||||||
|
patternBar,
|
||||||
|
patternPivot,
|
||||||
|
patternBox,
|
||||||
|
pattern,
|
||||||
|
patternDir //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1734,23 +2006,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
isBullish
|
isBullish
|
||||||
? X_DIRECTION_BULLISH
|
? X_DIRECTION_BULLISH
|
||||||
: X_DIRECTION_BEARISH;
|
: X_DIRECTION_BEARISH;
|
||||||
has = barAnalysis.GetPattern(
|
canDraw = config.CanDraw(pattern);
|
||||||
patternBar,
|
if (canDraw)
|
||||||
patternPivot,
|
|
||||||
patternBox,
|
|
||||||
pattern,
|
|
||||||
patternDir //
|
|
||||||
);
|
|
||||||
if (has)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
DrawPattern(
|
has = barAnalysis.GetPattern(
|
||||||
patternBar,
|
patternBar,
|
||||||
patternPivot,
|
patternPivot,
|
||||||
patternBox,
|
patternBox,
|
||||||
pattern,
|
pattern,
|
||||||
patternDir //
|
patternDir //
|
||||||
);
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
canDrawZone = config.CanDrawZone(pattern);
|
||||||
|
if (!canDrawZone)
|
||||||
|
{
|
||||||
|
patternBox.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
canDrawPivot = config.CanDrawPivot(pattern);
|
||||||
|
if (!canDrawPivot)
|
||||||
|
{
|
||||||
|
patternPivot.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
DrawPattern(
|
||||||
|
patternBar,
|
||||||
|
patternPivot,
|
||||||
|
patternBox,
|
||||||
|
pattern,
|
||||||
|
patternDir //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1767,23 +2058,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
isBullish
|
isBullish
|
||||||
? X_DIRECTION_BULLISH
|
? X_DIRECTION_BULLISH
|
||||||
: X_DIRECTION_BEARISH;
|
: X_DIRECTION_BEARISH;
|
||||||
has = barAnalysis.GetPattern(
|
canDraw = config.CanDraw(pattern);
|
||||||
patternBar,
|
if (canDraw)
|
||||||
patternPivot,
|
|
||||||
patternBox,
|
|
||||||
pattern,
|
|
||||||
patternDir //
|
|
||||||
);
|
|
||||||
if (has)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
DrawPattern(
|
has = barAnalysis.GetPattern(
|
||||||
patternBar,
|
patternBar,
|
||||||
patternPivot,
|
patternPivot,
|
||||||
patternBox,
|
patternBox,
|
||||||
pattern,
|
pattern,
|
||||||
patternDir //
|
patternDir //
|
||||||
);
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
canDrawZone = config.CanDrawZone(pattern);
|
||||||
|
if (!canDrawZone)
|
||||||
|
{
|
||||||
|
patternBox.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
canDrawPivot = config.CanDrawPivot(pattern);
|
||||||
|
if (!canDrawPivot)
|
||||||
|
{
|
||||||
|
patternPivot.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
DrawPattern(
|
||||||
|
patternBar,
|
||||||
|
patternPivot,
|
||||||
|
patternBox,
|
||||||
|
pattern,
|
||||||
|
patternDir //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1800,23 +2110,42 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
|
|||||||
isBullish
|
isBullish
|
||||||
? X_DIRECTION_BULLISH
|
? X_DIRECTION_BULLISH
|
||||||
: X_DIRECTION_BEARISH;
|
: X_DIRECTION_BEARISH;
|
||||||
has = barAnalysis.GetPattern(
|
canDraw = config.CanDraw(pattern);
|
||||||
patternBar,
|
if (canDraw)
|
||||||
patternPivot,
|
|
||||||
patternBox,
|
|
||||||
pattern,
|
|
||||||
patternDir //
|
|
||||||
);
|
|
||||||
if (has)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
DrawPattern(
|
has = barAnalysis.GetPattern(
|
||||||
patternBar,
|
patternBar,
|
||||||
patternPivot,
|
patternPivot,
|
||||||
patternBox,
|
patternBox,
|
||||||
pattern,
|
pattern,
|
||||||
patternDir //
|
patternDir //
|
||||||
);
|
);
|
||||||
|
if (has)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
canDrawZone = config.CanDrawZone(pattern);
|
||||||
|
if (!canDrawZone)
|
||||||
|
{
|
||||||
|
patternBox.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
canDrawPivot = config.CanDrawPivot(pattern);
|
||||||
|
if (!canDrawPivot)
|
||||||
|
{
|
||||||
|
patternPivot.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
DrawPattern(
|
||||||
|
patternBar,
|
||||||
|
patternPivot,
|
||||||
|
patternBox,
|
||||||
|
pattern,
|
||||||
|
patternDir //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user