This commit is contained in:
2024-09-16 17:13:16 +03:30
parent 97b192fd65
commit f6c4b46da3
3 changed files with 111 additions and 4 deletions
+14 -3
View File
@@ -11,13 +11,14 @@
"mime": "text/markdown"
},
"details": {
"content": "- [] Hedge;",
"content": "- [] Hedge;\n- [] Protector Start;\n",
"mime": "text/markdown"
},
"id": "89",
"references": [
"90",
"91"
"91",
"92"
],
"title": "Complete Position Protector"
},
@@ -34,6 +35,17 @@
"references": [],
"title": "Implement BE Hedge Mechanism"
},
{
"assignedTo": {
"name": "Hadi Khazaee Asl"
},
"creation_time": "2024-09-16T13:08:56.494Z",
"id": "92",
"references": [],
"title": "Implement Protector Start Point"
}
],
"testing": [
{
"assignedTo": {
"name": "Hadi Khazaee Asl"
@@ -48,7 +60,6 @@
"title": "Implement HE Hedge mechanism"
}
],
"testing": [],
"done": [
{
"assignedTo": {
@@ -1043,6 +1043,28 @@ class X121SCTradeHandler : public XSCBaseAlert
mMaxDrawdownPercentForOpenTrades = value;
}
//
// Protector Start ...
//
double ProtectorStartDistanceInPoint()
{
return mProtectorStartDistanceInPointl
}
//
void ProtectorStartDistanceInPoint(double value)
{
//
if (value < 0)
{
value = 0;
}
//
mProtectorStartDistanceInPoint = value;
}
//
// Hedge Props ...
@@ -1849,6 +1871,56 @@ class X121SCTradeHandler : public XSCBaseAlert
return;
}
}
//
// Loop Through Main Positions ...
double requiredDistance = ProtectorStartDistanceInPoint();
if (requiredDistance <= 0)
{
return;
}
//
int protectedPositions = 0;
for (int i = 0; i < pPositionsCount; i++)
{
//
// Check Position is Protectable or not ...
XPosition iProtected = pPositions[i];
//
XPosition iPosition = iProtected.main;
//
double iSymbolPoint = GetPoints(iPosition.symbol);
double iDistance = MathAbs(iPosition.profit) / iSymbolPoint;
//
bool isDistancePassed = iDistance >= requiredDistance;
bool isProtected = HandlePositionProtecting(iPosition);
if (isProtected)
{
protectedPositions++;
}
}
//
if (protectedPositions > 0)
{
//
// Renew Data ...
Clean(pPositions);
int pPositionsCount = GetPositions(
pPositions //
);
//
// Validate Count ...
if (!IsValidSize(pPositionsCount))
{
return;
}
}
}
//
@@ -2057,6 +2129,21 @@ class X121SCTradeHandler : public XSCBaseAlert
return result;
}
/**
* Handle Protecting Position ...
*/
bool HandlePositionProtecting(XPosition &position)
{
//
bool result = false;
//
// Here we Make Sure this Position has ...
//
return result;
}
//
// Private ...
private:
@@ -2083,6 +2170,9 @@ class X121SCTradeHandler : public XSCBaseAlert
bool mUseMaxAllowedTradesPerSymbol; // Use Max Allowed Trades Per Symbol
double mMaxDrawdownPercentForOpenTrades; // Max Drawdown Percent for Open Trades
//
double mProtectorStartDistanceInPoint; // Protector Start Distance in Point
//
// Hedging Properties ...
bool mAllowHedge; // Allow Protector to Hedge Positions
+7 -1
View File
@@ -440,15 +440,21 @@ bool InitialEA()
//
// Configure Position Protector ...
// TODO: Configure it using Inputs ...
//
eaTradeHandler.ProtectorStartDistanceInPoint(35);
//
// Configure Hedging ...
// TODO: Configure it using Inputs ...
eaTradeHandler.AllowHedge(true);
eaTradeHandler.HedgeMinVolumeStep(0.01);
eaTradeHandler.MinimumOpenPositionsForHEHedge(2);
eaTradeHandler.HedgeHEMinProfitPerVolumeStep(0.2);
//
// TODO: Implement ...
//
// Configure Strategies ...