This commit is contained in:
2024-11-25 19:00:52 +03:30
parent 042fa88d3a
commit 4b40adf4ef
4 changed files with 506 additions and 118 deletions
@@ -359,6 +359,10 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
return result;
}
//
// Detect Fair Value Gaps ...
//
bool isOrderFlowBullish = IsBullish(mOrderFlowDir);
@@ -419,14 +423,6 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
//
;
//
if (hasCHOCH)
{
// RedrawOrderFlow();
mLastCHOCHOn = TimeCurrent();
// ClearDraws();
}
//
// Check PSar is Equals to Peak or Vale ...
bool isSAREqualsToPeak =
@@ -751,17 +747,6 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
);
//
// double candidates[];
// DetectSLCandidates(
// candidates,
// entry,
// conditions,
// xType //
// );
// double selectedSL =
// hasLong
// ? GetMax(candidates)
// : GetMin(candidates);
sl =
hasLong
? selectedSL - pip2
@@ -798,7 +783,75 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
{
//
Print("PRV: ", provider);
RedrawOrderFlow();
//
ENUM_X_DIRECTION forDir = ToDirection(signal.type);
bool ignoreSwingHighs = false;
bool ignoreSwingLows = false;
bool ignoreSupportZones = false;
bool ignoreResistanceZones = false;
bool ignoreSupplyZones = false;
bool ignoreDemandZones = false;
bool ignoreBullishOrderBlocks = false;
bool ignoreBearishOrderBlocks = false;
bool ignoreBullishFairValueGaps = false;
bool ignoreBearishFairValueGaps = false;
bool ignoreBullishRejectionBars = false;
bool ignoreBearishRejectionBars = false;
bool ignoreBullishMomentumBars = false;
bool ignoreBearishMomentumBars = false;
if (IsBullish(forDir))
{
//
ignoreSwingLows = false;
ignoreDemandZones = false;
ignoreSupportZones = false;
ignoreBullishOrderBlocks = false;
ignoreBullishFairValueGaps = false;
ignoreBullishRejectionBars = false;
ignoreBullishMomentumBars = false;
}
else
{
//
ignoreSwingHighs = true;
ignoreSupplyZones = true;
ignoreResistanceZones = true;
ignoreBearishOrderBlocks = true;
ignoreBearishFairValueGaps = false;
ignoreBearishRejectionBars = true;
ignoreBearishMomentumBars = true;
}
//
RedrawOrderFlow(
true, // Force Clean ...
false, // Same Period ...
true, // Order Flow ...
true, // Order Flow State ...
false, // Only Last Order Flow ...
true, // Only Last Order Flow State ...
//
forDir, // Direction Force ...
ignoreSwingHighs,
ignoreSwingLows,
ignoreSupportZones,
ignoreResistanceZones,
ignoreSupplyZones,
ignoreDemandZones,
ignoreBullishOrderBlocks,
ignoreBearishOrderBlocks,
ignoreBullishFairValueGaps,
ignoreBearishFairValueGaps,
ignoreBullishRejectionBars,
ignoreBearishRejectionBars,
ignoreBullishMomentumBars,
ignoreBearishMomentumBars,
//
false, // Vision State ...
false, // Analyse State ...
false // Trigger State ...
);
DrawSignal(signal);
ClearDraws();
@@ -815,75 +868,6 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
return result;
}
/**
* Detect SL Candidates based on Strategy and Conditions ...
*
* @param result: Double array reference ...
* @param entry: Double, Position Entry Price ...
* @param conditions: X121SMCStrategyConditions instance, Provides Configurations ...
* @param type: ENUM_X_POSITION_TYPES member, Specified Position Type ...
*/
void DetectSLCandidates(
double &result[],
double entry,
X121SMCStrategyConditions &conditions,
ENUM_X_POSITION_TYPES type //
) override
{
//
Clean(result);
//
int cIndex = 1;
//
if (entry <= 0 ||
!conditions.IsValid() ||
type == X_POSITION_TYPE_ALL ||
type == X_POSITION_TYPE_NONE)
{
return;
}
//
Add(
conditions.x3vwapConditions.fasts[cIndex],
result //
);
//
Add(
conditions.x3vwapConditions.mids[cIndex],
result //
);
//
Add(
conditions.x3vwapConditions.slows[cIndex],
result //
);
//
Add(
conditions.x3maConditions.fasts[cIndex],
result //
);
//
Add(
conditions.xpvConditions.vales[cIndex],
result //
);
//
Add(
conditions.xpvConditions.peaks[cIndex],
result //
);
//
}
/**
* Customize Strategy Identifier ...
*/
@@ -1043,7 +1027,13 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
int lastPivotIDX = ArraySize(mOrderFlow) - 1;
if (IsValidSize(lastPivotIDX))
{
FillPivotSate(lastPivotIDX);
//
FillPivotSate(
lastPivotIDX,
true, // Use Vision State ...
true, // Use Analyse State ...
false // Use Trigger State ...
);
}
}
@@ -1352,7 +1342,13 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
// Loop Through Order Flow ...
for (int i = 0; i < orderFlowCount; i++)
{
FillPivotSate(i);
//
FillPivotSate(
i,
true, // Use Vision State ...
true, // Use Analyse State ...
false // Use Trigger State ...
);
}
}
@@ -1380,7 +1376,10 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
* @param lookupBearishMomentumBars: Boolean ...
*/
void FillPivotSate(
int pivotIDX, //
int pivotIDX, //
bool useVisionState = true, // Use Vision State ...
bool useAnalyseState = true, // Use Analyse State ...
bool useTriggerState = true, // Use Trigger State ...
bool lookupSwingHighs = true,
bool lookupSwingLows = true,
bool lookupSupportZones = true,
@@ -1403,7 +1402,8 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
//
// Trigger ...
XPOIState mTriggerState;
if (mTriggerPOIState.HasChild())
if (useTriggerState &&
mTriggerPOIState.HasChild())
{
//
DetectPivotPOIs(
@@ -1436,12 +1436,13 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
//
// Analyse ...
XPOIState mAnalyseState;
if (mAnalysePOIState.HasChild())
if (useAnalyseState &&
mAnalysePOIState.HasChild())
{
//
DetectPivotPOIs(
mOrderFlow[pivotIDX],
mTriggerPOIState,
mAnalysePOIState,
mAnalyseState,
lookupSwingHighs,
lookupSwingLows,
@@ -1469,12 +1470,13 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
//
// Vision ...
XPOIState mVisionState;
if (mVisionPOIState.HasChild())
if (useVisionState &&
mVisionPOIState.HasChild())
{
//
DetectPivotPOIs(
mOrderFlow[pivotIDX],
mTriggerPOIState,
mVisionPOIState,
mVisionState,
lookupSwingHighs,
lookupSwingLows,
@@ -1630,7 +1632,30 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
bool drawOrderFlow = true,
bool drawOrderFlowState = true,
bool drawOnlyLastOrderFlow = false,
bool drawOnlyLastOrderFlowState = true //
bool drawOnlyLastOrderFlowState = true,
//
ENUM_X_DIRECTION forDir = X_DIRECTION_NONE,
//
// Ignores List ...
bool ignoreSwingHighs = false,
bool ignoreSwingLows = false,
bool ignoreSupportZones = false,
bool ignoreResistanceZones = false,
bool ignoreSupplyZones = false,
bool ignoreDemandZones = false,
bool ignoreBullishOrderBlocks = false,
bool ignoreBearishOrderBlocks = false,
bool ignoreBullishFairValueGaps = false,
bool ignoreBearishFairValueGaps = false,
bool ignoreBullishRejectionBars = false,
bool ignoreBearishRejectionBars = false,
bool ignoreBullishMomentumBars = false,
bool ignoreBearishMomentumBars = false,
//
// States Drawing ...
bool drawVisionState = false,
bool drawAnalyseState = false,
bool drawTriggerState = false //
)
{
//
@@ -1685,7 +1710,22 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
//
CustomStateDrawing(
iPivot.state,
forceDrawSamePeriod //
forceDrawSamePeriod,
forDir,
ignoreSwingHighs,
ignoreSwingLows,
ignoreSupportZones,
ignoreResistanceZones,
ignoreSupplyZones,
ignoreDemandZones,
ignoreBullishOrderBlocks,
ignoreBearishOrderBlocks,
ignoreBullishFairValueGaps,
ignoreBearishFairValueGaps,
ignoreBullishRejectionBars,
ignoreBearishRejectionBars,
ignoreBullishMomentumBars,
ignoreBearishMomentumBars //
);
}
@@ -1713,6 +1753,84 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
AddObjectIfNotExists(iObj);
}
}
//
// Vision ...
if (drawVisionState)
{
//
CustomStateDrawing(
mTriggerPOIState,
false,
forDir,
ignoreSwingHighs,
ignoreSwingLows,
ignoreSupportZones,
ignoreResistanceZones,
ignoreSupplyZones,
ignoreDemandZones,
ignoreBullishOrderBlocks,
ignoreBearishOrderBlocks,
ignoreBullishFairValueGaps,
ignoreBearishFairValueGaps,
ignoreBullishRejectionBars,
ignoreBearishRejectionBars,
ignoreBullishMomentumBars,
ignoreBearishMomentumBars //
);
}
//
// Analyse ...
if (drawAnalyseState)
{
//
CustomStateDrawing(
mAnalysePOIState,
false,
forDir,
ignoreSwingHighs,
ignoreSwingLows,
ignoreSupportZones,
ignoreResistanceZones,
ignoreSupplyZones,
ignoreDemandZones,
ignoreBullishOrderBlocks,
ignoreBearishOrderBlocks,
ignoreBullishFairValueGaps,
ignoreBearishFairValueGaps,
ignoreBullishRejectionBars,
ignoreBearishRejectionBars,
ignoreBullishMomentumBars,
ignoreBearishMomentumBars //
);
}
//
// Trigger ...
if (drawTriggerState)
{
//
CustomStateDrawing(
mVisionPOIState,
false,
forDir,
ignoreSwingHighs,
ignoreSwingLows,
ignoreSupportZones,
ignoreResistanceZones,
ignoreSupplyZones,
ignoreDemandZones,
ignoreBullishOrderBlocks,
ignoreBearishOrderBlocks,
ignoreBullishFairValueGaps,
ignoreBearishFairValueGaps,
ignoreBullishRejectionBars,
ignoreBearishRejectionBars,
ignoreBullishMomentumBars,
ignoreBearishMomentumBars //
);
}
}
/**
@@ -1723,7 +1841,24 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
*/
void CustomStateDrawing(
XPOIState &state,
bool forceDrawSamePeriod = false //
bool forceDrawSamePeriod = false,
ENUM_X_DIRECTION forDir = X_DIRECTION_NONE,
//
// Ignores List ...
bool ignoreSwingHighs = false,
bool ignoreSwingLows = false,
bool ignoreSupportZones = false,
bool ignoreResistanceZones = false,
bool ignoreSupplyZones = false,
bool ignoreDemandZones = false,
bool ignoreBullishOrderBlocks = false,
bool ignoreBearishOrderBlocks = false,
bool ignoreBullishFairValueGaps = false,
bool ignoreBearishFairValueGaps = false,
bool ignoreBullishRejectionBars = false,
bool ignoreBearishRejectionBars = false,
bool ignoreBullishMomentumBars = false,
bool ignoreBearishMomentumBars = false //
)
{
//
@@ -2185,25 +2320,172 @@ class XCX121SMCTestStrategy : public XCX121SMCBaseStrategy
//
}
//
bool drawSwingHighs = true;
bool drawSwingLows = true;
bool drawSupportZones = true;
bool drawResistanceZones = true;
bool drawSupplyZones = true;
bool drawDemandZones = true;
bool drawBullishOrderBlocks = true;
bool drawBearishOrderBlocks = true;
bool drawBullishFairValueGaps = true;
bool drawBearishFairValueGaps = true;
bool drawBullishRejectionBars = true;
bool drawBearishRejectionBars = true;
bool drawBullishMomentumBars = true;
bool drawBearishMomentumBars = true;
//
// Change Drawing Specs Conditions based on
// Provided Direction ...
if (forDir == X_DIRECTION_BULLISH)
{
//
drawSwingLows = true;
drawDemandZones = true;
drawSupportZones = true;
drawBullishOrderBlocks = true;
drawBullishFairValueGaps = true;
drawBullishRejectionBars = true;
drawBullishMomentumBars = true;
//
drawSwingHighs = false;
drawSupplyZones = false;
drawResistanceZones = false;
drawBearishOrderBlocks = false;
drawBearishFairValueGaps = false;
drawBearishRejectionBars = false;
drawBearishMomentumBars = false;
}
else if (forDir == X_DIRECTION_BEARISH)
{
//
drawSwingLows = false;
drawDemandZones = false;
drawSupportZones = false;
drawBullishOrderBlocks = false;
drawBullishFairValueGaps = false;
drawBullishRejectionBars = false;
drawBullishMomentumBars = false;
//
drawSwingHighs = true;
drawSupplyZones = true;
drawResistanceZones = true;
drawBearishOrderBlocks = true;
drawBearishFairValueGaps = true;
drawBearishRejectionBars = true;
drawBearishMomentumBars = true;
}
//
// Apply Ignore List ...
//
if (ignoreSwingHighs)
{
drawSwingHighs = false;
}
//
if (ignoreSwingLows)
{
drawSwingLows = false;
}
//
if (ignoreSupportZones)
{
drawSupportZones = false;
}
//
if (ignoreResistanceZones)
{
drawResistanceZones = false;
}
//
if (ignoreSupplyZones)
{
drawSupplyZones = false;
}
//
if (ignoreDemandZones)
{
drawDemandZones = false;
}
//
if (ignoreBullishOrderBlocks)
{
drawBullishOrderBlocks = false;
}
//
if (ignoreBearishOrderBlocks)
{
drawBearishOrderBlocks = false;
}
//
if (ignoreBullishFairValueGaps)
{
drawBullishFairValueGaps = false;
}
//
if (ignoreBearishFairValueGaps)
{
drawBearishFairValueGaps = false;
}
//
if (ignoreBullishRejectionBars)
{
drawBullishRejectionBars = false;
}
//
if (ignoreBearishRejectionBars)
{
drawBearishRejectionBars = false;
}
//
if (ignoreBullishMomentumBars)
{
drawBullishMomentumBars = false;
}
//
if (ignoreBearishMomentumBars)
{
drawBearishMomentumBars = false;
}
//
DrawState(
tmpState, // State ...
true, // Update To of all Drawings Till now ...
true, // Draw SwingHighs ..
true, // 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 ..
true, // Draw BullishRejectionBars ..
true, // Draw BearishRejectionBars ..
true, // Draw BullishMomentumBars ..
true, // Draw BearishMomentumBars ..
true // Draw Ticks Zone ...
tmpState, // State ...
true, // Update To of all Drawings Till now ...
drawSwingHighs, // Draw SwingHighs ..
drawSwingLows, // Draw SwingLows ..
drawSupportZones, // Draw SupportZones ..
drawResistanceZones, // Draw ResistanceZones ..
drawSupplyZones, // Draw SupplyZones ..
drawDemandZones, // Draw DemandZones ..
drawBullishOrderBlocks, // Draw BullishOrderBlocks ..
drawBearishOrderBlocks, // Draw BearishOrderBlocks ..
drawBullishFairValueGaps, // Draw BullishFairValueGaps ..
drawBearishFairValueGaps, // Draw BearishFairValueGaps ..
drawBullishRejectionBars, // Draw BullishRejectionBars ..
drawBearishRejectionBars, // Draw BearishRejectionBars ..
drawBullishMomentumBars, // Draw BullishMomentumBars ..
drawBearishMomentumBars, // Draw BearishMomentumBars ..
true // Draw Ticks Zone ...
);
}