last works on XFima Strategy 2 Signalling ...

This commit is contained in:
2025-10-14 02:13:26 +03:30
parent ba2231664a
commit 2271df30c7
8 changed files with 922 additions and 204 deletions
@@ -372,111 +372,6 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
structureConfig,
barIndex //
);
//
// Sample Draws ...
//
// Support ...
if (structure.barAnalysis.IsQuarterReady())
{
//
// Majors ...
//
XPOIDrawConfig iConfig = structureDrawConfig.drawConfig;
iConfig.zonesWidth = 3;
//
poiDrawer.DrawZone(
structure.barAnalysis.majorSupport,
iConfig //
);
//
poiDrawer.DrawZone(
structure.barAnalysis.majorResistance,
iConfig //
);
//
// Minors ...
//
if (structure.barAnalysis.HasMinorSupport())
{
//
XPOIDrawConfig iConfig = structureDrawConfig.drawConfig;
iConfig.zonesStyle = STYLE_DASH;
//
poiDrawer.DrawZone(
structure.barAnalysis.minorSupport,
iConfig //
);
}
//
if (structure.barAnalysis.HasMinorResistance())
{
//
XPOIDrawConfig iConfig = structureDrawConfig.drawConfig;
iConfig.zonesStyle = STYLE_DASH;
//
poiDrawer.DrawZone(
structure.barAnalysis.minorResistance,
iConfig //
);
}
//
// Quarter Draw ...
if (structure.barAnalysis.quarter > 0)
{
//
double quarter = structure.barAnalysis.quarter;
//
datetime quarterFrom = MathMin(poiDetector.majorResistance.from,
poiDetector.majorSupport.from);
datetime quarterTo = iBar.time;
string quarterName = "XQuarter_" + ToXString(quarter) + "_" + ToXString(TimeToSeconds(quarterFrom));
//
CChartObjectTrend *iObj;
has = poiDrawer.DrawTrendLine(
quarter,
quarterFrom,
quarter,
quarterTo,
iObj,
quarterName,
false, // Ray Right ...
false // Ray Left ...
);
if (has)
{
//
iObj.Width(2);
iObj.Color(clrYellow);
//
poiDrawer.drawnObjects.Add(iObj);
}
}
}
//
// Resistance ...
//
// Quarter Line ...
if (poiDetector.majorSupport.IsValid() &&
poiDetector.majorResistance.IsValid())
{
}
// poiDrawer.drawnObjects.Clear();
// poiDrawer.DrawMarketStructure(
// structure,
@@ -978,13 +873,19 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
//
// Prepare ...
XOHCL pBar;
XOHCL p2Bar;
zone.Clean();
pBar.Clean();
p2Bar.Clean();
XClean(targets);
dir = X_DIRECTION_NONE;
//
// Validate ...
result = bar.IsValid();
result = bar.IsValid() &&
bar.GetPreviousBar(pBar) &&
pBar.GetPreviousBar(p2Bar);
if (!result)
{
return result;
@@ -999,78 +900,177 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
// Do Signal Detection ...
//
// result = fimaHelper.HasHKBasedTrend(dir, bar.Index(), 1);
// bool isBullish = result &&
// IsXBullish(dir);
// bool isBearish = result &&
// IsXBearish(dir);
// Preparing Requirement Conditions ...
// Here we Have to Prepare Some Directional Confirmations Using Indicators ...
// for Validate Signals ...
//
// Get Bar Pattern ...
// XPatternAnalysis barAnalysis;
// result =
// poiDetector.AnalyseBarPatterns(
// bar,
// barAnalysis,
// structureConfig.barsAnalysisConfig //
// );
// bool isBullish = barAnalysis.Count(X_DIRECTION_BULLISH) >= 4;
// bool isBearish = barAnalysis.Count(X_DIRECTION_BEARISH) >= 4;
bool hasZigZagHigherLow = fimaHelper.HasZigZagHigherLow(bar.Index(), true);
bool hasZigZagLowerHigh = fimaHelper.HasZigZagLowerHigh(bar.Index(), true);
//
// Validation Patterns ...
int directionalPatternsValidations = 3;
//
// Check Bullish Conditions ...
isBullish =
//
_structure.barAnalysis.HasMinorSupport() &&
bar.open > _structure.barAnalysis.minorSupport.upper &&
bar.close > _structure.barAnalysis.minorSupport.upper &&
(_structure.barsAnalysis[1].Count(X_DIRECTION_BULLISH) >= directionalPatternsValidations) &&
//
(IsTested(
pBar,
_structure.barAnalysis.minorSupport //
) ||
IsTested(
p2Bar,
_structure.barAnalysis.minorSupport //
)) &&
//
(hasZigZagHigherLow)
//
;
//
// Check Bearish Conditions ...
isBearish =
//
_structure.barAnalysis.HasMinorResistance() &&
bar.open < _structure.barAnalysis.minorResistance.lower &&
bar.close < _structure.barAnalysis.minorResistance.lower &&
(_structure.barsAnalysis[1].Count(X_DIRECTION_BEARISH) >= directionalPatternsValidations) &&
//
(IsTested(
pBar,
_structure.barAnalysis.minorResistance //
) ||
IsTested(
p2Bar,
_structure.barAnalysis.minorResistance //
)) &&
//
(hasZigZagLowerHigh)
//
;
//
// Summarize Conditions ...
result =
isBullish ||
isBearish;
//
// Assign Direction ...
if (result)
{
//
// Draw Bar Patterns Analysis ...
// poiDrawer.DrawPatternAnalysis(
// barAnalysis,
// structureDrawConfig.barAnalysisDrawConfig //
// );
dir = isBullish
? X_DIRECTION_BULLISH
: isBearish
? X_DIRECTION_BEARISH
: X_DIRECTION_NONE;
//
if (isBullish)
{
Print("Bullish HK Bond Trend ...");
zone = _structure.barAnalysis.minorSupport;
}
//
if (isBearish)
{
Print("Bearish HK Bond Trend ...");
zone = _structure.barAnalysis.minorResistance;
}
//
Print(ToXString(dir), " Detected ...");
}
//
// Cleanup ...
result = false;
dir = X_DIRECTION_NONE;
// Validate Result ...
result =
result &&
zone.IsValid() &&
HasDirection(dir);
// if (result)
// {
// //
// XPOIDrawConfig iConfig = structureDrawConfig
// .barAnalysisDrawConfig
// .quarterMinorsDrawConfig;
// iConfig.zonesWidth = 3;
// iConfig.zonesFill = true;
// iConfig.bullishColor = clrYellow;
// iConfig.bearishColor = clrYellow;
//
// Draw Custom Requirements ...
// //
// if (isBullish)
// {
// //
// poiDrawer.DrawZone(
// _structure.barAnalysis.minorSupport,
// iConfig //
// );
//
// Prepare Decision Zone ...
if (result)
{
//
// Create Decision Zone and Validate it ...
// //
// Print("Bullish Condition ...");
// }
//
result = zone.IsValid();
}
// //
// if (isBearish)
// {
// //
// poiDrawer.DrawZone(
// _structure.barAnalysis.minorResistance,
// iConfig //
// );
// //
// Print("Bearish Condition ...");
// }
// //
// Print(ToXString(dir), " Detected ...");
// }
//
// Provide Direction and Targets if Required ...
if (result)
{
//
// Handle Signal Direction ...
// Handle Targets Detection ...
//
// Handle Targets Detection ...
double spread = GetSpread(zone.symbol);
double entry = GetEntry(zone.symbol, dir);
//
double risk = isBullish
? entry - zone.lower
: zone.upper - entry;
double reward1 = entry + (isBullish
? risk
: (-1 * risk) //
);
double reward4 = entry + (isBullish
? 4 * risk
: (-4 * risk) //
);
double requiredDistance = PriceToPoint(spread * 2, zone.symbol);
//
XTarget iRFOnEntryOnTP1;
iRFOnEntryOnTP1.target = reward1;
iRFOnEntryOnTP1.tpValue = reward4;
iRFOnEntryOnTP1.doRFOnEntry = true;
iRFOnEntryOnTP1.volumeMultiplier = 0.5;
iRFOnEntryOnTP1.actingDistance = requiredDistance;
//
AddRef(
iRFOnEntryOnTP1,
targets //
);
}
//
@@ -1081,6 +1081,8 @@ class XCXFIMAStrategy1Signaller : public XCXFIMABaseSignaller
zone.Clean();
XClean(targets);
}
pBar.Clean();
p2Bar.Clean();
//
return result;
+5 -2
View File
@@ -389,8 +389,8 @@ struct XFIMAMarketStructureConfig
//
// Configure Detectors ...
loopback = 500;
requiredPivots = 25;
loopback = 200;
requiredPivots = 10;
pvPivotsValidationLength = 5;
maCrossValidationDiffMultiplier = 4;
@@ -549,6 +549,7 @@ struct XFIMAMarketStructureDrawerConfig
{
//
barAnalysisDrawConfig.drawConfig = drawConfig;
barAnalysisDrawConfig.ConfigureQuarterDraws();
pivotAnalysisDrawConfig.drawConfig = drawConfig;
}
@@ -561,3 +562,5 @@ struct XFIMAMarketStructureDrawerConfig
//
};
//