start implementing XTrade Handler Class ...
This commit is contained in:
@@ -3379,9 +3379,367 @@ struct XSymbolPositions
|
||||
//
|
||||
};
|
||||
|
||||
//
|
||||
// an Structure for Holding Positions Data ...
|
||||
struct XTradeData
|
||||
{
|
||||
//
|
||||
datetime time; // Issue Time (Open Position)
|
||||
string symbol; // Trading Symbol
|
||||
double entry; // Entry Price
|
||||
double volume; // Volume
|
||||
string provider; // Signaller
|
||||
ENUM_TIMEFRAMES period; // Trading Timeframe
|
||||
ENUM_X_POSITION_TYPES type; // Position Type
|
||||
|
||||
//
|
||||
ulong ticket; // Position Ticket
|
||||
double profit; // Profit on Close
|
||||
double commission; // Commission
|
||||
double swap; // Swap
|
||||
string message; // Close Reason
|
||||
datetime endTime; // End Time
|
||||
|
||||
//
|
||||
// Constructor ...
|
||||
void XTradeInfo()
|
||||
{
|
||||
Clean();
|
||||
}
|
||||
|
||||
//
|
||||
// Filling Trade Handler ...
|
||||
bool Fill(XSignal &_signal)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
Clean();
|
||||
|
||||
//
|
||||
// Check Signal Validation ...
|
||||
result = _signal.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
time = _signal.time;
|
||||
symbol = _signal.symbol;
|
||||
entry = _signal.entry;
|
||||
volume = _signal.volume;
|
||||
provider = _signal.provider;
|
||||
period = _signal.period;
|
||||
type = ToPositionType(_signal.type);
|
||||
|
||||
//
|
||||
if (_signal.IsExecuted())
|
||||
{
|
||||
ticket = _signal.positionId;
|
||||
}
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Filling Trade Handler ...
|
||||
bool Fill(XPosition &_position)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
Clean();
|
||||
|
||||
//
|
||||
// Check Signal Validation ...
|
||||
result = _position.IsValid();
|
||||
if (!result)
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
time = _position.openAt;
|
||||
symbol = _position.symbol;
|
||||
entry = _position.entry;
|
||||
volume = _position.volume;
|
||||
provider = _position.provider;
|
||||
period = _position.period;
|
||||
type = ToPositionType(_position.type);
|
||||
|
||||
//
|
||||
ticket = _position.ticket;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Update Data ...
|
||||
bool Update(XPosition &_position) {
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = _position.IsValid();
|
||||
if (!result) {
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
profit = _position.profit;
|
||||
swap = _position.swap;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Tools ...
|
||||
|
||||
//
|
||||
// Cleanup ...
|
||||
void Clean()
|
||||
{
|
||||
//
|
||||
time = NULL;
|
||||
type = NULL;
|
||||
symbol = NULL;
|
||||
period = NULL;
|
||||
endTime = NULL;
|
||||
message = NULL;
|
||||
provider = NULL;
|
||||
|
||||
//
|
||||
swap = 0;
|
||||
entry = 0;
|
||||
ticket = 0;
|
||||
profit = 0;
|
||||
volume = 0;
|
||||
commission = 0;
|
||||
}
|
||||
|
||||
//
|
||||
// Validation ...
|
||||
bool IsValid()
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
ticket > 0 &&
|
||||
IsValid(time) &&
|
||||
IsValid(symbol) &&
|
||||
IsValid(period)
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Retrieve Trade Data Age ...
|
||||
int GetAge()
|
||||
{
|
||||
//
|
||||
int result = -1;
|
||||
|
||||
//
|
||||
if (!IsValid(symbol) ||
|
||||
!IsValid(time) ||
|
||||
!IsValid(endTime) ||
|
||||
!IsValid(period))
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
int startIndex = iBarShift(
|
||||
symbol,
|
||||
period,
|
||||
time,
|
||||
false //
|
||||
);
|
||||
|
||||
//
|
||||
int endIndex = iBarShift(
|
||||
symbol,
|
||||
period,
|
||||
endTime,
|
||||
false //
|
||||
);
|
||||
|
||||
//
|
||||
result = MathAbs(startIndex - endIndex);
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Check Own of Trade Data ...
|
||||
// based on Ticket ...
|
||||
bool IsOwn(
|
||||
ulong _ticket //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result = _ticket == ticket;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Check Own of Trade Data ...
|
||||
// based on Symbol/Provider and Period ...
|
||||
bool IsOwn(
|
||||
string _symbol,
|
||||
string _provider,
|
||||
ENUM_TIMEFRAMES _period,
|
||||
ENUM_X_POSITION_TYPES _type //
|
||||
)
|
||||
{
|
||||
//
|
||||
bool result = false;
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
IsValid(_symbol) &&
|
||||
IsValid(_period) &&
|
||||
IsValid(_provider) &&
|
||||
type != X_POSITION_TYPE_ALL &&
|
||||
type != X_POSITION_TYPE_NONE &&
|
||||
//
|
||||
type == _type &&
|
||||
period == _period &&
|
||||
symbol == _symbol &&
|
||||
provider == _provider
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Data Collector ...
|
||||
|
||||
//
|
||||
// Get Data File Name ...
|
||||
string GetFileName()
|
||||
{
|
||||
//
|
||||
string result = NULL;
|
||||
|
||||
//
|
||||
if (!IsValid())
|
||||
{
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
symbol + "\\" +
|
||||
ToString(type) + "\\" +
|
||||
(profit >= 0 ? "Profit" : "Loss") +
|
||||
ToString(ticket) + "_" +
|
||||
ToString(period) + "_" +
|
||||
ToFormatString(time)
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Get Signal File Name ...
|
||||
string GetSignalFileName()
|
||||
{
|
||||
//
|
||||
string result = NULL;
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
symbol + "\\" +
|
||||
ToString(type) + "\\" +
|
||||
provider + "_" +
|
||||
ToFormatString(time)
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
// Convert(s) To String Representation(s) ...
|
||||
string ToString(
|
||||
bool onlySignals = false //
|
||||
)
|
||||
{
|
||||
//
|
||||
string result = NULL;
|
||||
|
||||
//
|
||||
int age = GetAge();
|
||||
|
||||
//
|
||||
result =
|
||||
//
|
||||
(onlySignals ? "" : ToString("Ticket", ticket)) +
|
||||
ToString("Symbol", symbol) +
|
||||
ToString("Period", period) +
|
||||
ToString("Entry", entry) +
|
||||
ToString("Provider", provider) +
|
||||
ToString("Type", ToString(type)) +
|
||||
ToString("Time", time) +
|
||||
(onlySignals
|
||||
? ""
|
||||
:
|
||||
//
|
||||
"-------------" + "\n" +
|
||||
ToString("Volume", volume) +
|
||||
ToString("Profit", profit) +
|
||||
ToString("Commission", commission) +
|
||||
ToString("Swap", swap) +
|
||||
ToString("End Time", endTime) +
|
||||
ToString("Age", age) +
|
||||
ToString("Message", message)
|
||||
//
|
||||
) +
|
||||
//
|
||||
""
|
||||
//
|
||||
;
|
||||
|
||||
//
|
||||
return result;
|
||||
}
|
||||
|
||||
//
|
||||
};
|
||||
|
||||
//
|
||||
// TypeDefs ...
|
||||
|
||||
//
|
||||
typedef void (*TOnSignal)(XSignal &signal);
|
||||
|
||||
//
|
||||
typedef void (*TOnDealsChanged)(int count);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user