Last Changes ...

This commit is contained in:
2025-09-09 16:49:16 +03:30
parent 43f26fa3e0
commit 62af2237e4
6 changed files with 610 additions and 188 deletions
+132 -14
View File
@@ -145,6 +145,44 @@ class XCXOM1SignallerBase
ZeroMemory(mHelper);
}
//
// Signal Event Handlers ...
//
void AddOnSignalEventHandler(TOnSignal handler)
{
//
if (handler == NULL)
{
return;
}
//
Add(
handler,
mOnSignalEventHandlers //
);
}
//
void NotifyOnSignalEvent(XSignal &signal)
{
//
int count = ArraySize(mOnSignalEventHandlers);
bool has = IsValidSize(count) && signal.IsValid();
if (!has)
{
return;
}
//
// Calling Event Handlers ...
for (int i = 0; i < count; i++)
{
mOnSignalEventHandlers[i](signal);
}
}
//
// Actions ...
@@ -329,7 +367,7 @@ class XCXOM1SignallerBase
iDir,
iReason,
iConditions.bars[pIdx].time, // From ...
iConditions.bars[cIdx].time // To
iConditions.bars[zIdx].time // To
);
if (has)
{
@@ -339,6 +377,10 @@ class XCXOM1SignallerBase
iZone,
zones //
);
//
// Prepare Signal ...
PrepareSignal(iZone);
}
//
@@ -379,6 +421,10 @@ class XCXOM1SignallerBase
double iUpper = GetMax(iValues);
double iLower = GetMin(iValues);
//
double iZoneUpper = MathMax(iFibUpper, iFibLower);
double iZoneLower = MathMin(iFibUpper, iFibLower);
//
has = isFastCrossedOverSlow || isFastCrossedUnderSlow;
@@ -386,10 +432,6 @@ class XCXOM1SignallerBase
// Validate Cross Between Zone ...
if (has)
{
//
double iZoneUpper = MathMax(iFibUpper, iFibLower);
double iZoneLower = MathMin(iFibUpper, iFibLower);
//
// Validate MA Place ...
has = iFast >= iZoneLower &&
@@ -471,13 +513,13 @@ class XCXOM1SignallerBase
symbol,
period,
name, // Signaller Name ...
iUpper,
iLower,
iZoneUpper,
iZoneLower,
iPrice,
iDir,
iReason,
iConditions.bars[pIdx].time, // From ...
iConditions.bars[cIdx].time // To
iConditions.bars[zIdx].time // To
);
if (has)
{
@@ -487,6 +529,10 @@ class XCXOM1SignallerBase
iZone,
zones //
);
//
// Prepare Signal ...
PrepareSignal(iZone);
}
//
@@ -518,6 +564,9 @@ class XCXOM1SignallerBase
//
XCXOM1Helper *mHelper; // Indicator Helper ...
//
TOnSignal mOnSignalEventHandlers[]; // Signal Recieved Event Handlers ...
//
int mProcessedTicksCount; // Prcoessed Ticks Count ...
datetime mLastCheckedBarTime; // Last Checked Bar Time ...
@@ -551,12 +600,12 @@ class XCXOM1SignallerBase
// zones[i].UpdateByBarIndex(barIndex);
//
drawer.DrawZone(
zones[i],
true, // Draw Price ...
true, // Draw Middle ...
true // Draw From ...
);
// drawer.DrawZone(
// zones[i],
// true, // Draw Price ...
// true, // Draw Middle ...
// true // Draw From ...
// );
}
}
@@ -588,6 +637,75 @@ class XCXOM1SignallerBase
//
}
}
/**
* Converts iZone to Signal and Notify Signal ...
*
* @param iZone: XOM1Zone
*/
void PrepareSignal(XOM1Zone &zone)
{
//
// Validate Zone ...
if (!zone.IsValid())
{
return;
}
//
// Create Signal ...
XSignal signal;
//
signal.time = zone.to;
signal.provider = name;
signal.symbol = zone.symbol;
signal.period = zone.period;
signal.mode = X_ORDER_MODE_MARKET;
signal.conditions = "XConditions";
signal.comment = ToXString(zone.reason);
signal.type = zone.IsBullish()
? POSITION_TYPE_BUY
: POSITION_TYPE_SELL;
//
// Get Entry ...
signal.entry = GetXEntry(zone.symbol, zone.dir);
//
// Calculate SL ...
double providedSL = zone.IsBullish()
? zone.lower
: zone.upper;
signal.sl = providedSL;
//
// Calculate Risk ...
double risk = MathAbs(signal.entry - signal.sl);
//
// Calculate Reward ...
double r2r = 2;
double reward = risk * r2r;
//
// Calculate TP ...
double providedTP = zone.IsBullish()
? signal.entry + reward
: signal.entry - reward;
signal.tp = providedTP;
//
// Calculate Targets ...
// TODO: Handle this ...
//
// Set Min Volume ...
signal.volume = 0.01;
//
NotifyOnSignalEvent(signal);
}
};
//