Files
2024-05-17 21:12:22 +03:30

262 lines
6.0 KiB
Plaintext

///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Logger Library
// ---------------------------------------
// Name: XLogger
// Description: provides Logging abilities ...
//
//
// Maintainer:
// ------------
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
//
//////////////////////////////////////////////////////
//
// Global Properties ...
#property library
#property copyright "Copyright 2023, SaherElm IT Center"
#property link "https://www.saherelm.ir"
#property version "1.00"
#property strict
//
// START Inputs ...
//
input group "Logging";
input bool enableLogging = true; // Enable Logging
//
// END Inputs ...
//
//
// Including Models ...
#include "x-saherelm.models.lib.mq5"
//
// START Global Definitions: Variables, Properties and etc ...
//
string logTag = "X-Logger"; // LogTag
//
// END Global Definitions: Variables, Properties and etc ...
//
//
// START Provided Functions ...
//
//
// Logging a Message ...
void LogMessage(string message)
{
//
if (!enableLogging)
{
return;
}
//
Print(logTag, " > ", message);
}
void LogMessage(string tag, string message)
{
//
if (!enableLogging)
{
return;
}
//
Print(tag, " > ", message);
}
//
// Logging an Array ...
void LogArray(int &array[])
{
//
if (!enableLogging)
{
return;
}
//
Print(logTag, ">");
ArrayPrint(array);
}
void LogArray(double &array[])
{
//
if (!enableLogging)
{
return;
}
//
Print(logTag, ">");
ArrayPrint(array);
}
void LogArray(string &array[])
{
//
if (!enableLogging)
{
return;
}
//
Print(logTag, ">");
ArrayPrint(array);
}
//
// Convert a Signal to String Message ...
string SignalToString(const XSignal &signal)
{
//
string result = "\n";
//
result += "Signal: " + "\n";
result += "id: " + (string)signal.id + "\n";
result += "symbol: " + signal.symbol + "\n";
result += "type: " + EnumToString(signal.type) + "\n";
result += "magicNumber: " + (string)signal.magicNumber + "\n";
result += "ticket: " + (string)signal.ticket + "\n";
result += "entry: " + (string)signal.entry + "\n";
result += "tp: " + (string)signal.tp + "\n";
result += "sl: " + (string)signal.sl + "\n";
result += "riskFreeStep: " + (string)signal.riskFreeStep + "\n";
result += "riskFreeRate: " + (string)signal.riskFreeRate + "\n";
result += "profit: " + (string)signal.profit + "\n";
result += "time: " + (string)signal.time + "\n";
result += "volume: " + (string)signal.volume + "\n";
result += "comment: " + signal.comment + "\n";
//
return result;
}
//
// Convert an Executed Signal to String Message ...
string ExecutedSignalToString(const XSignal &signal)
{
//
string result = "";
//
result += (signal.type == X_SIGNAL_LONG ? "Buy" : "Sell") + " Signal Executed provided on (" + signal.symbol + " _ " + EnumToString(_Period) + ") by this comment: " + signal.comment;
//
return result;
}
//
// Logging Signal ...
void LogSignal(const XSignal &signal)
{
//
string message = SignalToString(signal);
//
LogMessage(message);
}
//
// Log Signal Execution ...
void LogExecutedSignal(const XSignal &signal)
{
//
string message = ExecutedSignalToString(signal);
//
LogMessage(message);
}
//
// Convert a Deal to String ...
string DealToString(const XDeal &deal)
{
//
string result = "\n";
//
result += "Deal:" + "\n";
result += " " + "\n";
result += "time: " + (string)deal.time + "\n";
result += "ticket: " + (string)deal.ticket + "\n";
result += "order: " + (string)deal.order + "\n";
result += "positionId: " + (string)deal.positionId + "\n";
result += "type: " + EnumToString(deal.type) + "\n";
result += "entry: " + EnumToString(deal.entry) + "\n";
result += "reason: " + EnumToString(deal.reason) + "\n";
result += "symbol: " + deal.symbol + "\n";
result += "price: " + (string)deal.price + "\n";
result += "profit: " + (string)deal.profit + "\n";
result += "swap: " + (string)deal.swap + "\n";
result += "commission: " + (string)deal.commission + "\n";
result += "volume: " + (string)deal.volume + "\n";
result += "comment: " + deal.comment + "\n";
//
return result;
}
//
// Log Specific Deal ...
void LogDeal(const XDeal &deal)
{
//
string message = DealToString(deal);
//
LogMessage(message);
}
//
// Convert an Order to String ...
string OrderToString(const XOrder &order)
{
//
string result = "\n";
//
result += "Order: " + "\n";
result += "magic: " + (string)order.magic + "\n";
result += "positionId: " + (string)order.positionId + "\n";
result += "symbol: " + (string)order.symbol + "\n";
result += "ticket: " + (string)order.ticket + "\n";
result += "timeSetup: " + (string)order.timeSetup + "\n";
result += "timeDone: " + (string)order.timeDone + "\n";
result += "timeExpiration: " + (string)order.timeExpiration + "\n";
result += "priceOpen: " + (string)order.priceOpen + "\n";
result += "priceCurrent: " + (string)order.priceCurrent + "\n";
result += "priceStopLimit: " + (string)order.priceStopLimit + "\n";
result += "stopLoss: " + (string)order.stopLoss + "\n";
result += "takeProfit: " + (string)order.takeProfit + "\n";
result += "volumeInitial: " + (string)order.volumeInitial + "\n";
result += "volumeCurrent: " + (string)order.volumeCurrent + "\n";
result += "comment: " + order.comment + "\n";
result += "type: " + EnumToString(order.type) + "\n";
result += "state: " + EnumToString(order.state) + "\n";
result += "typeFilling: " + EnumToString(order.typeFilling) + "\n";
result += "typeTime: " + EnumToString(order.typeTime) + "\n";
result += "reason: " + EnumToString(order.reason) + "\n";
//
return result;
}
//
// Log Specific Order ...
void LogOrder(const XOrder &order)
{
//
string message = OrderToString(order);
//
LogMessage(message);
}
//
// END Provided Functions ...
//