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
+45 -19
View File
@@ -86,9 +86,7 @@ class XCAlert : public XCBase
return GetSpecificToken(this);
}
//
// Properties Getter(s) / Setter(s) ...
// #region Properties Getter(s) / Setter(s) ...
//
string GetPrefix()
{
@@ -174,16 +172,16 @@ class XCAlert : public XCBase
{
mTerminalAlerts = value;
}
// #endregion
//
// Tools Funtions ...
// #region Tools Funtions ...
//
// Alerts ...
//
// Logging an Alert ...
void LogAlert(string message)
void LogAlert(string message, bool save = true)
{
//
// Validate Args ...
@@ -194,15 +192,20 @@ class XCAlert : public XCBase
//
message = PrepareMessage(message);
//
Log(message);
Save(message);
//
if (save)
{
Save(message);
}
}
//
// Terminal Alert ...
void TerminalAlert(string message)
void TerminalAlert(string message, bool save = true)
{
//
// Validate Args ...
@@ -217,12 +220,17 @@ class XCAlert : public XCBase
// Send Terminal Alert ...
Alert(message);
Save(message);
//
if (save)
{
Save(message);
}
}
//
// Mail Alert ...
void MailAlert(string message)
void MailAlert(string message, bool save = true)
{
//
// Validate Args ...
@@ -234,12 +242,17 @@ class XCAlert : public XCBase
//
// Send Mail Alert ...
SendMail(GetPrefix(), message);
Save(message);
//
if (save)
{
Save(message);
}
}
//
// Send Push Notification ...
void PushAlert(string message)
void PushAlert(string message, bool save = true)
{
//
// Validate Args ...
@@ -255,7 +268,12 @@ class XCAlert : public XCBase
//
// Send Push Notification Alert ...
SendNotification(message);
Save(message);
//
if (save)
{
Save(message);
}
}
//
@@ -265,19 +283,25 @@ class XCAlert : public XCBase
{
//
// Handle Log, if Enabled ...
LogAlert(message);
LogAlert(message, false);
//
// Handle Mail if Enabled ...
MailAlert(message);
MailAlert(message, false);
//
// Handle Push if Enabled ...
PushAlert(message);
PushAlert(message, false);
//
// Handle Terminal if Enabled ...
TerminalAlert(message);
TerminalAlert(message, false);
//
if (GetEnableAlerts())
{
Save(message);
}
}
//
@@ -1314,6 +1338,7 @@ class XCAlert : public XCBase
//
return result;
}
// #endregion
//
// 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))
{
return;
+49 -17
View File
@@ -38,7 +38,7 @@
{
"id": "2f40c757-baa3-40b1-a804-853c78fae93e",
"title": "XCAlert",
"checked": false
"checked": true
},
{
"id": "03287c82-52da-4084-be05-9ddead05f3c2",
@@ -63,7 +63,7 @@
{
"id": "f618df8d-5d6c-4b4d-a6e1-b2f550a77509",
"title": "XCDataCollector",
"checked": false
"checked": true
},
{
"id": "9aea1e42-e9c9-4efd-85a8-3930335011b4",
@@ -89,23 +89,21 @@
"comments": []
},
{
"id": "05e10aba-f8b4-485c-9c79-bcfb4a58e80b",
"id": "1d9c0541-80fe-4acf-856b-285236628756",
"listId": "43249367-151b-4e78-bea5-b3c3f41b60ab",
"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.",
"title": "Document XCTrade",
"description": "Document XTrade Class and it's Implementations and also do Refactoring if required.",
"labels": [],
"checkboxes": [
{
"id": "888d7a95-44c3-4388-9446-8e5d78a0a0d1",
"title": "add Log Saving Methods",
"checked": false
},
{
"id": "38bfd420-21fb-436a-abc6-7239da6559ae",
"title": "add Support for Per File Logging",
"checked": false
}
],
"checkboxes": [],
"comments": []
},
{
"id": "bbe1f927-0744-4f27-a960-89078338ae2b",
"listId": "43249367-151b-4e78-bea5-b3c3f41b60ab",
"title": "Document XCVolume",
"description": "Document XCVolume as a Base Modules which works Stand alone.\n",
"labels": [],
"checkboxes": [],
"comments": []
}
]
@@ -114,6 +112,15 @@
"id": "0c9df632-b6cd-4d3f-9c08-fbe7010ecc4e",
"title": "Test",
"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",
"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",
"listId": "0c9df632-b6cd-4d3f-9c08-fbe7010ecc4e",
+336 -1
View File
@@ -1,6 +1,6 @@
<mxfile host="65bd71144e">
<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>
<mxCell id="0"/>
<mxCell id="1" parent="0"/>
@@ -19,6 +19,23 @@
</Array>
</mxGeometry>
</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">
<mxGeometry x="40" width="760" height="40" as="geometry"/>
</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">
<mxGeometry x="1480" y="640" width="160" height="40" as="geometry"/>
</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>
</mxGraphModel>
</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.
## 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
Hadi Khazaee asl
+1 -1
View File
@@ -21,7 +21,7 @@ there is not any args in Constructor.
### 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.
### 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)