Last Changes ...
This commit is contained in:
@@ -48,6 +48,10 @@ class XCXOM1EAExpert : public XCBase
|
||||
int eaSlippage; // Slippgae
|
||||
string eaLogSuffix; // Log Suffix
|
||||
|
||||
//
|
||||
// Symbol Configurations ...
|
||||
string eaSymbolConfiguration; // Symbol Configurations ...
|
||||
|
||||
//
|
||||
// Management ...
|
||||
bool eaAllowGuards; // Allow Guards
|
||||
@@ -94,7 +98,7 @@ class XCXOM1EAExpert : public XCBase
|
||||
bool eaReportProtector; // Report Protector Actions
|
||||
bool eaReportRestrictions; // Report Restrictions
|
||||
bool eaReportAfterTradesBalance; // Report Balance after a Trade Finished
|
||||
|
||||
|
||||
//
|
||||
// Collector ...
|
||||
bool eaSaveTrades; // Save Trades
|
||||
@@ -117,6 +121,25 @@ class XCXOM1EAExpert : public XCBase
|
||||
//
|
||||
// Tools / Actions / Handlers ...
|
||||
|
||||
//
|
||||
// Signal Event Handlers ...
|
||||
|
||||
//
|
||||
void AddOnSignalEventHandler(TOnSignal handler)
|
||||
{
|
||||
//
|
||||
if (handler == NULL)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
//
|
||||
Add(
|
||||
handler,
|
||||
mOnSignalEventHandlers //
|
||||
);
|
||||
}
|
||||
|
||||
//
|
||||
// Trade Event Handlers ...
|
||||
|
||||
@@ -463,7 +486,7 @@ class XCXOM1EAExpert : public XCBase
|
||||
eaTrade.AddOnTradeStateChangedEventHandler(mTradeStateChangedEventHandlers[i]);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//
|
||||
// Postion Partially Close Event Handlers ...
|
||||
count = ArraySize(mOnPartialCloseEventHandlers);
|
||||
@@ -536,6 +559,28 @@ class XCXOM1EAExpert : public XCBase
|
||||
eaMaxAllowedTrades //
|
||||
);
|
||||
|
||||
//
|
||||
// Parse Symbols ...
|
||||
string symbols[];
|
||||
ENUM_TIMEFRAMES periods[];
|
||||
if (!IsSpecifiedValid(eaSymbolConfiguration))
|
||||
{
|
||||
//
|
||||
Add(
|
||||
_Symbol,
|
||||
symbols //
|
||||
);
|
||||
|
||||
//
|
||||
Add(
|
||||
_Period,
|
||||
periods //
|
||||
);
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
|
||||
//
|
||||
// Here we Apply Symbols,Periods and Configs ...
|
||||
|
||||
@@ -552,7 +597,12 @@ class XCXOM1EAExpert : public XCBase
|
||||
|
||||
//
|
||||
// Make Instance Signaller Class ...
|
||||
|
||||
//
|
||||
XCXOM1SignallerBase *iDZoneSignaller = NULL;
|
||||
|
||||
//
|
||||
// Define Signaller ...
|
||||
iDZoneSignaller = new XCXOM1SignallerBase(
|
||||
"XDZN",
|
||||
"XAUUSDb",
|
||||
@@ -561,6 +611,19 @@ class XCXOM1EAExpert : public XCBase
|
||||
iDZoneSignallerConfig);
|
||||
if (iDZoneSignaller != NULL)
|
||||
{
|
||||
//
|
||||
// Attach Signaller OnSignal Event Handlers ...
|
||||
count = ArraySize(mOnSignalEventHandlers);
|
||||
has = IsValidSize(count);
|
||||
if (has)
|
||||
{
|
||||
//
|
||||
for (int i = 0; i < count; i++)
|
||||
{
|
||||
iDZoneSignaller.AddOnSignalEventHandler(mOnSignalEventHandlers[i]);
|
||||
}
|
||||
}
|
||||
|
||||
//
|
||||
// Register Signaller ...
|
||||
Add(
|
||||
@@ -671,6 +734,13 @@ class XCXOM1EAExpert : public XCBase
|
||||
{
|
||||
}
|
||||
|
||||
//
|
||||
// Signal Event Handler ...
|
||||
void HandleOnSignalTriggered(XSignal &signal)
|
||||
{
|
||||
eaTradeManager.HandleSignal(signal);
|
||||
}
|
||||
|
||||
//
|
||||
// Trade Event Handlers ...
|
||||
|
||||
@@ -870,6 +940,9 @@ class XCXOM1EAExpert : public XCBase
|
||||
TOnPositionsChanged mPositionsChangedEventHandlers[];
|
||||
TOnTradeStateChanged mTradeStateChangedEventHandlers[];
|
||||
|
||||
//
|
||||
TOnSignal mOnSignalEventHandlers[]; // Signal Recieved Event Handlers ...
|
||||
|
||||
//
|
||||
XCXOM1SignallerBase *eaSignallers[]; // All Registered Signallers ...
|
||||
};
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
};
|
||||
|
||||
//
|
||||
Reference in New Issue
Block a user