This commit is contained in:
2026-07-10 00:35:12 +03:30
17 changed files with 2904 additions and 28 deletions
+45 -19
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 ...
@@ -194,15 +192,20 @@ class XCAlert : public XCBase
// //
message = PrepareMessage(message); message = PrepareMessage(message);
// //
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;
+1 -1
View File
@@ -4,7 +4,7 @@
// ------------------------------------------------- // -------------------------------------------------
// Name: XCXGuard ... // Name: XCXGuard ...
// Description: Guard Provider Class ... // Description: Guard Provider Class ...
// // Ued in XCTradeManager ...
// //
// Maintainer: // Maintainer:
// ------------ // ------------
File diff suppressed because it is too large Load Diff
+157
View File
@@ -27,6 +27,84 @@
"labels": [], "labels": [],
"checkboxes": [], "checkboxes": [],
"comments": [] "comments": []
},
{
"id": "17260152-05db-4ae2-9d26-cd3d9ee75863",
"listId": "43249367-151b-4e78-bea5-b3c3f41b60ab",
"title": "Make Each Modules Separately and Attach Process on Each them ...",
"description": "there are several modules, documents them one by one and make all of them as runnable standalone ...",
"labels": [],
"checkboxes": [
{
"id": "2f40c757-baa3-40b1-a804-853c78fae93e",
"title": "XCAlert",
"checked": true
},
{
"id": "03287c82-52da-4084-be05-9ddead05f3c2",
"title": "XCTrade",
"checked": false
},
{
"id": "cbf27d79-5cab-4b10-b48c-e9317a6c7dff",
"title": "XCSessionDetector",
"checked": false
},
{
"id": "68f70f06-d649-48d3-8050-6024d1f6b0b3",
"title": "XCAccount",
"checked": false
},
{
"id": "ab337067-5b35-475e-a16e-48de97a79452",
"title": "XCVolume",
"checked": false
},
{
"id": "f618df8d-5d6c-4b4d-a6e1-b2f550a77509",
"title": "XCDataCollector",
"checked": true
},
{
"id": "9aea1e42-e9c9-4efd-85a8-3930335011b4",
"title": "XCRestrictions",
"checked": false
},
{
"id": "7e08c5e9-74f6-40c6-9a81-b60503d5a625",
"title": "XCBaseSignaller",
"checked": false
},
{
"id": "cfcc6686-0b3c-48e7-80f6-d3485f7ad717",
"title": "XCTarget",
"checked": false
},
{
"id": "40a72aea-865d-48b5-a48b-fe9972e8152d",
"title": "XCTradeManager",
"checked": false
}
],
"comments": []
},
{
"id": "1d9c0541-80fe-4acf-856b-285236628756",
"listId": "43249367-151b-4e78-bea5-b3c3f41b60ab",
"title": "Document XCTrade",
"description": "Document XTrade Class and it's Implementations and also do Refactoring if required.",
"labels": [],
"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": []
} }
] ]
}, },
@@ -34,6 +112,60 @@
"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",
"listId": "0c9df632-b6cd-4d3f-9c08-fbe7010ecc4e",
"title": "Document XCDataCollector",
"description": "since DataCollector is a most commonly used Module in other Modules as Dependency, it is very important to make them completely documented and also add required Features to it.",
"labels": [],
"checkboxes": [
{
"id": "3357aca6-1906-44e2-8c9c-1c8d3b576f43",
"title": "Add Suppoprt for CSV Read and Writing",
"checked": true
}
],
"comments": [
{
"id": "4e454ff4-88d3-41ea-b5d7-0d7cbf70c660",
"comment": "CSV since implemented based on Custom Specified Structures. this module provides all requirements implemented."
}
]
},
{
"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",
@@ -51,6 +183,31 @@
"labels": [], "labels": [],
"checkboxes": [], "checkboxes": [],
"comments": [] "comments": []
},
{
"id": "504383b7-0a6d-4c78-afe4-be3cf59ed2bd",
"listId": "0c9df632-b6cd-4d3f-9c08-fbe7010ecc4e",
"title": "Complete Restrictions Class ...",
"description": "",
"labels": [],
"checkboxes": [
{
"id": "7e422b9e-e5f4-4ea7-ab6e-b2225b8d9a67",
"title": "add multiple symbol support",
"checked": true
},
{
"id": "65f6807b-f664-4e30-be27-06799032f16e",
"title": "add mutiple tf support",
"checked": true
},
{
"id": "c8a8c345-7dc2-48c8-bc04-11ccf221493f",
"title": "implement Process function",
"checked": true
}
],
"comments": []
} }
] ]
}, },
+581
View File
@@ -0,0 +1,581 @@
<mxfile host="65bd71144e">
<diagram id="ivtA9_kKpv2f2q23DiRT" name="Page-1">
<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"/>
<mxCell id="7" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="2" target="6">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="2" value="XCAlert" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="40" y="200" width="120" height="40" as="geometry"/>
</mxCell>
<mxCell id="5" 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="2">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="20" y="20"/>
<mxPoint x="20" y="100"/>
<mxPoint x="20" y="220"/>
</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>
<mxCell id="9" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="6" target="8">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="11" 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="6" target="10">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="880" y="220"/>
<mxPoint x="880" y="300"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="13" 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="6" target="12">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="880" y="220"/>
<mxPoint x="880" y="380"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="16" 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="6" target="14">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="880" y="220"/>
<mxPoint x="880" y="460"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="18" 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="6" target="15">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="880" y="220"/>
<mxPoint x="880" y="540"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="32" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="6" target="31">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="35" value="" style="edgeStyle=none;html=1;strokeColor=#FF0000;" edge="1" parent="1" source="6" target="31">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="6" value="Providing Alert Mechanism" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="560" y="200" width="240" height="40" as="geometry"/>
</mxCell>
<mxCell id="24" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="8" target="23">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="8" value="LogAlert()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="920" y="200" width="140" height="40" as="geometry"/>
</mxCell>
<mxCell id="26" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="10" target="25">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="10" value="TerminalAlert()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="920" y="280" width="140" height="40" as="geometry"/>
</mxCell>
<mxCell id="28" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="12" target="27">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="12" value="MailAlert()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="920" y="360" width="140" height="40" as="geometry"/>
</mxCell>
<mxCell id="30" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="14" target="29">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="14" value="PushAlert()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="920" y="440" width="140" height="40" as="geometry"/>
</mxCell>
<mxCell id="19" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;strokeColor=#0082FF;" edge="1" parent="1" source="15" target="14">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1080" y="540"/>
<mxPoint x="1080" y="460"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="20" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;strokeColor=#0082FF;" edge="1" parent="1" source="15" target="12">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1080" y="540"/>
<mxPoint x="1080" y="380"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="21" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;strokeColor=#0082FF;" edge="1" parent="1" source="15" target="10">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1080" y="540"/>
<mxPoint x="1080" y="300"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="22" style="edgeStyle=none;html=1;exitX=1;exitY=0.5;exitDx=0;exitDy=0;entryX=1;entryY=0.5;entryDx=0;entryDy=0;strokeColor=#0082FF;" edge="1" parent="1" source="15" target="8">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1080" y="540"/>
<mxPoint x="1080" y="220"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="15" value="SendAlert()" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="920" y="520" width="140" height="40" as="geometry"/>
</mxCell>
<mxCell id="23" value="Sending Logs as Print" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1160" y="200" width="200" height="40" as="geometry"/>
</mxCell>
<mxCell id="25" value="Sending Log to Terminal" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1160" y="280" width="200" height="40" as="geometry"/>
</mxCell>
<mxCell id="27" value="Sending Log as Mail" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1160" y="360" width="200" height="40" as="geometry"/>
</mxCell>
<mxCell id="29" value="Sending Log as Push Notification" style="whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="1160" y="440" width="200" height="40" as="geometry"/>
</mxCell>
<mxCell id="34" style="edgeStyle=none;html=1;entryX=0;entryY=0.5;entryDx=0;entryDy=0;strokeColor=#FF0000;" edge="1" parent="1" source="31" target="33">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="20" y="320"/>
<mxPoint x="20" y="100"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="31" value="" style="rhombus;whiteSpace=wrap;html=1;rounded=1;" vertex="1" parent="1">
<mxGeometry x="640" y="280" width="80" height="80" as="geometry"/>
</mxCell>
<mxCell id="39" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="33" target="38">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="33" value="&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;XCDataCollector&lt;/span&gt;" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="40" y="80" width="120" height="40" as="geometry"/>
</mxCell>
<mxCell id="43" value="" style="edgeStyle=none;html=1;" edge="1" parent="1" source="38" target="42">
<mxGeometry relative="1" as="geometry"/>
</mxCell>
<mxCell id="53" 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="38" target="45">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1440" y="100"/>
<mxPoint x="1440" y="180"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="54" 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="38" target="46">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1440" y="100"/>
<mxPoint x="1440" y="260"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="55" 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="38" target="47">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1440" y="100"/>
<mxPoint x="1440" y="340"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="56" 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="38" target="49">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1440" y="100"/>
<mxPoint x="1440" y="420"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="57" 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="38" target="50">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1440" y="100"/>
<mxPoint x="1440" y="500"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="58" 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="38" target="51">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1440" y="100"/>
<mxPoint x="1440" y="580"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="59" 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="38" target="52">
<mxGeometry relative="1" as="geometry">
<Array as="points">
<mxPoint x="1440" y="100"/>
<mxPoint x="1440" y="660"/>
</Array>
</mxGeometry>
</mxCell>
<mxCell id="38" value="&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;Save and Retrieve Data&lt;/span&gt;" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="560" y="80" width="240" height="40" as="geometry"/>
</mxCell>
<mxCell id="42" value="&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;Save()&lt;/span&gt;" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="80" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="45" value="&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;Append()&lt;/span&gt;" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="160" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="46" value="&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;Read()&lt;/span&gt;" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="240" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="47" value="&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;IsExists()&lt;/span&gt;" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="320" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="49" value="&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;GetFileHandlerForRead()&lt;/span&gt;" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="400" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="50" value="&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;GetFileHandlerForWrite()&lt;/span&gt;" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="480" width="160" height="40" as="geometry"/>
</mxCell>
<mxCell id="51" value="&lt;span style=&quot;color: rgb(0, 0, 0);&quot;&gt;GetFilePath()&lt;/span&gt;" style="rounded=1;whiteSpace=wrap;html=1;" vertex="1" parent="1">
<mxGeometry x="1480" y="560" width="160" height="40" as="geometry"/>
</mxCell>
<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>
</mxfile>
+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)
+143
View File
@@ -0,0 +1,143 @@
# XCAlert
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
[https://www.saherelm.ir](https://www.saherelm.ir)
[hadi_khazaee_asl@yahoo.com](mailto:hadi_khazaee_asl@yahoo.com)
View File
+80
View File
@@ -0,0 +1,80 @@
# XCDataCollector
it is a module which used for Save and Retrieve Data in SaherElm's XTrade Framework.
this tool helps all required modules to save data for next usage and analytics.
we can implement Save To File and Read From File actions to all Structures and Classes and Modules.
## Dependencies
there is no Dependencies on this modules.
## Instancing
there is not any args in Constructor.
## Instructions
- using Path Action of instance for Setting File Path;
- using Save, Append, Read for File Manipulations;
## Actions
### 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)
retrieve Full path (including provided file name) based on Current Configured Path for instance.
### GetFileHandlerForWrite(string filePath)
retrieve File Handler by Write Access for Writing Data to File.
you have to provide Fully File Path for access Handler.
this for Use Implementing Custom Collecting Senarios out of Instance Box.
commonly it's used by built in Actions for Regular Saving Data.
### GetFileHandlerForRead(string filePath)
retrieve File Handler by Read Access for Reading Data from File.
you have to provide Fully File Path for access Handler.
this for Use Implementing Custom Retrieving Senarios out of Instance Box.
commonly it's used by built in Actions for Regular Reading Data.
### Save(string fileName, string content)
Save Specified Content to Specified File Nmae.
here the file name must Contains fully file path including file name.
it's only one time writing file. if it's file exists before overwrite it's content.
### Append(string fileName, string content)
Append Specified Contonet to end of Specified File.
here the file name must Contains fully file path including file name.
if file Exists, add to end of it. if not, Create file at Specified Provided path, then write content.
### Read(string fileName, string &content)
Read all of File Content at once from Specified File.
here the file name must Contains fully file path including file name.
content arg is a reference string variable to hold file content.
### Read(string fileName, string &content[])
Read all of File Content Lines at once from Specified File.
here the file name must Contains fully file path including file name.
content arg is a reference string array variable to hold file content lines.
### IsExists(string fileName)
Check Specified File Exists or not ...
here the file name must Contains fully file path including file name.
## Maintainer
Hadi Khazaee asl
[https://www.saherelm.ir](https://www.saherelm.ir)
[hadi_khazaee_asl@yahoo.com](mailto:hadi_khazaee_asl@yahoo.com)
View File
View File
View File
+11
View File
@@ -0,0 +1,11 @@
# XCTrade
it is a module which used for Providing Trade Related Actions in SaherElm's XTrade Framework.
## Maintainer
Hadi Khazaee asl
[https://www.saherelm.ir](https://www.saherelm.ir)
[hadi_khazaee_asl@yahoo.com](mailto:hadi_khazaee_asl@yahoo.com)
View File
+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)
+125 -1
View File
@@ -25,6 +25,7 @@
#include "../Classes/x-saherelm.x-alert.class.mq5" #include "../Classes/x-saherelm.x-alert.class.mq5"
#include "../Classes/x-saherelm.x-chart.helper.class.mq5" #include "../Classes/x-saherelm.x-chart.helper.class.mq5"
#include "../Classes/x-saherelm.x-guard.class.mq5" #include "../Classes/x-saherelm.x-guard.class.mq5"
#include "../Classes/x-saherelm.x-restrictions.class.mq5"
#include "../Classes/x-saherelm.x-target.class.mq5" #include "../Classes/x-saherelm.x-target.class.mq5"
#include "../Classes/x-saherelm.x-trade-manager.class.mq5" #include "../Classes/x-saherelm.x-trade-manager.class.mq5"
#include "../Classes/x-saherelm.x-trade.class.mq5" #include "../Classes/x-saherelm.x-trade.class.mq5"
@@ -90,11 +91,19 @@ input bool eaSaveLosts = true; // Save Lost Conditions
input bool eaSaveRestrictions = true; // Save Restriction Reports input bool eaSaveRestrictions = true; // Save Restriction Reports
// #endregion // #endregion
// #region Configurable Documents ...
bool eaEnableAnalysis = true; // Most Important Flag for Enable Analysis in EA ...
bool processTicksOnlyOnNewBars = false; // Processing Ticks only on new Bars ...
ENUM_X_SESSION_TYPE eaAllowedSessions[]; // Allowed Sessions for Analysis ...
ENUM_X_SESSION_OVERLAP_TYPE eaAllowedOverlaps[]; // Allowed Overlaps for Analysis ...
// #endregion
// #region Global Variables ... // #region Global Variables ...
#define ShortName "XSessionDetectorTestEA" #define ShortName "XSessionDetectorTestEA"
// //
string eaTag; // EA Scoped Tag ... string eaTag; // EA Scoped Tag ...
bool isNewBar = false; // EA Is New Bar ...
// //
XCAlert *eaAlert; // EA Scope Alert Handler ... XCAlert *eaAlert; // EA Scope Alert Handler ...
@@ -102,7 +111,9 @@ XCGuard *eaGuard; // EA Scope Guard Handler ...
XCTrade *eaTrader; // EA Scope Trade Handler ... XCTrade *eaTrader; // EA Scope Trade Handler ...
XCVolume *eaVolume; // EA Scope Voluem Handler ... XCVolume *eaVolume; // EA Scope Voluem Handler ...
XCTarget *eaTarget; // EA Scope Target Handler ... XCTarget *eaTarget; // EA Scope Target Handler ...
XBarTracker eaBarTracker; // EA Scope Bar Tracker ...
XTimeTracker eaTimeTracker; // EA Scope Time Tracker ... XTimeTracker eaTimeTracker; // EA Scope Time Tracker ...
XCRestrictions *eaRestrictions; // EA Scope Restrictions Handler ...
XCTradeManager *eaTradeManager; // EA Scope Trade Manager Handler ... XCTradeManager *eaTradeManager; // EA Scope Trade Manager Handler ...
XCSessionDetector *eaSessionDetector; // EA Scope Session Detector ... XCSessionDetector *eaSessionDetector; // EA Scope Session Detector ...
// #endregion // #endregion
@@ -131,6 +142,10 @@ int OnInit()
return INIT_FAILED; return INIT_FAILED;
} }
//
// Configure Dynamic Variables ...
ConfigureEA();
// //
result = InitializeRequirements(); result = InitializeRequirements();
if (!result) if (!result)
@@ -150,6 +165,35 @@ void OnTick()
// //
// Perform Session Detector Process ... // Perform Session Detector Process ...
eaSessionDetector.Process(); eaSessionDetector.Process();
//
// Perform Restrictions Process ...
eaRestrictions.Process();
//
// Check if Is New Bar ...
isNewBar = eaBarTracker.IsNewBar();
//
// Check Analysis Enabled ...
if (eaEnableAnalysis)
{
//
// Check Bar Tracker ...
if (processTicksOnlyOnNewBars)
{
//
// Check New Bar or not ...
if (!isNewBar)
{
return;
}
}
//
// Do Analysis ...
// TODO: Implement this ...
}
} }
/** /**
@@ -157,6 +201,9 @@ void OnTick()
*/ */
void OnTrade() void OnTrade()
{ {
//
// Calling Event Handler ...
eaTrader.HandleOnTrade();
} }
/** /**
@@ -202,6 +249,7 @@ void OnDeinit(const int reason)
ZeroMemory(eaVolume); ZeroMemory(eaVolume);
ZeroMemory(eaTarget); ZeroMemory(eaTarget);
ZeroMemory(eaTradeManager); ZeroMemory(eaTradeManager);
ZeroMemory(eaRestrictions);
ZeroMemory(eaSessionDetector); ZeroMemory(eaSessionDetector);
} }
@@ -273,6 +321,32 @@ bool ValidateInputs()
return result; return result;
} }
/**
* Configure EA Commons ...
*/
void ConfigureEA()
{
//
// Configure Sessions ...
//
// Configure Overlaps ...
Add(
X_OVERLAP_LONDON_NEWYORK,
eaAllowedOverlaps //
);
//
// Startup eaAnalysis State ...
int sessionsCount = ArraySize(eaAllowedSessions);
int overlapsCount = ArraySize(eaAllowedOverlaps);
//
eaEnableAnalysis =
!IsValidSize(sessionsCount) &&
!IsValidSize(overlapsCount);
}
/** /**
* Initial Requirements of EA ... * Initial Requirements of EA ...
* *
@@ -291,6 +365,17 @@ bool InitializeRequirements()
: "") + : "") +
ShortName; ShortName;
// #region Initializing Bar Tracker ...
result = eaBarTracker.Init(
_Symbol,
_Period //
);
if (!result)
{
return result;
}
// #endregion
// #region Alert ... // #region Alert ...
eaAlert = new XCAlert(); eaAlert = new XCAlert();
eaAlert.SetPrefix(eaLogSuffix); eaAlert.SetPrefix(eaLogSuffix);
@@ -415,6 +500,23 @@ bool InitializeRequirements()
); );
// #endregion // #endregion
// #region Restrictions Handler ...
eaRestrictions = new XCRestrictions();
//
// Configure Restrictions ...
// TODO: Refactor Restrictions Configurations as Input ...
eaRestrictions.SetAllowedLosesInRestrictions(2);
eaRestrictions.SetAllowedTradesInRestrictions(2);
eaRestrictions.SetRestrictionsPeriodMultiplier(2);
eaRestrictions.SetRestrictionsPeriod(X_TRADE_RESTRICATION_DAILY);
//
// Register Event Handlers ...
eaRestrictions.AddRestrictionsEndEventHandler(OnRestrictionsEnd);
eaRestrictions.AddRestrictionsStartEventHandler(OnRestrictionsStart);
// #endregion
// //
result = eaSessionDetector != NULL; result = eaSessionDetector != NULL;
if (!result) if (!result)
@@ -518,7 +620,11 @@ void OnOverlapStartHandler(
datetime startTime // datetime startTime //
) )
{ {
//
Print("Overlap Started: ", EnumToString(overlap), " at ", TimeToString(startTime)); Print("Overlap Started: ", EnumToString(overlap), " at ", TimeToString(startTime));
//
// Check Over lap Exists in eaSession Everlaps ...
} }
/** /**
@@ -643,6 +749,24 @@ void OnPositionPartialClosed(
void OnTradeStateChanged(const XOnTradeHandlerState &state) void OnTradeStateChanged(const XOnTradeHandlerState &state)
{ {
} }
/**
* Handle Restrictions Start Event ...
* XCRestrictions ...
*/
void OnRestrictionsStart()
{
Print("Restrictions Start ...");
}
/**
* Handle Restrictions End Event ...
* XCRestrictions ...
*/
void OnRestrictionsEnd()
{
Print("Restrictions End ...");
}
// #endregion // #endregion
// //
+6 -2
View File
@@ -156,6 +156,10 @@ bool IsValid(ENUM_X_POSITION_TYPES value)
{ {
return value != X_POSITION_TYPE_NONE; return value != X_POSITION_TYPE_NONE;
} }
bool IsXValid(ENUM_X_POSITION_TYPES value)
{
return IsValid(value);
}
// //
bool HasSpecifiedType(ENUM_X_POSITION_TYPES value) bool HasSpecifiedType(ENUM_X_POSITION_TYPES value)
@@ -4688,8 +4692,8 @@ bool IsProviderFilterPassed(
// //
return !IsValid(provider) return !IsValid(provider)
? true ? true
: provider == item.provider || : provider == item.provider ||
Contains(provider, item.provider); Contains(provider, item.provider);
} }
// //