add support for signalling configurations ...
This commit is contained in:
@@ -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();
|
||||
|
||||
Reference in New Issue
Block a user