This commit is contained in:
2024-11-19 14:33:57 +03:30
parent 67b7d416cb
commit ee9ea11b6a
6 changed files with 1416 additions and 310 deletions
@@ -182,6 +182,9 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
return result;
}
//
RedrawOrderFlow();
//
XPVPivot lastPivot;
result = GetLastItem(
@@ -192,11 +195,6 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
{
return result;
}
XPOIState pivotState;
DetectPivotPOIs(
lastPivot,
pivotState //
);
//
// Prepare Areas ...
@@ -244,16 +242,32 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
if (isCHOCHHappens)
{
//
DrawStateSwings(_5MState);
// When Chouch Happens we Have to Destry Order Flow and
// Clean another ...
//
Print("CHOCH ...");
//
result = false;
ResetOrderFlow();
return result;
}
//
if (isBOSHappens)
{
//
DrawStateSwings(_5MState);
// When Chouch Happens we Have to Destry Order Flow and
// Clean another ...
//
Print("BOS ...");
//
result = false;
ResetOrderFlow();
return result;
}
//
@@ -486,52 +500,6 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
mOrderFlowDir //
);
//
int orderFlowCount = ArraySize(mOrderFlow);
if (IsValidSize(orderFlowCount))
{
//
for (int i = 0; i < orderFlowCount; i++)
{
//
XPVPivot iPivot = mOrderFlow[i];
//
XCXPVPivotObject *iObj;
iObj = new XCXPVPivotObject();
bool isCreated = iObj.Create(
mPOIDrawer.ChartIdentification(),
mPOIDrawer.SubWindowIdentification(),
iPivot //
);
if (isCreated)
{
//
if (iPivot.IsPeak())
{
//
iObj.PivotWidth(1);
iObj.PivotFill(false);
iObj.PivotColor(clrAqua);
iObj.PivotStyle(STYLE_SOLID);
}
//
if (iPivot.IsVale())
{
//
iObj.PivotWidth(1);
iObj.PivotFill(false);
iObj.PivotStyle(STYLE_SOLID);
iObj.PivotColor(clrMagenta);
}
//
AddObjectIfNotExists(iObj);
}
}
}
//
result = IsValidSize(ArraySize(mOrderFlow));
if (!result)
@@ -844,301 +812,419 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
return result;
}
//
// Find State Inside Pivots and Attached Them to Pivot ...
int orderFlowCount = ArraySize(mOrderFlow);
if (IsValidSize(orderFlowCount))
{
//
bool lookupSwingHighs = true;
bool lookupSwingLows = true;
bool lookupSupportZones = true;
bool lookupResistanceZones = true;
bool lookupSupplyZones = true;
bool lookupDemandZones = true;
bool lookupBullishOrderBlocks = true;
bool lookupBearishOrderBlocks = true;
bool lookupBullishFairValueGaps = true;
bool lookupBearishFairValueGaps = true;
bool lookupBullishRejectionBars = true;
bool lookupBearishRejectionBars = true;
bool lookupBullishMomentumBars = true;
bool lookupBearishMomentumBars = true;
//
// Loop Through Order Flow ...
for (int i = 0; i < orderFlowCount; i++)
{
//
XPVPivot iPivot = mOrderFlow[i];
//
// D1 ...
XPOIState d1;
if (_1DState.HasChild())
{
//
DetectPivotPOIs(
iPivot,
_1DState,
d1,
lookupSwingHighs,
lookupSwingLows,
lookupSupportZones,
lookupResistanceZones,
lookupSupplyZones,
lookupDemandZones,
lookupBullishOrderBlocks,
lookupBearishOrderBlocks,
lookupBullishFairValueGaps,
lookupBearishFairValueGaps,
lookupBullishRejectionBars,
lookupBearishRejectionBars,
lookupBullishMomentumBars,
lookupBearishMomentumBars //
);
//
if (d1.HasChild())
{
d1.Fill(mOrderFlow[i].state);
}
}
//
// H4 ...
XPOIState h4;
if (_4HState.HasChild())
{
//
DetectPivotPOIs(
iPivot,
_4HState,
h4,
lookupSwingHighs,
lookupSwingLows,
lookupSupportZones,
lookupResistanceZones,
lookupSupplyZones,
lookupDemandZones,
lookupBullishOrderBlocks,
lookupBearishOrderBlocks,
lookupBullishFairValueGaps,
lookupBearishFairValueGaps,
lookupBullishRejectionBars,
lookupBearishRejectionBars,
lookupBullishMomentumBars,
lookupBearishMomentumBars //
);
//
if (h4.HasChild())
{
h4.Fill(mOrderFlow[i].state);
}
}
//
// H2 ...
XPOIState h2;
if (_2HState.HasChild())
{
//
DetectPivotPOIs(
iPivot,
_2HState,
h2,
lookupSwingHighs,
lookupSwingLows,
lookupSupportZones,
lookupResistanceZones,
lookupSupplyZones,
lookupDemandZones,
lookupBullishOrderBlocks,
lookupBearishOrderBlocks,
lookupBullishFairValueGaps,
lookupBearishFairValueGaps,
lookupBullishRejectionBars,
lookupBearishRejectionBars,
lookupBullishMomentumBars,
lookupBearishMomentumBars //
);
//
if (h2.HasChild())
{
h2.Fill(mOrderFlow[i].state);
}
}
//
// H1 ...
XPOIState h1;
if (_1HState.HasChild())
{
//
DetectPivotPOIs(
iPivot,
_1HState,
h1,
lookupSwingHighs,
lookupSwingLows,
lookupSupportZones,
lookupResistanceZones,
lookupSupplyZones,
lookupDemandZones,
lookupBullishOrderBlocks,
lookupBearishOrderBlocks,
lookupBullishFairValueGaps,
lookupBearishFairValueGaps,
lookupBullishRejectionBars,
lookupBearishRejectionBars,
lookupBullishMomentumBars,
lookupBearishMomentumBars //
);
//
if (h1.HasChild())
{
h1.Fill(mOrderFlow[i].state);
}
}
//
// M15 ...
XPOIState m15;
if (_15MState.HasChild())
{
//
DetectPivotPOIs(
iPivot,
_15MState,
m15,
lookupSwingHighs,
lookupSwingLows,
lookupSupportZones,
lookupResistanceZones,
lookupSupplyZones,
lookupDemandZones,
lookupBullishOrderBlocks,
lookupBearishOrderBlocks,
lookupBullishFairValueGaps,
lookupBearishFairValueGaps,
lookupBullishRejectionBars,
lookupBearishRejectionBars,
lookupBullishMomentumBars,
lookupBearishMomentumBars //
);
//
if (m15.HasChild())
{
m15.Fill(mOrderFlow[i].state);
}
}
//
// M5 ...
XPOIState m5;
if (_5MState.HasChild())
{
//
DetectPivotPOIs(
iPivot,
_5MState,
m5,
lookupSwingHighs,
lookupSwingLows,
lookupSupportZones,
lookupResistanceZones,
lookupSupplyZones,
lookupDemandZones,
lookupBullishOrderBlocks,
lookupBearishOrderBlocks,
lookupBullishFairValueGaps,
lookupBearishFairValueGaps,
lookupBullishRejectionBars,
lookupBearishRejectionBars,
lookupBullishMomentumBars,
lookupBearishMomentumBars //
);
//
if (m5.HasChild())
{
m5.Fill(mOrderFlow[i].state);
}
}
//
// M1 ...
XPOIState m1;
if (_1MState.HasChild())
{
//
DetectPivotPOIs(
iPivot,
_1MState,
m1,
lookupSwingHighs,
lookupSwingLows,
lookupSupportZones,
lookupResistanceZones,
lookupSupplyZones,
lookupDemandZones,
lookupBullishOrderBlocks,
lookupBearishOrderBlocks,
lookupBullishFairValueGaps,
lookupBearishFairValueGaps,
lookupBullishRejectionBars,
lookupBearishRejectionBars,
lookupBullishMomentumBars,
lookupBearishMomentumBars //
);
//
if (m1.HasChild())
{
m1.Fill(mOrderFlow[i].state);
}
}
}
}
//
return result;
}
void DetectPivotPOIs(
XPVPivot &pivot,
XPOIState &state,
bool lookupSwingHighs = true,
bool lookupSwingLows = true,
bool lookupSupportZones = true,
bool lookupResistanceZones = true,
bool lookupSupplyZones = true,
bool lookupDemandZones = true,
bool lookupBullishOrderBlocks = true,
bool lookupBearishOrderBlocks = true,
bool lookupBullishFairValueGaps = true,
bool lookupBearishFairValueGaps = true,
bool lookupBullishRejectionBars = true,
bool lookupBearishRejectionBars = true,
bool lookupBullishMomentumBars = true,
bool lookupBearishMomentumBars = true //
/**
* Validate Order Flow ...
*
* @return ( bool )
*/
bool HasValidOrderFlow()
{
//
bool result = false;
//
int orderFlowCount = ArraySize(mOrderFlow);
result =
IsValidSize(orderFlowCount) &&
mOrderFlowDir != X_DIRECTION_ALL &&
mOrderFlowDir != X_DIRECTION_NONE;
//
return result;
}
/**
* Reset Order Flow ...
*/
void ResetOrderFlow()
{
//
Clean(mOrderFlow);
mOrderFlowDir = X_DIRECTION_NONE;
//
ClearDraws();
}
/**
* Draw Order Flow ...
*/
void RedrawOrderFlow(
bool forceClearDraws = true,
bool drawOrderFlow = true,
bool drawOrderFlowState = true,
bool drawOnlyLastOrderFlow = false,
bool drawOnlyLastOrderFlowState = true //
)
{
//
state.Clean();
if (forceClearDraws)
{
ClearDraws();
}
//
if (!pivot.IsValid())
if (!drawOrderFlow ||
!HasValidOrderFlow())
{
return;
}
//
int count = 0;
//
// Swings ...
//
// Swing High ...
if (lookupSwingHighs)
int orderFlowCount = ArraySize(mOrderFlow);
for (int i = 0; i < orderFlowCount; i++)
{
//
count = ArraySize(state.swingHighs);
if (IsValidSize(count))
bool isLast = i == orderFlowCount - 1;
bool canDraw =
!drawOnlyLastOrderFlow ||
(isLast &&
drawOnlyLastOrderFlow);
if (!canDraw)
{
continue;
}
//
XPVPivot iPivot = mOrderFlow[i];
//
XCXPVPivotObject *iObj;
iObj = new XCXPVPivotObject();
bool isCreated = iObj.Create(
mPOIDrawer.ChartIdentification(),
mPOIDrawer.SubWindowIdentification(),
iPivot //
);
if (isCreated)
{
//
for (int i = 0; i < count; i++)
bool canDrawState =
drawOrderFlowState &&
(!drawOnlyLastOrderFlowState ||
(isLast &&
drawOnlyLastOrderFlowState));
if (canDrawState)
{
CustomStateDrawing(iPivot.state);
}
//
if (iPivot.IsPeak())
{
//
XCSwing iSwing = state.swingHighs[i];
iObj.PivotWidth(1);
iObj.PivotFill(false);
iObj.PivotColor(clrAqua);
iObj.PivotStyle(STYLE_SOLID);
}
//
if (iPivot.IsVale())
{
//
iObj.PivotWidth(1);
iObj.PivotFill(false);
iObj.PivotStyle(STYLE_SOLID);
iObj.PivotColor(clrMagenta);
}
}
}
//
// Swing Low ...
if (lookupSwingLows)
{
//
count = ArraySize(state.swingLows);
if (IsValidSize(count))
{
//
for (int i = 0; i < count; i++)
{
}
}
}
//
// Support and Resistance Zones ...
//
// Support Zones ...
if (lookupSupportZones)
{
//
count = ArraySize(state.supportZones);
if (IsValidSize(count))
{
//
for (int i = 0; i < count; i++)
{
}
}
}
//
// Resistance Zones ...
if (lookupResistanceZones)
{
//
count = ArraySize(state.resistanceZones);
if (IsValidSize(count))
{
//
for (int i = 0; i < count; i++)
{
}
}
}
//
// Supply and Demand Zones ...
//
// Supply Zones ...
if (lookupSupplyZones)
{
//
count = ArraySize(state.supplyZones);
if (IsValidSize(count))
{
//
for (int i = 0; i < count; i++)
{
}
}
}
//
// Demand Zones ...
if (lookupDemandZones)
{
//
count = ArraySize(state.demandZones);
if (IsValidSize(count))
{
//
for (int i = 0; i < count; i++)
{
}
}
}
//
// Order Blocks ...
//
// Bullish Order Blocks ...
if (lookupBullishOrderBlocks)
{
//
count = ArraySize(state.bullishOrderBlocks);
if (IsValidSize(count))
{
//
for (int i = 0; i < count; i++)
{
}
}
}
//
// Bearish Order Blocks ...
if (lookupBearishOrderBlocks)
{
//
count = ArraySize(state.bearishOrderBlocks);
if (IsValidSize(count))
{
//
for (int i = 0; i < count; i++)
{
}
}
}
//
// Fair Value Gaps ...
//
// Bullish Fair Value Gaps ...
if (lookupBullishFairValueGaps)
{
//
count = ArraySize(state.bullishFairValueGaps);
if (IsValidSize(count))
{
//
for (int i = 0; i < count; i++)
{
}
}
}
//
// Bearish Fair Value Gaps ...
if (lookupBearishFairValueGaps)
{
//
count = ArraySize(state.bearishFairValueGaps);
if (IsValidSize(count))
{
//
for (int i = 0; i < count; i++)
{
}
}
}
//
// Rejection Bars ...
//
// Bullish Rejection Bars ...
if (lookupBullishRejectionBars)
{
//
count = ArraySize(state.bullishRejectionBars);
if (IsValidSize(count))
{
//
for (int i = 0; i < count; i++)
{
}
}
}
//
// Bearish Rejection Bars ...
if (lookupBearishRejectionBars)
{
//
count = ArraySize(state.bearishRejectionBars);
if (IsValidSize(count))
{
//
for (int i = 0; i < count; i++)
{
}
}
}
//
// Momentum Bars ...
//
// Bullish Momentum Bars ...
if (lookupBullishMomentumBars)
{
//
count = ArraySize(state.bullishMomentumBars);
if (IsValidSize(count))
{
//
for (int i = 0; i < count; i++)
{
}
}
}
//
// Bearish Momenum Bars ...
if (lookupBearishMomentumBars)
{
//
count = ArraySize(state.bearishMomentumBars);
if (IsValidSize(count))
{
//
for (int i = 0; i < count; i++)
{
}
AddObjectIfNotExists(iObj);
}
}
}
/**
* This function fulfills the will of the developer
* @param state: Argument 1
* Custom Drawing State ...
*
* @param state: XPOIState instance reference, Specified Which state to Draw ...
*/
void DrawStateSwings(XPOIState &state)
void CustomStateDrawing(XPOIState &state)
{
//
DrawState(
state, // State ...
true, // Draw SwingHighs ..
true, // Draw SwingLows ..
true, // Update To of all Drawings Till now ...
false, // Draw SwingHighs ..
false, // Draw SwingLows ..
false, // Draw SupportZones ..
false, // Draw ResistanceZones ..
false, // Draw SupplyZones ..
false, // Draw DemandZones ..
true, // Draw BullishOrderBlocks ..
true, // Draw BearishOrderBlocks ..
true, // Draw BullishFairValueGaps ..
true, // Draw BearishFairValueGaps ..
true, // Draw BullishRejectionBars ..
true, // Draw BearishRejectionBars ..
true, // Draw BullishMomentumBars ..
true // Draw BearishMomentumBars ..
false, // Draw BullishFairValueGaps ..
false, // Draw BearishFairValueGaps ..
false, // Draw BullishRejectionBars ..
false, // Draw BearishRejectionBars ..
false, // Draw BullishMomentumBars ..
false // Draw BearishMomentumBars ..
);
}
@@ -1237,9 +1323,9 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
x3vwapInputs.Default();
//
x3vwapInputs.showFast = false;
x3vwapInputs.showMid = false;
x3vwapInputs.showSlow = false;
x3vwapInputs.showFast = true;
x3vwapInputs.showMid = true;
x3vwapInputs.showSlow = true;
//
x3vwapHelper = new XCX3VWAPHelper();