apply new mechanism for validating anf filtering ...
This commit is contained in:
+131
-91
@@ -38,9 +38,9 @@
|
||||
//
|
||||
// Common ...
|
||||
input group "Common";
|
||||
input long eaMagicNumber = 78692110; // Magic Number
|
||||
input int eaSlippage = 10; // Slippgae
|
||||
input string eaLogSuffix = ""; // Log Suffix
|
||||
input long eaMagicNumber = 1694056; // Magic Number
|
||||
input int eaSlippage = 10; // Slippgae
|
||||
input string eaLogSuffix = ""; // Log Suffix
|
||||
|
||||
//
|
||||
// Detector ...
|
||||
@@ -49,27 +49,51 @@ input group "Detector";
|
||||
//
|
||||
// Validating ...
|
||||
input group "Validations";
|
||||
input bool eaForceHasSwing = false; // Force Blocks to Have Swing
|
||||
input bool eaForceOBBarType = false; // Force Block Has Reversal Bar
|
||||
input bool eaForceOBFVGBarType = false; // Force FVG Has Same Bars
|
||||
input bool eaForceHasFLiquidity = false; // Force Blocks to Have Following Liquidity
|
||||
input bool eaForceHasRLiquidity = false; // Force Blocks to Have Reversal Liquidity
|
||||
input bool eaValidateGapSequence = false; // Validate Block's Gap Sequence
|
||||
input bool eaValidateBlockEdgeBreakout = false; // Validate Block's Edge Breakout
|
||||
input bool eaForceHasSwing = false; // Force Block to Has Propper Swing
|
||||
input bool eaForceOBBarType = false; // Force Order Block to Has InDirectional Bars
|
||||
input int eaMinRequiredOBBar = 0; // Min Required OB Bar
|
||||
input bool eaForceFVGBarType = false; // Force Fair Value Gaps Bars Type
|
||||
input int eaLiquidityLoopback = 0; // Liquidity Detection Loopback
|
||||
input double eaMaxAllowedRange = 0.0; // Max Allowed Order Block Range
|
||||
input double eaMinAllowedRange = 0.0; // Min Allowed Order Block Range
|
||||
input bool eaForceHasFLiquidity = false; // Force Order Block To Has Reversal Liquidity
|
||||
input bool eaForceHasRLiquidity = false; // Force Order Block to Has Following Liquidity
|
||||
input bool eaValidateGapSequence = false; // Validate Fair Value Gaps Bar Sequences
|
||||
input int eaMinAllowedBlockLength = 5; // Min Allowed Block Length
|
||||
input bool eaValidateBlockEdgeBreakout = false; // Validate Order Block Edge Breakeout
|
||||
|
||||
//
|
||||
// Filtering ...
|
||||
input group "Filters";
|
||||
input bool eaFilterBasedOnPV = false; // Filter Based on Peak and Vale
|
||||
input bool eaFilterBasedOnSar = false; // Filter Based on Sar
|
||||
input bool eaFilterBasedOnRSI = false; // Filter Based on RSI
|
||||
input bool eaFilterBasedOnADX = false; // Filter Based on ADX
|
||||
input bool eaFilterBasedOnATR = false; // Filter Based on ATR
|
||||
input bool eaFilterBasedOnTrend = false; // Filter Based on Trend
|
||||
input bool eaFilterBasedOnDelta = false; // Filter Based on Delta
|
||||
input bool eaFilterBasedOnVolume = false; // Filter Based on Volume
|
||||
input bool eaFilterBasedOnSignalBar = false; // Filter Based on Signal Bar
|
||||
input bool eaFilterBasedOnHKSignalBar = false; // Filter Based on Hiken Ashi Signal Bar
|
||||
input bool eaFilterBasedOnPV = false; // Filter Based On PV
|
||||
input int eaBosLoopback = 0; // PV Based Filtering BOS Lookup
|
||||
input bool eaFilterBasedOnSar = false; // Filter Based On SAR
|
||||
input bool eaForceSarSwitched = false; // SAR Switched on Sides for Filtering
|
||||
input bool eaForceSarOnBothSide = false; // SAR Check on Both Sides for Filtering
|
||||
input bool eaForceSarHasBreakout = false; // SAR Must Has Reversal Direction in Trigger Block
|
||||
input bool eaForceSarHasReversalSide = false; // SAR Must Has Reversal Direction in Trigger Block
|
||||
input bool eaFilterBasedOnRSI = false; // Filter Based On RSI
|
||||
input bool eaForceHasRSITrending = false; // RSI Must Has Trending
|
||||
input bool eaForceHasRSIVPattern = false; // RSI Must Has Pattern
|
||||
input bool eaForceHasRSICrossing = false; // RSI Must Has Crossing Levels
|
||||
input bool eaFilterBasedOnADX = false; // Filter Based On ADX
|
||||
input bool eaForceHasADXTrending = false; // ADX Must Has Trending
|
||||
input bool eaForceHasADXCrossing = false; // ADX Must Has Crossing +DI/-DI
|
||||
input bool eaFilterBasedOnATR = false; // Filter Based On ATR
|
||||
input bool eaForceHasATRTrending = false; // ATR Must Has Trending
|
||||
input bool eaForceHasATRBreakout = false; // ATR Must Has Breakout
|
||||
input bool eaFilterBasedOnTrend = false; // Filter Based On Trend
|
||||
input bool eaForceHasTrendDir = false; // TREND Must Has Following Direction
|
||||
input bool eaForceHasTrendPlace = false; // TREND Place Based Filtering
|
||||
input bool eaForceHasTrendChange = false; // TREND Change Filtering
|
||||
input bool eaForceHasTrendTrending = false; // TREND Must Has Trending
|
||||
input bool eaForceHasTrendRejection = false; // TREND Line Must Rejected
|
||||
input bool eaForceHasTrendLineInside = false; // TREND Line has Inside
|
||||
input bool eaForceHasTrendDirOnBothSide = false; // TREND Must Has Following Direction in Both Side
|
||||
input bool eaFilterBasedOnDelta = false; // Filter Based On Delta
|
||||
input bool eaFilterBasedOnVolume = false; // Filter Based On Volume
|
||||
input bool eaFilterBasedOnSignalBar = false; // Filter Based on Signal Bar
|
||||
input bool eaFilterBasedOnHKSignalBar = false; // Filter Based On HK Signal Bar
|
||||
|
||||
//
|
||||
// Signal ...
|
||||
@@ -137,6 +161,7 @@ XCTrade *eaTrade;
|
||||
XSignal eaSignal;
|
||||
string eaTag = "";
|
||||
XCVolume *eaVolume;
|
||||
XTriggerBlock eaTB;
|
||||
CArrayObj *eaObjects;
|
||||
XCPOIDrawer *eaDrawer;
|
||||
XBarTracker eaBarTraker;
|
||||
@@ -144,8 +169,11 @@ X121XCatbInputs eaInputs;
|
||||
XTimeTracker eaTimeTracker;
|
||||
XCX121XCatbHelper *eaHelper;
|
||||
XCBarAnalyser *eaBarAnalyser;
|
||||
XTriggerBlockFilters eaFilters;
|
||||
X121XCatbConditions eaCatbConditions;
|
||||
XCXCATBEATradeManager *eaTradeManager;
|
||||
XCATBEAStrategyConditions eaConditions;
|
||||
XTriggerBlockValidationRules eaValidations;
|
||||
|
||||
//
|
||||
// Event Handlers ...
|
||||
@@ -221,10 +249,16 @@ void OnDeinit(const int reason)
|
||||
ZeroMemory(eaBarAnalyser);
|
||||
|
||||
//
|
||||
eaTB.Clean();
|
||||
eaSignal.Clean();
|
||||
eaSignal.Clean();
|
||||
eaFilters.Clean();
|
||||
eaBarTraker.Clean();
|
||||
eaConditions.Clean();
|
||||
eaConditions.Clean();
|
||||
eaTimeTracker.Clean();
|
||||
eaValidations.Clean();
|
||||
eaCatbConditions.Clean();
|
||||
|
||||
//
|
||||
DestroyTimer();
|
||||
@@ -247,8 +281,10 @@ void OnTick()
|
||||
eaTradeManager.Manage();
|
||||
|
||||
//
|
||||
eaTB.Clean();
|
||||
eaSignal.Clean();
|
||||
eaConditions.Clean();
|
||||
eaCatbConditions.Clean();
|
||||
|
||||
//
|
||||
bool has = false;
|
||||
@@ -298,45 +334,15 @@ void OnTick()
|
||||
// Check Trigger Block Detected or Not ...
|
||||
if (tradeUsingTriggerBlock)
|
||||
{
|
||||
//
|
||||
// Define Requirements ...
|
||||
XTriggerBlock iTB;
|
||||
XTriggerBlockFilters iFilters;
|
||||
X121XCatbConditions iConditions;
|
||||
XTriggerBlockValidationRules iValidations;
|
||||
|
||||
//
|
||||
// Fill Validations ...
|
||||
iValidations.forceHasSwing = eaInputs.forceHasSwing;
|
||||
iValidations.forceOBBarType = eaInputs.forceOBBarType;
|
||||
iValidations.forceFVGBarType = eaInputs.forceOBFVGBarType;
|
||||
iValidations.forceHasFLiquidity = eaInputs.forceHasFLiquidity;
|
||||
iValidations.forceHasRLiquidity = eaInputs.forceHasRLiquidity;
|
||||
iValidations.validateGapSequence = eaInputs.validateGapSequence;
|
||||
iValidations.validateBlockEdgeBreakout = eaInputs.validateBlockEdgeBreakout;
|
||||
|
||||
//
|
||||
// Fill Filters ...
|
||||
iFilters.filterBasedOnPV = eaInputs.filterBasedOnPV;
|
||||
iFilters.filterBasedOnSar = eaInputs.filterBasedOnSar;
|
||||
iFilters.filterBasedOnRSI = eaInputs.filterBasedOnRSI;
|
||||
iFilters.filterBasedOnADX = eaInputs.filterBasedOnADX;
|
||||
iFilters.filterBasedOnATR = eaInputs.filterBasedOnATR;
|
||||
iFilters.filterBasedOnTrend = eaInputs.filterBasedOnTrend;
|
||||
iFilters.filterBasedOnDelta = eaInputs.filterBasedOnDelta;
|
||||
iFilters.filterBasedOnVolume = eaInputs.filterBasedOnVolume;
|
||||
iFilters.filterBasedOnSignalBar = eaInputs.filterBasedOnSignalBar;
|
||||
iFilters.filterBasedOnHKSignalBar = eaInputs.filterBasedOnHKSignalBar;
|
||||
|
||||
//
|
||||
// Trigger Block Detection ...
|
||||
has = DetectTriggerBlock1(
|
||||
eaHelper,
|
||||
eaBarAnalyser,
|
||||
iTB,
|
||||
iConditions,
|
||||
iValidations,
|
||||
iFilters,
|
||||
eaTB,
|
||||
eaCatbConditions,
|
||||
eaValidations,
|
||||
eaFilters,
|
||||
barIndex,
|
||||
10 // Loopback ...
|
||||
);
|
||||
@@ -373,8 +379,8 @@ void OnTick()
|
||||
//
|
||||
// Preparing Signal ...
|
||||
has = ToSignal(
|
||||
iTB.trigger,
|
||||
iTB.signal,
|
||||
eaTB.trigger,
|
||||
eaTB.signal,
|
||||
targets,
|
||||
slAdditional //
|
||||
);
|
||||
@@ -382,7 +388,7 @@ void OnTick()
|
||||
//
|
||||
// Draw Trigger Block ...
|
||||
DrawTriggerBlock(
|
||||
iTB,
|
||||
eaTB,
|
||||
eaDrawer,
|
||||
eaObjects,
|
||||
NULL //
|
||||
@@ -390,7 +396,7 @@ void OnTick()
|
||||
|
||||
//
|
||||
// Attach Signal ...
|
||||
eaSignal = iTB.signal;
|
||||
eaSignal = eaTB.signal;
|
||||
|
||||
//
|
||||
// Here we Can Fill eaConditions ...
|
||||
@@ -428,7 +434,7 @@ void OnTick()
|
||||
}
|
||||
|
||||
//
|
||||
iTB.Clean();
|
||||
eaTB.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
@@ -459,6 +465,10 @@ void OnTick()
|
||||
//
|
||||
zBar.Clean();
|
||||
cBar.Clean();
|
||||
eaTB.Clean();
|
||||
eaSignal.Clean();
|
||||
eaConditions.Clean();
|
||||
eaCatbConditions.Clean();
|
||||
}
|
||||
|
||||
//
|
||||
@@ -729,40 +739,9 @@ void InitRequirements()
|
||||
eaInputs.showPV = true;
|
||||
eaInputs.showSar = true;
|
||||
eaInputs.showTrend = true;
|
||||
eaInputs.showATRBand = false;
|
||||
eaInputs.showATRBand = true;
|
||||
eaInputs.showPVGolden = true;
|
||||
|
||||
//
|
||||
// Set Validators ...
|
||||
eaInputs.forceHasSwing = eaForceHasSwing;
|
||||
eaInputs.forceOBBarType = eaForceOBBarType;
|
||||
eaInputs.forceOBFVGBarType = eaForceOBFVGBarType;
|
||||
eaInputs.forceHasFLiquidity = eaForceHasFLiquidity;
|
||||
eaInputs.forceHasRLiquidity = eaForceHasRLiquidity;
|
||||
eaInputs.validateGapSequence = eaValidateGapSequence;
|
||||
eaInputs.validateBlockEdgeBreakout = eaValidateBlockEdgeBreakout;
|
||||
|
||||
//
|
||||
// Set Filters ...
|
||||
eaInputs.filterBasedOnPV = eaFilterBasedOnPV;
|
||||
eaInputs.filterBasedOnSar = eaFilterBasedOnSar;
|
||||
eaInputs.filterBasedOnRSI = eaFilterBasedOnRSI;
|
||||
eaInputs.filterBasedOnADX = eaFilterBasedOnADX;
|
||||
eaInputs.filterBasedOnATR = eaFilterBasedOnATR;
|
||||
eaInputs.filterBasedOnTrend = eaFilterBasedOnTrend;
|
||||
eaInputs.filterBasedOnDelta = eaFilterBasedOnDelta;
|
||||
eaInputs.filterBasedOnVolume = eaFilterBasedOnVolume;
|
||||
eaInputs.filterBasedOnSignalBar = eaFilterBasedOnSignalBar;
|
||||
eaInputs.filterBasedOnHKSignalBar = eaFilterBasedOnHKSignalBar;
|
||||
|
||||
//
|
||||
// Alerts ...
|
||||
eaInputs.alertPrefix = eaTag;
|
||||
eaInputs.logAlerts = false; // eaLogAlerts;
|
||||
eaInputs.pushAlerts = false; // eaMailAlerts;
|
||||
eaInputs.mailAlerts = false; // eaPushAlerts;
|
||||
eaInputs.terminalAlerts = false; // eaTerminalAlerts;
|
||||
|
||||
//
|
||||
eaHelper = new XCX121XCatbHelper();
|
||||
bool isInited = eaHelper.Init(
|
||||
@@ -897,6 +876,67 @@ void InitRequirements()
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Fill Validations ...
|
||||
eaValidations.forceHasSwing = eaForceHasSwing;
|
||||
eaValidations.forceOBBarType = eaForceOBBarType;
|
||||
eaValidations.minRequiredOBBar = eaMinRequiredOBBar;
|
||||
eaValidations.forceFVGBarType = eaForceFVGBarType;
|
||||
eaValidations.liquidityLoopback = eaLiquidityLoopback;
|
||||
eaValidations.maxAllowedRange = eaMaxAllowedRange;
|
||||
eaValidations.minAllowedRange = eaMinAllowedRange;
|
||||
eaValidations.forceHasFLiquidity = eaForceHasFLiquidity;
|
||||
eaValidations.forceHasRLiquidity = eaForceHasRLiquidity;
|
||||
eaValidations.validateGapSequence = eaValidateGapSequence;
|
||||
eaValidations.minAllowedBlockLength = eaMinAllowedBlockLength;
|
||||
eaValidations.validateBlockEdgeBreakout = eaValidateBlockEdgeBreakout;
|
||||
|
||||
//
|
||||
// Fill Filters ...
|
||||
|
||||
//
|
||||
eaFilters.filterBasedOnPV = eaFilterBasedOnPV;
|
||||
eaFilters.bosLoopback = eaBosLoopback;
|
||||
|
||||
//
|
||||
eaFilters.filterBasedOnSar = eaFilterBasedOnSar;
|
||||
eaFilters.forceSarSwitched = eaForceSarSwitched;
|
||||
eaFilters.forceSarOnBothSide = eaForceSarOnBothSide;
|
||||
eaFilters.forceSarHasBreakout = eaForceSarHasBreakout;
|
||||
eaFilters.forceSarHasReversalSide = eaForceSarHasReversalSide;
|
||||
|
||||
//
|
||||
eaFilters.filterBasedOnRSI = eaFilterBasedOnRSI;
|
||||
eaFilters.forceHasRSITrending = eaForceHasRSITrending;
|
||||
eaFilters.forceHasRSIVPattern = eaForceHasRSIVPattern;
|
||||
eaFilters.forceHasRSICrossing = eaForceHasRSICrossing;
|
||||
|
||||
//
|
||||
eaFilters.filterBasedOnADX = eaFilterBasedOnADX;
|
||||
eaFilters.forceHasADXTrending = eaForceHasADXTrending;
|
||||
eaFilters.forceHasADXCrossing = eaForceHasADXCrossing;
|
||||
|
||||
//
|
||||
eaFilters.filterBasedOnATR = eaFilterBasedOnATR;
|
||||
eaFilters.forceHasATRTrending = eaForceHasATRTrending;
|
||||
eaFilters.forceHasATRBreakout = eaForceHasATRBreakout;
|
||||
|
||||
//
|
||||
eaFilters.filterBasedOnTrend = eaFilterBasedOnTrend;
|
||||
eaFilters.forceHasTrendDir = eaForceHasTrendDir;
|
||||
eaFilters.forceHasTrendPlace = eaForceHasTrendPlace;
|
||||
eaFilters.forceHasTrendChange = eaForceHasTrendChange;
|
||||
eaFilters.forceHasTrendTrending = eaForceHasTrendTrending;
|
||||
eaFilters.forceHasTrendRejection = eaForceHasTrendRejection;
|
||||
eaFilters.forceHasTrendLineInside = eaForceHasTrendLineInside;
|
||||
eaFilters.forceHasTrendDirOnBothSide = eaForceHasTrendDirOnBothSide;
|
||||
|
||||
//
|
||||
eaFilters.filterBasedOnDelta = eaFilterBasedOnDelta;
|
||||
eaFilters.filterBasedOnVolume = eaFilterBasedOnVolume;
|
||||
eaFilters.filterBasedOnSignalBar = eaFilterBasedOnSignalBar;
|
||||
eaFilters.filterBasedOnHKSignalBar = eaFilterBasedOnHKSignalBar;
|
||||
|
||||
//
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user