last..
This commit is contained in:
@@ -801,6 +801,204 @@ struct X121SMCCycleState
|
|||||||
return IsValidSize(CountBearishFVGs());
|
return IsValidSize(CountBearishFVGs());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool GetOldestOB(
|
||||||
|
XCOrderBlock *&orderBlock //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
orderBlock = NULL;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool hasBullishOB = HasBullishOBs();
|
||||||
|
bool hasBearishOB = HasBearishOBs();
|
||||||
|
result = hasBullishOB ||
|
||||||
|
hasBearishOB;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int iBullOBIDX = -1;
|
||||||
|
bool iHasBullOB = false;
|
||||||
|
XCOrderBlock *iBullOB = NULL;
|
||||||
|
if (hasBullishOB)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCZone* iZones[];
|
||||||
|
ToZone(
|
||||||
|
bullishOBs,
|
||||||
|
iZones //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
iBullOBIDX = GetOldest(
|
||||||
|
iZones //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
iHasBullOB = IsValidIndex(iBullOBIDX);
|
||||||
|
if (iHasBullOB)
|
||||||
|
{
|
||||||
|
iBullOB = bullishOBs[iBullOBIDX];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int iBearOBIDX = -1;
|
||||||
|
bool iHasBearOB = false;
|
||||||
|
XCOrderBlock *iBearOB = NULL;
|
||||||
|
if (hasBearishOB)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCZone* iZones[];
|
||||||
|
ToZone(
|
||||||
|
bearishOBs,
|
||||||
|
iZones //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
iBearOBIDX = GetOldest(
|
||||||
|
iZones //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
iHasBearOB = IsValidIndex(iBearOBIDX);
|
||||||
|
if (iHasBearOB)
|
||||||
|
{
|
||||||
|
iBearOB = bearishOBs[iBearOBIDX];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (iHasBullOB)
|
||||||
|
{
|
||||||
|
orderBlock = iBullOB;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (iHasBearOB)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool canSet = orderBlock == NULL ||
|
||||||
|
orderBlock.From() > iBearOB.From();
|
||||||
|
if (canSet)
|
||||||
|
{
|
||||||
|
orderBlock = iBearOB;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = orderBlock != NULL &&
|
||||||
|
orderBlock.IsValid();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
bool GetYoungestOB(
|
||||||
|
XCOrderBlock *&orderBlock //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool result = false;
|
||||||
|
|
||||||
|
//
|
||||||
|
orderBlock = NULL;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool hasBullishOB = HasBullishOBs();
|
||||||
|
bool hasBearishOB = HasBearishOBs();
|
||||||
|
result = hasBullishOB ||
|
||||||
|
hasBearishOB;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int iBullOBIDX = -1;
|
||||||
|
bool iHasBullOB = false;
|
||||||
|
XCOrderBlock *iBullOB = NULL;
|
||||||
|
if (hasBullishOB)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCZone* iZones[];
|
||||||
|
ToZone(
|
||||||
|
bullishOBs,
|
||||||
|
iZones //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
iBullOBIDX = GetYoungest(
|
||||||
|
iZones //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
iHasBullOB = IsValidIndex(iBullOBIDX);
|
||||||
|
if (iHasBullOB)
|
||||||
|
{
|
||||||
|
iBullOB = bullishOBs[iBullOBIDX];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
int iBearOBIDX = -1;
|
||||||
|
bool iHasBearOB = false;
|
||||||
|
XCOrderBlock *iBearOB = NULL;
|
||||||
|
if (hasBearishOB)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
XCZone* iZones[];
|
||||||
|
ToZone(
|
||||||
|
bearishOBs,
|
||||||
|
iZones //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
iBearOBIDX = GetYoungest(
|
||||||
|
iZones //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
iHasBearOB = IsValidIndex(iBearOBIDX);
|
||||||
|
if (iHasBearOB)
|
||||||
|
{
|
||||||
|
iBearOB = bearishOBs[iBearOBIDX];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (iHasBullOB)
|
||||||
|
{
|
||||||
|
orderBlock = iBullOB;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
if (iHasBearOB)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
bool canSet = orderBlock == NULL ||
|
||||||
|
orderBlock.From() < iBearOB.From();
|
||||||
|
if (canSet)
|
||||||
|
{
|
||||||
|
orderBlock = iBearOB;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
result = orderBlock != NULL &&
|
||||||
|
orderBlock.IsValid();
|
||||||
|
|
||||||
|
//
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -700,9 +700,11 @@ bool DetectX121SMCXHKPVSignalSetup(
|
|||||||
//
|
//
|
||||||
double upper = 0;
|
double upper = 0;
|
||||||
double lower = 0;
|
double lower = 0;
|
||||||
|
bool hasYoungestOB = false;
|
||||||
bool isPriceOBValid = false;
|
bool isPriceOBValid = false;
|
||||||
bool isBullishHappens = false;
|
bool isBullishHappens = false;
|
||||||
bool isBearishHappens = false;
|
bool isBearishHappens = false;
|
||||||
|
XCOrderBlock *youngestOB = NULL;
|
||||||
bool hasPriceBox = conditions.priceBox.IsValid();
|
bool hasPriceBox = conditions.priceBox.IsValid();
|
||||||
bool hasState = visionCycleHelper.GetCycleState(conditions.state);
|
bool hasState = visionCycleHelper.GetCycleState(conditions.state);
|
||||||
|
|
||||||
@@ -730,10 +732,21 @@ bool DetectX121SMCXHKPVSignalSetup(
|
|||||||
upper = conditions.priceOB.Upper();
|
upper = conditions.priceOB.Upper();
|
||||||
lower = conditions.priceOB.Lower();
|
lower = conditions.priceOB.Lower();
|
||||||
|
|
||||||
|
//
|
||||||
|
hasYoungestOB = conditions.state.GetYoungestOB(youngestOB);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Here We Can Validate Box by Same Cycles Peaks and Vales ...
|
// Here We Can Validate Box by Same Cycles Peaks and Vales ...
|
||||||
bool isBullish = IsBullish(conditions.priceBox.dir);
|
bool isBullish = IsBullish(conditions.priceBox.dir);
|
||||||
|
|
||||||
|
//
|
||||||
|
bool isPriceBoxSameAsOB =
|
||||||
|
//
|
||||||
|
conditions.priceBox.upper <= conditions.priceOB.Upper() &&
|
||||||
|
conditions.priceBox.lower >= conditions.priceOB.Lower()
|
||||||
|
//
|
||||||
|
;
|
||||||
|
|
||||||
//
|
//
|
||||||
int cIDX = 1;
|
int cIDX = 1;
|
||||||
|
|
||||||
@@ -760,6 +773,7 @@ bool DetectX121SMCXHKPVSignalSetup(
|
|||||||
isPriceOBValid =
|
isPriceOBValid =
|
||||||
//
|
//
|
||||||
hasPriceBox &&
|
hasPriceBox &&
|
||||||
|
isPriceBoxSameAsOB &&
|
||||||
(isBullish
|
(isBullish
|
||||||
? isSameCycleVales
|
? isSameCycleVales
|
||||||
: isSameCyclePeaks)
|
: isSameCyclePeaks)
|
||||||
@@ -1369,29 +1383,61 @@ bool DetectX121SMCXHKPVSignalSetup(
|
|||||||
if (!result)
|
if (!result)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
bool canReset =
|
if (hasPriceBox && hasYoungestOB)
|
||||||
//
|
|
||||||
hasPriceBox &&
|
|
||||||
conditions.isPriceOBActed &&
|
|
||||||
conditions.isPriceOBBreaked &&
|
|
||||||
//
|
|
||||||
(
|
|
||||||
//
|
|
||||||
IsBullish(conditions.priceBox.dir)
|
|
||||||
? pBar.high < lower &&
|
|
||||||
cBar.high < lower
|
|
||||||
: pBar.low > upper &&
|
|
||||||
cBar.low > upper
|
|
||||||
//
|
|
||||||
)
|
|
||||||
//
|
|
||||||
;
|
|
||||||
if (canReset)
|
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
Print("canReset");
|
X121SMCCycleState iState;
|
||||||
|
bool iHasState = visionCycleHelper.GetCycleState(iState);
|
||||||
|
if (iHasState)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Retrieve Youngest Order Blocks ...
|
||||||
|
XCOrderBlock *iYOB;
|
||||||
|
bool iHasYoungestOB = iState.GetYoungestOB(iYOB);
|
||||||
|
if (iHasYoungestOB)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Compare it with current Condition PriceOB ...
|
||||||
|
bool isSame =
|
||||||
|
//
|
||||||
|
conditions.priceOB.Upper() == iYOB.Upper() &&
|
||||||
|
conditions.priceOB.Lower() == iYOB.Lower() &&
|
||||||
|
conditions.priceOB.From() == iYOB.From() &&
|
||||||
|
conditions.priceOB.Type() == iYOB.Type()
|
||||||
|
//
|
||||||
|
;
|
||||||
|
if (!isSame)
|
||||||
|
{
|
||||||
|
conditions.Clean();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// bool canReset =
|
||||||
|
// //
|
||||||
|
// hasPriceBox &&
|
||||||
|
// conditions.isPriceOBActed &&
|
||||||
|
// conditions.isPriceOBBreaked &&
|
||||||
|
// //
|
||||||
|
// (
|
||||||
|
// //
|
||||||
|
// IsBullish(conditions.priceBox.dir)
|
||||||
|
// ? pBar.high < lower &&
|
||||||
|
// cBar.high < lower
|
||||||
|
// : pBar.low > upper &&
|
||||||
|
// cBar.low > upper
|
||||||
|
// //
|
||||||
|
// )
|
||||||
|
// //
|
||||||
|
// ;
|
||||||
|
// if (canReset)
|
||||||
|
// {
|
||||||
|
// //
|
||||||
|
// Print("canReset");
|
||||||
|
// }
|
||||||
|
|
||||||
//
|
//
|
||||||
// Cleanup Arrays ...
|
// Cleanup Arrays ...
|
||||||
ArrayFree(triggerPoiEvents);
|
ArrayFree(triggerPoiEvents);
|
||||||
|
|||||||
@@ -1251,10 +1251,10 @@ class XCX121SMCStrategy : public XCX121SMCBaseStrategy
|
|||||||
|
|
||||||
//
|
//
|
||||||
// XCHE ...
|
// XCHE ...
|
||||||
x121Inputs.xcheInputs.showLE1 = showAll || true;
|
x121Inputs.xcheInputs.showLE1 = showAll || false;
|
||||||
x121Inputs.xcheInputs.showLE2 = showAll || true;
|
x121Inputs.xcheInputs.showLE2 = showAll || false;
|
||||||
x121Inputs.xcheInputs.showSE1 = showAll || true;
|
x121Inputs.xcheInputs.showSE1 = showAll || false;
|
||||||
x121Inputs.xcheInputs.showSE2 = showAll || true;
|
x121Inputs.xcheInputs.showSE2 = showAll || false;
|
||||||
|
|
||||||
//
|
//
|
||||||
// XDON ...
|
// XDON ...
|
||||||
|
|||||||
Reference in New Issue
Block a user