This commit is contained in:
2025-05-07 18:22:47 +03:30
parent 8258c7a7ef
commit 32f895407f
3 changed files with 1273 additions and 340 deletions
+98 -162
View File
@@ -454,18 +454,18 @@ class XCXCAEASignaller : XCBase
//
// Setup Conditions ...
XBoxZone signalBox;
bool hasSignalBox = false;
XBoxZone decisionZone;
bool hasDecisionZone = false;
XCAEAConditions conditions;
ENUM_X_DIRECTION signalBoxDir = X_DIRECTION_NONE;
ENUM_X_DIRECTION decisionZoneDir = X_DIRECTION_NONE;
//
// Checking Test Signal ...
hasSignalBox = TestDetectSignal(
// Checking Signal's Decision Zone ...
hasDecisionZone = DetectDecisionZone(
helper,
drawer,
signalBox,
signalBoxDir,
decisionZone,
decisionZoneDir,
conditions,
zIndex,
loopback //
@@ -473,22 +473,22 @@ class XCXCAEASignaller : XCBase
//
// Make Signal Box UnAvailable ...
if (hasSignalBox)
if (hasDecisionZone)
{
//
AddRef(
signalBox,
decisionZone,
unAvailableBoxes //
);
}
//
isBullish = hasSignalBox &&
IsBullish(signalBoxDir);
isBullish = hasDecisionZone &&
IsBullish(decisionZoneDir);
//
isBearish = hasSignalBox &&
IsBearish(signalBoxDir);
isBearish = hasDecisionZone &&
IsBearish(decisionZoneDir);
//
result = isBullish ||
@@ -499,139 +499,17 @@ class XCXCAEASignaller : XCBase
// Do What we Want ...
barTraker.Waits();
//
// Draw Signal Box ...
XCBoxObject *iObj;
bool isCreated = helper.poiDrawer.DrawBox(
signalBox,
iObj //
);
if (isCreated)
{
//
mObjects.Add(iObj);
ZeroMemory(iObj);
//
// Print("Signal Box ...");
}
//
// Prepare Conditions ...
mConditions.symbol = symbol;
mConditions.period = period;
mConditions.time = zBar.time;
//
double spread = GetSpread(symbol);
//
double entry =
isBullish
? signalBox.upper
: signalBox.lower;
//
double sl =
isBullish
? signalBox.lower
: signalBox.upper;
//
double risk =
isBullish
? entry - sl
: sl - entry;
risk += spread;
if (risk >= maxAllowedSLDistanceInPoint * points)
{
//
// Fix Risk in Big Distances ...
double hh5 = zBar.FindHighest(5, MODE_HIGH);
double ll5 = zBar.FindLowest(5, MODE_LOW);
//
double hhll5Delta = hh5 - ll5;
double riskDelta = hhll5Delta / 2;
risk = riskDelta;
}
//
double rewardTP = risk * tpReward;
//
double tp =
isBullish
? entry + rewardTP
: entry - rewardTP;
//
// Filling ...
mConditions.sl = sl;
mConditions.tp = tp;
mConditions.reward = tpReward;
mConditions.pivot =
isBullish
? sl
: entry;
mConditions.point =
isBullish
? entry
: sl;
mConditions.dir = signalBoxDir;
mConditions.provider = "XCAEA";
mConditions.signalBox = signalBox;
mConditions.setupTime = zBar.time;
mConditions.dir = decisionZoneDir;
mConditions.conditions = conditions;
//
// Targets Preparing ...
if (useTargets)
{
//
// Select RF Rewards ...
if (continuesRFTillTarget)
{
//
double rfReward = 1;
while (rfReward < tpReward)
{
//
double rewardRF = risk * rfReward;
double rfTP =
isBullish
? entry + rewardRF
: entry - rewardRF;
//
Add(
rfTP,
mConditions.targets //
);
//
rfReward++;
}
}
else
{
//
double rfReward = 2;
//
double rewardRF = risk * rfReward;
double rfTP =
isBullish
? entry + rewardRF
: entry - rewardRF;
//
Add(
rfTP,
mConditions.targets //
);
}
}
mConditions.decisionZone = decisionZone;
}
//
@@ -644,8 +522,8 @@ class XCXCAEASignaller : XCBase
pPBar.Clean();
//
signalBox.Clean();
conditions.Clean();
decisionZone.Clean();
//
return result;
@@ -682,6 +560,12 @@ class XCXCAEASignaller : XCBase
datetime setupTime = conditions.setupTime;
ENUM_X_DIRECTION setupDir = conditions.dir;
//
helper.GetConditions(
conditions.conditions,
barIndex //
);
//
bool isBullish = IsBullish(setupDir);
bool isBearish = IsBearish(setupDir);
@@ -716,35 +600,61 @@ class XCXCAEASignaller : XCBase
//
// Checking Trigger Conditions ...
double sls[];
double sl = 0;
double tp = 0;
ENUM_X_DIRECTION triggerDir;
//
// Checking Trigger Cond 1 ...
bool canTriggerCond1 = CanTriggerCond1(
helper,
conditions.signalBox,
conditions.decisionZone,
triggerDir,
sls,
sl,
tp,
barIndex //
);
//
// Checking Trigger Cond 2 ...
bool canTriggerCond2 = CanTriggerCond2(
helper,
conditions.decisionZone,
triggerDir,
sl,
tp,
barIndex //
);
//
// Update Signal Box To ...
conditions.signalBox.to = cTime;
conditions.decisionZone.to = cTime;
//
isBullish = IsBullish(triggerDir);
isBearish = IsBearish(triggerDir);
//
// Try To Draw Signal Box ...
XCBoxObject *iObj;
helper.poiDrawer.DrawBox(
conditions.signalBox,
bool has = helper.poiDrawer.DrawBox(
conditions.decisionZone,
iObj //
);
if (has)
{
mObjects.Add(iObj);
}
ZeroMemory(iObj);
//
result = canTriggerCond1;
// Summarizing Result ...
result =
canTriggerCond1 ||
canTriggerCond2;
//
isBullish = result &&
IsBullish(triggerDir);
isBearish = result &&
IsBearish(triggerDir);
//
if (result)
{
//
@@ -758,19 +668,35 @@ class XCXCAEASignaller : XCBase
conditions.entry = entry;
//
double slsMax = GetMax(sls);
double slsMin = GetMin(sls);
double sl = isBullish
? slsMin
: slsMax;
if (tp > 0.0)
{
//
Add(
tp,
conditions.targets //
);
}
//
double risk = MathAbs(entry - sl);
double tp =
double reward = (risk * conditions.reward);
tp =
isBullish
? entry + (risk * conditions.reward)
: entry - (risk * conditions.reward);
? entry + reward
: entry - reward;
//
// Handling RF ...
double rfReward = risk * 1.85;
double rfPrice =
isBullish
? entry + rfReward
: entry - rfReward;
Add(
rfPrice,
conditions.targets //
);
//
conditions.sl = sl;
conditions.tp = tp;
@@ -788,20 +714,30 @@ class XCXCAEASignaller : XCBase
if (!result)
{
//
// Check Box Age ...
int age = conditions.GetSetupAge();
bool has = age <= maxAllowedSetupAge;
if (!has)
{
conditions.Clean();
}
//
// Check Box Price ...
has = IsBoxBreaked(
helper,
conditions.decisionZone,
barIndex //
);
if (has)
{
conditions.Clean();
}
}
//
// Cleanup ...
//
Clean(sls);
//
return result;
}