Last ...
This commit is contained in:
@@ -71,6 +71,9 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
|
||||
delete xpvHelper;
|
||||
delete x3maHelper;
|
||||
delete x3vwapHelper;
|
||||
|
||||
//
|
||||
IndicatorRelease(mPSarHandler);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -408,6 +411,11 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
|
||||
X3VWAPInputs x3vwapInputs;
|
||||
XCX3VWAPHelper *x3vwapHelper;
|
||||
|
||||
//
|
||||
// Parabolic Sar ...
|
||||
int mPSarHandler;
|
||||
double mPSars[];
|
||||
|
||||
//
|
||||
XPVPivot mOrderFlow[];
|
||||
ENUM_X_DIRECTION mOrderFlowDir;
|
||||
@@ -481,6 +489,21 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Retrieve Parabolic Sars ...
|
||||
int sarsCopied = CopyBuffer(
|
||||
mPSarHandler,
|
||||
0,
|
||||
0,
|
||||
conditionsLoopback,
|
||||
mPSars //
|
||||
);
|
||||
result = sarsCopied >= conditionsLoopback;
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Only Detect Order Flow when there isn't ...
|
||||
if (ArraySize(mOrderFlow) == 0 ||
|
||||
@@ -839,6 +862,7 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
|
||||
{
|
||||
//
|
||||
XPVPivot iPivot = mOrderFlow[i];
|
||||
mOrderFlow[i].state.ticksZone = _5MState.ticksZone;
|
||||
|
||||
//
|
||||
// D1 ...
|
||||
@@ -1116,6 +1140,7 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
|
||||
*/
|
||||
void RedrawOrderFlow(
|
||||
bool forceClearDraws = true,
|
||||
bool forceDrawSamePeriod = true,
|
||||
bool drawOrderFlow = true,
|
||||
bool drawOrderFlowState = true,
|
||||
bool drawOnlyLastOrderFlow = false,
|
||||
@@ -1171,7 +1196,11 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
|
||||
drawOnlyLastOrderFlowState));
|
||||
if (canDrawState)
|
||||
{
|
||||
CustomStateDrawing(iPivot.state);
|
||||
//
|
||||
CustomStateDrawing(
|
||||
iPivot.state,
|
||||
forceDrawSamePeriod //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
@@ -1204,27 +1233,491 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
|
||||
* Custom Drawing State ...
|
||||
*
|
||||
* @param state: XPOIState instance reference, Specified Which state to Draw ...
|
||||
* @param forceDrawSamePeriod: Boolean ...
|
||||
*/
|
||||
void CustomStateDrawing(XPOIState &state)
|
||||
void CustomStateDrawing(
|
||||
XPOIState &state,
|
||||
bool forceDrawSamePeriod = false //
|
||||
)
|
||||
{
|
||||
//
|
||||
XPOIState tmpState = state;
|
||||
if (forceDrawSamePeriod)
|
||||
{
|
||||
//
|
||||
int count = 0;
|
||||
ENUM_TIMEFRAMES period = GetPeriod();
|
||||
|
||||
//
|
||||
count = state.CountSwingHighs();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCSwing iSwing = state.swingHighs[i];
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
bool isFilled = iSwing.FillBar(iBar);
|
||||
if (!isFilled)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
bool isSamePeriod = iBar.period == period;
|
||||
if (!isSamePeriod)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
tmpState.swingHighs,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
count = state.CountSwingLows();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCSwing iSwing = state.swingLows[i];
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
bool isFilled = iSwing.FillBar(iBar);
|
||||
if (!isFilled)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
bool isSamePeriod = iBar.period == period;
|
||||
if (!isSamePeriod)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
tmpState.swingLows,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
count = state.CountBullishMomentumBars();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCMomentumBar iMomentum = state.bullishMomentumBars[i];
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
bool isFilled = iMomentum.FillBar(iBar);
|
||||
if (!isFilled)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
bool isSamePeriod = iBar.period == period;
|
||||
if (!isSamePeriod)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
tmpState.bullishMomentumBars,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
count = state.CountBearishMomentumBars();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCMomentumBar iMomentum = state.bearishMomentumBars[i];
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
bool isFilled = iMomentum.FillBar(iBar);
|
||||
if (!isFilled)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
bool isSamePeriod = iBar.period == period;
|
||||
if (!isSamePeriod)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
tmpState.bearishMomentumBars,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
count = state.CountBullishRejectionBars();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCRejectionBar iRejection = state.bullishRejectionBars[i];
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
bool isFilled = iRejection.FillBar(iBar);
|
||||
if (!isFilled)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
bool isSamePeriod = iBar.period == period;
|
||||
if (!isSamePeriod)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
tmpState.bullishRejectionBars,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
count = state.CountBearishRejectionBars();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCRejectionBar iRejection = state.bearishRejectionBars[i];
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
bool isFilled = iRejection.FillBar(iBar);
|
||||
if (!isFilled)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
bool isSamePeriod = iBar.period == period;
|
||||
if (!isSamePeriod)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
tmpState.bearishRejectionBars,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
count = state.CountSupportZones();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCSupportZone iZone = state.supportZones[i];
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
bool isFilled = iZone.FillBar(iBar);
|
||||
if (!isFilled)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
bool isSamePeriod = iBar.period == period;
|
||||
if (!isSamePeriod)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
tmpState.supportZones,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
count = state.CountResistanceZones();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCResistanceZone iZone = state.resistanceZones[i];
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
bool isFilled = iZone.FillBar(iBar);
|
||||
if (!isFilled)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
bool isSamePeriod = iBar.period == period;
|
||||
if (!isSamePeriod)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
tmpState.resistanceZones,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
count = state.CountSupplyZones();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCSupplyZone iZone = state.supplyZones[i];
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
bool isFilled = iZone.FillBar(iBar);
|
||||
if (!isFilled)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
bool isSamePeriod = iBar.period == period;
|
||||
if (!isSamePeriod)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
tmpState.supplyZones,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
count = state.CountDemandZones();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCDemandZone iZone = state.demandZones[i];
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
bool isFilled = iZone.FillBar(iBar);
|
||||
if (!isFilled)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
bool isSamePeriod = iBar.period == period;
|
||||
if (!isSamePeriod)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
tmpState.demandZones,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
count = state.CountBullishOrderBlocks();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCOrderBlock iZone = state.bullishOrderBlocks[i];
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
bool isFilled = iZone.FillBar(iBar);
|
||||
if (!isFilled)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
bool isSamePeriod = iBar.period == period;
|
||||
if (!isSamePeriod)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
tmpState.bullishOrderBlocks,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
count = state.CountBearishOrderBlocks();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCOrderBlock iZone = state.bearishOrderBlocks[i];
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
bool isFilled = iZone.FillBar(iBar);
|
||||
if (!isFilled)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
bool isSamePeriod = iBar.period == period;
|
||||
if (!isSamePeriod)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
tmpState.bearishOrderBlocks,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
count = state.CountBullishFairValueGaps();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCFVG iZone = state.bullishFairValueGaps[i];
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
bool isFilled = iZone.FillStartBar(iBar);
|
||||
if (!isFilled)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
bool isSamePeriod = iBar.period == period;
|
||||
if (!isSamePeriod)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
tmpState.bullishFairValueGaps,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
count = state.CountBearishFairValueGaps();
|
||||
if (IsValidSize(count))
|
||||
{
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
//
|
||||
XCFVG iZone = state.bearishFairValueGaps[i];
|
||||
|
||||
//
|
||||
XOHCL iBar;
|
||||
bool isFilled = iZone.FillStartBar(iBar);
|
||||
if (!isFilled)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
//
|
||||
bool isSamePeriod = iBar.period == period;
|
||||
if (!isSamePeriod)
|
||||
{
|
||||
//
|
||||
ArrayRemove(
|
||||
tmpState.bearishFairValueGaps,
|
||||
i,
|
||||
1 //
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
}
|
||||
|
||||
//
|
||||
DrawState(
|
||||
state, // State ...
|
||||
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 ..
|
||||
false, // Draw BullishFairValueGaps ..
|
||||
false, // Draw BearishFairValueGaps ..
|
||||
false, // Draw BullishRejectionBars ..
|
||||
false, // Draw BearishRejectionBars ..
|
||||
false, // Draw BullishMomentumBars ..
|
||||
false // Draw BearishMomentumBars ..
|
||||
tmpState, // State ...
|
||||
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 ..
|
||||
false, // Draw BullishOrderBlocks ..
|
||||
false, // Draw BearishOrderBlocks ..
|
||||
false, // Draw BullishFairValueGaps ..
|
||||
false, // Draw BearishFairValueGaps ..
|
||||
false, // Draw BullishRejectionBars ..
|
||||
false, // Draw BearishRejectionBars ..
|
||||
false, // Draw BullishMomentumBars ..
|
||||
false, // Draw BearishMomentumBars ..
|
||||
true // Draw Ticks Zone ...
|
||||
);
|
||||
}
|
||||
|
||||
@@ -1334,6 +1827,17 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
|
||||
period,
|
||||
x3vwapInputs //
|
||||
);
|
||||
|
||||
//
|
||||
// Initialize PSar ...
|
||||
double sarStep = 0.02;
|
||||
double sarMax = 0.2;
|
||||
mPSarHandler = iSAR(
|
||||
symbol,
|
||||
period,
|
||||
sarStep,
|
||||
sarMax //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
|
||||
Reference in New Issue
Block a user