last works on XFima Strategy 2 Signalling ...
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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
|
||||
|
||||
//
|
||||
};
|
||||
|
||||
//
|
||||
Reference in New Issue
Block a user