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
+55 -25
View File
@@ -24,6 +24,7 @@
#include "../Classes/x-saherelm.x-alert.class.mq5" #include "../Classes/x-saherelm.x-alert.class.mq5"
#include "../Classes/x-saherelm.x-data.collector.class.mq5" #include "../Classes/x-saherelm.x-data.collector.class.mq5"
#include "../Classes/x-saherelm.x-guard.class.mq5" #include "../Classes/x-saherelm.x-guard.class.mq5"
#include "../Classes/x-saherelm.x-poi.drawer.class.mq5"
#include "../Classes/x-saherelm.x-trade.class.mq5" #include "../Classes/x-saherelm.x-trade.class.mq5"
// //
@@ -41,6 +42,9 @@ class XCTradeManager : public XCBase
XTimeTracker timeTracker; XTimeTracker timeTracker;
XCDataCollector *collector; XCDataCollector *collector;
//
XCPOIDrawer *drawer;
// //
// Constructor ... // Constructor ...
XCTradeManager( XCTradeManager(
@@ -54,6 +58,9 @@ class XCTradeManager : public XCBase
guard = _guard; guard = _guard;
trader = _trader; trader = _trader;
//
drawer = new XCPOIDrawer();
// //
allowTrade = true; allowTrade = true;
allowLongs = true; allowLongs = true;
@@ -104,6 +111,10 @@ class XCTradeManager : public XCBase
ZeroMemory(alert); ZeroMemory(alert);
ZeroMemory(trader); ZeroMemory(trader);
//
delete drawer;
ZeroMemory(drawer);
// //
delete collector; delete collector;
ZeroMemory(collector); ZeroMemory(collector);
@@ -851,10 +862,7 @@ class XCTradeManager : public XCBase
* *
* @return ( bool ) * @return ( bool )
*/ */
bool Execute( bool Execute(XSignal &signal)
XSignal &signal,
string conditions //
)
{ {
// //
bool result = false; bool result = false;
@@ -921,26 +929,6 @@ class XCTradeManager : public XCBase
// //
if (result) if (result)
{ {
//
// Draw Signal ...
// if (drawSignal)
// {
// //
// XCSignalObject *iObj;
// isExists = drawer.DrawSignal(
// signal,
// iObj //
// );
// //
// if (isExists)
// {
// //
// mObjects.Add(iObj);
// ZeroMemory(iObj);
// }
// }
// //
// Create Symbol Info Struct ... // Create Symbol Info Struct ...
XTradeSymbolInfo iSymbolInfo; XTradeSymbolInfo iSymbolInfo;
@@ -986,11 +974,11 @@ class XCTradeManager : public XCBase
// //
iTrade.signal = signal; iTrade.signal = signal;
iTrade.conditions = conditions;
iTrade.positionID = positionID; iTrade.positionID = positionID;
iTrade.commission = commission; iTrade.commission = commission;
iTrade.signaledAt = signal.time; iTrade.signaledAt = signal.time;
iTrade.executedAt = TimeCurrent(); iTrade.executedAt = TimeCurrent();
iTrade.conditions = signal.conditions;
// //
AddRef( AddRef(
@@ -1054,6 +1042,45 @@ class XCTradeManager : public XCBase
return result; return result;
} }
/**
* Handle Signal Recieved ...
*
* @param signal: XSignal
*/
void HandleSignal(XSignal &signal)
{
//
// Validate Signal ...
if (!signal.IsValid())
{
return;
}
//
// Check Signal ...
ENUM_X_SIGNAL_EXECUTION_RESULT signalExecutionResult;
bool canExecute = CheckSignal(
signal,
signalExecutionResult //
);
if (canExecute) {
bool isExecuted = Execute(signal);
}
//
// Draw Signal Object ...
XCSignalObject *signalObj;
bool has = drawer.DrawSignal(
signal,
signalObj,
4 //
);
if (has)
{
mObjects.Add(signalObj);
}
}
/** /**
* Handle Position Take Profit ... * Handle Position Take Profit ...
* *
@@ -2169,6 +2196,9 @@ class XCTradeManager : public XCBase
// //
// Props ... // Props ...
//
CArrayObj mObjects;
// //
bool allowTrade; bool allowTrade;
bool allowLongs; bool allowLongs;
+143
View File
@@ -0,0 +1,143 @@
`
//
// an Structure for Holds an Specified Symbols
// Positions Info ...
struct XTradeSymbolInfo
{
//
// Properties ...
//
string symbol; // Trading Symbol
//
int longs; // All Long Trades
int shorts; // All Short Trades
//
int trades; // All Trades
//
int losses; // All Loosing Trades
int profits; // All Winning Trades
//
datetime managedStart; // Managed Start Time
//
int managedSLs; // Managed SL(s)
int managedTPs; // Managed TP(s)
int managedTrades; // Managed Trades
//
double managedBalance; // Managed Start Balance
double managedProfits; // Managed Profit(s)
//
// Constructor ...
XTradeSymbolInfo()
{
Clean();
}
//
// Tools ...
//
// Cleanup ...
void Clean()
{
//
symbol = NULL;
//
longs = 0;
shorts = 0;
//
trades = 0;
//
losses = 0;
profits = 0;
//
managedStart = NULL;
//
managedSLs = 0;
managedTPs = 0;
managedTrades = 0;
//
managedBalance = 0;
managedProfits = 0;
//
ZeroMemory(this);
}
//
// Validate ...
bool IsValid()
{
//
bool result = false;
//
result = IsSpecifiedValid(symbol);
//
return result;
}
//
bool IsSameAs(XTradeSymbolInfo &item)
{
//
bool result = false;
//
result = IsValid() &&
item.IsValid() &&
symbol == item.symbol;
//
return result;
}
//
string GetRestrictionDescription(
ENUM_XTRADE_RESTRICTION_PERIOD period //
)
{
//
string result = NULL;
//
if (!IsValid() ||
!HasRestrictions(period))
{
return result;
}
//
result +=
"-------------------" + "\n" +
"Restrictions: " + "\n" +
"-------------------" + "\n" +
"Symbol: " + ToXString(symbol) + "\n" +
"Period: " + ToXString(period) + "\n" +
"Start: " + ToFormatString(managedStart) + "\n" +
"Balance: " + ToXString(managedBalance) + "\n" +
"-------------------" + "\n" +
"Trades: " + ToXString(managedTrades) + "\n" +
"SL: " + ToXString(managedSLs) + "\n" +
"TP: " + ToXString(managedTPs) + "\n" +
"Profit: " + ToXString(managedProfits) + "\n" +
"";
//
return result;
}
};
+20
View File
@@ -35,6 +35,11 @@ input long eaMagicNumber = 1694056; // Magic Number
input int eaSlippage = 10; // Slippgae input int eaSlippage = 10; // Slippgae
input string eaLogSuffix = ""; // Log Suffix input string eaLogSuffix = ""; // Log Suffix
//
// Symbols
// [Symbol|period|(ST_04:00_08:30),(TL_10:30_12:00),(NY_16:00_20:00)]
input string eaSymbolConfiguration; // Symbol Configurations
// //
// Management ... // Management ...
// eaSessions => (ST_04:00_08:30),(TL_10:30_12:00),(NY_16:00_20:00) // eaSessions => (ST_04:00_08:30),(TL_10:30_12:00),(NY_16:00_20:00)
@@ -140,6 +145,10 @@ int OnInit()
// //
// Setting All Inputs to Expert Adviser Class ... // Setting All Inputs to Expert Adviser Class ...
//
// Symbols ...
eaExpert.eaSymbolConfiguration = eaSymbolConfiguration;
// //
// Management ... // Management ...
eaExpert.eaAllowGuards = eaAllowGuards; eaExpert.eaAllowGuards = eaAllowGuards;
@@ -197,6 +206,7 @@ int OnInit()
// //
// Attach Event Handlers ... // Attach Event Handlers ...
eaExpert.AddOnSignalEventHandler(OnSignalTriggered);
eaExpert.AddOnDealsChangedEventHandler(OnDealsChanged); eaExpert.AddOnDealsChangedEventHandler(OnDealsChanged);
eaExpert.AddOnStopLossEventHandler(OnStopLossTriggered); eaExpert.AddOnStopLossEventHandler(OnStopLossTriggered);
eaExpert.AddOnOrdersChangedEventHandler(OnOrdersChanged); eaExpert.AddOnOrdersChangedEventHandler(OnOrdersChanged);
@@ -283,6 +293,16 @@ void OnChartEvent(
// //
// Event Listeners ... // Event Listeners ...
/**
* Trigger OnSignal Event ...
*
* @param signal: XSignal
*/
void OnSignalTriggered(XSignal &signal)
{
eaExpert.HandleOnSignalTriggered(signal);
}
/** /**
* Handle StopLoss Triggered Positions ... * Handle StopLoss Triggered Positions ...
* *
+185 -147
View File
@@ -2702,149 +2702,6 @@ struct XOnTradeHandlerState
} }
}; };
//
// an Structure for Holds an Specified Symbols
// Positions Info ...
struct XTradeSymbolInfo
{
//
// Properties ...
//
string symbol; // Trading Symbol
//
int longs; // All Long Trades
int shorts; // All Short Trades
//
int trades; // All Trades
//
int losses; // All Loosing Trades
int profits; // All Winning Trades
//
datetime managedStart; // Managed Start Time
//
int managedSLs; // Managed SL(s)
int managedTPs; // Managed TP(s)
int managedTrades; // Managed Trades
//
double managedBalance; // Managed Start Balance
double managedProfits; // Managed Profit(s)
//
// Constructor ...
XTradeSymbolInfo()
{
Clean();
}
//
// Tools ...
//
// Cleanup ...
void Clean()
{
//
symbol = NULL;
//
longs = 0;
shorts = 0;
//
trades = 0;
//
losses = 0;
profits = 0;
//
managedStart = NULL;
//
managedSLs = 0;
managedTPs = 0;
managedTrades = 0;
//
managedBalance = 0;
managedProfits = 0;
//
ZeroMemory(this);
}
//
// Validate ...
bool IsValid()
{
//
bool result = false;
//
result = IsSpecifiedValid(symbol);
//
return result;
}
//
bool IsSameAs(XTradeSymbolInfo &item)
{
//
bool result = false;
//
result = IsValid() &&
item.IsValid() &&
symbol == item.symbol;
//
return result;
}
//
string GetRestrictionDescription(
ENUM_XTRADE_RESTRICTION_PERIOD period //
)
{
//
string result = NULL;
//
if (!IsValid() ||
!HasRestrictions(period))
{
return result;
}
//
result +=
"-------------------" + "\n" +
"Restrictions: " + "\n" +
"-------------------" + "\n" +
"Symbol: " + ToXString(symbol) + "\n" +
"Period: " + ToXString(period) + "\n" +
"Start: " + ToFormatString(managedStart) + "\n" +
"Balance: " + ToXString(managedBalance) + "\n" +
"-------------------" + "\n" +
"Trades: " + ToXString(managedTrades) + "\n" +
"SL: " + ToXString(managedSLs) + "\n" +
"TP: " + ToXString(managedTPs) + "\n" +
"Profit: " + ToXString(managedProfits) + "\n" +
"";
//
return result;
}
};
// //
// an Structure for Describe aTrading Session ... // an Structure for Describe aTrading Session ...
struct XTradeSession struct XTradeSession
@@ -2929,18 +2786,37 @@ struct XTradeSession
// //
// an Structure for Describe an Specified Symbols // an Structure for Describe an Specified Symbols
// Trading Sessions ... // Trading Sessions ...
struct XSymbolSessions struct XSymbolTradeConfig
{ {
// //
// Propeties ... // Propeties ...
// //
string symbol; // Trading Symbol int longs; // All Long Trades
XTradeSession sessions[]; // Trading Sessions int shorts; // All Short Trades
int trades; // All Trades
int losses; // All Loosing Trades
int profits; // All Winning Trades
string symbol; // Trading Symbol
int managedSLs; // Managed SL(s)
int managedTPs; // Managed TP(s)
int managedTrades; // Managed Trades
int maxAllowedTPs; // Max Allowed TP(s) in Restrictions Period
int maxAllowedSLs; // Max Allowed SL(s) in Restrictions Period
int maxAllowedTrades; // Max Allowed Trades in Restrictions Period
datetime managedStart; // Managed Start Time
double managedBalance; // Managed Start Balance
double managedProfits; // Managed Profit(s)
ENUM_TIMEFRAMES period; // Trading Period
int maxAllowedPositions; // Max Allowed Same Time Trades
double maxAllowedSpread; // Max Allowed Spread For Trade
XTradeSession sessions[]; // Trading Sessions
string closeAllOpenTradesAt; // Close All Open Trades per Day At Specified Time
ENUM_XTRADE_RESTRICTION_PERIOD restrictionsPeriod; // Trade Restrictions Period
// //
// Constructor ... // Constructor ...
XSymbolSessions() XSymbolTradeConfig()
{ {
Clean(); Clean();
} }
@@ -2954,12 +2830,84 @@ struct XSymbolSessions
{ {
// //
symbol = NULL; symbol = NULL;
period = NULL;
SpecifiedClean(sessions); SpecifiedClean(sessions);
//
longs = 0;
shorts = 0;
trades = 0;
losses = 0;
profits = 0;
//
managedStart = NULL;
//
managedSLs = 0;
managedTPs = 0;
managedTrades = 0;
//
managedBalance = 0;
managedProfits = 0;
//
maxAllowedTPs = 0;
maxAllowedSLs = 0;
maxAllowedTrades = 0;
maxAllowedSpread = 25;
maxAllowedPositions = 5;
closeAllOpenTradesAt = "";
restrictionsPeriod = XTRADE_RESTRICATION_NONE;
// //
ZeroMemory(this); ZeroMemory(this);
} }
//
// Initial ...
bool Init(
string _symbol = NULL,
ENUM_TIMEFRAMES _period = NULL,
string _sessionsDescriptor = NULL,
double _maxAllowedSpread = 25,
int _maxAllowedPositions = 5,
string _closeAllOpenTradesAt = NULL,
int _maxAllowedTPs = 0,
int _maxAllowedSLs = 0,
ENUM_XTRADE_RESTRICTION_PERIOD _restrictionsPeriod = XTRADE_RESTRICATION_NONE //
)
{
//
bool result = false;
//
// Normalize Symbol ...
_symbol = NormalizeSymbol(_symbol);
_period = NormalizePeriod(_period);
//
symbol = _symbol;
period = _period;
maxAllowedTPs = _maxAllowedTPs;
maxAllowedSLs = _maxAllowedSLs;
maxAllowedSpread = _maxAllowedSpread;
restrictionsPeriod = _restrictionsPeriod;
maxAllowedPositions = _maxAllowedPositions;
closeAllOpenTradesAt = _closeAllOpenTradesAt;
//
// Parse Sessions ...
ParseSessions(_sessionsDescriptor);
//
result = IsValid();
//
return result;
}
// //
// Validate ... // Validate ...
bool IsValid() bool IsValid()
@@ -3019,6 +2967,96 @@ struct XSymbolSessions
return result; return result;
} }
//
// Parse Sessions ...
void ParseSessions(string descriptor)
{
//
if (!IsSpecifiedValid(descriptor))
{
return;
}
//
bool has = false;
string _sessions[];
int sessionsCount = 0;
//
// Extract Per Symbol Sessions ...
sessionsCount = SplitContent(
_sessions,
descriptor,
"," //
);
//
// Try to Extract Start and End Times Series ...
has = IsValidSize(sessionsCount);
if (!has)
{
return;
}
//
// Iterate Sessions ...
for (int i = 0; i < sessionsCount; i++)
{
//
// Ignore unused Cases and Extracts only Content ...
string iSessionDescriptorStr = ExtractString(_sessions[i]);
has = IsSpecifiedValid(iSessionDescriptorStr);
if (has)
{
//
// Extract Session Descriptor Data ...
string parts[];
int partsCount = SplitContent(
parts,
iSessionDescriptorStr,
"_" //
);
has = IsValidSize(partsCount) && partsCount == 3;
if (has)
{
//
string iName = parts[0];
string iStart = parts[1];
string iEnd = parts[2];
has = IsSpecifiedValid(iName) &&
IsSpecifiedValid(iStart) &&
IsSpecifiedValid(iEnd);
if (has)
{
//
// Set Active Session Per Symbols ...
XTradeSession session;
//
session.end = iEnd;
session.name = iName;
session.start = iStart;
//
AddRef(
session,
sessions //
);
//
session.Clean();
}
}
//
SpecifiedClean(parts);
}
}
//
SpecifiedClean(_sessions);
}
// //
}; };
+75 -2
View File
@@ -48,6 +48,10 @@ class XCXOM1EAExpert : public XCBase
int eaSlippage; // Slippgae int eaSlippage; // Slippgae
string eaLogSuffix; // Log Suffix string eaLogSuffix; // Log Suffix
//
// Symbol Configurations ...
string eaSymbolConfiguration; // Symbol Configurations ...
// //
// Management ... // Management ...
bool eaAllowGuards; // Allow Guards bool eaAllowGuards; // Allow Guards
@@ -94,7 +98,7 @@ class XCXOM1EAExpert : public XCBase
bool eaReportProtector; // Report Protector Actions bool eaReportProtector; // Report Protector Actions
bool eaReportRestrictions; // Report Restrictions bool eaReportRestrictions; // Report Restrictions
bool eaReportAfterTradesBalance; // Report Balance after a Trade Finished bool eaReportAfterTradesBalance; // Report Balance after a Trade Finished
// //
// Collector ... // Collector ...
bool eaSaveTrades; // Save Trades bool eaSaveTrades; // Save Trades
@@ -117,6 +121,25 @@ class XCXOM1EAExpert : public XCBase
// //
// Tools / Actions / Handlers ... // Tools / Actions / Handlers ...
//
// Signal Event Handlers ...
//
void AddOnSignalEventHandler(TOnSignal handler)
{
//
if (handler == NULL)
{
return;
}
//
Add(
handler,
mOnSignalEventHandlers //
);
}
// //
// Trade Event Handlers ... // Trade Event Handlers ...
@@ -463,7 +486,7 @@ class XCXOM1EAExpert : public XCBase
eaTrade.AddOnTradeStateChangedEventHandler(mTradeStateChangedEventHandlers[i]); eaTrade.AddOnTradeStateChangedEventHandler(mTradeStateChangedEventHandlers[i]);
} }
} }
// //
// Postion Partially Close Event Handlers ... // Postion Partially Close Event Handlers ...
count = ArraySize(mOnPartialCloseEventHandlers); count = ArraySize(mOnPartialCloseEventHandlers);
@@ -536,6 +559,28 @@ class XCXOM1EAExpert : public XCBase
eaMaxAllowedTrades // 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 ... // Here we Apply Symbols,Periods and Configs ...
@@ -552,7 +597,12 @@ class XCXOM1EAExpert : public XCBase
// //
// Make Instance Signaller Class ... // Make Instance Signaller Class ...
//
XCXOM1SignallerBase *iDZoneSignaller = NULL; XCXOM1SignallerBase *iDZoneSignaller = NULL;
//
// Define Signaller ...
iDZoneSignaller = new XCXOM1SignallerBase( iDZoneSignaller = new XCXOM1SignallerBase(
"XDZN", "XDZN",
"XAUUSDb", "XAUUSDb",
@@ -561,6 +611,19 @@ class XCXOM1EAExpert : public XCBase
iDZoneSignallerConfig); iDZoneSignallerConfig);
if (iDZoneSignaller != NULL) 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 ... // Register Signaller ...
Add( Add(
@@ -671,6 +734,13 @@ class XCXOM1EAExpert : public XCBase
{ {
} }
//
// Signal Event Handler ...
void HandleOnSignalTriggered(XSignal &signal)
{
eaTradeManager.HandleSignal(signal);
}
// //
// Trade Event Handlers ... // Trade Event Handlers ...
@@ -870,6 +940,9 @@ class XCXOM1EAExpert : public XCBase
TOnPositionsChanged mPositionsChangedEventHandlers[]; TOnPositionsChanged mPositionsChangedEventHandlers[];
TOnTradeStateChanged mTradeStateChangedEventHandlers[]; TOnTradeStateChanged mTradeStateChangedEventHandlers[];
//
TOnSignal mOnSignalEventHandlers[]; // Signal Recieved Event Handlers ...
// //
XCXOM1SignallerBase *eaSignallers[]; // All Registered Signallers ... XCXOM1SignallerBase *eaSignallers[]; // All Registered Signallers ...
}; };
+132 -14
View File
@@ -145,6 +145,44 @@ class XCXOM1SignallerBase
ZeroMemory(mHelper); 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 ... // Actions ...
@@ -329,7 +367,7 @@ class XCXOM1SignallerBase
iDir, iDir,
iReason, iReason,
iConditions.bars[pIdx].time, // From ... iConditions.bars[pIdx].time, // From ...
iConditions.bars[cIdx].time // To iConditions.bars[zIdx].time // To
); );
if (has) if (has)
{ {
@@ -339,6 +377,10 @@ class XCXOM1SignallerBase
iZone, iZone,
zones // zones //
); );
//
// Prepare Signal ...
PrepareSignal(iZone);
} }
// //
@@ -379,6 +421,10 @@ class XCXOM1SignallerBase
double iUpper = GetMax(iValues); double iUpper = GetMax(iValues);
double iLower = GetMin(iValues); double iLower = GetMin(iValues);
//
double iZoneUpper = MathMax(iFibUpper, iFibLower);
double iZoneLower = MathMin(iFibUpper, iFibLower);
// //
has = isFastCrossedOverSlow || isFastCrossedUnderSlow; has = isFastCrossedOverSlow || isFastCrossedUnderSlow;
@@ -386,10 +432,6 @@ class XCXOM1SignallerBase
// Validate Cross Between Zone ... // Validate Cross Between Zone ...
if (has) if (has)
{ {
//
double iZoneUpper = MathMax(iFibUpper, iFibLower);
double iZoneLower = MathMin(iFibUpper, iFibLower);
// //
// Validate MA Place ... // Validate MA Place ...
has = iFast >= iZoneLower && has = iFast >= iZoneLower &&
@@ -471,13 +513,13 @@ class XCXOM1SignallerBase
symbol, symbol,
period, period,
name, // Signaller Name ... name, // Signaller Name ...
iUpper, iZoneUpper,
iLower, iZoneLower,
iPrice, iPrice,
iDir, iDir,
iReason, iReason,
iConditions.bars[pIdx].time, // From ... iConditions.bars[pIdx].time, // From ...
iConditions.bars[cIdx].time // To iConditions.bars[zIdx].time // To
); );
if (has) if (has)
{ {
@@ -487,6 +529,10 @@ class XCXOM1SignallerBase
iZone, iZone,
zones // zones //
); );
//
// Prepare Signal ...
PrepareSignal(iZone);
} }
// //
@@ -518,6 +564,9 @@ class XCXOM1SignallerBase
// //
XCXOM1Helper *mHelper; // Indicator Helper ... XCXOM1Helper *mHelper; // Indicator Helper ...
//
TOnSignal mOnSignalEventHandlers[]; // Signal Recieved Event Handlers ...
// //
int mProcessedTicksCount; // Prcoessed Ticks Count ... int mProcessedTicksCount; // Prcoessed Ticks Count ...
datetime mLastCheckedBarTime; // Last Checked Bar Time ... datetime mLastCheckedBarTime; // Last Checked Bar Time ...
@@ -551,12 +600,12 @@ class XCXOM1SignallerBase
// zones[i].UpdateByBarIndex(barIndex); // zones[i].UpdateByBarIndex(barIndex);
// //
drawer.DrawZone( // drawer.DrawZone(
zones[i], // zones[i],
true, // Draw Price ... // true, // Draw Price ...
true, // Draw Middle ... // true, // Draw Middle ...
true // Draw From ... // 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);
}
}; };
// //