This commit is contained in:
2026-03-14 08:26:58 +03:30
parent 59a718a1b5
commit 75e1abd258
7 changed files with 724 additions and 38 deletions
+44 -18
View File
@@ -86,9 +86,7 @@ class XCAlert : public XCBase
return GetSpecificToken(this); return GetSpecificToken(this);
} }
// // #region Properties Getter(s) / Setter(s) ...
// Properties Getter(s) / Setter(s) ...
// //
string GetPrefix() string GetPrefix()
{ {
@@ -174,16 +172,16 @@ class XCAlert : public XCBase
{ {
mTerminalAlerts = value; mTerminalAlerts = value;
} }
// #endregion
// // #region Tools Funtions ...
// Tools Funtions ...
// //
// Alerts ... // Alerts ...
// //
// Logging an Alert ... // Logging an Alert ...
void LogAlert(string message) void LogAlert(string message, bool save = true)
{ {
// //
// Validate Args ... // Validate Args ...
@@ -197,12 +195,17 @@ class XCAlert : public XCBase
// //
Log(message); Log(message);
Save(message);
//
if (save)
{
Save(message);
}
} }
// //
// Terminal Alert ... // Terminal Alert ...
void TerminalAlert(string message) void TerminalAlert(string message, bool save = true)
{ {
// //
// Validate Args ... // Validate Args ...
@@ -217,12 +220,17 @@ class XCAlert : public XCBase
// Send Terminal Alert ... // Send Terminal Alert ...
Alert(message); Alert(message);
Save(message);
//
if (save)
{
Save(message);
}
} }
// //
// Mail Alert ... // Mail Alert ...
void MailAlert(string message) void MailAlert(string message, bool save = true)
{ {
// //
// Validate Args ... // Validate Args ...
@@ -234,12 +242,17 @@ class XCAlert : public XCBase
// //
// Send Mail Alert ... // Send Mail Alert ...
SendMail(GetPrefix(), message); SendMail(GetPrefix(), message);
Save(message);
//
if (save)
{
Save(message);
}
} }
// //
// Send Push Notification ... // Send Push Notification ...
void PushAlert(string message) void PushAlert(string message, bool save = true)
{ {
// //
// Validate Args ... // Validate Args ...
@@ -255,7 +268,12 @@ class XCAlert : public XCBase
// //
// Send Push Notification Alert ... // Send Push Notification Alert ...
SendNotification(message); SendNotification(message);
Save(message);
//
if (save)
{
Save(message);
}
} }
// //
@@ -265,19 +283,25 @@ class XCAlert : public XCBase
{ {
// //
// Handle Log, if Enabled ... // Handle Log, if Enabled ...
LogAlert(message); LogAlert(message, false);
// //
// Handle Mail if Enabled ... // Handle Mail if Enabled ...
MailAlert(message); MailAlert(message, false);
// //
// Handle Push if Enabled ... // Handle Push if Enabled ...
PushAlert(message); PushAlert(message, false);
// //
// Handle Terminal if Enabled ... // Handle Terminal if Enabled ...
TerminalAlert(message); TerminalAlert(message, false);
//
if (GetEnableAlerts())
{
Save(message);
}
} }
// //
@@ -1314,6 +1338,7 @@ class XCAlert : public XCBase
// //
return result; return result;
} }
// #endregion
// //
// Protected ... // Protected ...
@@ -1380,7 +1405,8 @@ class XCAlert : public XCBase
} }
// //
string filePath = collector.GetFilePath("XLogs"); string fileName = mPrefix + "." + "XLogs";
string filePath = collector.GetFilePath(fileName);
if (!IsValid(filePath)) if (!IsValid(filePath))
{ {
return; return;
+49 -17
View File
@@ -38,7 +38,7 @@
{ {
"id": "2f40c757-baa3-40b1-a804-853c78fae93e", "id": "2f40c757-baa3-40b1-a804-853c78fae93e",
"title": "XCAlert", "title": "XCAlert",
"checked": false "checked": true
}, },
{ {
"id": "03287c82-52da-4084-be05-9ddead05f3c2", "id": "03287c82-52da-4084-be05-9ddead05f3c2",
@@ -63,7 +63,7 @@
{ {
"id": "f618df8d-5d6c-4b4d-a6e1-b2f550a77509", "id": "f618df8d-5d6c-4b4d-a6e1-b2f550a77509",
"title": "XCDataCollector", "title": "XCDataCollector",
"checked": false "checked": true
}, },
{ {
"id": "9aea1e42-e9c9-4efd-85a8-3930335011b4", "id": "9aea1e42-e9c9-4efd-85a8-3930335011b4",
@@ -89,23 +89,21 @@
"comments": [] "comments": []
}, },
{ {
"id": "05e10aba-f8b4-485c-9c79-bcfb4a58e80b", "id": "1d9c0541-80fe-4acf-856b-285236628756",
"listId": "43249367-151b-4e78-bea5-b3c3f41b60ab", "listId": "43249367-151b-4e78-bea5-b3c3f41b60ab",
"title": "Document XCAlert", "title": "Document XCTrade",
"description": "XCAlert is a Module for Alerting Tools Enabling.\nin this task we have to complete it's Documentations and then also we have to complete XCDataCollector and make it Usable.", "description": "Document XTrade Class and it's Implementations and also do Refactoring if required.",
"labels": [], "labels": [],
"checkboxes": [ "checkboxes": [],
{ "comments": []
"id": "888d7a95-44c3-4388-9446-8e5d78a0a0d1", },
"title": "add Log Saving Methods", {
"checked": false "id": "bbe1f927-0744-4f27-a960-89078338ae2b",
}, "listId": "43249367-151b-4e78-bea5-b3c3f41b60ab",
{ "title": "Document XCVolume",
"id": "38bfd420-21fb-436a-abc6-7239da6559ae", "description": "Document XCVolume as a Base Modules which works Stand alone.\n",
"title": "add Support for Per File Logging", "labels": [],
"checked": false "checkboxes": [],
}
],
"comments": [] "comments": []
} }
] ]
@@ -114,6 +112,15 @@
"id": "0c9df632-b6cd-4d3f-9c08-fbe7010ecc4e", "id": "0c9df632-b6cd-4d3f-9c08-fbe7010ecc4e",
"title": "Test", "title": "Test",
"cards": [ "cards": [
{
"id": "e1e98f40-ac5f-495a-ac8e-eccff3a204e7",
"listId": "0c9df632-b6cd-4d3f-9c08-fbe7010ecc4e",
"title": "Document XCAccount",
"description": "Since XCAccount is a Base Class which used in other Modules, we have to Document.\n",
"labels": [],
"checkboxes": [],
"comments": []
},
{ {
"id": "e487c35e-b69d-41b4-bdae-ef8502ecc1dc", "id": "e487c35e-b69d-41b4-bdae-ef8502ecc1dc",
"listId": "0c9df632-b6cd-4d3f-9c08-fbe7010ecc4e", "listId": "0c9df632-b6cd-4d3f-9c08-fbe7010ecc4e",
@@ -134,6 +141,31 @@
} }
] ]
}, },
{
"id": "05e10aba-f8b4-485c-9c79-bcfb4a58e80b",
"listId": "0c9df632-b6cd-4d3f-9c08-fbe7010ecc4e",
"title": "Document XCAlert",
"description": "XCAlert is a Module for Alerting Tools Enabling.\nin this task we have to complete it's Documentations and then also we have to complete XCDataCollector and make it Usable.",
"labels": [],
"checkboxes": [
{
"id": "888d7a95-44c3-4388-9446-8e5d78a0a0d1",
"title": "add Log Saving Methods",
"checked": true
},
{
"id": "38bfd420-21fb-436a-abc6-7239da6559ae",
"title": "add Support for Per File Logging",
"checked": true
}
],
"comments": [
{
"id": "6c821cac-1457-4df7-af20-61fa00f6bb55",
"comment": "apply some fix and Prevent Double Saving Log Messages, and also add Prefix as XLog file name instancing ..."
}
]
},
{ {
"id": "5549ff02-ce37-476f-9d91-ed190ca15e90", "id": "5549ff02-ce37-476f-9d91-ed190ca15e90",
"listId": "0c9df632-b6cd-4d3f-9c08-fbe7010ecc4e", "listId": "0c9df632-b6cd-4d3f-9c08-fbe7010ecc4e",
+336 -1
View File
@@ -1,6 +1,6 @@
<mxfile host="65bd71144e"> <mxfile host="65bd71144e">
<diagram id="ivtA9_kKpv2f2q23DiRT" name="Page-1"> <diagram id="ivtA9_kKpv2f2q23DiRT" name="Page-1">
<mxGraphModel dx="1437" dy="1143" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0"> <mxGraphModel dx="1165" dy="1143" grid="1" gridSize="10" guides="1" tooltips="1" connect="1" arrows="1" fold="1" page="1" pageScale="1" pageWidth="850" pageHeight="1100" math="0" shadow="0">
<root> <root>
<mxCell id="0"/> <mxCell id="0"/>
<mxCell id="1" parent="0"/> <mxCell id="1" parent="0"/>
@@ -19,6 +19,23 @@
</Array> </Array>
</mxGeometry> </mxGeometry>
</mxCell> </mxCell>
<mxCell id="63" style="edgeStyle=none;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="3" target="60">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="20" y="20"/>
<mxPoint x="20" y="420"/>
<mxPoint x="20" y="700"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="70" style="edgeStyle=none;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="3" target="67">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="20" y="20"/>
<mxPoint x="20" y="420"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="3" value="XTradeFramework Modules" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;" vertex="1" parent="1"> <mxCell id="3" value="XTradeFramework Modules" style="shape=hexagon;perimeter=hexagonPerimeter2;whiteSpace=wrap;html=1;fixedSize=1;" vertex="1" parent="1">
<mxGeometry x="40" width="760" height="40" as="geometry"/> <mxGeometry x="40" width="760" height="40" as="geometry"/>
</mxCell> </mxCell>
@@ -240,6 +257,324 @@
<mxCell id="52" value="&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;Path()&lt;/span&gt;" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1"> <mxCell id="52" value="&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;Path()&lt;/span&gt;" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="640" width="160" height="40" as="geometry"/> <mxGeometry x="1480" y="640" width="160" height="40" as="geometry"/>
</mxCell> </mxCell>
<mxCell id="62" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="60" target="61">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="60" value="XCTrade" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="40" y="679" width="120" height="40" as="geometry"/>
</mxCell>
<mxCell id="65" style="edgeStyle=none;html=1;exitX=0.5;exitY=1;exitDx=0;exitDy=0;entryX=0.5;entryY=0;entryDx=0;entryDy=0;strokeColor=#FF0000;" edge="1" parent="1" source="61" target="64">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="61" value="Providing Trade Functionalities" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="560" y="679" width="240" height="40" as="geometry"/>
</mxCell>
<mxCell id="66" style="edgeStyle=none;html=1;exitX=0;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;strokeColor=#FF0000;" edge="1" parent="1" source="64" target="2">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="20" y="800"/>
<mxPoint x="20" y="220"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="64" value="" style="rhombus;whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="640" y="758" width="80" height="80" as="geometry"/>
</mxCell>
<mxCell id="69" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="67" target="68">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="67" value="XCAccount" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="40" y="400" width="120" height="40" as="geometry"/>
</mxCell>
<mxCell id="88" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="71">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="780"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="89" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="72">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="860"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="90" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="73">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="940"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="91" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="74">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="1020"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="92" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="75">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="1100"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="93" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="76">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="1180"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="94" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="77">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="1260"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="95" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="78">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="1340"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="96" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="79">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="1420"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="97" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="80">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="1500"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="98" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="81">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="1580"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="99" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="82">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="1660"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="100" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="83">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="1740"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="101" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="84">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="1820"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="102" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="85">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="1900"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="103" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="86">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="1980"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="104" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="87">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="2060"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="114" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="105">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="2140"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="115" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="106">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="2220"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="116" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="107">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="2300"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="117" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="108">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="2380"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="118" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="109">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="2460"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="119" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="110">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="2540"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="120" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="111">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="2620"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="121" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="112">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="2700"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="122" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=0;entryY=0.5;entryDx=0;entryDy=0;" edge="1" parent="1" source="68" target="113">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="830" y="420"/>
<mxPoint x="830" y="2780"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="68" value="Accouss Acount Info" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="560" y="400" width="240" height="40" as="geometry"/>
</mxCell>
<mxCell id="71" value="GetUserAccount()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="758" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="72" value="GetLeverage()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="838" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="73" value="CanExpertTrade()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="920" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="74" value="GetTradeMode()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="1000" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="75" value="GetBalance()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="1080" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="76" value="GetCredit()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="1160" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="77" value="GetProfit()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="1240" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="78" value="GetEquity()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="1320" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="79" value="GetMargin()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="1400" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="80" value="GetFreeMargin()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="1480" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="81" value="GetMarginLevel()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="1560" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="82" value="GetMarginCall()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="1640" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="83" value="GetMarginStopout()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="1720" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="84" value="GetName()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="1800" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="85" value="GetServerName()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="1880" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="86" value="GetCurrency()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="1960" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="87" value="GetCompany()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="2040" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="105" value="CalculateTradeProfit()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="2120" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="106" value="CalculateMargin()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="2200" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="107" value="CalculateFreeMargin()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="2280" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="108" value="CalculateMaxVolume()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="2360" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="109" value="CalculatePointValue()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="2440" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="110" value="Ca&lt;span style=&quot;font-family: monospace; font-size: 0px; text-align: start; text-wrap-mode: nowrap;&quot;&gt;%3CmxGraphModel%3E%3Croot%3E%3CmxCell%20id%3D%220%22%2F%3E%3CmxCell%20id%3D%221%22%20parent%3D%220%22%2F%3E%3CmxCell%20id%3D%222%22%20value%3D%22CalculatePointValue()%22%20style%3D%22whiteSpace%3Dwrap%3Bhtml%3D1%3Brounded%3D1%3B%22%20vertex%3D%221%22%20parent%3D%221%22%3E%3CmxGeometry%20x%3D%221480%22%20y%3D%222440%22%20width%3D%22160%22%20height%3D%2240%22%20as%3D%22geometry%22%2F%3E%3C%2FmxCell%3E%3C%2Froot%3E%3C%2FmxGraphModel%3E&lt;/span&gt;lculateRiskAmount()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="2520" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="111" value="CalculateRiskPoints()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="2600" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="112" value="CalculateVolume()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="2680" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="113" value="GetBalanceReportMessage()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="2760" width="160" height="40" as="geometry"/>
</mxCell>
</root> </root>
</mxGraphModel> </mxGraphModel>
</diagram> </diagram>
+136
View File
@@ -0,0 +1,136 @@
# XCAccount
it is a module which used for Accoess Trading Account Data in SaherElm's XTrade Framework.
## Dependencies
there is no Dependencies on this modules.
## Instancing
there is not any args in Constructor.
## Instructions
use provided Actions for Access Account informations in where you need.
## Actions
### long GetUserAccount()
retrieve Current User Identifier.
### long GetLeverage()
retrieve Current Account Leverage.
### bool CanExpertTrade()
retrieve Flag which Specified Trading using Experts or Manual.
### ENUM_ACCOUNT_TRADE_MODE GetTradeMode()
retrieve Current Account Trading Mode.
- ACCOUNT_TRADE_MODE_DEMO;
- ACCOUNT_TRADE_MODE_CONTEST;
- ACCOUNT_TRADE_MODE_REAL;
### double GetBalance()
retrieve Current Account Balance.
### double GetCredit()
retrieve Current Account Credit.
### double GetProfit()
retrieve Current Account's Amount of Profits.
### double GetEquity()
retrieve Current Account's Amount of Equity.
### double GetMargin()
retrieve Current Account's Amount of Margin.
### double GetFreeMargin()
retrieve Current Account's Amount of Free Margin.
### double GetMarginLevel()
retrieve Current Account's Margin Level.
### double GetMarginCall()
retrieve Current Account's Margin Call Level.
### double GetMarginStopOut()
retrieve Current Account's Margin Stopout Level.
### string GetName()
retrieve Current Account's User Name.
### string GetServerName()
retrieve Current Account's Server Name.
### string GetCurrency()
retrieve Current Account's Currency.
### string GetCompany()
retrieve Current Account's Market Name.
### double CalculateTradeProfit(const string symbol, ENUM_ORDER_TYPE type, double volume, double entry, double exit)
Calculate and Retrieved Trade Profit based on Account Currency.
### double CalculateMarging(const string symbol, ENUM_ORDER_TYPE type, double volume, double entry)
Calculate and Retrieved Specified Trades used Marigin.
### double CalculateFreeMarging(const string symbol, ENUM_ORDER_TYPE type, double volume, double entry)
Calculate and Retrieved Specified Trades Free Marigin.
### double CalculateMaxVolume(const string symbol, ENUM_ORDER_TYPE type, double entry, double percent = 100)
Calculate Max Allowed Specified Trade's Volume for Entry.
### double GetPointValue(string symbol)
Retrieve Specified Symbol's Point Value.
### double CalculateRiskAmount(string symbol, double points, double volume)
Calculate How many Risk Currency in a Trade when risk Points and Trade Volume is Specified.
used when we have to know how many risk in $ Currency, for a Trade when we risk 100 Point, by Providing 0.01 Lot as Volume.
### double CalculateRiskPoints(string symbol, double volume, double amount)
Calculate Risk Points in a Trade when Volume and Curreny Amount is Specified.
used when we want to know How many points risk in a Trade when we have to risk 5$ in a Trade by 0.01 Lot as Volume.
### double CalculateVolume(string symbol, double amount, double points)
Calculate Trade Volume when Risk Amount in Currency and Risk Amount in Points Specified.
used when we want to know Open a Trade by how Size of Volume when we have to risk 5$ in a Trade when 100 points risking.
### string GetBalanceReportMessage()
Prepare and Retrieve Balance Report Message for Current Account.
## Maintainer
Hadi Khazaee asl
[https://www.saherelm.ir](https://www.saherelm.ir)
[hadi_khazaee_asl@yahoo.com](mailto:hadi_khazaee_asl@yahoo.com)
+132
View File
@@ -2,6 +2,138 @@
it is a module which used for Providing Logs in SaherElm's XTrade Framework. it is a module which used for Providing Logs in SaherElm's XTrade Framework.
## Dependencies
this Module used XCDataCollector for Saving Logs in Files.
## Instancing
using this syntax for instancing :
```mql5
XCAlert(
string prefix = "X-Alert", // Alerts Prefixe
bool enableAlerts = true, // Enable Alerts
bool logAlerts = true, // Log Alerts
bool terminalAlerts = false, // Terminal Alerts
bool mailAlerts = false, // Mail Alerts
bool pushAlerts = false, // Push Alerts
bool saveAlerts = false // Save Alerts
) {}
```
all of Constructor Input args is Optional, means have default values.
you can set them after instancing using Properties Setter/Getter (s).
## Instructions
- Prefix: string, Specified Logger Prefix. this for Separate Different Logger Instances.
- EnableAlerts: boolean, Specified Logging is Enabled or not.
- SaveAlerts: boolean, Specified Saving Log(s) or not.
- LogAlerts: boolean, Specified Can Print Logs on Console or not.
- TerminalAlerts: boolean, Specified Send Logs in Terminal or not.
- MailAlerts: boolean, Specified Send Logs as Mail or not.
- PushAlerts: boolean, Specified Send Logs as Push or not.
## Actions
### LogAlert(string message)
do specified type of Logs.
do log by Print in Console.
### TerminalAlert(string message)
do specified type of Logs.
do log by sending Terminal Alert.
### MailAlert(string message)
do specified type of Logs.
do log by sending Mail Alert.
### PushAlert(string message)
do specified type of Logs.
do log by sending Push Notification Alert.
### SendAlert(string message)
do sending log by configuration.
retrieve log and based on configuration send each specified enabled logs separately.
### Log(string message)
Checking Log Flag and Print Message.
### Log(string tag, string message)
Checking Log Flag and Print Specified Tag & Message.
### LogEmpty()
Checking Log Flag and Print Empty Message.
### LogArray(T &array[], string label = NULL)
Checking Log Flag and Print Array.
### LogError(int error = -1)
Checking Log Flag and then Generate Error Message based on provided error number,
then Print Tag Specified Message.
### string GetErrorDescription(int err_code)
Generate Specified Error Messaged based on Provided error code.
### string GetTradeServerReturnCodeDescription(int return_code)
Generate Specified Error Message based on Provided server error code.
### bool CanLog()
protected
return a Flag for Specified Flag which allowed Print Logs or not.
### bool CanLogAlert()
protected
return a Flag for Specified Flag which allowed Print Logs and also Enabled or not.
### bool CanTerminalAlert()
protected
return a Flag for Specified Flag which allowed Sending Logs to Terminal and also Enabled or not.
### bool CanMailAlert()
protected
return a Flag for Specified Flag which allowed Sending Logs as Mail and also Enabled or not.
### bool CanPushAlert()
protected
return a Flag for Speified Flag which allowed Sending Logs as Push and also Enabled or not.
### Save(string message)
protected
Saving Specified Message into Logger File. if alert Saving is Enabled.
#### Descriptions
- Preparing a File Name by Combining setted Prefix + ".XLogs".
- Generating File Path based on XCDataCollector instance Path.
- Validate Generated filePath.
- Preparing Log Message for Saving in Log File by attaching Current Time.
- Append prepared Message to Log File using XCDataCollector instance.
### string PrepareMessage(string message)
private
Replace Escaped strings and Attach Prefix to Message.
## Maintainer ## Maintainer
Hadi Khazaee asl Hadi Khazaee asl
+1 -1
View File
@@ -21,7 +21,7 @@ there is not any args in Constructor.
### Path ### Path
is aProperty Setter and Getter Action for Setting Collector Path. is a Property Setter and Getter Action for Setting Collector Path.
for setter it's have an input Parameters (string value) which Specified the File's Path. for setter it's have an input Parameters (string value) which Specified the File's Path.
### GetFilePath(string fileName) ### GetFilePath(string fileName)
+25
View File
@@ -0,0 +1,25 @@
# XCVolume
it is a module which used for Accoess Trading Account Data in SaherElm's XTrade Framework.
## Dependencies
there is no Dependencies on this modules.
## Instancing
there is not any args in Constructor.
## Instructions
use provided Actions for Access Account informations in where you need.
## Actions
## Maintainer
Hadi Khazaee asl
[https://www.saherelm.ir](https://www.saherelm.ir)
[hadi_khazaee_asl@yahoo.com](mailto:hadi_khazaee_asl@yahoo.com)