last ...
This commit is contained in:
@@ -812,6 +812,28 @@ class XC121SMCCycleHelper : public XCBase
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve Last Sar Changes ...
|
||||
*
|
||||
* @param change: XValueChange instance ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool GetLastSarChange(XValueChange &change)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = GetLastItem(
|
||||
change,
|
||||
mSarChanges //
|
||||
);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Count Saved Peaks Changes ...
|
||||
*
|
||||
@@ -849,6 +871,28 @@ class XC121SMCCycleHelper : public XCBase
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve Last Peak Changes ...
|
||||
*
|
||||
* @param change: XValueChange instance ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool GetLastPeakChange(XValueChange &change)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = GetLastItem(
|
||||
change,
|
||||
mPeaksChanges //
|
||||
);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Count Saved Vales Changes ...
|
||||
*
|
||||
@@ -886,6 +930,28 @@ class XC121SMCCycleHelper : public XCBase
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve Last Vale Changes ...
|
||||
*
|
||||
* @param change: XValueChange instance ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool GetLastValeChange(XValueChange &change)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = GetLastItem(
|
||||
change,
|
||||
mValesChanges //
|
||||
);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Count Saved VWap Order Changes ...
|
||||
*
|
||||
@@ -923,6 +989,28 @@ class XC121SMCCycleHelper : public XCBase
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve Last VWap Order Changes ...
|
||||
*
|
||||
* @param change: XValueChange instance ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool GetLastVWapOrderChange(XValueChange &change)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = GetLastItem(
|
||||
change,
|
||||
mVWapOrderChanges //
|
||||
);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Count Saved VWap State Changes ...
|
||||
*
|
||||
@@ -960,6 +1048,28 @@ class XC121SMCCycleHelper : public XCBase
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve Last VWap State Changes ...
|
||||
*
|
||||
* @param change: XValueChange instance ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool GetLastVWapStateChange(XValueChange &change)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = GetLastItem(
|
||||
change,
|
||||
mVWapStateChanges //
|
||||
);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Count Founded Consolidation Zones ...
|
||||
*
|
||||
@@ -997,6 +1107,28 @@ class XC121SMCCycleHelper : public XCBase
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Retrieve Last Consolidation Breaks ...
|
||||
*
|
||||
* @param change: XValueChange instance ...
|
||||
*
|
||||
* @return ( bool )
|
||||
*/
|
||||
bool GetLastConsolidationZone(XConsolidationZone &zone)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = GetLastItem(
|
||||
zone,
|
||||
mConsolidationZones //
|
||||
);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
/**
|
||||
* Count Pivot Points Change ...
|
||||
*
|
||||
@@ -1145,7 +1277,7 @@ class XC121SMCCycleHelper : public XCBase
|
||||
virtual void Default()
|
||||
{
|
||||
//
|
||||
ConsolidationLoopback(15);
|
||||
ConsolidationLoopback(10);
|
||||
MaxAllowedSavedChanges(50);
|
||||
}
|
||||
|
||||
@@ -1549,41 +1681,29 @@ class XC121SMCCycleHelper : public XCBase
|
||||
mActioveConsolidationZone.IsValid())
|
||||
{
|
||||
//
|
||||
// Check Consolidation Breaks ...
|
||||
// Update Zone ...
|
||||
// Add it ...
|
||||
bool isBOSTop = changeBar.high > mActioveConsolidationZone.upper;
|
||||
bool isBOSBottom = changeBar.low < mActioveConsolidationZone.lower;
|
||||
mActioveConsolidationZone.Update();
|
||||
bool isBreaked = mActioveConsolidationZone.IsBreaked();
|
||||
|
||||
//
|
||||
// Calculate Break Direction ...
|
||||
ENUM_X_DIRECTION bosDir = isBOSTop
|
||||
? X_DIRECTION_BULLISH
|
||||
: isBOSBottom
|
||||
? X_DIRECTION_BEARISH
|
||||
: X_DIRECTION_NONE;
|
||||
if (isBreaked)
|
||||
{
|
||||
//
|
||||
// Add Active to List ...
|
||||
AddRef(
|
||||
mActioveConsolidationZone,
|
||||
mConsolidationZones //
|
||||
);
|
||||
|
||||
//
|
||||
// Update Actiove Zone ...
|
||||
mActioveConsolidationZone.breakerBar = changeBar;
|
||||
mActioveConsolidationZone.breakDirection = bosDir;
|
||||
//
|
||||
// Clean Active Zone ...
|
||||
mActioveConsolidationZone.Clean();
|
||||
|
||||
//
|
||||
// Add Active to List ...
|
||||
AddRef(
|
||||
mActioveConsolidationZone,
|
||||
mConsolidationZones //
|
||||
);
|
||||
|
||||
//
|
||||
// Clean Active Zone ...
|
||||
mActioveConsolidationZone.Clean();
|
||||
|
||||
//
|
||||
Add(
|
||||
CONSOLIDATION_BREAKED_DETECTED,
|
||||
events //
|
||||
);
|
||||
//
|
||||
Add(
|
||||
CONSOLIDATION_BREAKED_DETECTED,
|
||||
events //
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -2029,6 +2029,7 @@ struct XSMCStrategySetupConditions
|
||||
datetime setupTime;
|
||||
datetime triggerTime;
|
||||
XConsolidationZone zone;
|
||||
XConsolidationZone consolidation;
|
||||
|
||||
//
|
||||
double peak;
|
||||
@@ -2059,6 +2060,7 @@ struct XSMCStrategySetupConditions
|
||||
|
||||
//
|
||||
zone.Clean();
|
||||
consolidation.Clean();
|
||||
dir = X_DIRECTION_NONE;
|
||||
type = X_POSITION_TYPE_NONE;
|
||||
|
||||
@@ -2144,6 +2146,12 @@ struct XSMCStrategySetupConditions
|
||||
|
||||
//
|
||||
zone.Update();
|
||||
|
||||
//
|
||||
if (consolidation.IsValid())
|
||||
{
|
||||
consolidation.Update();
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
@@ -572,168 +572,29 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
|
||||
.GetDonChainLength();
|
||||
|
||||
//
|
||||
bool hasZone = false;
|
||||
XPVPivotPoint validPeak;
|
||||
XPVPivotPoint validVale;
|
||||
bool canTrigger = false;
|
||||
bool hasValidPeak = false;
|
||||
bool hasValidVale = false;
|
||||
datetime setupTime = NULL;
|
||||
bool isZoneBreaked = false;
|
||||
bool hasConsolidation = false;
|
||||
XConsolidationZone consolidation;
|
||||
|
||||
//
|
||||
setupTime = mTestConditions.setupTime;
|
||||
bool isSetuped = mTestConditions.IsSetuped();
|
||||
ENUM_X_DIRECTION setupDir = mTestConditions.dir;
|
||||
if (!isSetuped)
|
||||
{
|
||||
//
|
||||
// Detect Valid Peaks and Vales ...
|
||||
|
||||
//
|
||||
// Peaks ...
|
||||
XPVPivotPoint validPeak = mTestConditions.validPeak;
|
||||
bool hasValidPeak = validPeak.IsValid();
|
||||
if (!hasValidPeak)
|
||||
{
|
||||
//
|
||||
// Detecte Valid Peaks ...
|
||||
|
||||
//
|
||||
XPVPivotPoint triggerValidPeaks[];
|
||||
int triggerValidPeaksCount = mTriggerCycleHelper
|
||||
.FillPeakPivotPoints(triggerValidPeaks);
|
||||
|
||||
//
|
||||
bool isValid =
|
||||
IsValidSize(triggerValidPeaksCount);
|
||||
if (isValid)
|
||||
{
|
||||
//
|
||||
// Try to Find ...
|
||||
for (int i = triggerValidPeaksCount - 1; i >= 0; i--)
|
||||
{
|
||||
//
|
||||
XPVPivotPoint iPivot = triggerValidPeaks[i];
|
||||
double iValue = iPivot.value;
|
||||
|
||||
//
|
||||
bool isValid = iValue == triggerConditions.x121Conditions.peaksBuffer[0] &&
|
||||
iValue == decisionConditions.x121Conditions.peaksBuffer[0] &&
|
||||
iValue == analyseConditions.x121Conditions.peaksBuffer[0] &&
|
||||
iValue == verificationConditions.x121Conditions.peaksBuffer[0];
|
||||
if (isValid)
|
||||
{
|
||||
//
|
||||
validPeak = iPivot;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
hasValidPeak = validPeak.IsValid();
|
||||
if (hasValidPeak)
|
||||
{
|
||||
//
|
||||
mTestConditions.validPeak = validPeak;
|
||||
|
||||
//
|
||||
if (!mTestConditions.validVale.IsValid())
|
||||
{
|
||||
//
|
||||
XValueChange valesChanges[];
|
||||
int valeChangesCount = mTriggerCycleHelper.FillValesChanges(valesChanges);
|
||||
if (IsValidSize(valeChangesCount))
|
||||
{
|
||||
//
|
||||
XValueChange lastChange = valesChanges[valeChangesCount - 1];
|
||||
if (lastChange.IsValid())
|
||||
{
|
||||
//
|
||||
XPVPivotPoint iPivot;
|
||||
iPivot.repetition = 1;
|
||||
iPivot.type = XPV_VALE;
|
||||
iPivot.time = lastChange.time;
|
||||
iPivot.value = lastChange.after;
|
||||
if (iPivot.IsValid())
|
||||
{
|
||||
mTestConditions.validVale = iPivot;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Vales ...
|
||||
XPVPivotPoint validVale = mTestConditions.validVale;
|
||||
bool hasValidVale = validVale.IsValid();
|
||||
if (!hasValidVale)
|
||||
{
|
||||
//
|
||||
// Detecte Valid Vale ...
|
||||
|
||||
//
|
||||
XPVPivotPoint triggerValidVales[];
|
||||
int triggerValidValesCount = mTriggerCycleHelper
|
||||
.FillValePivotPoints(triggerValidVales);
|
||||
|
||||
//
|
||||
bool isValid =
|
||||
IsValidSize(triggerValidValesCount);
|
||||
if (isValid)
|
||||
{
|
||||
//
|
||||
// Try to Find ...
|
||||
for (int i = triggerValidValesCount - 1; i >= 0; i--)
|
||||
{
|
||||
//
|
||||
XPVPivotPoint iPivot = triggerValidVales[i];
|
||||
double iValue = iPivot.value;
|
||||
|
||||
//
|
||||
bool isValid = iValue == triggerConditions.x121Conditions.valesBuffer[0] &&
|
||||
iValue == decisionConditions.x121Conditions.valesBuffer[0] &&
|
||||
iValue == analyseConditions.x121Conditions.valesBuffer[0] &&
|
||||
iValue == verificationConditions.x121Conditions.valesBuffer[0];
|
||||
if (isValid)
|
||||
{
|
||||
//
|
||||
validVale = iPivot;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
hasValidVale = validVale.IsValid();
|
||||
if (hasValidVale)
|
||||
{
|
||||
//
|
||||
mTestConditions.validVale = validVale;
|
||||
|
||||
//
|
||||
if (!mTestConditions.validPeak.IsValid())
|
||||
{
|
||||
//
|
||||
XValueChange valesChanges[];
|
||||
int valeChangesCount = mTriggerCycleHelper.FillPeaksChanges(valesChanges);
|
||||
if (IsValidSize(valeChangesCount))
|
||||
{
|
||||
//
|
||||
XValueChange lastChange = valesChanges[valeChangesCount - 1];
|
||||
if (lastChange.IsValid())
|
||||
{
|
||||
//
|
||||
XPVPivotPoint iPivot;
|
||||
iPivot.repetition = 1;
|
||||
iPivot.type = XPV_PEAK;
|
||||
iPivot.time = lastChange.time;
|
||||
iPivot.value = lastChange.after;
|
||||
if (iPivot.IsValid())
|
||||
{
|
||||
mTestConditions.validPeak = iPivot;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
bool hasValidPivot = hasValidPeak &&
|
||||
hasValidVale;
|
||||
result = hasValidPivot;
|
||||
bool isNewPeak = triggerConditions.x121Conditions.isNewPeak;
|
||||
bool isNewVale = triggerConditions.x121Conditions.isNewVale;
|
||||
bool isNewPivot = isNewPeak ||
|
||||
isNewVale;
|
||||
result = isNewPivot;
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
@@ -742,108 +603,260 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
|
||||
//
|
||||
mTestConditions.peak = triggerPeak;
|
||||
mTestConditions.vale = triggerVale;
|
||||
hasConsolidation = Contains(
|
||||
CONSOLIDATION_BREAKED_DETECTED,
|
||||
mTriggerCycleEvents //
|
||||
);
|
||||
|
||||
//
|
||||
// We Sure we Have Valid Peak and Valid Vale ...
|
||||
// Create a Zone ...
|
||||
bool hasZone = mTestConditions.zone.IsValid();
|
||||
if (!hasZone)
|
||||
{
|
||||
//
|
||||
double pvZoneUpper = validPeak.value;
|
||||
double pvZoneLower = validVale.value;
|
||||
datetime pvZoneFrom =
|
||||
validPeak.time < validVale.time
|
||||
? validPeak.time
|
||||
: validVale.time;
|
||||
int pvZoneLoopback = iBarShift(
|
||||
symbol,
|
||||
period,
|
||||
pvZoneFrom //
|
||||
);
|
||||
|
||||
//
|
||||
XConsolidationZone pvZone;
|
||||
result = pvZone.Init(
|
||||
symbol,
|
||||
period,
|
||||
pvZoneUpper,
|
||||
pvZoneLower,
|
||||
pvZoneLoopback //
|
||||
);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
mTestConditions.zone = pvZone;
|
||||
hasZone = mTestConditions.zone.IsValid();
|
||||
}
|
||||
if (hasZone)
|
||||
{
|
||||
//
|
||||
// Update Zone ...
|
||||
mTestConditions.UpdateZone();
|
||||
|
||||
//
|
||||
XCConsolidationZoneObject *iPVZoneObj;
|
||||
iPVZoneObj = new XCConsolidationZoneObject();
|
||||
bool isCreated = iPVZoneObj.Create(
|
||||
mPOIDrawer.ChartIdentification(),
|
||||
mPOIDrawer.SubWindowIdentification(),
|
||||
mTestConditions.zone //
|
||||
);
|
||||
if (isCreated)
|
||||
{
|
||||
//
|
||||
iPVZoneObj.ZoneWidth(4);
|
||||
iPVZoneObj.ZoneColor(clrGold);
|
||||
|
||||
//
|
||||
AddObjectIfNotExists(iPVZoneObj);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Here we Have to Check Price Go into Zone ...
|
||||
bool isZoneBreaked = mTestConditions.zone.IsBreaked();
|
||||
result = isZoneBreaked;
|
||||
result = hasConsolidation;
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result = mTriggerCycleHelper
|
||||
.GetLastConsolidationZone(consolidation);
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Validate Breaker Bar ...
|
||||
XOHCL breakerBar;
|
||||
result = consolidation.breakerBar
|
||||
.GetPreviousBar(breakerBar);
|
||||
|
||||
//
|
||||
// Find Momentum, Engulf Bar ...
|
||||
|
||||
//
|
||||
// Engulfing ...
|
||||
ENUM_X_DIRECTION engulfDir;
|
||||
bool isEngulf = mTriggerCycleHelper.mBarAnalyser.IsEngulfBar(
|
||||
breakerBar,
|
||||
engulfDir //
|
||||
);
|
||||
|
||||
//
|
||||
// Momentum ...
|
||||
ENUM_X_DIRECTION momentumDir;
|
||||
bool isMomentum = mTriggerCycleHelper.mBarAnalyser.IsMomentumBar(
|
||||
breakerBar,
|
||||
momentumDir //
|
||||
);
|
||||
|
||||
//
|
||||
// Rejection ...
|
||||
ENUM_X_DIRECTION rejectionDir;
|
||||
bool isRejection = mTriggerCycleHelper.mBarAnalyser.IsRejectionBar(
|
||||
breakerBar,
|
||||
rejectionDir //
|
||||
);
|
||||
|
||||
//
|
||||
// Fibo Pressure ...
|
||||
ENUM_X_DIRECTION fiboPresureDir;
|
||||
bool hasFiboPressure = mTriggerCycleHelper.mBarAnalyser.HasFiboPressure(
|
||||
breakerBar,
|
||||
fiboPresureDir //
|
||||
);
|
||||
|
||||
//
|
||||
// Check Bar is Bullished ...
|
||||
bool isBarBullish =
|
||||
//
|
||||
// Fibo Pressure ...
|
||||
(hasFiboPressure &&
|
||||
IsBullish(fiboPresureDir))
|
||||
//
|
||||
||
|
||||
//
|
||||
(
|
||||
//
|
||||
// Engulfing ...
|
||||
(isEngulf &&
|
||||
IsBullish(engulfDir))
|
||||
//
|
||||
||
|
||||
//
|
||||
// Momentum ...
|
||||
(isMomentum &&
|
||||
IsBullish(momentumDir))
|
||||
//
|
||||
||
|
||||
//
|
||||
// Rejection ...
|
||||
(isRejection &&
|
||||
IsBullish(rejectionDir))
|
||||
//
|
||||
)
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
// Check Bar is Bearish ...
|
||||
bool isBarBearish =
|
||||
//
|
||||
// Fibo Pressure ...
|
||||
(hasFiboPressure &&
|
||||
IsBearish(fiboPresureDir))
|
||||
//
|
||||
||
|
||||
//
|
||||
(
|
||||
//
|
||||
// Engulfing ...
|
||||
(isEngulf &&
|
||||
IsBearish(engulfDir))
|
||||
//
|
||||
||
|
||||
//
|
||||
// Momentum ...
|
||||
(isMomentum &&
|
||||
IsBearish(momentumDir))
|
||||
//
|
||||
||
|
||||
//
|
||||
// Rejection ...
|
||||
(isRejection &&
|
||||
IsBearish(rejectionDir))
|
||||
//
|
||||
)
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
bool isBarPassed = isBarBullish ||
|
||||
isBarBearish;
|
||||
result = isBarPassed;
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
isBullish =
|
||||
//
|
||||
isBarBullish &&
|
||||
IsBullish(consolidation.breakDirection)
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
isBearish =
|
||||
//
|
||||
isBarBearish &&
|
||||
IsBearish(consolidation.breakDirection)
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
result = isBullish ||
|
||||
isBearish;
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
XCConsolidationZoneObject *iConsolidationObj;
|
||||
iConsolidationObj = new XCConsolidationZoneObject();
|
||||
bool isCreated = iConsolidationObj.Create(
|
||||
mPOIDrawer.ChartIdentification(),
|
||||
mPOIDrawer.SubWindowIdentification(),
|
||||
consolidation //
|
||||
);
|
||||
if (isCreated)
|
||||
{
|
||||
//
|
||||
iConsolidationObj.ZoneWidth(2);
|
||||
iConsolidationObj.ZoneColor(clrLightBlue);
|
||||
|
||||
//
|
||||
AddObjectIfNotExists(iConsolidationObj);
|
||||
}
|
||||
|
||||
//
|
||||
isSetuped = true;
|
||||
setupTime = cTime;
|
||||
mTestConditions.setupTime = setupTime;
|
||||
setupDir = mTestConditions.zone.breakDirection;
|
||||
setupDir = consolidation.breakDirection;
|
||||
mTestConditions.dir = setupDir;
|
||||
}
|
||||
|
||||
//
|
||||
// Setup Forms ...
|
||||
bool canTrigger = mTestConditions.CanTrigger();
|
||||
// Detect Trigger Conditions ...
|
||||
canTrigger = mTestConditions.CanTrigger();
|
||||
datetime triggerTime = mTestConditions.triggerTime;
|
||||
if (!canTrigger)
|
||||
{
|
||||
//
|
||||
// Check Trigger Consitions ...
|
||||
if (cTime - setupTime > 2400)
|
||||
isBullish = IsBullish(setupDir);
|
||||
isBearish = IsBearish(setupDir);
|
||||
result = isBullish ||
|
||||
isBearish;
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
ClearDraws();
|
||||
// Check Trigger Consitions ...
|
||||
if (cTime - setupTime > 2400)
|
||||
{
|
||||
//
|
||||
ClearDraws();
|
||||
|
||||
//
|
||||
mTestConditions.Clean();
|
||||
return false;
|
||||
//
|
||||
mTestConditions.Clean();
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
// //
|
||||
// canTrigger = true;
|
||||
// mTestConditions.triggerTime = cTime;
|
||||
//
|
||||
mTestConditions.symbol = symbol;
|
||||
mTestConditions.period = period;
|
||||
mTestConditions.triggerTime = cTime;
|
||||
mTestConditions.sl = consolidation.upper;
|
||||
mTestConditions.type = isBullish
|
||||
? X_POSITION_TYPE_LONG
|
||||
: X_POSITION_TYPE_SHORT;
|
||||
|
||||
//
|
||||
canTrigger = mTestConditions.CanTrigger();
|
||||
triggerTime = mTestConditions.triggerTime;
|
||||
result = canTrigger;
|
||||
if (!result)
|
||||
{
|
||||
//
|
||||
// Check Trigger Consitions ...
|
||||
if (cTime - setupTime > 2400)
|
||||
{
|
||||
//
|
||||
ClearDraws();
|
||||
|
||||
//
|
||||
mTestConditions.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
if (cTime - setupTime > 2400)
|
||||
{
|
||||
//
|
||||
ClearDraws();
|
||||
|
||||
//
|
||||
mTestConditions.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
Print("Trigger Time ...");
|
||||
|
||||
//
|
||||
// Issues Signal on Conditions ...
|
||||
// conditions.signalDir = mTestConditions.dir;
|
||||
@@ -851,7 +864,7 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
|
||||
// conditions.sl = mTestConditions.sl;
|
||||
|
||||
//
|
||||
// mTestConditions.Clean();
|
||||
mTestConditions.Clean();
|
||||
|
||||
//
|
||||
return result;
|
||||
|
||||
Reference in New Issue
Block a user