apply new mechanism for validating anf filtering ...
This commit is contained in:
@@ -953,3 +953,262 @@ bool DetectTriggerBlock(
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Signal ...
|
||||
// int signalR2R; // Risk Reward Ratio
|
||||
// bool drawSignals; // Draw Signal
|
||||
// bool drawTriggerBlock; // Draw Trigger Block
|
||||
// double slAtrMultiplier; // ATR Multiplier for SL
|
||||
|
||||
//
|
||||
// Validating ...
|
||||
bool forceHasSwing; // Force Blocks to Have Swing
|
||||
bool forceOBBarType; // Force Block Has Reversal Bar
|
||||
bool forceOBFVGBarType; // Force FVG Has Same Bars
|
||||
bool forceHasFLiquidity; // Force Blocks to Have Following Liquidity
|
||||
bool forceHasRLiquidity; // Force Blocks to Have Reversal Liquidity
|
||||
bool validateGapSequence; // Validate Block's Gap Sequence
|
||||
bool validateBlockEdgeBreakout; // Validate Block's Edge Breakout
|
||||
|
||||
//
|
||||
// Filtering ...
|
||||
bool filterBasedOnPV; // Filter Based on Peak and Vale
|
||||
bool filterBasedOnSar; // Filter Based on Sar
|
||||
bool filterBasedOnRSI; // Filter Based on RSI
|
||||
bool filterBasedOnADX; // Filter Based on ADX
|
||||
bool filterBasedOnATR; // Filter Based on ATR
|
||||
bool filterBasedOnTrend; // Filter Based on Trend
|
||||
bool filterBasedOnDelta; // Filter Based on Delta
|
||||
bool filterBasedOnVolume; // Filter Based on Volume
|
||||
bool filterBasedOnSignalBar; // Filter Based on Signal Bar
|
||||
bool filterBasedOnHKSignalBar; // Filter Based on Hiken Ashi Signal Bar
|
||||
|
||||
//
|
||||
// Alert ...
|
||||
string alertPrefix; // Alert Prefix
|
||||
bool logAlerts; // Log Alerts
|
||||
bool pushAlerts; // Push Alerts
|
||||
bool mailAlerts; // Mail Alerts
|
||||
bool terminalAlerts; // Terminal Alerts
|
||||
|
||||
//
|
||||
// Initialize and Configure Alert ...
|
||||
mAlert = new XCAlert();
|
||||
mEnableAlerts =
|
||||
_logAlerts ||
|
||||
_pushAlerts ||
|
||||
_mailAlerts ||
|
||||
_terminalAlerts;
|
||||
string mPrefix = ShortName +
|
||||
(!IsValid(mAlertPrefix)
|
||||
? ""
|
||||
: "[" + mAlertPrefix + "]");
|
||||
mAlert.SetPrefix(mPrefix);
|
||||
mAlert.SetLogAlerts(_logAlerts);
|
||||
mAlert.SetMailAlerts(_mailAlerts);
|
||||
mAlert.SetPushAlerts(_pushAlerts);
|
||||
mAlert.SetEnableAlerts(mEnableAlerts);
|
||||
mAlert.SetTerminalAlerts(_terminalAlerts);
|
||||
|
||||
//
|
||||
// Validating ...
|
||||
forceHasSwing = false; // Force Blocks to Have Swing
|
||||
forceOBBarType = false; // Force Block Has Reversal Bar
|
||||
forceOBFVGBarType = false; // Force FVG Has Same Bars
|
||||
forceHasFLiquidity = false; // Force Blocks to Have Following Liquidity
|
||||
forceHasRLiquidity = false; // Force Blocks to Have Reversal Liquidity
|
||||
validateGapSequence = false; // Validate Block's Gap Sequence
|
||||
validateBlockEdgeBreakout = false; // Validate Block's Edge Breakout
|
||||
|
||||
//
|
||||
// Filtering ...
|
||||
filterBasedOnPV = false; // Filter Based on Peak and Vale
|
||||
filterBasedOnSar = false; // Filter Based on Sar
|
||||
filterBasedOnRSI = false; // Filter Based on RSI
|
||||
filterBasedOnADX = false; // Filter Based on ADX
|
||||
filterBasedOnATR = false; // Filter Based on ATR
|
||||
filterBasedOnTrend = false; // Filter Based on Trend
|
||||
filterBasedOnDelta = false; // Filter Based on Delta
|
||||
filterBasedOnVolume = false; // Filter Based on Volume
|
||||
filterBasedOnSignalBar = false; // Filter Based on Signal Bar
|
||||
filterBasedOnHKSignalBar = false; // Filter Based on Hiken Ashi Signal Bar
|
||||
|
||||
//
|
||||
// Alert ...
|
||||
alertPrefix = ""; // Alert Prefix
|
||||
logAlerts = false; // Log Alerts
|
||||
pushAlerts = false; // Push Alerts
|
||||
mailAlerts = false; // Mail Alerts
|
||||
terminalAlerts = false; // Terminal Alerts
|
||||
|
||||
//
|
||||
// Validating ...
|
||||
forceHasSwing = false; // Force Blocks to Have Swing
|
||||
forceOBBarType = false; // Force Block Has Reversal Bar
|
||||
forceOBFVGBarType = false; // Force FVG Has Same Bars
|
||||
forceHasFLiquidity = false; // Force Blocks to Have Following Liquidity
|
||||
forceHasRLiquidity = false; // Force Blocks to Have Reversal Liquidity
|
||||
validateGapSequence = false; // Validate Block's Gap Sequence
|
||||
validateBlockEdgeBreakout = false; // Validate Block's Edge Breakout
|
||||
|
||||
//
|
||||
// Filtering ...
|
||||
filterBasedOnPV = false; // Filter Based on Peak and Vale
|
||||
filterBasedOnSar = false; // Filter Based on Sar
|
||||
filterBasedOnRSI = false; // Filter Based on RSI
|
||||
filterBasedOnADX = false; // Filter Based on ADX
|
||||
filterBasedOnATR = false; // Filter Based on ATR
|
||||
filterBasedOnTrend = false; // Filter Based on Trend
|
||||
filterBasedOnDelta = false; // Filter Based on Delta
|
||||
filterBasedOnVolume = false; // Filter Based on Volume
|
||||
filterBasedOnSignalBar = false; // Filter Based on Signal Bar
|
||||
filterBasedOnHKSignalBar = false; // Filter Based on Hiken Ashi Signal Bar
|
||||
|
||||
//
|
||||
// Alert ...
|
||||
alertPrefix = ""; // Alert Prefix
|
||||
logAlerts = false; // Log Alerts
|
||||
pushAlerts = false; // Push Alerts
|
||||
mailAlerts = false; // Mail Alerts
|
||||
terminalAlerts = false; // Terminal Alerts
|
||||
|
||||
"", // Validating ...
|
||||
mInputs.forceHasSwing,
|
||||
mInputs.forceOBBarType,
|
||||
mInputs.forceOBFVGBarType,
|
||||
mInputs.forceHasFLiquidity,
|
||||
mInputs.forceHasRLiquidity,
|
||||
mInputs.validateGapSequence,
|
||||
mInputs.validateBlockEdgeBreakout,
|
||||
"", // Filtering ...
|
||||
mInputs.filterBasedOnPV,
|
||||
mInputs.filterBasedOnSar,
|
||||
mInputs.filterBasedOnRSI,
|
||||
mInputs.filterBasedOnADX,
|
||||
mInputs.filterBasedOnATR,
|
||||
mInputs.filterBasedOnTrend,
|
||||
mInputs.filterBasedOnDelta,
|
||||
mInputs.filterBasedOnVolume,
|
||||
mInputs.filterBasedOnSignalBar,
|
||||
mInputs.filterBasedOnHKSignalBar,
|
||||
"", // Alerts ...
|
||||
mInputs.alertPrefix,
|
||||
mInputs.logAlerts,
|
||||
mInputs.pushAlerts,
|
||||
mInputs.mailAlerts,
|
||||
mInputs.terminalAlerts,
|
||||
|
||||
//
|
||||
// Validating ...
|
||||
input group "Validating";
|
||||
input bool forceHasSwing = false; // Force Blocks to Have Swing
|
||||
input bool forceObBarType = false; // Force Block Has Reversal Bar
|
||||
input bool forceOBFVGBarType = false; // Force FVG Has Same Bars
|
||||
input bool forceHasFLiquidity = false; // Force Blocks to Have Following Liquidity
|
||||
input bool forceHasRLiquidity = false; // Force Blocks to Have Reversal Liquidity
|
||||
input bool validateGapSequence = false; // Validate Block's Gap Sequence
|
||||
input bool validateBlockEdgeBreakout = false; // Validate Block's Edge Breakout
|
||||
|
||||
//
|
||||
// Filtering ...
|
||||
input group "Filtering";
|
||||
input bool filterBasedOnPV = false; // Filter Based on Peak and Vale
|
||||
input bool filterBasedOnSar = false; // Filter Based on Sar
|
||||
input bool filterBasedOnRSI = false; // Filter Based on RSI
|
||||
input bool filterBasedOnADX = false; // Filter Based on ADX
|
||||
input bool filterBasedOnATR = false; // Filter Based on ATR
|
||||
input bool filterBasedOnTrend = false; // Filter Based on Trend
|
||||
input bool filterBasedOnDelta = false; // Filter Based on Delta
|
||||
input bool filterBasedOnVolume = false; // Filter Based on Volume
|
||||
input bool filterBasedOnSignalBar = false; // Filter Based on Signal Bar
|
||||
input bool filterBasedOnHKSignalBar = false; // Filter Based on Hiken Ashi Signal Bar
|
||||
|
||||
//
|
||||
// Alert ...
|
||||
input group "Alerts";
|
||||
input string mAlertPrefix = ""; // Alert Prefix
|
||||
input bool _logAlerts = false; // Log Alerts
|
||||
input bool _pushAlerts = false; // Push Alerts
|
||||
input bool _mailAlerts = false; // Mail Alerts
|
||||
input bool _terminalAlerts = false; // Terminal Alerts
|
||||
|
||||
|
||||
//
|
||||
// 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;
|
||||
|
||||
|
||||
|
||||
//
|
||||
// TODO: Remove this ...
|
||||
// Temparory Testing Configs ...
|
||||
// validations.maxAllowedRange = 200;
|
||||
// validations.forceHasSwing = true;
|
||||
// validations.forceFVGBarType = true;
|
||||
// validations.forceOBBarType = true;
|
||||
// validations.validateGapSequence = true;
|
||||
// validations.validateBlockEdgeBreakout = true;
|
||||
// validations.liquidityLoopback = 144;
|
||||
// validations.forceHasFLiquidity = true;
|
||||
// validations.forceHasRLiquidity = true;
|
||||
// validations.minAllowedBlockLength = 7;
|
||||
|
||||
//
|
||||
// TODO: Remove this ...
|
||||
// filters.bosLoopback = 0;
|
||||
// filters.filterBasedOnPV = true;
|
||||
// filters.filterBasedOnSar = true;
|
||||
// filters.forceSarSwitched = false;
|
||||
// filters.forceSarOnBothSide = true;
|
||||
// filters.forceSarHasBreakout = true;
|
||||
// filters.forceSarHasReversalSide = false;
|
||||
// filters.filterBasedOnRSI = false;
|
||||
// filters.forceHasRSITrending = false;
|
||||
// filters.forceHasRSIVPattern = false;
|
||||
// filters.forceHasRSICrossing = false;
|
||||
// filters.filterBasedOnADX = true;
|
||||
// filters.forceHasADXTrending = false;
|
||||
// filters.forceHasADXCrossing = true;
|
||||
// filters.filterBasedOnATR = true;
|
||||
// filters.forceHasATRTrending = true;
|
||||
// filters.forceHasATRBreakout = true;
|
||||
// filters.filterBasedOnTrend = false;
|
||||
// filters.forceHasTrendDir = false;
|
||||
// filters.forceHasTrendPlace = false;
|
||||
// filters.forceHasTrendChange = false;
|
||||
// filters.forceHasTrendTrending = false;
|
||||
// filters.forceHasTrendRejection = false;
|
||||
// filters.forceHasTrendLineInside = false;
|
||||
// filters.forceHasTrendDirOnBothSide = false;
|
||||
// filters.filterBasedOnDelta = false;
|
||||
// filters.filterBasedOnVolume = false;
|
||||
// filters.filterBasedOnSignalBar = true;
|
||||
// filters.filterBasedOnHKSignalBar = true;
|
||||
|
||||
Reference in New Issue
Block a user