last works ...

This commit is contained in:
2024-06-14 00:44:37 +03:30
parent 0fa788d126
commit a525a2e2cd
9 changed files with 2579 additions and 120 deletions
+367 -65
View File
@@ -25,6 +25,7 @@
//
#include "../Classes/x-saherelm.xea.class.mq5"
#include "../Classes/x-saherelm.xczone.class.mq5"
#include "../Classes/x-saherelm.x121.setup.cycle.class.mq5"
//
@@ -121,6 +122,7 @@ struct XSignalInfo
pushers = _pushers;
symbol = _signal.symbol;
period = _signal.period;
volume = _signal.volume;
provider = _signal.provider;
//
@@ -750,9 +752,40 @@ public:
}
//
bool IsEnable()
int CloseOnSpecificTime()
{
return mAllowLong || mAllowShort;
return mCloseOnSpecificTime;
}
//
void CloseOnSpecificTime(int value)
{
//
if (value < 0)
{
value = -1;
}
//
if (value > 23)
{
value = 23;
}
//
mCloseOnSpecificTime = value;
}
//
bool UseSupport()
{
return mUseSupport;
}
//
void UseSupport(bool value)
{
mUseSupport = value;
}
//
@@ -907,7 +940,10 @@ public:
}
//
mVolumeOSC = 0;
mBullishSigns = 0;
mBullishScore = 0;
mBearishSigns = 0;
mBearishScore = 0;
//
@@ -921,6 +957,9 @@ public:
mBullishScore += bullishScore;
mBearishScore += bearishScore;
//
mVolumeOSC += cConditions.vlmConditions.volume[1];
//
// Parse Conditions for Signal ...
bool hasSignal = signalGenerator.HasSignal(
@@ -928,6 +967,7 @@ public:
cSignal,
cPusher,
cProvider,
mUseSupport,
mAllowLong,
mAllowShort,
mVolume,
@@ -980,6 +1020,9 @@ public:
mBullishScore += bullishScore;
mBearishScore += bearishScore;
//
mVolumeOSC += sConditions.vlmConditions.volume[1];
//
// Parse Conditions for Signal ...
bool hasSignal = signalGenerator.HasSignal(
@@ -1039,6 +1082,9 @@ public:
mBullishScore += bullishScore;
mBearishScore += bearishScore;
//
mVolumeOSC += mConditions.vlmConditions.volume[1];
//
// Parse Conditions for Signal ...
bool hasSignal = signalGenerator.HasSignal(
@@ -1046,6 +1092,7 @@ public:
mSignal,
mPusher,
mProvider,
mUseSupport,
mAllowLong,
mAllowShort,
mVolume,
@@ -1098,6 +1145,9 @@ public:
mBullishScore += bullishScore;
mBearishScore += bearishScore;
//
mVolumeOSC += lConditions.vlmConditions.volume[1];
//
// Parse Conditions for Signal ...
bool hasSignal = signalGenerator.HasSignal(
@@ -1105,6 +1155,7 @@ public:
lSignal,
lPusher,
lProvider,
mUseSupport,
mAllowLong,
mAllowShort,
mVolume,
@@ -1157,6 +1208,9 @@ public:
mBullishScore += bullishScore;
mBearishScore += bearishScore;
//
mVolumeOSC += hConditions.vlmConditions.volume[1];
//
// Parse Conditions for Signal ...
bool hasSignal = signalGenerator.HasSignal(
@@ -1164,6 +1218,7 @@ public:
hSignal,
hPusher,
hProvider,
mUseSupport,
mAllowLong,
mAllowShort,
mVolume,
@@ -1188,113 +1243,276 @@ public:
//
// Current Signals ...
if (cPusher >= mReuiredSignalVerifications && cSignal.IsValid())
if (cSignal.IsValid())
{
//
AddRef(
cSignal,
signals //
);
bool isLong = IsLong(cSignal.type);
if (isLong)
{
mBullishSigns += cPusher;
}
else
{
mBearishSigns += cPusher;
}
//
AddNewSignal(
cPusher,
cSignal,
mBullishScore,
mBearishScore,
cConditions //
);
if (cPusher >= mReuiredSignalVerifications)
{
//
// Check Final Bullish and Bearish Score ...
bool isScorePassed =
//
IsLong(cSignal.type)
? mBullishScore > (mBearishScore * 2)
: mBearishScore > (mBullishScore * 2)
//
;
//
if (isScorePassed)
{
//
AddRef(
cSignal,
signals //
);
//
AddNewSignal(
cPusher,
cSignal,
mBullishScore,
mBearishScore,
cConditions //
);
}
}
}
//
// Short Signals ...
if (sPusher >= mReuiredSignalVerifications && sSignal.IsValid())
if (sSignal.IsValid())
{
//
AddRef(
sSignal,
signals //
);
bool isLong = IsLong(sSignal.type);
if (isLong)
{
mBullishSigns += sPusher;
}
else
{
mBearishSigns += sPusher;
}
//
AddNewSignal(
sPusher,
sSignal,
mBullishScore,
mBearishScore,
sConditions //
);
if (sPusher >= mReuiredSignalVerifications)
{
//
// Check Final Bullish and Bearish Score ...
bool isScorePassed =
//
IsLong(cSignal.type)
? mBullishScore > (mBearishScore * 2)
: mBearishScore > (mBullishScore * 2)
//
;
//
if (isScorePassed)
{
//
AddRef(
sSignal,
signals //
);
//
AddNewSignal(
sPusher,
sSignal,
mBullishScore,
mBearishScore,
sConditions //
);
}
}
}
//
// Medium Signals ...
if (mPusher >= mReuiredSignalVerifications && mSignal.IsValid())
if (mSignal.IsValid())
{
//
AddRef(
mSignal,
signals //
);
bool isLong = IsLong(mSignal.type);
if (isLong)
{
mBullishSigns += mPusher;
}
else
{
mBearishSigns += mPusher;
}
//
AddNewSignal(
mPusher,
mSignal,
mBullishScore,
mBearishScore,
mConditions //
);
if (mPusher >= mReuiredSignalVerifications)
{
//
// Check Final Bullish and Bearish Score ...
bool isScorePassed =
//
IsLong(cSignal.type)
? mBullishScore > (mBearishScore * 2)
: mBearishScore > (mBullishScore * 2)
//
;
//
if (isScorePassed)
{
//
AddRef(
mSignal,
signals //
);
//
AddNewSignal(
mPusher,
mSignal,
mBullishScore,
mBearishScore,
mConditions //
);
}
}
}
//
// Long Signals ...
if (lPusher >= mReuiredSignalVerifications && lSignal.IsValid())
if (lSignal.IsValid())
{
//
AddRef(
lSignal,
signals //
);
bool isLong = IsLong(lSignal.type);
if (isLong)
{
mBullishSigns += lPusher;
}
else
{
mBearishSigns += lPusher;
}
//
AddNewSignal(
lPusher,
lSignal,
mBullishScore,
mBearishScore,
lConditions //
);
if (lPusher >= mReuiredSignalVerifications)
{
//
// Check Final Bullish and Bearish Score ...
bool isScorePassed =
//
IsLong(cSignal.type)
? mBullishScore > (mBearishScore * 2)
: mBearishScore > (mBullishScore * 2)
//
;
//
if (isScorePassed)
{
//
AddRef(
lSignal,
signals //
);
//
AddNewSignal(
lPusher,
lSignal,
mBullishScore,
mBearishScore,
lConditions //
);
}
}
}
//
// Hind Signals ...
if (hPusher >= mReuiredSignalVerifications && hSignal.IsValid())
if (hSignal.IsValid())
{
//
AddRef(
hSignal,
signals //
);
bool isLong = IsLong(hSignal.type);
if (isLong)
{
mBullishSigns += hPusher;
}
else
{
mBearishSigns += hPusher;
}
//
AddNewSignal(
hPusher,
hSignal,
mBullishScore,
mBearishScore,
hConditions //
);
if (hPusher >= mReuiredSignalVerifications)
{
//
// Check Final Bullish and Bearish Score ...
bool isScorePassed =
//
IsLong(cSignal.type)
? mBullishScore > (mBearishScore * 2)
: mBearishScore > (mBullishScore * 2)
//
;
//
if (isScorePassed)
{
//
AddRef(
hSignal,
signals //
);
//
AddNewSignal(
hPusher,
hSignal,
mBullishScore,
mBearishScore,
hConditions //
);
}
}
}
}
//
if (mBullishScore == mBearishScore ||
mBullishScore < 10 ||
mBullishScore == 0 ||
mBullishScore > 200 ||
mBearishScore < 10 ||
mBearishScore == 0 ||
mBearishScore > 200)
{
//
// Print("Custom Scores ...");
}
//
// Create Score Summary for Commenting on Chart ...
string scoreSummary =
//
"Scores:" + separator +
"----------" + separator +
"Bullish: " + ToString(mBullishScore) + separator +
"Bearish: " + ToString(mBearishScore) + separator +
"Bullish Score: " + ToString(mBullishScore) + separator +
"Bullish Signs: " + ToString(mBullishSigns) + separator +
"----------" + separator +
"Bearish Score: " + ToString(mBearishScore) + separator +
"Bearish Signs: " + ToString(mBearishSigns) + separator +
"----------" + separator +
"Volume: " + ToString(mVolumeOSC) + separator +
"DrawDown: " + ToString(GetDrawdownPercent()) + "%" +
""
//
;
@@ -1446,6 +1664,10 @@ public:
// // Check EQM Orders and Handle Hedging ...
// DoEQMHedge();
//
// Handle Close All Positions on Specific Time ...
HandleEQMCloseOnSpecificTime();
//
// if Returns true, Signal Execution failed ...
return result;
@@ -1495,6 +1717,40 @@ protected:
//
// Tools ...
//
bool IsEnable()
{
return mAllowLong || mAllowShort;
}
//
bool CanCloseOnTime()
{
//
bool result = false;
//
result = mCloseOnSpecificTime >= 0 && mCloseOnSpecificTime <= 23;
if (!result)
{
return result;
}
//
MqlDateTime timeStruct;
result = TimeCurrent(timeStruct);
if (!result)
{
return result;
}
//
result = timeStruct.hour == mCloseOnSpecificTime;
//
return result;
}
//
// Private ...
private:
@@ -1507,10 +1763,12 @@ private:
double mVolume; // Volume
double mTPPoint; // TP Point
double mSLPoint; // SL Point
bool mUseSupport; // Use Support Signals
bool mIgnoreTP; // Ignore Calculated TP
bool mIgnoreSL; // Ignore Calculated SL
int mMaxAllowedTrades; // Max Alloed Positions
bool mCloseOnOpposit; // Close all Positions on Opposit
int mCloseOnSpecificTime; // Close All Trades in Specific Time
int mReuiredSignalVerifications; // Required Verifications for Validate Signals
//
@@ -1755,9 +2013,16 @@ private:
}
//
int mBullishSigns;
double mBullishScore;
//
int mBearishSigns;
double mBearishScore;
//
double mVolumeOSC;
//
XSCX121SetupCycles *mSetups[]; // Number of Setups
@@ -2041,6 +2306,43 @@ private:
Alert(message);
}
}
//
// Handle Close Trades on Specific Time ...
void HandleEQMCloseOnSpecificTime()
{
//
bool canClose = CanCloseOnTime();
if (!canClose)
{
return;
}
//
XPosition positions[];
int positionsCount = mTrader.GetPositions(positions);
if (!IsValidSize(positionsCount))
{
return;
}
//
string comment = XEQMSupportToken + " Close On Specific Time ...";
//
int closed = Close(
positions,
comment //
);
if (IsValidSize(closed))
{
//
string message = XEQMSupportToken + " Closed " + ToString(closed) + " Positions on Specified Time ...";
//
Alert(message);
}
}
};
//