add support for signalling configurations ...

This commit is contained in:
2025-06-03 03:16:02 +03:30
parent d01e1036ce
commit 48123642b7
6 changed files with 153 additions and 1944 deletions
+111 -10
View File
@@ -34,6 +34,45 @@
//
// Definitions ...
//
struct XCATBEASignallingConfigs
{
//
// Signalling Method ...
bool allowSignallingBasedOnConditions; // Signalling Based on Market Conditions
bool allowSignallingBasedOnTriggerBlocks; // Signalling Based on Trigger Blocks
bool allowSignallingBasedOnTriggerBlocksInsideOther; // Signalling Based on Trigger Blocks Seccond inputs
//
// Others ...
bool applyValidateAndFilterOnSelectInsideOthers; // Select Trigger Blocks by Applying Validations and Filterss
bool secondsTriggersSLUsingFirstTriggerBlock; // Use First Trigger Block for SL of Seconds Trigger Block Signalss
//
// Constructor ...
XCATBEASignallingConfigs()
{
Clean();
}
//
// Tools ...
//
// Cleaning Up ...
void Clean()
{
//
allowSignallingBasedOnConditions = false;
allowSignallingBasedOnTriggerBlocks = false;
allowSignallingBasedOnTriggerBlocksInsideOther = false;
//
secondsTriggersSLUsingFirstTriggerBlock = false;
applyValidateAndFilterOnSelectInsideOthers = false;
}
};
//
struct XCATBEASignallerInputs
{
@@ -49,6 +88,7 @@ struct XCATBEASignallerInputs
X121XCatbInputs catbInputs;
XTriggerBlockFilters filters;
XTriggerBlockValidationRules validations;
XCATBEASignallingConfigs signallerConfigs;
//
// Constructor(s) ...
@@ -75,6 +115,7 @@ struct XCATBEASignallerInputs
allowGuards = false;
slATRMultiplier = 0;
riskToRewardRatio = 0;
signallerConfigs.Clean();
//
ZeroMemory(this);
@@ -102,6 +143,8 @@ struct XCATBEASignallerInputs
//
};
//
// Implementations ...
class XCXCATBEASignaller : XCBase
{
//
@@ -111,10 +154,13 @@ class XCXCATBEASignaller : XCBase
// Props ...
//
// Signalling Methods ...
bool allowSignallingBasedOnConditions; // Signalling and Entry based on Market Conditions ...
bool allowSignallingBasedOnTriggerBlocks; // Signalling Based on Trigger Block Detection ...
bool allowSignallingBasedOnTriggerBlocksInsideOther; // Signalling based on Trigger Blocks inside other Trigger Blocks ...
bool allowSignallingBasedOnConditions; // Signalling Based on Market Conditions
bool allowSignallingBasedOnTriggerBlocks; // Signalling Based on Trigger Blocks
bool allowSignallingBasedOnTriggerBlocksInsideOther; // Signalling Based on Trigger Blocks Seccond inputs
//
bool secondsTriggersSLUsingFirstTriggerBlock; // Use First Trigger Block for SL of Seconds Trigger Block Signalss
bool applyValidateAndFilterOnSelectInsideOthers; // Select Trigger Blocks by Applying Validations and Filterss
//
bool allowDraws; // Allow Draws or not ...
@@ -341,6 +387,56 @@ class XCXCATBEASignaller : XCBase
X121XCatbConditions iConditions;
XTriggerBlockFilters iFilters;
XTriggerBlockValidationRules iValidations;
if (applyValidateAndFilterOnSelectInsideOthers)
{
//
// Validations ...
iValidations.forceHasSwing = validations.forceHasSwing;
iValidations.forceOBBarType = validations.forceOBBarType;
iValidations.forceFVGBarType = validations.forceFVGBarType;
iValidations.maxAllowedRange = validations.maxAllowedRange;
iValidations.minAllowedRange = validations.minAllowedRange;
iValidations.minRequiredOBBar = validations.minRequiredOBBar;
iValidations.liquidityLoopback = validations.liquidityLoopback;
iValidations.forceHasFLiquidity = validations.forceHasFLiquidity;
iValidations.forceHasRLiquidity = validations.forceHasRLiquidity;
iValidations.validateGapSequence = validations.validateGapSequence;
iValidations.minAllowedBlockLength = validations.minAllowedBlockLength;
iValidations.validateBlockEdgeBreakout = validations.validateBlockEdgeBreakout;
//
// Clone Filters and Validations ...
iFilters.bosLoopback = filters.bosLoopback;
iFilters.filterBasedOnKI = filters.filterBasedOnKI;
iFilters.filterBasedOnPV = filters.filterBasedOnPV;
iFilters.filterBasedOnSar = filters.filterBasedOnSar;
iFilters.filterBasedOnRSI = filters.filterBasedOnRSI;
iFilters.filterBasedOnADX = filters.filterBasedOnADX;
iFilters.filterBasedOnATR = filters.filterBasedOnATR;
iFilters.forceSarSwitched = filters.forceSarSwitched;
iFilters.forceHasTrendDir = filters.forceHasTrendDir;
iFilters.filterBasedOnTrend = filters.filterBasedOnTrend;
iFilters.filterBasedOnDelta = filters.filterBasedOnDelta;
iFilters.forceSarOnBothSide = filters.forceSarOnBothSide;
iFilters.forceHasTrendPlace = filters.forceHasTrendPlace;
iFilters.forceSarHasBreakout = filters.forceSarHasBreakout;
iFilters.filterBasedOnVolume = filters.filterBasedOnVolume;
iFilters.forceHasRSITrending = filters.forceHasRSITrending;
iFilters.forceHasRSIVPattern = filters.forceHasRSIVPattern;
iFilters.forceHasRSICrossing = filters.forceHasRSICrossing;
iFilters.forceHasADXTrending = filters.forceHasADXTrending;
iFilters.forceHasADXCrossing = filters.forceHasADXCrossing;
iFilters.forceHasATRTrending = filters.forceHasATRTrending;
iFilters.forceHasATRBreakout = filters.forceHasATRBreakout;
iFilters.forceHasTrendChange = filters.forceHasTrendChange;
iFilters.forceHasTrendTrending = filters.forceHasTrendTrending;
iFilters.forceHasTrendRejection = filters.forceHasTrendRejection;
iFilters.filterBasedOnSignalBar = filters.filterBasedOnSignalBar;
iFilters.forceHasTrendLineInside = filters.forceHasTrendLineInside;
iFilters.forceSarHasReversalSide = filters.forceSarHasReversalSide;
iFilters.filterBasedOnHKSignalBar = filters.filterBasedOnHKSignalBar;
iFilters.forceHasTrendDirOnBothSide = filters.forceHasTrendDirOnBothSide;
}
has = DetectTriggerBlock(
helper,
barAnalyser,
@@ -360,7 +456,9 @@ class XCXCATBEASignaller : XCBase
triggerBlocks //
);
}
iFilters.Clean();
iConditions.Clean();
iValidations.Clean();
iTriggerBlock.Clean();
//
@@ -1161,8 +1259,7 @@ class XCXCATBEASignaller : XCBase
// Try to Use SL Based on Inside Trigger Block ...
double sl = 0;
double tp = 0;
bool useInsideTBForSL = true;
if (useInsideTBForSL)
if (secondsTriggersSLUsingFirstTriggerBlock)
{
//
sl = insideTBSignal.sl;
@@ -1380,12 +1477,16 @@ class XCXCATBEASignaller : XCBase
void Init(XCATBEASignallerInputs &inputs)
{
//
maxAllowedCollection = 50;
maxAllowedCollection = 100;
//
allowSignallingBasedOnConditions = false;
allowSignallingBasedOnTriggerBlocks = false;
allowSignallingBasedOnTriggerBlocksInsideOther = true;
allowSignallingBasedOnConditions = inputs.signallerConfigs.allowSignallingBasedOnConditions;
allowSignallingBasedOnTriggerBlocks = inputs.signallerConfigs.allowSignallingBasedOnTriggerBlocks;
allowSignallingBasedOnTriggerBlocksInsideOther = inputs.signallerConfigs.allowSignallingBasedOnTriggerBlocksInsideOther;
//
secondsTriggersSLUsingFirstTriggerBlock = inputs.signallerConfigs.secondsTriggersSLUsingFirstTriggerBlock;
applyValidateAndFilterOnSelectInsideOthers = inputs.signallerConfigs.applyValidateAndFilterOnSelectInsideOthers;
//
bool has = inputs.IsValid();