last ...
This commit is contained in:
@@ -1845,25 +1845,36 @@ class XCSignalObject : public XCBaseObject
|
||||
|
||||
//
|
||||
// TARGET ...
|
||||
if (signal.target > 0)
|
||||
bool hasTargets = HasChild(signal.targets);
|
||||
if (hasTargets)
|
||||
{
|
||||
//
|
||||
string targetName = ToString(X_TARGET) + "_" + nameMD5;
|
||||
int targetsCount = ArraySize(signal.targets);
|
||||
for (int i = 0; i < targetsCount; i++)
|
||||
{
|
||||
//
|
||||
string targetName = ToString(X_TARGET) + "_" + ToString(i) + "_" + nameMD5;
|
||||
CChartObjectTrend *mTargetTrend;
|
||||
mTargetTrend = new CChartObjectTrend();
|
||||
result = mTargetTrend.Create(
|
||||
chart_id,
|
||||
targetName,
|
||||
window,
|
||||
time1,
|
||||
signal.target,
|
||||
signal.targets[i],
|
||||
time2,
|
||||
signal.target //
|
||||
signal.targets[i] //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
mTPTrend.Delete();
|
||||
mSLTrend.Delete();
|
||||
return result;
|
||||
break;
|
||||
}
|
||||
|
||||
//
|
||||
mTargetTrends.Add(mTargetTrend);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1884,7 +1895,7 @@ class XCSignalObject : public XCBaseObject
|
||||
//
|
||||
mTPTrend.Delete();
|
||||
mSLTrend.Delete();
|
||||
mTargetTrend.Delete();
|
||||
mTargetTrends.Clear();
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -1996,7 +2007,12 @@ class XCSignalObject : public XCBaseObject
|
||||
}
|
||||
|
||||
//
|
||||
mTargetTrend.Width(value);
|
||||
for (int i = 0; i < mTargetTrends.Total(); i++)
|
||||
{
|
||||
//
|
||||
CChartObjectTrend *iTrend = (CChartObjectTrend *)mTargetTrends.At(i);
|
||||
iTrend.Width(value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2006,7 +2022,13 @@ class XCSignalObject : public XCBaseObject
|
||||
*/
|
||||
void TargetColor(color value)
|
||||
{
|
||||
mTargetTrend.Color(value);
|
||||
//
|
||||
for (int i = 0; i < mTargetTrends.Total(); i++)
|
||||
{
|
||||
//
|
||||
CChartObjectTrend *iTrend = (CChartObjectTrend *)mTargetTrends.At(i);
|
||||
iTrend.Color(value);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -2016,7 +2038,13 @@ class XCSignalObject : public XCBaseObject
|
||||
*/
|
||||
void TargetStyle(ENUM_LINE_STYLE value)
|
||||
{
|
||||
mTargetTrend.Style(value);
|
||||
//
|
||||
for (int i = 0; i < mTargetTrends.Total(); i++)
|
||||
{
|
||||
//
|
||||
CChartObjectTrend *iTrend = (CChartObjectTrend *)mTargetTrends.At(i);
|
||||
iTrend.Style(value);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
@@ -2077,7 +2105,7 @@ class XCSignalObject : public XCBaseObject
|
||||
CChartObjectTrend mTPTrend;
|
||||
CChartObjectTrend mSLTrend;
|
||||
CChartObjectTrend mEntryTrend;
|
||||
CChartObjectTrend mTargetTrend;
|
||||
CArrayObj mTargetTrends;
|
||||
};
|
||||
|
||||
class XCOHCLObject : public XCBaseObject
|
||||
|
||||
+2324
-3512
File diff suppressed because it is too large
Load Diff
@@ -3924,24 +3924,6 @@ class XCPOIDrawer : public XCBase
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
if (drawTicksZone && state.ticksZone != NULL)
|
||||
{
|
||||
//
|
||||
XCTicksZoneObject *iObj;
|
||||
bool isCreated = CreateTicksZone(
|
||||
state.ticksZone,
|
||||
iObj //
|
||||
);
|
||||
if (isCreated)
|
||||
{
|
||||
Add(
|
||||
(XCBaseObject *)iObj,
|
||||
drawnObjects //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
result = ArraySize(drawnObjects);
|
||||
|
||||
@@ -4629,170 +4611,6 @@ class XCPOIDrawer : public XCBase
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Supply Zones ...
|
||||
has = item.HasSupplyZones();
|
||||
if (has &&
|
||||
drawSupplyZones)
|
||||
{
|
||||
//
|
||||
Clean(tmpObjects);
|
||||
count = item.CountSupplyZones();
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCSupplyZoneObject *iZoneObj;
|
||||
has = CreateSupplyZone(
|
||||
item.supplyZones[i],
|
||||
iZoneObj //
|
||||
);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
Add(
|
||||
(XCBaseObject *)iZoneObj,
|
||||
tmpObjects //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
count = ArraySize(tmpObjects);
|
||||
has = IsValidSize(count);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
Copy(
|
||||
tmpObjects,
|
||||
objects,
|
||||
false //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Demand Zones ...
|
||||
has = item.HasDemandZones();
|
||||
if (has &&
|
||||
drawDemandZones)
|
||||
{
|
||||
//
|
||||
Clean(tmpObjects);
|
||||
count = item.CountDemandZones();
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCDemandZoneObject *iZoneObj;
|
||||
has = CreateDemandZone(
|
||||
item.demandZones[i],
|
||||
iZoneObj //
|
||||
);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
Add(
|
||||
(XCBaseObject *)iZoneObj,
|
||||
tmpObjects //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
count = ArraySize(tmpObjects);
|
||||
has = IsValidSize(count);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
Copy(
|
||||
tmpObjects,
|
||||
objects,
|
||||
false //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Support Zones ...
|
||||
has = item.HasSupportZones();
|
||||
if (has &&
|
||||
drawSupportZones)
|
||||
{
|
||||
//
|
||||
Clean(tmpObjects);
|
||||
count = item.CountSupportZones();
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCSupportZoneObject *iZoneObj;
|
||||
has = CreateSupportZone(
|
||||
item.supportZones[i],
|
||||
iZoneObj //
|
||||
);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
Add(
|
||||
(XCBaseObject *)iZoneObj,
|
||||
tmpObjects //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
count = ArraySize(tmpObjects);
|
||||
has = IsValidSize(count);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
Copy(
|
||||
tmpObjects,
|
||||
objects,
|
||||
false //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Resistance Zones ...
|
||||
has = item.HasResistanceZones();
|
||||
if (has &&
|
||||
drawResistanceZones)
|
||||
{
|
||||
//
|
||||
Clean(tmpObjects);
|
||||
count = item.CountResistanceZones();
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCResistanceZoneObject *iZoneObj;
|
||||
has = CreateResistanceZone(
|
||||
item.resistanceZones[i],
|
||||
iZoneObj //
|
||||
);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
Add(
|
||||
(XCBaseObject *)iZoneObj,
|
||||
tmpObjects //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
count = ArraySize(tmpObjects);
|
||||
has = IsValidSize(count);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
Copy(
|
||||
tmpObjects,
|
||||
objects,
|
||||
false //
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
Clean(tmpObjects);
|
||||
|
||||
|
||||
@@ -0,0 +1,97 @@
|
||||
|
||||
//
|
||||
// Fix Signal TP Based On Working Zone ...
|
||||
// double maxAllowedTP =
|
||||
// hasLong
|
||||
// ? mXWZConditions.workingZone.upper
|
||||
// : mXWZConditions.workingZone.lower;
|
||||
// bool canApplyMaxAlowedTP = (hasLong &&
|
||||
// signal.tp > maxAllowedTP) ||
|
||||
// (!hasLong && signal.tp < maxAllowedTP);
|
||||
// if (canApplyMaxAlowedTP)
|
||||
// {
|
||||
// signal.tp = maxAllowedTP;
|
||||
// }
|
||||
|
||||
//
|
||||
// Configuring Global Protector ...
|
||||
// signal.trailSL = true;
|
||||
// signal.trailSLStartOnReachTPLevel = 3;
|
||||
// signal.fullTPLevel = signal.GetRiskRewardRatio();
|
||||
|
||||
// //
|
||||
// mXSupDemOBSSignalDetector.RemoveDraws();
|
||||
// mXSupDemOBSSignalDetector.DrawConditions(
|
||||
// mXSupDemOBSConditions,
|
||||
// mVisionCycleHelper.mPOIDrawer //
|
||||
// );
|
||||
|
||||
// //
|
||||
// mXSupDemOBSSignalDetector.RemoveWorkingZoneDraws();
|
||||
// mXSupDemOBSSignalDetector.DrawWorkingZone(
|
||||
// mXSupDemOBSConditions,
|
||||
// mVisionCycleHelper.mPOIDrawer //
|
||||
// );
|
||||
|
||||
//
|
||||
// bool canReplaceTarget =
|
||||
// signal.target > 0 &&
|
||||
// (hasLong
|
||||
// ? signal.target > signal.tp
|
||||
// : signal.target < signal.tp);
|
||||
// if (canReplaceTarget)
|
||||
// {
|
||||
// //
|
||||
// signal.tp = conditions.target;
|
||||
// signal.target = tp;
|
||||
// }
|
||||
|
||||
|
||||
//
|
||||
// consolidationState.UpdateTo(cTime);
|
||||
// XPOIState filtered;
|
||||
// consolidationState.Filter(
|
||||
// filtered,
|
||||
// NULL,
|
||||
// XZONE_STATE_PASSED,
|
||||
// false,
|
||||
// XZONE_STATE_FAILED,
|
||||
// false,
|
||||
// XZONE_STATE_FAILED,
|
||||
// false,
|
||||
// XZONE_STATE_IGNORED,
|
||||
// false //
|
||||
// );
|
||||
// XCBaseObject *objects[];
|
||||
// int objectsCount = drawer.DrawState(
|
||||
// filtered,
|
||||
// objects //
|
||||
// );
|
||||
// if (IsValidSize(objectsCount))
|
||||
// {
|
||||
// //
|
||||
// Print("");
|
||||
// }
|
||||
|
||||
// //
|
||||
// XOBFVG activeObfvgs[];
|
||||
// int activeObfvgsCount = ExtractOBFVGs(
|
||||
// activeObfvgs,
|
||||
// consolidationState,
|
||||
// analyseState //
|
||||
// );
|
||||
// bool hasActiveOBFVGs = IsValidSize(activeObfvgsCount);
|
||||
// if (hasActiveOBFVGs)
|
||||
// {
|
||||
// //
|
||||
// SpecifiedUpdateTo(activeObfvgs);
|
||||
// for (int i = 0; i < activeObfvgsCount; i++)
|
||||
// {
|
||||
// //
|
||||
// XCBaseObject *objects[];
|
||||
// int objectsCount = drawer.DrawOBFVG(
|
||||
// activeObfvgs[i],
|
||||
// objects //
|
||||
// );
|
||||
// }
|
||||
// }
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -22,146 +22,11 @@
|
||||
//
|
||||
// Imports ...
|
||||
#include "../Libraries/x-saherelm.x-poi.lib.mq5"
|
||||
#include "../Libraries/x-saherelm.xobfvg.lib.mq5"
|
||||
#include "../Libraries/x-saherelm.x-poi.state.lib.mq5"
|
||||
|
||||
//
|
||||
// Extensions ...
|
||||
|
||||
/**
|
||||
* Combine a Collection of States into dest ...
|
||||
*
|
||||
* @param dest: XPOIState instance ...
|
||||
* @param source: XPOIState Collection ...
|
||||
*/
|
||||
void CombineStates(
|
||||
XPOIState &dest,
|
||||
XPOIState &source[] //
|
||||
)
|
||||
{
|
||||
//
|
||||
dest.Clean();
|
||||
|
||||
//
|
||||
int count = ArraySize(source);
|
||||
if (!IsValidSize(count))
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XPOIState iState = source[i];
|
||||
|
||||
//
|
||||
if (dest.ticksZone == NULL)
|
||||
{
|
||||
dest.ticksZone = iState.ticksZone;
|
||||
}
|
||||
|
||||
//
|
||||
Copy(
|
||||
iState.swingHighs,
|
||||
dest.swingHighs,
|
||||
false //
|
||||
);
|
||||
|
||||
//
|
||||
Copy(
|
||||
iState.swingLows,
|
||||
dest.swingLows,
|
||||
false //
|
||||
);
|
||||
|
||||
//
|
||||
Copy(
|
||||
iState.bullishMomentumBars,
|
||||
dest.bullishMomentumBars,
|
||||
false //
|
||||
);
|
||||
|
||||
//
|
||||
Copy(
|
||||
iState.bearishMomentumBars,
|
||||
dest.bearishMomentumBars,
|
||||
false //
|
||||
);
|
||||
|
||||
//
|
||||
Copy(
|
||||
iState.bullishRejectionBars,
|
||||
dest.bullishRejectionBars,
|
||||
false //
|
||||
);
|
||||
|
||||
//
|
||||
Copy(
|
||||
iState.bearishRejectionBars,
|
||||
dest.bearishRejectionBars,
|
||||
false //
|
||||
);
|
||||
|
||||
//
|
||||
Copy(
|
||||
iState.supportZones,
|
||||
dest.supportZones,
|
||||
false //
|
||||
);
|
||||
|
||||
//
|
||||
Copy(
|
||||
iState.resistanceZones,
|
||||
dest.resistanceZones,
|
||||
false //
|
||||
);
|
||||
|
||||
//
|
||||
Copy(
|
||||
iState.supplyZones,
|
||||
dest.supplyZones,
|
||||
false //
|
||||
);
|
||||
|
||||
//
|
||||
Copy(
|
||||
iState.demandZones,
|
||||
dest.demandZones,
|
||||
false //
|
||||
);
|
||||
|
||||
//
|
||||
Copy(
|
||||
iState.bullishOrderBlocks,
|
||||
dest.bullishOrderBlocks,
|
||||
false //
|
||||
);
|
||||
|
||||
//
|
||||
Copy(
|
||||
iState.bearishOrderBlocks,
|
||||
dest.bearishOrderBlocks,
|
||||
false //
|
||||
);
|
||||
|
||||
//
|
||||
Copy(
|
||||
iState.bullishFairValueGaps,
|
||||
dest.bullishFairValueGaps,
|
||||
false //
|
||||
);
|
||||
|
||||
//
|
||||
Copy(
|
||||
iState.bearishFairValueGaps,
|
||||
dest.bearishFairValueGaps,
|
||||
false //
|
||||
);
|
||||
|
||||
//
|
||||
}
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool ToZone(
|
||||
T *&source[],
|
||||
@@ -265,7 +130,7 @@ bool ToBox(
|
||||
|
||||
template <typename T>
|
||||
int GetOldest(
|
||||
T *&sourec[] //
|
||||
T *&source[] //
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -732,6 +597,47 @@ bool IsInside(
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool IsInsideOr(
|
||||
T *source,
|
||||
T *dest //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
XBoxZone sourceBox;
|
||||
result = ToBox(
|
||||
sourceBox,
|
||||
source //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
XBoxZone destBox;
|
||||
result = ToBox(
|
||||
destBox,
|
||||
dest //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = IsBoxInsideOr(
|
||||
sourceBox,
|
||||
destBox //
|
||||
);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T, typename F>
|
||||
bool IsInsideDiff(
|
||||
T *source,
|
||||
@@ -775,6 +681,48 @@ bool IsInsideDiff(
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T, typename F>
|
||||
bool IsInsideOrDiff(
|
||||
T *source,
|
||||
F *dest,
|
||||
bool forceSideOut = false //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
XBoxZone sourceBox;
|
||||
result = ToBox(
|
||||
sourceBox,
|
||||
source //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
XBoxZone destBox;
|
||||
result = ToBox(
|
||||
destBox,
|
||||
dest //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = IsBoxInsideOr(
|
||||
sourceBox,
|
||||
destBox //
|
||||
);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
bool FindIndex(
|
||||
int &index,
|
||||
@@ -1117,6 +1065,50 @@ bool IsBoxInside(
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Detect source BoX is Inside Dest Box or Have a Side Out on it ...
|
||||
*
|
||||
* @param source: XBoxZone instance, source box which checks by dest ...
|
||||
* @param dest: XBoxZone instance, dest Box which compares source with it ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool IsBoxInsideOr(
|
||||
XBoxZone &source,
|
||||
XBoxZone &dest //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = source.IsValid() &&
|
||||
dest.IsValid() &&
|
||||
!source.IsSame(dest);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool isLowerInside =
|
||||
source.lower > dest.lower &&
|
||||
source.lower < dest.upper &&
|
||||
(source.upper < dest.upper ||
|
||||
source.upper > dest.upper);
|
||||
bool isUpperInside =
|
||||
source.upper < dest.upper &&
|
||||
source.upper > dest.lower &&
|
||||
(source.lower > dest.lower ||
|
||||
source.lower < dest.lower);
|
||||
result =
|
||||
isLowerInside ||
|
||||
isUpperInside;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check Value is Inside Specified Box ...
|
||||
*
|
||||
|
||||
@@ -27,9 +27,6 @@
|
||||
//
|
||||
// Definitions ...
|
||||
|
||||
//
|
||||
// Definitions ...
|
||||
|
||||
//
|
||||
// All Available POI(s) ...
|
||||
enum ENUM_XPOIS
|
||||
@@ -76,6 +73,8 @@ enum ENUM_XPOIS
|
||||
// Event Types ...
|
||||
enum ENUM_XPOI_EVENTS
|
||||
{
|
||||
//
|
||||
X_POI_EVENT_NONE,
|
||||
//
|
||||
// Trading Days ...
|
||||
X_TRADE_DAY_FIRST_BAR, // Trading Day First Bar ...
|
||||
@@ -3392,7 +3391,8 @@ class XCSupplyZone : public XCBarZone
|
||||
*/
|
||||
bool Init(
|
||||
XOHCL &bar,
|
||||
int range = 0 //
|
||||
int range = 0,
|
||||
bool useRangeAsStart = false //
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -3427,7 +3427,10 @@ class XCSupplyZone : public XCBarZone
|
||||
int periodSeconds = PeriodSeconds(bar.period);
|
||||
|
||||
//
|
||||
datetime from = (datetime)((int)time - (range * periodSeconds));
|
||||
datetime from =
|
||||
!useRangeAsStart
|
||||
? (datetime)((int)time - (range * periodSeconds))
|
||||
: time;
|
||||
datetime to = (datetime)((int)time + (range * periodSeconds));
|
||||
|
||||
//
|
||||
@@ -3502,7 +3505,8 @@ class XCDemandZone : public XCBarZone
|
||||
*/
|
||||
bool Init(
|
||||
XOHCL &bar,
|
||||
int range = 0 //
|
||||
int range = 0,
|
||||
bool useRangeAsStart = false //
|
||||
)
|
||||
{
|
||||
//
|
||||
@@ -3537,7 +3541,10 @@ class XCDemandZone : public XCBarZone
|
||||
int periodSeconds = PeriodSeconds(bar.period);
|
||||
|
||||
//
|
||||
datetime from = (datetime)((int)time - (range * periodSeconds));
|
||||
datetime from =
|
||||
!useRangeAsStart
|
||||
? (datetime)((int)time - (range * periodSeconds))
|
||||
: time;
|
||||
datetime to = (datetime)((int)time + (range * periodSeconds));
|
||||
|
||||
//
|
||||
@@ -5168,633 +5175,6 @@ class XCSession : public XCFromToZone
|
||||
//
|
||||
};
|
||||
|
||||
//
|
||||
//
|
||||
// Model Exists Founded POIs ...
|
||||
struct XPOIState
|
||||
{
|
||||
//
|
||||
string symbol;
|
||||
ENUM_TIMEFRAMES period;
|
||||
datetime time;
|
||||
|
||||
//
|
||||
XCTicksZone *ticksZone; // Ticks Zone ...
|
||||
|
||||
//
|
||||
XCSwing *swingHighs[]; // Holds Founded Swing Highs ...
|
||||
XCSwing *swingLows[]; // Holds Founded Swing Lows ...
|
||||
XCMomentumBar *bullishMomentumBars[]; // Holds Founded Bullish Momentum Bars ...
|
||||
XCMomentumBar *bearishMomentumBars[]; // Holds Founded Bearish Momentum Bars ...
|
||||
XCRejectionBar *bullishRejectionBars[]; // Holds Founded Bullish Rejection Bars ...
|
||||
XCRejectionBar *bearishRejectionBars[]; // Holds Founded Bearish Rejection Bars ...
|
||||
XCSupportZone *supportZones[]; // Holds Founded Support Zones ...
|
||||
XCResistanceZone *resistanceZones[]; // Holds Founded Resistance Zones ...
|
||||
XCSupplyZone *supplyZones[]; // Holds Founded Supply Zones ...
|
||||
XCDemandZone *demandZones[]; // Holds Founded Demand Zones ...
|
||||
XCOrderBlock *bullishOrderBlocks[]; // Holds Founded Bullish Order Blocks ...
|
||||
XCOrderBlock *bearishOrderBlocks[]; // Holds Founded Bearish Order Blocks ...
|
||||
XCFVG *bullishFairValueGaps[]; // Holds Founded Bullish Fair Value Gaps ...
|
||||
XCFVG *bearishFairValueGaps[]; // Holds Founded Bearish Fair Value Gaps ...
|
||||
|
||||
//
|
||||
// Constructor ...
|
||||
void XPOIState()
|
||||
{
|
||||
Clean();
|
||||
}
|
||||
|
||||
//
|
||||
// Actions ...
|
||||
|
||||
/**
|
||||
* Cleanup all props ...
|
||||
*/
|
||||
void Clean()
|
||||
{
|
||||
//
|
||||
symbol = NULL;
|
||||
period = NULL;
|
||||
time = NULL;
|
||||
|
||||
//
|
||||
ticksZone = NULL;
|
||||
|
||||
//
|
||||
Clean(swingHighs);
|
||||
Clean(swingLows);
|
||||
Clean(bullishMomentumBars);
|
||||
Clean(bearishMomentumBars);
|
||||
Clean(bullishRejectionBars);
|
||||
Clean(bearishRejectionBars);
|
||||
Clean(supportZones);
|
||||
Clean(resistanceZones);
|
||||
Clean(supplyZones);
|
||||
Clean(demandZones);
|
||||
Clean(bullishOrderBlocks);
|
||||
Clean(bearishOrderBlocks);
|
||||
Clean(bullishFairValueGaps);
|
||||
Clean(bearishFairValueGaps);
|
||||
|
||||
//
|
||||
ZeroMemory(this);
|
||||
}
|
||||
|
||||
/**
|
||||
* Validate ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool IsValid()
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result =
|
||||
IsSpecifiedValid(symbol) &&
|
||||
IsSpecifiedValid(period) &&
|
||||
IsSpecifiedValid(time);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Check State has Childs or not ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool HasChild()
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
IsValidSize(CountSwingHighs()) ||
|
||||
IsValidSize(CountSwingLows()) ||
|
||||
IsValidSize(CountBullishMomentumBars()) ||
|
||||
IsValidSize(CountBearishMomentumBars()) ||
|
||||
IsValidSize(CountBullishRejectionBars()) ||
|
||||
IsValidSize(CountBearishRejectionBars()) ||
|
||||
IsValidSize(CountSupportZones()) ||
|
||||
IsValidSize(CountResistanceZones()) ||
|
||||
IsValidSize(CountSupplyZones()) ||
|
||||
IsValidSize(CountDemandZones()) ||
|
||||
IsValidSize(CountBullishOrderBlocks()) ||
|
||||
IsValidSize(CountBearishOrderBlocks()) ||
|
||||
IsValidSize(CountBullishFairValueGaps()) ||
|
||||
IsValidSize(CountBearishFairValueGaps())
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Fill Dest State by Current State's Data ...
|
||||
*
|
||||
* @param dest: XPOIState instance, reference to specified dest ...
|
||||
*
|
||||
*/
|
||||
void Fill(XPOIState &dest)
|
||||
{
|
||||
//
|
||||
if (!IsValid() ||
|
||||
!HasChild())
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
dest.symbol = symbol;
|
||||
dest.period = period;
|
||||
dest.time = time;
|
||||
|
||||
//
|
||||
Copy(
|
||||
swingHighs,
|
||||
dest.swingHighs,
|
||||
false //
|
||||
);
|
||||
Copy(
|
||||
swingLows,
|
||||
dest.swingLows,
|
||||
false //
|
||||
);
|
||||
Copy(
|
||||
bullishMomentumBars,
|
||||
dest.bullishMomentumBars,
|
||||
false //
|
||||
);
|
||||
Copy(
|
||||
bearishMomentumBars,
|
||||
dest.bearishMomentumBars,
|
||||
false //
|
||||
);
|
||||
Copy(
|
||||
bullishRejectionBars,
|
||||
dest.bullishRejectionBars,
|
||||
false //
|
||||
);
|
||||
Copy(
|
||||
bearishRejectionBars,
|
||||
dest.bearishRejectionBars,
|
||||
false //
|
||||
);
|
||||
Copy(
|
||||
supportZones,
|
||||
dest.supportZones,
|
||||
false //
|
||||
);
|
||||
Copy(
|
||||
resistanceZones,
|
||||
dest.resistanceZones,
|
||||
false //
|
||||
);
|
||||
Copy(
|
||||
supplyZones,
|
||||
dest.supplyZones,
|
||||
false //
|
||||
);
|
||||
Copy(
|
||||
demandZones,
|
||||
dest.demandZones,
|
||||
false //
|
||||
);
|
||||
Copy(
|
||||
bullishOrderBlocks,
|
||||
dest.bullishOrderBlocks,
|
||||
false //
|
||||
);
|
||||
Copy(
|
||||
bearishOrderBlocks,
|
||||
dest.bearishOrderBlocks,
|
||||
false //
|
||||
);
|
||||
Copy(
|
||||
bullishFairValueGaps,
|
||||
dest.bullishFairValueGaps,
|
||||
false //
|
||||
);
|
||||
Copy(
|
||||
bearishFairValueGaps,
|
||||
dest.bearishFairValueGaps,
|
||||
false //
|
||||
);
|
||||
|
||||
//
|
||||
}
|
||||
|
||||
/**
|
||||
* Calculate Liquidity Percent for Specified Direction ...
|
||||
*
|
||||
* @param forDirection: ENUM_X_DIRECTION member, Specified Liquidity ...
|
||||
* @param price: Double, Specified Price ...
|
||||
*
|
||||
* @return ( double )
|
||||
*/
|
||||
double CalculateLiquidityPercent(
|
||||
ENUM_X_DIRECTION forDirection,
|
||||
double price = 0 //
|
||||
)
|
||||
{
|
||||
//
|
||||
double result = 0;
|
||||
|
||||
//
|
||||
if (!IsValid() ||
|
||||
ticksZone == NULL)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Normalize Price for Actions ...
|
||||
if (price <= 0)
|
||||
{
|
||||
//
|
||||
MqlTick mTick;
|
||||
bool isTickRetrieved = GetTick(
|
||||
symbol,
|
||||
mTick //
|
||||
);
|
||||
if (isTickRetrieved)
|
||||
{
|
||||
price = mTick.bid;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
result = ticksZone
|
||||
.CalculateLiquidityPercent(
|
||||
forDirection,
|
||||
price //
|
||||
);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Counters ...
|
||||
|
||||
//
|
||||
int CountSwingHighs()
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = ArraySize(swingHighs);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool HasSwingHighs()
|
||||
{
|
||||
return IsValidSize(CountSwingHighs());
|
||||
}
|
||||
|
||||
//
|
||||
int CountSwingLows()
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = ArraySize(swingLows);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool HasSwingLows()
|
||||
{
|
||||
return IsValidSize(CountSwingLows());
|
||||
}
|
||||
|
||||
//
|
||||
int CountBullishMomentumBars()
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = ArraySize(bullishMomentumBars);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool HasBullishMomentumBars()
|
||||
{
|
||||
return IsValidSize(CountBullishMomentumBars());
|
||||
}
|
||||
|
||||
//
|
||||
int CountBearishMomentumBars()
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = ArraySize(bearishMomentumBars);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool HasBearishMomentumBars()
|
||||
{
|
||||
return IsValidSize(CountBearishMomentumBars());
|
||||
}
|
||||
|
||||
//
|
||||
int CountBullishRejectionBars()
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = ArraySize(bullishRejectionBars);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool HasBullishRejectionBars()
|
||||
{
|
||||
return IsValidSize(CountBullishRejectionBars());
|
||||
}
|
||||
|
||||
//
|
||||
int CountBearishRejectionBars()
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = ArraySize(bearishRejectionBars);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool HasBearishRejectionBars()
|
||||
{
|
||||
return IsValidSize(CountBearishRejectionBars());
|
||||
}
|
||||
|
||||
//
|
||||
int CountSupportZones()
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = ArraySize(supportZones);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool HasSupportZones()
|
||||
{
|
||||
return IsValidSize(CountSupportZones());
|
||||
}
|
||||
|
||||
//
|
||||
int CountResistanceZones()
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = ArraySize(resistanceZones);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool HasResistanceZones()
|
||||
{
|
||||
return IsValidSize(CountResistanceZones());
|
||||
}
|
||||
|
||||
//
|
||||
int CountSupplyZones()
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = ArraySize(supplyZones);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool HasSupplyZones()
|
||||
{
|
||||
return IsValidSize(CountSupplyZones());
|
||||
}
|
||||
|
||||
//
|
||||
int CountDemandZones()
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = ArraySize(demandZones);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool HasDemandZones()
|
||||
{
|
||||
return IsValidSize(CountDemandZones());
|
||||
}
|
||||
|
||||
//
|
||||
int CountBullishOrderBlocks()
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = ArraySize(bullishOrderBlocks);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool HasBullishOrderBlocks()
|
||||
{
|
||||
return IsValidSize(CountBullishOrderBlocks());
|
||||
}
|
||||
|
||||
//
|
||||
int CountBearishOrderBlocks()
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = ArraySize(bearishOrderBlocks);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool HasBearishOrderBlocks()
|
||||
{
|
||||
return IsValidSize(CountBearishOrderBlocks());
|
||||
}
|
||||
|
||||
//
|
||||
int CountBullishFairValueGaps()
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = ArraySize(bullishFairValueGaps);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool HasBullishFairValueGaps()
|
||||
{
|
||||
return IsValidSize(CountBullishFairValueGaps());
|
||||
}
|
||||
|
||||
//
|
||||
int CountBearishFairValueGaps()
|
||||
{
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = ArraySize(bearishFairValueGaps);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
bool HasBearishFairValueGaps()
|
||||
{
|
||||
return IsValidSize(CountBearishFairValueGaps());
|
||||
}
|
||||
|
||||
//
|
||||
};
|
||||
|
||||
//
|
||||
// Consolidation Zone ...
|
||||
struct XConsolidationZone
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1118,7 +1118,7 @@ struct XSignal
|
||||
|
||||
//
|
||||
// Traget ...
|
||||
double target; // Force Risk Free On Target ...
|
||||
double targets[]; // Force Risk Free On Targets ...
|
||||
bool ignoreEAVolume; // Ignore EA Volume ...
|
||||
|
||||
//
|
||||
@@ -1679,7 +1679,7 @@ struct XSignal
|
||||
conditions = NULL;
|
||||
|
||||
//
|
||||
target = 0;
|
||||
Clean(targets);
|
||||
ignoreEAVolume = false;
|
||||
|
||||
//
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -299,16 +299,16 @@ class XC121SMCCycleHelper : public XCBase
|
||||
string symbol,
|
||||
ENUM_TIMEFRAMES period,
|
||||
X121Inputs &x121Inputs,
|
||||
int requiredPOIS = 50 //
|
||||
int requiredPOIs = 50 //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
if (requiredPOIS < 10)
|
||||
if (requiredPOIs < 10)
|
||||
{
|
||||
requiredPOIS = 10;
|
||||
requiredPOIs = 10;
|
||||
}
|
||||
|
||||
//
|
||||
@@ -341,8 +341,21 @@ class XC121SMCCycleHelper : public XCBase
|
||||
symbol,
|
||||
period //
|
||||
);
|
||||
mPOIDetector.MaxNumberOfPOIs(requiredPOIS);
|
||||
mPOIDetector.MaxNumberOfRequiredPOIs(requiredPOIS);
|
||||
mPOIDetector.MaxRequiredPOIs(requiredPOIs);
|
||||
|
||||
//
|
||||
int maxLoopbackBars = mPOIDetector.MaxAllowedLoopbackForInit();
|
||||
int periodSeconds = PeriodSeconds(period);
|
||||
if (periodSeconds > PeriodSeconds(PERIOD_M15)) {
|
||||
//
|
||||
int multiplier = periodSeconds / PeriodSeconds(PERIOD_M15);
|
||||
|
||||
//
|
||||
if (multiplier >= 1) {
|
||||
maxLoopbackBars *= 2;
|
||||
}
|
||||
}
|
||||
mPOIDetector.MaxAllowedLoopbackForInit(maxLoopbackBars);
|
||||
mPOIDetector.Init();
|
||||
|
||||
//
|
||||
|
||||
@@ -48,7 +48,7 @@ struct X121SMCTradeData
|
||||
double commission; // Commission
|
||||
string conditions; // Signal Conditions
|
||||
double maxDrawdown; // Max Position Drawdown
|
||||
bool isTargeted; // Check Targetted Before Or Not
|
||||
double lastTarget; // Check Last Targetted
|
||||
double lastTrailedTPLevel; // Hold Last Trailed TP Level
|
||||
|
||||
//
|
||||
@@ -115,7 +115,7 @@ struct X121SMCTradeData
|
||||
conditions = NULL;
|
||||
|
||||
//
|
||||
isTargeted = false;
|
||||
lastTarget = 0;
|
||||
|
||||
//
|
||||
signal.Clean();
|
||||
@@ -644,9 +644,22 @@ struct X121SMCTradeData
|
||||
*
|
||||
* @return ( double )
|
||||
*/
|
||||
double Target()
|
||||
int Targets(double &targets[])
|
||||
{
|
||||
return signal.target;
|
||||
//
|
||||
int result = 0;
|
||||
|
||||
//
|
||||
Copy(
|
||||
signal.targets,
|
||||
targets //
|
||||
);
|
||||
|
||||
//
|
||||
result = ArraySize(targets);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -3722,13 +3735,33 @@ class XC121SMCTradeHandler : public XCBaseAlert
|
||||
|
||||
//
|
||||
// Handle RF On Target ...
|
||||
double target = iData.Target();
|
||||
double targets[];
|
||||
int targetsCount = iData.Targets(targets);
|
||||
bool hasTargets = IsValidSize(targetsCount);
|
||||
if (hasTargets)
|
||||
{
|
||||
//
|
||||
for (int k = 0; k < targetsCount; k++)
|
||||
{
|
||||
//
|
||||
double target = targets[k];
|
||||
bool isValidTarget =
|
||||
iData.lastTarget == 0
|
||||
? true
|
||||
: isLong
|
||||
? target > iData.lastTarget
|
||||
: target < iData.lastTarget;
|
||||
if (!isValidTarget)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
double targetDelta = isLong
|
||||
? target + (15 * points)
|
||||
: target - (15 * points);
|
||||
bool canRF =
|
||||
target > 0 &&
|
||||
!iData.isTargeted &&
|
||||
(isLong ? target > entry
|
||||
: target < entry) &&
|
||||
(isLong
|
||||
@@ -3756,7 +3789,7 @@ class XC121SMCTradeHandler : public XCBaseAlert
|
||||
|
||||
//
|
||||
// Update mData ...
|
||||
mData[i].isTargeted = true;
|
||||
mData[i].lastTarget = target;
|
||||
|
||||
//
|
||||
string message = prefix +
|
||||
@@ -3770,6 +3803,8 @@ class XC121SMCTradeHandler : public XCBaseAlert
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Calculate Max Draw Down ...
|
||||
|
||||
@@ -267,8 +267,8 @@ struct X121SMCStrategyConditions
|
||||
//
|
||||
double sl;
|
||||
double tp;
|
||||
double target;
|
||||
string provider;
|
||||
double targets[];
|
||||
ENUM_X_DIRECTION signalDir;
|
||||
|
||||
//
|
||||
@@ -286,9 +286,9 @@ struct X121SMCStrategyConditions
|
||||
void Clean()
|
||||
{
|
||||
//
|
||||
time = NULL;
|
||||
symbol = NULL;
|
||||
period = NULL;
|
||||
time = NULL;
|
||||
|
||||
//
|
||||
sl = 0;
|
||||
@@ -296,6 +296,9 @@ struct X121SMCStrategyConditions
|
||||
provider = NULL;
|
||||
signalDir = X_DIRECTION_NONE;
|
||||
|
||||
//
|
||||
Clean(targets);
|
||||
|
||||
//
|
||||
ZeroMemory(this);
|
||||
}
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@@ -294,20 +294,12 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
signal.pushers = pushers;
|
||||
signal.provider = provider;
|
||||
signal.time = TimeCurrent();
|
||||
signal.target = conditions.target;
|
||||
|
||||
//
|
||||
bool canReplaceTarget =
|
||||
signal.target > 0 &&
|
||||
(hasLong
|
||||
? signal.target > signal.tp
|
||||
: signal.target < signal.tp);
|
||||
if (canReplaceTarget)
|
||||
{
|
||||
//
|
||||
signal.tp = conditions.target;
|
||||
signal.target = tp;
|
||||
}
|
||||
Copy(
|
||||
conditions.targets,
|
||||
signal.targets //
|
||||
);
|
||||
|
||||
//
|
||||
result = PrepareSignal(signal);
|
||||
@@ -354,40 +346,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
signal.volume = cVolume;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Fix Signal TP Based On Working Zone ...
|
||||
// double maxAllowedTP =
|
||||
// hasLong
|
||||
// ? mXWZConditions.workingZone.upper
|
||||
// : mXWZConditions.workingZone.lower;
|
||||
// bool canApplyMaxAlowedTP = (hasLong &&
|
||||
// signal.tp > maxAllowedTP) ||
|
||||
// (!hasLong && signal.tp < maxAllowedTP);
|
||||
// if (canApplyMaxAlowedTP)
|
||||
// {
|
||||
// signal.tp = maxAllowedTP;
|
||||
// }
|
||||
|
||||
//
|
||||
// Configuring Global Protector ...
|
||||
// signal.trailSL = true;
|
||||
// signal.trailSLStartOnReachTPLevel = 3;
|
||||
// signal.fullTPLevel = signal.GetRiskRewardRatio();
|
||||
|
||||
// //
|
||||
// mXSupDemOBSSignalDetector.RemoveDraws();
|
||||
// mXSupDemOBSSignalDetector.DrawConditions(
|
||||
// mXSupDemOBSConditions,
|
||||
// mVisionCycleHelper.mPOIDrawer //
|
||||
// );
|
||||
|
||||
// //
|
||||
// mXSupDemOBSSignalDetector.RemoveWorkingZoneDraws();
|
||||
// mXSupDemOBSSignalDetector.DrawWorkingZone(
|
||||
// mXSupDemOBSConditions,
|
||||
// mVisionCycleHelper.mPOIDrawer //
|
||||
// );
|
||||
}
|
||||
|
||||
//
|
||||
@@ -595,33 +553,9 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
setupDir = mXWZSignalDetector.mConditions.dir;
|
||||
setupTime = mXWZSignalDetector.mConditions.setupTime;
|
||||
|
||||
//
|
||||
if (!isSetuped)
|
||||
{
|
||||
//
|
||||
mXWZSignalDetector.RemoveDraws();
|
||||
// mXWZSignalDetector.RemoveWorkingZoneDraws();
|
||||
|
||||
//
|
||||
// mXWZSignalDetector.DrawWorkingZone(
|
||||
// mXWZSignalDetector.mConditions,
|
||||
// mVisionCycleHelper.mPOIDrawer //
|
||||
// );
|
||||
|
||||
//
|
||||
mXWZSignalDetector.DrawConditions(
|
||||
mXWZSignalDetector.mConditions,
|
||||
mVisionCycleHelper.mPOIDrawer //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
if (isSetuped)
|
||||
{
|
||||
//
|
||||
mXWZSignalDetector.RemoveDraws();
|
||||
// mXWZSignalDetector.RemoveWorkingZoneDraws();
|
||||
|
||||
//
|
||||
int items = mXWZSignalDetector
|
||||
.AddConditionsIfNotExists();
|
||||
@@ -694,22 +628,6 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
//
|
||||
if (canTrigger)
|
||||
{
|
||||
//
|
||||
mXWZSignalDetector.RemoveDraws();
|
||||
// mXWZSignalDetector.RemoveWorkingZoneDraws();
|
||||
|
||||
//
|
||||
// mXWZSignalDetector.DrawWorkingZone(
|
||||
// mTmpConditions[i],
|
||||
// mVisionCycleHelper.mPOIDrawer //
|
||||
// );
|
||||
|
||||
//
|
||||
mXWZSignalDetector.DrawConditions(
|
||||
mTmpConditions[i],
|
||||
mVisionCycleHelper.mPOIDrawer //
|
||||
);
|
||||
|
||||
//
|
||||
selectedIndex = i;
|
||||
mConditions = mTmpConditions[i];
|
||||
@@ -749,7 +667,12 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
conditions.sl = mConditions.sl;
|
||||
conditions.provider = providerStr;
|
||||
conditions.signalDir = mConditions.dir;
|
||||
conditions.target = mConditions.target;
|
||||
|
||||
//
|
||||
Copy(
|
||||
mConditions.targets,
|
||||
conditions.targets //
|
||||
);
|
||||
|
||||
//
|
||||
xWZConditions = mConditions;
|
||||
@@ -785,7 +708,7 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
||||
//
|
||||
if (mMaxAllowedRequiredPOIs <= 0)
|
||||
{
|
||||
mMaxAllowedRequiredPOIs = 50;
|
||||
mMaxAllowedRequiredPOIs = 200;
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user