last ...
This commit is contained in:
@@ -1273,42 +1273,6 @@ bool IsBoxUsed(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Converts a Consolidation Zone ...
|
|
||||||
*
|
|
||||||
* @param zone: XConsolidationZone instance Reference ...
|
|
||||||
* @param dest: XCZone pointer Reference ...
|
|
||||||
*
|
|
||||||
* @return ( bool )
|
|
||||||
*/
|
|
||||||
bool ToZone(
|
|
||||||
XConsolidationZone &zone,
|
|
||||||
XCZone *&dest //
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
//
|
|
||||||
dest = NULL;
|
|
||||||
|
|
||||||
//
|
|
||||||
result = zone.IsValid();
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
dest = new XCZone();
|
|
||||||
dest.Upper(zone.upper);
|
|
||||||
dest.Lower(zone.lower);
|
|
||||||
result = dest.IsValidBoundary();
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Converts to XBoxZone ...
|
* Converts to XBoxZone ...
|
||||||
*
|
*
|
||||||
@@ -1586,7 +1550,7 @@ bool ToBox(
|
|||||||
box.upper = item.upper;
|
box.upper = item.upper;
|
||||||
box.lower = item.lower;
|
box.lower = item.lower;
|
||||||
box.dir = item.breakDir;
|
box.dir = item.breakDir;
|
||||||
box.from = item.initTime;
|
box.from = item.From();
|
||||||
box.symbol = item.symbol;
|
box.symbol = item.symbol;
|
||||||
box.period = item.period;
|
box.period = item.period;
|
||||||
box.to = item.breakerBar.time;
|
box.to = item.breakerBar.time;
|
||||||
@@ -1600,18 +1564,20 @@ bool ToBox(
|
|||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get Oldest Zone ...
|
* Converts to XBoxZone ...
|
||||||
*
|
*
|
||||||
* @return ( int )
|
* @return ( bool )
|
||||||
*/
|
*/
|
||||||
int GetOldest(
|
int ToBox(
|
||||||
XCZone *&source[] //
|
XConsolidationZone &source[],
|
||||||
|
XBoxZone &dest[] //
|
||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
int result = -1;
|
int result = 0;
|
||||||
|
|
||||||
//
|
//
|
||||||
|
Clean(dest);
|
||||||
int count = ArraySize(source);
|
int count = ArraySize(source);
|
||||||
if (!IsValidSize(count))
|
if (!IsValidSize(count))
|
||||||
{
|
{
|
||||||
@@ -1619,68 +1585,36 @@ int GetOldest(
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
XCZone *oldest = NULL;
|
|
||||||
for (int i = 0; i < count; i++)
|
for (int i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
XCZone *iZone = source[i];
|
XConsolidationZone iZone = source[i];
|
||||||
|
|
||||||
//
|
//
|
||||||
bool canSet =
|
XBoxZone iBox;
|
||||||
oldest == NULL ||
|
bool hasBox = ToBox(
|
||||||
(oldest != NULL &&
|
iBox,
|
||||||
oldest.From() > iZone.From());
|
iZone //
|
||||||
if (canSet)
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
if (hasBox)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
result = i;
|
AddRef(
|
||||||
oldest = iZone;
|
iBox,
|
||||||
|
dest //
|
||||||
|
);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Get Youngest Zone ...
|
|
||||||
*
|
|
||||||
* @return ( int )
|
|
||||||
*/
|
|
||||||
int GetYoungest(
|
|
||||||
XCZone *&source[] //
|
|
||||||
)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
int result = -1;
|
|
||||||
|
|
||||||
//
|
|
||||||
int count = ArraySize(source);
|
|
||||||
if (!IsValidSize(count))
|
|
||||||
{
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
//
|
|
||||||
XCZone *youngest = NULL;
|
|
||||||
for (int i = 0; i < count; i++)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
XCZone *iZone = source[i];
|
|
||||||
|
|
||||||
//
|
//
|
||||||
bool canSet =
|
iBox.Clean();
|
||||||
youngest == NULL ||
|
iZone.Clean();
|
||||||
(youngest != NULL &&
|
|
||||||
youngest.From() < iZone.From());
|
|
||||||
if (canSet)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
result = i;
|
|
||||||
youngest = iZone;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = ArraySize(dest);
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -1726,6 +1660,9 @@ int GetOldest(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
selected.Clean();
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -1771,6 +1708,9 @@ int GetYoungest(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
selected.Clean();
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -1816,6 +1756,9 @@ int GetHighest(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
selected.Clean();
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
@@ -1868,6 +1811,254 @@ int GetLowest(
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Oldest Box Index ...
|
||||||
|
*
|
||||||
|
* @param source: XBoxZone instance Reference Collection ...
|
||||||
|
*
|
||||||
|
* @return ( int )
|
||||||
|
*/
|
||||||
|
int GetOldest(
|
||||||
|
XConsolidationZone &source[] //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = -1;
|
||||||
|
|
||||||
|
//
|
||||||
|
int count = ArraySize(source);
|
||||||
|
if (!IsValidSize(count))
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XBoxZone tmpBoxes[];
|
||||||
|
int boxesCount = ToBox(
|
||||||
|
source,
|
||||||
|
tmpBoxes //
|
||||||
|
);
|
||||||
|
if (!IsValidSize(boxesCount))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Clean(tmpBoxes);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XBoxZone selected;
|
||||||
|
for (int i = 0; i < boxesCount; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XBoxZone iBox = tmpBoxes[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
bool canSet =
|
||||||
|
!selected.IsValid()
|
||||||
|
? true
|
||||||
|
: selected.from > iBox.from;
|
||||||
|
if (canSet)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result = i;
|
||||||
|
selected = iBox;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
Clean(tmpBoxes);
|
||||||
|
selected.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Youngest Box Index ...
|
||||||
|
*
|
||||||
|
* @param source: XBoxZone instance Reference Collection ...
|
||||||
|
*
|
||||||
|
* @return ( int )
|
||||||
|
*/
|
||||||
|
int GetYoungest(
|
||||||
|
XConsolidationZone &source[] //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = -1;
|
||||||
|
|
||||||
|
//
|
||||||
|
int count = ArraySize(source);
|
||||||
|
if (!IsValidSize(count))
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XBoxZone tmpBoxes[];
|
||||||
|
int boxesCount = ToBox(
|
||||||
|
source,
|
||||||
|
tmpBoxes //
|
||||||
|
);
|
||||||
|
if (!IsValidSize(boxesCount))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Clean(tmpBoxes);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XBoxZone selected;
|
||||||
|
for (int i = 0; i < boxesCount; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XBoxZone iBox = tmpBoxes[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
bool canSet =
|
||||||
|
!selected.IsValid()
|
||||||
|
? true
|
||||||
|
: selected.from < iBox.from;
|
||||||
|
if (canSet)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result = i;
|
||||||
|
selected = iBox;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
Clean(tmpBoxes);
|
||||||
|
selected.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Highest Box Index ...
|
||||||
|
*
|
||||||
|
* @param source: XBoxZone instance Reference Collection ...
|
||||||
|
*
|
||||||
|
* @return ( int )
|
||||||
|
*/
|
||||||
|
int GetHighest(
|
||||||
|
XConsolidationZone &source[] //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = -1;
|
||||||
|
|
||||||
|
//
|
||||||
|
int count = ArraySize(source);
|
||||||
|
if (!IsValidSize(count))
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XBoxZone tmpBoxes[];
|
||||||
|
int boxesCount = ToBox(
|
||||||
|
source,
|
||||||
|
tmpBoxes //
|
||||||
|
);
|
||||||
|
if (!IsValidSize(boxesCount))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Clean(tmpBoxes);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XBoxZone selected;
|
||||||
|
for (int i = 0; i < boxesCount; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XBoxZone iBox = tmpBoxes[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
bool canSet =
|
||||||
|
!selected.IsValid()
|
||||||
|
? true
|
||||||
|
: selected.upper < iBox.upper;
|
||||||
|
if (canSet)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result = i;
|
||||||
|
selected = iBox;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
Clean(tmpBoxes);
|
||||||
|
selected.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Get Lowest Box Index ...
|
||||||
|
*
|
||||||
|
* @param source: XBoxZone instance Reference Collection ...
|
||||||
|
*
|
||||||
|
* @return ( int )
|
||||||
|
*/
|
||||||
|
int GetLowest(
|
||||||
|
XConsolidationZone &source[] //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int result = -1;
|
||||||
|
|
||||||
|
//
|
||||||
|
int count = ArraySize(source);
|
||||||
|
if (!IsValidSize(count))
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XBoxZone tmpBoxes[];
|
||||||
|
int boxesCount = ToBox(
|
||||||
|
source,
|
||||||
|
tmpBoxes //
|
||||||
|
);
|
||||||
|
if (!IsValidSize(boxesCount))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Clean(tmpBoxes);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XBoxZone selected;
|
||||||
|
for (int i = 0; i < boxesCount; i++)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XBoxZone iBox = tmpBoxes[i];
|
||||||
|
|
||||||
|
//
|
||||||
|
bool canSet =
|
||||||
|
!selected.IsValid()
|
||||||
|
? true
|
||||||
|
: selected.lower > iBox.lower;
|
||||||
|
if (canSet)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
result = i;
|
||||||
|
selected = iBox;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
Clean(tmpBoxes);
|
||||||
|
selected.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
template <typename T>
|
template <typename T>
|
||||||
void SortZones(
|
void SortZones(
|
||||||
|
|||||||
@@ -34,6 +34,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
public:
|
public:
|
||||||
//
|
//
|
||||||
// Props ...
|
// Props ...
|
||||||
|
XOBFVG chochZone;
|
||||||
XOBFVG targetZone;
|
XOBFVG targetZone;
|
||||||
XOBFVG signalZone;
|
XOBFVG signalZone;
|
||||||
XOBFVG waitingZone;
|
XOBFVG waitingZone;
|
||||||
@@ -605,6 +606,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
// Checking Order Flow Break ...
|
// Checking Order Flow Break ...
|
||||||
int breakedIDX = -1;
|
int breakedIDX = -1;
|
||||||
bool isOrderFlowBreaked =
|
bool isOrderFlowBreaked =
|
||||||
|
hasOrderFlow &&
|
||||||
workingZone.IsOrderFlowBreaked(
|
workingZone.IsOrderFlowBreaked(
|
||||||
breakedIDX,
|
breakedIDX,
|
||||||
true, // Force OB Breaked
|
true, // Force OB Breaked
|
||||||
@@ -624,59 +626,21 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
);
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
Clean(workingZone.orderFlow);
|
signalZone = workingZone.orderFlow[breakedIDX];
|
||||||
hasOrderFlow = false;
|
provider = X121SMC_XWZ_PROVIDER_ACTIVATED_CHOCH;
|
||||||
|
|
||||||
|
//
|
||||||
|
ArrayRemove(
|
||||||
|
workingZone.orderFlow,
|
||||||
|
breakedIDX,
|
||||||
|
1 //
|
||||||
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
CleanupArray(
|
CleanupArray(
|
||||||
workingZone.brokenOrderFlow,
|
workingZone.brokenOrderFlow,
|
||||||
10 //
|
10 //
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
|
||||||
// TODO: Here Implement CHOCH Trading Senario ...
|
|
||||||
|
|
||||||
//
|
|
||||||
}
|
|
||||||
result = !isOrderFlowBreaked;
|
|
||||||
if (!result)
|
|
||||||
{
|
|
||||||
//
|
|
||||||
Clean(visionPoiEvents);
|
|
||||||
Clean(analysePoiEvents);
|
|
||||||
Clean(decisionPoiEvents);
|
|
||||||
Clean(consolidationPoiEvents);
|
|
||||||
|
|
||||||
//
|
|
||||||
Clean(visionCycleEvents);
|
|
||||||
Clean(analyseCycleEvents);
|
|
||||||
Clean(decisionCycleEvents);
|
|
||||||
Clean(consolidationCycleEvents);
|
|
||||||
|
|
||||||
//
|
|
||||||
visionState.Clean();
|
|
||||||
analyseState.Clean();
|
|
||||||
decisionState.Clean();
|
|
||||||
consolidationState.Clean();
|
|
||||||
|
|
||||||
//
|
|
||||||
visionConditions.Clean();
|
|
||||||
analyseConditions.Clean();
|
|
||||||
decisionConditions.Clean();
|
|
||||||
consolidationConditions.Clean();
|
|
||||||
|
|
||||||
//
|
|
||||||
visionXConditions.Clean();
|
|
||||||
analyseXConditions.Clean();
|
|
||||||
decisionXConditions.Clean();
|
|
||||||
consolidationXConditions.Clean();
|
|
||||||
|
|
||||||
//
|
|
||||||
mConditions.Clean();
|
|
||||||
consolidationZBar.Clean();
|
|
||||||
|
|
||||||
//
|
|
||||||
return result;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1150,6 +1114,48 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
waitingZone.Clean();
|
waitingZone.Clean();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (signalZone.IsValid() &&
|
||||||
|
provider == X121SMC_XWZ_PROVIDER_ACTIVATED_CHOCH)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
ENUM_X_DIRECTION iForDir = Opposit(signalZone.GetDirection());
|
||||||
|
if (hasNewAnalyseOB &&
|
||||||
|
hasNewAnalyseFVG)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool isSameDir =
|
||||||
|
newAnalyseOB.GetDirection() == iForDir &&
|
||||||
|
newAnalyseFVG.GetDirection() == iForDir;
|
||||||
|
bool isOneInsideAnoter =
|
||||||
|
//
|
||||||
|
(newAnalyseFVG.Upper() < newAnalyseOB.Upper() &&
|
||||||
|
newAnalyseFVG.Upper() > newAnalyseOB.Lower())
|
||||||
|
//
|
||||||
|
||
|
||||||
|
//
|
||||||
|
(newAnalyseOB.Upper() < newAnalyseFVG.Upper() &&
|
||||||
|
newAnalyseOB.Upper() > newAnalyseFVG.Lower())
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isZoneDetected =
|
||||||
|
isSameDir &&
|
||||||
|
isOneInsideAnoter;
|
||||||
|
if (isZoneDetected)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XOBFVG iSignalZone;
|
||||||
|
iSignalZone.ob = newAnalyseOB;
|
||||||
|
iSignalZone.fvg = newAnalyseFVG;
|
||||||
|
|
||||||
|
//
|
||||||
|
chochZone = iSignalZone;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
ZeroMemory(newOB);
|
ZeroMemory(newOB);
|
||||||
ZeroMemory(newFVG);
|
ZeroMemory(newFVG);
|
||||||
@@ -1157,6 +1163,74 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
ZeroMemory(newAnalyseFVG);
|
ZeroMemory(newAnalyseFVG);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isPriceInsideCHOCHZone = false;
|
||||||
|
bool hasCHOCHZone = chochZone.IsValid();
|
||||||
|
if (hasCHOCHZone)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCBaseObject *objects[];
|
||||||
|
bool isCreated = visionCycleHelper
|
||||||
|
.mPOIDrawer
|
||||||
|
.DrawOBFVG(
|
||||||
|
chochZone,
|
||||||
|
objects //
|
||||||
|
);
|
||||||
|
if (isCreated)
|
||||||
|
{
|
||||||
|
AddDrawnObjects(objects);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL cBar;
|
||||||
|
bool isInited = cBar.Init(
|
||||||
|
symbol,
|
||||||
|
period,
|
||||||
|
cIndex //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
isPriceInsideCHOCHZone =
|
||||||
|
isInited &&
|
||||||
|
cBar.low >= chochZone.fvg.Lower() &&
|
||||||
|
cBar.high <= chochZone.fvg.Upper();
|
||||||
|
if (isPriceInsideCHOCHZone)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Reverse Trend and ReCalculate Requirements
|
||||||
|
// For CHOCH Tradng ...
|
||||||
|
|
||||||
|
//
|
||||||
|
trend = chochZone.GetDirection();
|
||||||
|
|
||||||
|
//
|
||||||
|
isBullish = IsBullish(trend);
|
||||||
|
isBearish = IsBearish(trend);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool hasPriority = workingZone
|
||||||
|
.DetectPriority(
|
||||||
|
priority,
|
||||||
|
trend,
|
||||||
|
zIndex,
|
||||||
|
period //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool hasRewardAmount = CalculateRiskReward(
|
||||||
|
priority,
|
||||||
|
reward,
|
||||||
|
amountPercent //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
provider = X121SMC_XWZ_PROVIDER_ACTIVATED_CHOCH;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
cBar.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// Reading Trand Line Value ...
|
// Reading Trand Line Value ...
|
||||||
double zValue = workingZone.GetOrderFlowTrendLinePrice(
|
double zValue = workingZone.GetOrderFlowTrendLinePrice(
|
||||||
@@ -1264,6 +1338,44 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
signalZone.Clean();
|
signalZone.Clean();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// TODO: Implement CHOCH Trading Senario ...
|
||||||
|
bool hasCHOCHConditions =
|
||||||
|
hasCHOCHZone &&
|
||||||
|
chochZone.IsValid() &&
|
||||||
|
isPriceInsideCHOCHZone &&
|
||||||
|
provider == X121SMC_XWZ_PROVIDER_ACTIVATED_CHOCH;
|
||||||
|
|
||||||
|
//
|
||||||
|
hasChochBullishConditions =
|
||||||
|
hasCHOCHConditions &&
|
||||||
|
chochZone.IsBullish();
|
||||||
|
hasChochBearishConditions =
|
||||||
|
hasCHOCHConditions &&
|
||||||
|
chochZone.IsBearish();
|
||||||
|
|
||||||
|
//
|
||||||
|
if (hasCHOCHConditions)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
mConditions.signalZone = chochZone;
|
||||||
|
mConditions.targetZone = targetZone;
|
||||||
|
|
||||||
|
//
|
||||||
|
point = hasChochBullishConditions
|
||||||
|
? chochZone.ob.Upper()
|
||||||
|
: chochZone.ob.Lower();
|
||||||
|
|
||||||
|
//
|
||||||
|
pivot = hasChochBearishConditions
|
||||||
|
? chochZone.ob.Lower()
|
||||||
|
: chochZone.ob.Upper();
|
||||||
|
|
||||||
|
//
|
||||||
|
chochZone.Clean();
|
||||||
|
signalZone.Clean();
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// TODO: Implement Trend Line Trading Senario ...
|
// TODO: Implement Trend Line Trading Senario ...
|
||||||
|
|
||||||
@@ -1276,6 +1388,9 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
//
|
//
|
||||||
// TODO: Implement Support and Resistance Trading Senario ...
|
// TODO: Implement Support and Resistance Trading Senario ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// TODO: Implement Mitigation Blocks Trading Senario ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// Summarize ...
|
// Summarize ...
|
||||||
|
|
||||||
@@ -1287,6 +1402,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
hasSupResBullishConditions ||
|
hasSupResBullishConditions ||
|
||||||
hasTrendLineBullishConditions ||
|
hasTrendLineBullishConditions ||
|
||||||
hasOrderFlowhBullishConditions ||
|
hasOrderFlowhBullishConditions ||
|
||||||
|
hasInsideZoneBullishConditions ||
|
||||||
hasBQuarterLineBullishConditions
|
hasBQuarterLineBullishConditions
|
||||||
//
|
//
|
||||||
;
|
;
|
||||||
@@ -1299,6 +1415,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
hasSupResBearishConditions ||
|
hasSupResBearishConditions ||
|
||||||
hasTrendLineBearishConditions ||
|
hasTrendLineBearishConditions ||
|
||||||
hasOrderFlowhBearishConditions ||
|
hasOrderFlowhBearishConditions ||
|
||||||
|
hasInsideZoneBearishConditions ||
|
||||||
hasBQuarterLineBearishConditions
|
hasBQuarterLineBearishConditions
|
||||||
//
|
//
|
||||||
;
|
;
|
||||||
@@ -1533,13 +1650,21 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
bullishScore,
|
bullishScore,
|
||||||
bearishScore //
|
bearishScore //
|
||||||
);
|
);
|
||||||
|
bool isBullishScorePassed =
|
||||||
|
isBullish &&
|
||||||
|
bullishScore > (bearishScore * 1.5);
|
||||||
|
bool isBearishScorePassed =
|
||||||
|
isBearish &&
|
||||||
|
bearishScore > (bullishScore * 1.5);
|
||||||
|
bool isScorePassed = isBullishScorePassed ||
|
||||||
|
isBearishScorePassed;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Base SL Used Pivot of Conditions ...
|
// Base SL Used Pivot of Conditions ...
|
||||||
Add(
|
// Add(
|
||||||
conditions.pivot,
|
// conditions.pivot,
|
||||||
sls //
|
// sls //
|
||||||
);
|
// );
|
||||||
|
|
||||||
//
|
//
|
||||||
int lowestSupportIDX = -1;
|
int lowestSupportIDX = -1;
|
||||||
@@ -1588,11 +1713,15 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
;
|
;
|
||||||
|
|
||||||
//
|
//
|
||||||
if (isBullish)
|
isSupportRejected =
|
||||||
|
isBullish &&
|
||||||
|
isSupportRejected;
|
||||||
|
if (isSupportRejected)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
double vPivot = conditions.signalZone.supportZones[lowestSupportIDX].Lower();
|
double vPivot = conditions.signalZone.supportZones[lowestSupportIDX].Lower();
|
||||||
bool canSetPivot = conditions.pivot < vPivot;
|
bool canSetPivot = vPivot > conditions.pivot &&
|
||||||
|
vPivot < conditions.point;
|
||||||
if (canSetPivot)
|
if (canSetPivot)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -1609,7 +1738,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
if (IsValidIndex(highestResistanceIDX))
|
if (IsValidIndex(highestResistanceIDX))
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
isSupportRejected =
|
isResistanceRejected =
|
||||||
//
|
//
|
||||||
isBarInited &&
|
isBarInited &&
|
||||||
(
|
(
|
||||||
@@ -1627,11 +1756,15 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
;
|
;
|
||||||
|
|
||||||
//
|
//
|
||||||
if (isBearish)
|
isResistanceRejected =
|
||||||
|
isBearish &&
|
||||||
|
isResistanceRejected;
|
||||||
|
if (isResistanceRejected)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
double vPivot = conditions.signalZone.resistanceZones[highestResistanceIDX].Upper();
|
double vPivot = conditions.signalZone.resistanceZones[highestResistanceIDX].Upper();
|
||||||
bool canSetPivot = conditions.pivot > vPivot;
|
bool canSetPivot = vPivot < conditions.pivot &&
|
||||||
|
vPivot > conditions.point;
|
||||||
if (canSetPivot)
|
if (canSetPivot)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -1650,73 +1783,122 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
//
|
//
|
||||||
// Consolidation Zone Detection ...
|
// Consolidation Zone Detection ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Detect Consolidation Zones ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// Bullish Consolidation Zone ...
|
// Bullish Consolidation Zone ...
|
||||||
XConsolidationZone lastBullishConsolidationZone;
|
XConsolidationZone bullishCZones[];
|
||||||
bool hasBullishConsolidationZone = decisionCycleHelper
|
bool hasBullishConsolidationZone = false;
|
||||||
.GetLastDirectionalConsolidationZone(
|
XConsolidationZone bullishConsolidationZone;
|
||||||
X_DIRECTION_BULLISH,
|
int bullishCZonesCount = decisionCycleHelper.FillConsolidationZones(
|
||||||
lastBullishConsolidationZone //
|
X_DIRECTION_BULLISH,
|
||||||
);
|
bullishCZones //
|
||||||
if (hasBullishConsolidationZone)
|
);
|
||||||
|
bool hasBullishConsolidationZones = IsValidSize(bullishCZonesCount);
|
||||||
|
if (hasBullishConsolidationZones)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Validate Consolidation Zone ...
|
int idx = -1;
|
||||||
hasBullishConsolidationZone =
|
while (HasChild(bullishCZones))
|
||||||
lastBullishConsolidationZone.lower > conditions.pivot;
|
|
||||||
|
|
||||||
//
|
|
||||||
if (isBullish &&
|
|
||||||
hasBullishConsolidationZone)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
double vPivot = lastBullishConsolidationZone.lower;
|
idx = GetYoungest(bullishCZones);
|
||||||
bool canSetPivot = conditions.pivot < vPivot;
|
hasBullishConsolidationZone = IsValidIndex(idx);
|
||||||
if (canSetPivot)
|
if (hasBullishConsolidationZone)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
Add(
|
bullishConsolidationZone = bullishCZones[idx];
|
||||||
vPivot,
|
|
||||||
sls //
|
//
|
||||||
|
ArrayRemove(
|
||||||
|
bullishCZones,
|
||||||
|
idx,
|
||||||
|
1 //
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Check Zone Based On pivot, since this is the SL ...
|
||||||
|
hasBullishConsolidationZone =
|
||||||
|
isBullish &&
|
||||||
|
hasBullishConsolidationZone &&
|
||||||
|
bullishConsolidationZone.lower > conditions.pivot &&
|
||||||
|
bullishConsolidationZone.upper <= conditions.point;
|
||||||
|
if (hasBullishConsolidationZone)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCConsolidationZoneObject *iObj;
|
||||||
|
bool isCreated = decisionCycleHelper.mPOIDrawer.CreateConsolidationZone(
|
||||||
|
bullishConsolidationZone,
|
||||||
|
iObj //
|
||||||
|
);
|
||||||
|
if (isCreated)
|
||||||
|
{
|
||||||
|
mObjects.Add(iObj);
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
bullishConsolidationZone.lower,
|
||||||
|
sls //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lastBullishConsolidationZone.Clean();
|
Clean(bullishCZones);
|
||||||
|
bullishConsolidationZone.Clean();
|
||||||
|
|
||||||
//
|
//
|
||||||
// Bearish Consolidation Zone ...
|
// Bearish Consolidation Zone ...
|
||||||
XConsolidationZone lastBearishConsolidationZone;
|
XConsolidationZone bearishCZones[];
|
||||||
bool hasBearishConsolidationZone = decisionCycleHelper
|
bool hasBearishConsolidationZone = false;
|
||||||
.GetLastDirectionalConsolidationZone(
|
XConsolidationZone bearishConsolidationZone;
|
||||||
X_DIRECTION_BEARISH,
|
int bearishCZonesCount = decisionCycleHelper.FillConsolidationZones(
|
||||||
lastBearishConsolidationZone //
|
X_DIRECTION_BEARISH,
|
||||||
);
|
bearishCZones //
|
||||||
if (hasBearishConsolidationZone)
|
);
|
||||||
|
bool hasBearishConsolidationZones = IsValidSize(bearishCZones);
|
||||||
|
if (hasBearishConsolidationZones)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Validate Consolidation Zone ...
|
int idx = -1;
|
||||||
hasBearishConsolidationZone =
|
while (HasChild(bearishCZones))
|
||||||
lastBearishConsolidationZone.upper < conditions.pivot;
|
|
||||||
|
|
||||||
//
|
|
||||||
if (isBearish &&
|
|
||||||
hasBearishConsolidationZone)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
double vPivot = lastBearishConsolidationZone.upper;
|
idx = GetYoungest(bearishCZones);
|
||||||
bool canSetPivot = conditions.pivot > vPivot;
|
hasBearishConsolidationZone = IsValidIndex(idx);
|
||||||
if (canSetPivot)
|
if (hasBearishConsolidationZone)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
Add(
|
bearishConsolidationZone = bearishCZones[idx];
|
||||||
vPivot,
|
|
||||||
sls //
|
//
|
||||||
|
ArrayRemove(
|
||||||
|
bearishCZones,
|
||||||
|
idx,
|
||||||
|
1 //
|
||||||
);
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
hasBearishConsolidationZone =
|
||||||
|
isBearish &&
|
||||||
|
hasBearishConsolidationZone &&
|
||||||
|
bearishConsolidationZone.upper < conditions.pivot &&
|
||||||
|
bearishConsolidationZone.lower >= conditions.point;
|
||||||
|
if (hasBearishConsolidationZone)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
bearishConsolidationZone.upper,
|
||||||
|
sls //
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
lastBearishConsolidationZone.Clean();
|
Clean(bearishCZones);
|
||||||
|
bearishConsolidationZone.Clean();
|
||||||
|
|
||||||
//
|
//
|
||||||
// Check VWap Crossing ...
|
// Check VWap Crossing ...
|
||||||
@@ -1733,12 +1915,17 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
decisionXConditions.isVWapSwitchedToBullishOrdered)
|
decisionXConditions.isVWapSwitchedToBullishOrdered)
|
||||||
//
|
//
|
||||||
;
|
;
|
||||||
if (isBullish &&
|
|
||||||
isVWapSwitchedToBullish)
|
//
|
||||||
|
isVWapSwitchedToBullish =
|
||||||
|
isBullish &&
|
||||||
|
isVWapSwitchedToBullish;
|
||||||
|
if (isVWapSwitchedToBullish)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
double vPivot = decisionXConditions.vwapMin;
|
double vPivot = decisionXConditions.vwapMin;
|
||||||
bool canSetPivot = conditions.pivot < vPivot;
|
bool canSetPivot = vPivot > conditions.pivot &&
|
||||||
|
vPivot < conditions.point;
|
||||||
if (canSetPivot)
|
if (canSetPivot)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -1761,12 +1948,17 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
decisionXConditions.isVWapSwitchedToBearishOrdered)
|
decisionXConditions.isVWapSwitchedToBearishOrdered)
|
||||||
//
|
//
|
||||||
;
|
;
|
||||||
if (isBearish &&
|
|
||||||
isVWapSwitchedToBearish)
|
//
|
||||||
|
isVWapSwitchedToBearish =
|
||||||
|
isBearish &&
|
||||||
|
isVWapSwitchedToBearish;
|
||||||
|
if (isVWapSwitchedToBearish)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
double vPivot = decisionXConditions.vwapMax;
|
double vPivot = decisionXConditions.vwapMax;
|
||||||
bool canSetPivot = conditions.pivot > vPivot;
|
bool canSetPivot = vPivot < conditions.pivot &&
|
||||||
|
vPivot > conditions.point;
|
||||||
if (canSetPivot)
|
if (canSetPivot)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
@@ -1794,16 +1986,36 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
);
|
);
|
||||||
cBar.Clean();
|
cBar.Clean();
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isCommonsPassed =
|
||||||
|
//
|
||||||
|
(isSupportRejected ||
|
||||||
|
isResistanceRejected ||
|
||||||
|
isVWapSwitchedToBullish ||
|
||||||
|
isVWapSwitchedToBearish ||
|
||||||
|
hasBullishConsolidationZone ||
|
||||||
|
hasBearishConsolidationZone)
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Trigger Conditions ...
|
// Trigger Conditions ...
|
||||||
|
|
||||||
|
//
|
||||||
|
bool canTriggerCHOCHZone =
|
||||||
|
//
|
||||||
|
isScorePassed &&
|
||||||
|
isCommonsPassed &&
|
||||||
|
conditions.provider == X121SMC_XWZ_PROVIDER_ACTIVATED_CHOCH
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool canTriggerActivatedZone =
|
bool canTriggerActivatedZone =
|
||||||
//
|
//
|
||||||
// isPointBreaked &&
|
// isPointBreaked &&
|
||||||
(isSupportRejected ||
|
isScorePassed &&
|
||||||
hasBullishConsolidationZone) &&
|
isCommonsPassed &&
|
||||||
bullishScore > (bearishScore * 1.5) &&
|
|
||||||
conditions.provider == X121SMC_XWZ_PROVIDER_ACTIVATED_ZONE
|
conditions.provider == X121SMC_XWZ_PROVIDER_ACTIVATED_ZONE
|
||||||
//
|
//
|
||||||
;
|
;
|
||||||
@@ -1811,16 +2023,15 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
//
|
//
|
||||||
bool canTriggerPriceInsideZone =
|
bool canTriggerPriceInsideZone =
|
||||||
//
|
//
|
||||||
// isPointBreaked &&
|
isScorePassed &&
|
||||||
(isResistanceRejected ||
|
isCommonsPassed &&
|
||||||
hasBearishConsolidationZone) &&
|
|
||||||
bearishScore > (bullishScore * 1.5) &&
|
|
||||||
conditions.provider == X121SMC_XWZ_PROVIDER_PRICE_INSIDE_ZONE
|
conditions.provider == X121SMC_XWZ_PROVIDER_PRICE_INSIDE_ZONE
|
||||||
//
|
//
|
||||||
;
|
;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool canTrigger = (canTriggerActivatedZone ||
|
bool canTrigger = (canTriggerCHOCHZone ||
|
||||||
|
canTriggerActivatedZone ||
|
||||||
canTriggerPriceInsideZone);
|
canTriggerPriceInsideZone);
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1887,7 +2098,20 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
|
|
||||||
//
|
//
|
||||||
double iAtr = decisionXConditions.atrBuffer[1];
|
double iAtr = decisionXConditions.atrBuffer[1];
|
||||||
iAtr *= 0;
|
iAtr *= 1.5;
|
||||||
|
|
||||||
|
//
|
||||||
|
// Since Pivot Value almost used
|
||||||
|
// as Default SL, if there isn't any Refind SL
|
||||||
|
// we use Default ...
|
||||||
|
if (!HasChild(sls))
|
||||||
|
{
|
||||||
|
//
|
||||||
|
Add(
|
||||||
|
conditions.pivot,
|
||||||
|
sls //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
double slsMin = GetMin(sls);
|
double slsMin = GetMin(sls);
|
||||||
@@ -1895,8 +2119,8 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
|
|
||||||
//
|
//
|
||||||
double sl = isBullish
|
double sl = isBullish
|
||||||
? slsMax - iAtr
|
? slsMin - iAtr
|
||||||
: slsMin + iAtr;
|
: slsMax + iAtr;
|
||||||
double risk = MathAbs(entry - sl);
|
double risk = MathAbs(entry - sl);
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -1953,6 +2177,9 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
//
|
//
|
||||||
;
|
;
|
||||||
|
|
||||||
|
//
|
||||||
|
return false;
|
||||||
|
|
||||||
//
|
//
|
||||||
result = isCycleHelpersValid;
|
result = isCycleHelpersValid;
|
||||||
if (!result)
|
if (!result)
|
||||||
@@ -2417,7 +2644,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Trail Stops Using Consolidation Zones ...
|
// Trail Stops Using Consolidation Zones ...
|
||||||
bool canTraiLonglUsingCZone =
|
bool canTraiLonglUsingCZone =
|
||||||
//
|
//
|
||||||
(isLong &&
|
(isLong &&
|
||||||
isInProfit &&
|
isInProfit &&
|
||||||
@@ -2432,7 +2659,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
bool canTraiShortlUsingCZone =
|
bool canTraiShortlUsingCZone =
|
||||||
//
|
//
|
||||||
(!isLong &&
|
(!isLong &&
|
||||||
isInProfit &&
|
isInProfit &&
|
||||||
@@ -3264,6 +3491,7 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
void DeInit()
|
void DeInit()
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
|
chochZone.Clean();
|
||||||
signalZone.Clean();
|
signalZone.Clean();
|
||||||
targetZone.Clean();
|
targetZone.Clean();
|
||||||
mConditions.Clean();
|
mConditions.Clean();
|
||||||
@@ -3289,7 +3517,9 @@ class XCX121SMCXWZSignalDetector : public XCBase
|
|||||||
value = NormalizeTime(value);
|
value = NormalizeTime(value);
|
||||||
|
|
||||||
//
|
//
|
||||||
|
chochZone.UpdateTo(value);
|
||||||
targetZone.UpdateTo(value);
|
targetZone.UpdateTo(value);
|
||||||
|
signalZone.UpdateTo(value);
|
||||||
workingZone.UpdateTo(value);
|
workingZone.UpdateTo(value);
|
||||||
mConditions.UpdateTo(value);
|
mConditions.UpdateTo(value);
|
||||||
waitingZone.UpdateTo(value);
|
waitingZone.UpdateTo(value);
|
||||||
|
|||||||
@@ -31,6 +31,7 @@ enum ENUM_X121SMC_XWZ_PROVIDERS
|
|||||||
{
|
{
|
||||||
X121SMC_XWZ_PROVIDER_NONE,
|
X121SMC_XWZ_PROVIDER_NONE,
|
||||||
X121SMC_XWZ_PROVIDER_ACTIVATED_ZONE,
|
X121SMC_XWZ_PROVIDER_ACTIVATED_ZONE,
|
||||||
|
X121SMC_XWZ_PROVIDER_ACTIVATED_CHOCH,
|
||||||
X121SMC_XWZ_PROVIDER_PRICE_INSIDE_ZONE,
|
X121SMC_XWZ_PROVIDER_PRICE_INSIDE_ZONE,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -371,9 +371,9 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Configuring Global Protector ...
|
// Configuring Global Protector ...
|
||||||
signal.trailSL = true;
|
// signal.trailSL = true;
|
||||||
signal.trailSLStartOnReachTPLevel = 3;
|
// signal.trailSLStartOnReachTPLevel = 3;
|
||||||
signal.fullTPLevel = signal.GetRiskRewardRatio();
|
// signal.fullTPLevel = signal.GetRiskRewardRatio();
|
||||||
|
|
||||||
// //
|
// //
|
||||||
// mXSupDemOBSSignalDetector.RemoveDraws();
|
// mXSupDemOBSSignalDetector.RemoveDraws();
|
||||||
|
|||||||
Reference in New Issue
Block a user