fix x786 ...

This commit is contained in:
2024-05-29 00:15:02 +03:30
parent 179efd4170
commit 33b68be918
6 changed files with 352 additions and 110 deletions
+44 -40
View File
@@ -7602,46 +7602,26 @@ private:
// Current Market ...
double cLowerHigh = cMarket.don.GetLowerH(cIndex);
bool cHasX786 = cMarket.HasX786LongConditions();
if (cHasX786)
{
sl = cLowerHigh;
}
//
// Short Market ...
double sLowerHigh = sMarket.don.GetLowerH(cIndex);
bool sHasX786 = sMarket.HasX786LongConditions();
if (sHasX786)
{
sl = sLowerHigh;
}
//
// Medium Market ...
double mLowerHigh = mMarket.don.GetLowerH(cIndex);
bool mHasX786 = mMarket.HasX786LongConditions();
if (mHasX786)
{
sl = mLowerHigh;
}
//
// Long Market ...
double lLowerHigh = lMarket.don.GetLowerH(cIndex);
bool lHasX786 = lMarket.HasX786LongConditions();
if (lHasX786)
{
sl = lLowerHigh;
}
//
// Hind Market ...
double hLowerHigh = hMarket.don.GetLowerH(cIndex);
bool hHasX786 = hMarket.HasX786LongConditions();
if (hHasX786)
{
sl = hLowerHigh;
}
//
result =
@@ -7669,6 +7649,28 @@ private:
//
if (result)
{
//
if (cHasX786)
{
sl = cLowerHigh;
}
else if (sHasX786)
{
sl = sLowerHigh;
}
else if (mHasX786)
{
sl = mLowerHigh;
}
else if (lHasX786)
{
sl = lLowerHigh;
}
else if (hHasX786)
{
sl = hLowerHigh;
}
//
r2r = 2;
}
@@ -8753,46 +8755,26 @@ private:
// Current Market ...
double cUpperLow = cMarket.don.GetUpperL(cIndex);
bool cHasX786 = cMarket.HasX786ShortConditions();
if (cHasX786)
{
sl = cUpperLow;
}
//
// Short Market ...
double sUpperLow = sMarket.don.GetUpperL(cIndex);
bool sHasX786 = sMarket.HasX786ShortConditions();
if (sHasX786)
{
sl = sUpperLow;
}
//
// Medium Market ...
double mUpperLow = mMarket.don.GetUpperL(cIndex);
bool mHasX786 = mMarket.HasX786ShortConditions();
if (mHasX786)
{
sl = mUpperLow;
}
//
// Long Market ...
double lUpperLow = lMarket.don.GetUpperL(cIndex);
bool lHasX786 = lMarket.HasX786ShortConditions();
if (lHasX786)
{
sl = lUpperLow;
}
//
// Hind Market ...
double hUpperLow = hMarket.don.GetUpperL(cIndex);
bool hHasX786 = hMarket.HasX786ShortConditions();
if (hHasX786)
{
sl = hUpperLow;
}
//
result =
@@ -8820,6 +8802,28 @@ private:
//
if (result)
{
//
if (cHasX786)
{
sl = cUpperLow;
}
else if (sHasX786)
{
sl = sUpperLow;
}
else if (mHasX786)
{
sl = mUpperLow;
}
else if (lHasX786)
{
sl = lUpperLow;
}
else if (hHasX786)
{
sl = hUpperLow;
}
//
r2r = 2;
}
+165 -60
View File
@@ -418,54 +418,106 @@ public:
void HandleEQMState(XSignal &signals[])
{
//
XSignal accepted[];
bool equityReached = !mTrader.CheckEquityForTrade();
bool maxAllowedReached = !mTrader.CheckPositionsForTrade();
bool enableEQM = equityReached || maxAllowedReached;
// if (!enableEQM)
// {
// //
// return;
// }
if (!enableEQM)
{
return;
}
//
int signalsCount = ArraySize(signals);
if (IsValidSize(signalsCount))
{
//
Print("Cnverts " + ToString(signalsCount) + " Signal using SupRes ...");
// Extract required Data ...
XPosition positions[];
int positionsCount = mTrader.GetPositions(
positions);
if (!IsValidSize(positionsCount))
{
return;
}
//
int longs = 0;
double longProfits = 0;
double longVolumes = 0;
//
int shorts = 0;
double shortProfits = 0;
double shortVolumes = 0;
//
CountPositions(
positions,
longs,
longProfits,
longVolumes,
shorts,
shortProfits,
shortVolumes //
);
//
for (int i = 0; i < signalsCount; i++)
{
//
XSignal iSignal = signals[i];
bool isLong = IsLong(iSignal.type);
//
bool canAccept =
//
isLong
? longs == 0
: shorts == 0
//
;
if (!canAccept)
{
continue;
}
//
iSignal.provider = XEQMSupportToken;
//
AddRef(
iSignal,
accepted //
);
}
//
int acceptedCount = ArraySize(accepted);
if (!IsValidSize(acceptedCount))
{
return;
}
//
// Execute EQM Signals ...
ENUM_X_SIGNAL_EXECUTION_RESULT reasons[];
int executed = mTrader.ExecuteSignals(
accepted,
reasons,
ORDER_TIME_GTC,
NULL,
false //
);
if (executed > 0)
{
//
string message = "EQM Execute " + ToString(executed) + " Signals ...";
//
mAlert.Alert(message);
}
}
// //
// string mSymbols[];
// XSCPositionHolder *mHolders[];
// int symbolsCount = FilterSymbolBasedPositions(
// mSymbols,
// mHolders //
// );
// //
// for (int i = 0; i < symbolsCount; i++)
// {
// //
// string iSymbol = mSymbols[i];
// XSCPositionHolder *iHolder = mHolders[i];
// //
// // We Can Select Multiple Positions for Place EQM Supports ...
// //
// // Select Max In Drawdown Position and Protect it ...
// XPosition iSelectedPosition;
// bool iHasPosition = iHolder.GetMaxInDrawdown(iSelectedPosition);
// if (iHasPosition)
// {
// //
// // Try to Protect Max In Drawdown Positions Position ...
// PlaceEQMOrders(iSelectedPosition);
// }
// }
//
}
//
@@ -730,7 +782,7 @@ public:
}
//
void HandleTrailManagement(XPosition &positions[])
void HandleTrailManagement(XPosition &positions[])
{
//
// TODO:
@@ -761,7 +813,8 @@ public:
//
bool canManageState =
//
iPosition.provider != XEQMSupportToken
true
// iPosition.provider != XEQMSupportToken
// &&
// iPosition.provider != "WSC"
//
@@ -818,7 +871,7 @@ public:
// IsLong(iPosition.type)
// ? iPosition.sl + appliedSL
// : iPosition.sl - appliedSL;
//
double sl =
IsLong(iPosition.type)
@@ -1130,6 +1183,9 @@ public:
// Cleaning Source ...
Clean(signals);
//
XSignal mEQMManaged[];
//
// Loop through Signals for Management ...
for (int i = 0; i < tmpsCount; i++)
@@ -1186,38 +1242,31 @@ public:
//
continue;
}
else if (positionsCount < 4)
//
else if (positionsCount < GetMaxAllowedPositions())
{
//
// Next Signal in a While of Specific Provider ...
//
// Find Longest Position and Check it's Age ...
// Compare it by min age for same provider signals ...
XPosition youngest;
int youngestAge = GetYoungest(
youngest,
positions //
);
if (youngestAge == -1 || youngestAge < minDistanceBetweenTwoSameProviderSignal)
{
continue;
}
//
AddRef(
iSignal,
signals //
);
// //
// if (youngest.profit > 0)
// {
// }
//
continue;
}
//
else
{
//
AddRef(
iSignal,
mEQMManaged //
);
}
// else if (profit > 0 && symbolProfit > 0)
// {
// //
@@ -1228,6 +1277,12 @@ public:
// }
}
//
if (IsValidSize(ArraySize(mEQMManaged)))
{
HandleEQMState(mEQMManaged);
}
//
result = ArraySize(signals);
@@ -1352,6 +1407,56 @@ public:
}
}
//
void ManageUnExecutedSignals(
ENUM_X_SIGNAL_EXECUTION_RESULT &states[],
XSignal &unExecutedSignals[] //
) override
{
//
XSignal filteredSignals[];
//
int unExecutedSignalsCount = ArraySize(unExecutedSignals);
if (!IsValidSize(unExecutedSignalsCount))
{
return;
}
//
for (int i = 0; i < unExecutedSignalsCount; i++)
{
//
ENUM_X_SIGNAL_EXECUTION_RESULT iState = states[i];
bool isStateValid =
//
iState == X_SIGNAL_EXECUTION_FAILED_NO_EQUITY ||
iState == X_SIGNAL_EXECUTION_FAILED_MAX_REACHED
//
;
if (!isStateValid)
{
continue;
}
//
AddRef(
unExecutedSignals[i],
filteredSignals //
);
}
//
int filteredSignalsCount = ArraySize(filteredSignals);
if (!IsValidSize(filteredSignalsCount))
{
return;
}
//
HandleEQMState(filteredSignals);
}
//
// Protected ...
protected:
+22 -1
View File
@@ -2746,6 +2746,15 @@ public:
return 0;
}
//
// When Some Errors happens in Executing Signals ...
virtual void ManageUnExecutedSignals(
ENUM_X_SIGNAL_EXECUTION_RESULT &states[],
XSignal &unExecutedSignals[] //
)
{
}
//
// Execute Provided Signals ...
virtual void HandleSignalsExecution(XSignal &signals[])
@@ -2800,9 +2809,11 @@ public:
//
// Try to Execute Signals ...
XSignal notExecuteds[];
ENUM_X_SIGNAL_EXECUTION_RESULT reasons[];
int executedSignalsCount = mTrader.ExecuteSignals(
int executedSignalsCount = mTrader.ExecuteSpecifiedSignals(
filteredSignals,
notExecuteds, // Not Executed Signals
reasons
//
);
@@ -2837,6 +2848,16 @@ public:
message = "(" + ToString(executedSignalsCount) + ") Signals Executed Successfully ...";
}
//
if (ArraySize(notExecuteds) > 0)
{
//
ManageUnExecutedSignals(
reasons,
notExecuteds //
);
}
//
if (IsValid(message))
{
+57
View File
@@ -1390,6 +1390,63 @@ public:
return result;
}
//
int ExecuteSpecifiedSignals(
XSignal &signals[], // Collection of Signal for Execution
XSignal &notExecuteds[], // Not Executed Signal
ENUM_X_SIGNAL_EXECUTION_RESULT &states[], // Signal Execution Result
ENUM_ORDER_TYPE_TIME lifetime = ORDER_TIME_GTC, // Order LifeTime
datetime expiration = NULL, // order expiration time
bool checkPolicies = true // Check Account Policies
)
{
//
int result = 0;
//
Clean(states);
Clean(notExecuteds);
//
int signalsCount = ArraySize(signals);
if (signalsCount <= 0)
{
return result;
}
//
ArrayResize(states, signalsCount);
ArrayInitialize(states, X_SIGNAL_EXECUTION_UNKNOWN);
for (int i = 0; i < signalsCount; i++)
{
//
bool isExecuted = ExecuteSignal(
signals[i],
states[i],
lifetime,
expiration
//
);
//
if (isExecuted)
{
result++;
}
else
{
//
AddRef(
signals[i],
notExecuteds //
);
}
}
//
return result;
}
//
// Regular Trade Actions ...