This commit is contained in:
2024-07-27 15:59:01 +03:30
parent c0c4714545
commit 37b9578ba1
6 changed files with 3525 additions and 1092 deletions
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+38 -5
View File
@@ -43,23 +43,29 @@ double eaAllowLong = true; // Allow Long Positions
double eaAllowShort = true; // Allow Short Positions
//
int eaMaxAllowedLongs = 0; // Max Allowed Long Positions
int eaMaxAllowedShorts = 0; // Max Allowed Short Positions
int eaMaxAllowedLongs = 1; // Max Allowed Long Positions
int eaMaxAllowedShorts = 1; // Max Allowed Short Positions
//
input double eaTPPoint = 200; // Static TP Point
input double eaTPPoint = 100; // Static TP Point
input double eaSLPoint = 100; // Static SL Point
//
bool eaIgnoreTP = false; // Ignore TP
bool eaIgnoreSL = false; // Ignore SL
//
int eaMaxAllowedSLsInDay = 2;
//
double eaR2R = 1.5; // Risk to Reward Ratio
//
// Variables ...
//
int mNumberOfSLs = 0;
//
// Bar Style nad Time Instances ...
XSCXCTHelper *mCTHelper;
@@ -73,6 +79,9 @@ XSCBaseStrategy *strategies[];
// Trader Instance Class ...
XSCTrade *eaTrader;
//
XTimeTracker eaTimeTracker;
//
// Alert Class ...
XSCAlert *eaAlert;
@@ -167,7 +176,14 @@ void OnTrade()
// On Timer ...
void OnTimer()
{
//
HandleTradeState();
//
if (eaTimeTracker.IsNewDay())
{
mNumberOfSLs = 0;
}
}
//
@@ -359,6 +375,7 @@ bool InitialEA()
eurusdXCHKMStrategy = new XSCXCHKMStrategy(
eurusdSymbol,
PERIOD_M5,
PERIOD_H1, // Analyzing Period
eaVolume,
eaR2R, // R2R ...
eaSlippage,
@@ -387,17 +404,18 @@ bool InitialEA()
xchmStrategy = new XSCXCHKMStrategy(
_Symbol,
_Period,
PERIOD_H1, // Analyzing Period
eaVolume,
eaR2R, // R2R ...
eaSlippage,
eaMagicNumber,
true, // Ignore Signal Execution
false, // Use TP SL Point
true, // Use TP SL Point
false, // Use Max
eaTPPoint, // TP
eaSLPoint, // SL
eaIgnoreTP,
false, // eaIgnoreSL,
true, // eaIgnoreSL,
eaAllowLong,
eaAllowShort,
eaMaxAllowedLongs, // Max Longs
@@ -503,6 +521,13 @@ void OnSignalRecieved(XSignal &signal)
return;
}
//
if (eaMaxAllowedSLsInDay > 0 &&
mNumberOfSLs >= eaMaxAllowedSLsInDay)
{
return;
}
//
ENUM_X_SIGNAL_EXECUTION_RESULT state;
bool isExecuted = eaTrader.ExecuteSignal(
@@ -564,13 +589,21 @@ void OnSignalRecieved(XSignal &signal)
//
void OnStopLossTriggered(const XDeal &deal)
{
//
// Finish ...
eaTradeHandler.Finish(deal);
//
if (deal.profit < 0)
{
mNumberOfSLs++;
}
}
//
void OnTakeProfitTriggered(const XDeal &deal)
{
//
// Finish ...
eaTradeHandler.Finish(deal);
}
+4 -4
View File
@@ -4055,7 +4055,7 @@ public:
//
for (int i = 0; i < barsCount; i++)
{
result = bars[i].GetBody();
result += bars[i].GetBody();
}
//
@@ -4084,7 +4084,7 @@ public:
//
for (int i = 0; i < barsCount; i++)
{
result = bars[i].GetBody();
result += bars[i].GetBody();
}
//
@@ -4115,7 +4115,7 @@ public:
//
for (int i = 0; i < barsCount; i++)
{
result = bars[i].GetBody();
result += bars[i].GetBody();
}
//
@@ -4146,7 +4146,7 @@ public:
//
for (int i = 0; i < barsCount; i++)
{
result = bars[i].GetBody();
result += bars[i].GetBody();
}
//
+66 -66
View File
@@ -1165,7 +1165,7 @@ struct XOHCL
//
bool IsSharpBullish(
int _loopback = 2,
int __loopback = 2,
double _sharpRatio = 2.5 //
)
{
@@ -1180,9 +1180,9 @@ struct XOHCL
}
//
if (_loopback < 0)
if (__loopback < 0)
{
_loopback = 2;
__loopback = 2;
}
//
@@ -1193,11 +1193,11 @@ struct XOHCL
//
int hIDX = FindHighestIndex(
_loopback,
__loopback,
MODE_HIGH //
);
int lIDX = FindLowestIndex(
_loopback,
__loopback,
MODE_LOW //
);
@@ -1245,13 +1245,13 @@ struct XOHCL
//
int hhIDX = hBar.FindHighestIndex(
_loopback,
__loopback,
MODE_HIGH //
);
//
int llIDX = lBar.FindLowestIndex(
_loopback,
__loopback,
MODE_LOW //
);
@@ -1297,7 +1297,7 @@ struct XOHCL
//
bool IsSharpBearish(
int _loopback = 2,
int __loopback = 2,
double _sharpRatio = 2.5 //
)
{
@@ -1312,9 +1312,9 @@ struct XOHCL
}
//
if (_loopback < 0)
if (__loopback < 0)
{
_loopback = 2;
__loopback = 2;
}
//
@@ -1325,11 +1325,11 @@ struct XOHCL
//
int hIDX = FindHighestIndex(
_loopback,
__loopback,
MODE_HIGH //
);
int lIDX = FindLowestIndex(
_loopback,
__loopback,
MODE_LOW //
);
@@ -1377,13 +1377,13 @@ struct XOHCL
//
int hhIDX = hBar.FindHighestIndex(
_loopback,
__loopback,
MODE_HIGH //
);
//
int llIDX = lBar.FindLowestIndex(
_loopback,
__loopback,
MODE_LOW //
);
@@ -1588,7 +1588,7 @@ struct XOHCL
//
// Retrieve Bullish Pressure ...
double GetBullishPressure(
int _loopback = 7 //
int __loopback = 7 //
)
{
//
@@ -1607,7 +1607,7 @@ struct XOHCL
symbol,
period,
Index(),
_loopback //
__loopback //
);
if (!IsValidSize(barsCount))
{
@@ -1627,7 +1627,7 @@ struct XOHCL
//
// Retrieve Bearish Pressure ...
double GetBearishPressure(
int _loopback = 7 //
int __loopback = 7 //
)
{
//
@@ -1646,7 +1646,7 @@ struct XOHCL
symbol,
period,
Index(),
_loopback //
__loopback //
);
if (!IsValidSize(barsCount))
{
@@ -1665,21 +1665,21 @@ struct XOHCL
//
bool HasBullishPressure(
int _loopback = 7 //
int __loopback = 7 //
)
{
//
bool result = false;
//
if (_loopback < 0)
if (__loopback < 0)
{
_loopback = 7;
__loopback = 7;
}
//
double bullishPressure = GetBullishPressure(_loopback);
double bearishPressure = GetBearishPressure(_loopback);
double bullishPressure = GetBullishPressure(__loopback);
double bearishPressure = GetBearishPressure(__loopback);
//
result =
@@ -1696,21 +1696,21 @@ struct XOHCL
//
bool HasBearishPressure(
int _loopback = 7 //
int __loopback = 7 //
)
{
//
bool result = false;
//
if (_loopback < 0)
if (__loopback < 0)
{
_loopback = 7;
__loopback = 7;
}
//
double bullishPressure = GetBullishPressure(_loopback);
double bearishPressure = GetBearishPressure(_loopback);
double bullishPressure = GetBullishPressure(__loopback);
double bearishPressure = GetBearishPressure(__loopback);
//
result =
@@ -1728,7 +1728,7 @@ struct XOHCL
//
// Retrieve Bullish Power ...
double GetBullishPower(
int _loopback = 7 //
int __loopback = 7 //
)
{
//
@@ -1747,7 +1747,7 @@ struct XOHCL
symbol,
period,
Index(),
_loopback //
__loopback //
);
if (!IsValidSize(barsCount))
{
@@ -1771,7 +1771,7 @@ struct XOHCL
//
// Retrieve Bearish Pressure ...
double GetBearishPower(
int _loopback = 7 //
int __loopback = 7 //
)
{
//
@@ -1790,7 +1790,7 @@ struct XOHCL
symbol,
period,
Index(),
_loopback //
__loopback //
);
if (!IsValidSize(barsCount))
{
@@ -1813,21 +1813,21 @@ struct XOHCL
//
bool HasBullishPower(
int _loopback = 7 //
int __loopback = 7 //
)
{
//
bool result = false;
//
if (_loopback < 0)
if (__loopback < 0)
{
_loopback = 7;
__loopback = 7;
}
//
double bullishPressure = GetBullishPower(_loopback);
double bearishPressure = GetBearishPower(_loopback);
double bullishPressure = GetBullishPower(__loopback);
double bearishPressure = GetBearishPower(__loopback);
//
result =
@@ -1844,21 +1844,21 @@ struct XOHCL
//
bool HasBearishPower(
int _loopback = 7 //
int __loopback = 7 //
)
{
//
bool result = false;
//
if (_loopback < 0)
if (__loopback < 0)
{
_loopback = 7;
__loopback = 7;
}
//
double bullishPressure = GetBullishPower(_loopback);
double bearishPressure = GetBearishPower(_loopback);
double bullishPressure = GetBullishPower(__loopback);
double bearishPressure = GetBearishPower(__loopback);
//
result =
@@ -3114,7 +3114,7 @@ struct XOHCL
bool HasSupport(
XOHCL &bar,
ENUM_X_PRICE type = X_PRICE_CLOSE,
int loopback = 21,
int _loopback = 21,
int tries = 100 //
)
{
@@ -3125,9 +3125,9 @@ struct XOHCL
bar.Clean();
//
if (loopback < 0)
if (_loopback < 0)
{
loopback = 21;
_loopback = 21;
}
//
@@ -3150,11 +3150,11 @@ struct XOHCL
for (int i = 1; i < tries; i++)
{
//
int length = loopback * i;
int _length = _loopback * i;
//
int lowestIDX = FindLowestIndex(
length,
_length,
MODE_LOW //
);
result = IsValidSize(lowestIDX);
@@ -3198,7 +3198,7 @@ struct XOHCL
bool HasResistance(
XOHCL &bar,
ENUM_X_PRICE type = X_PRICE_CLOSE,
int loopback = 21,
int _loopback = 21,
int tries = 100 //
)
{
@@ -3209,9 +3209,9 @@ struct XOHCL
bar.Clean();
//
if (loopback < 0)
if (_loopback < 0)
{
loopback = 21;
_loopback = 21;
}
//
@@ -3234,11 +3234,11 @@ struct XOHCL
for (int i = 1; i < tries; i++)
{
//
int length = loopback * i;
int _length = _loopback * i;
//
int highestIDX = FindHighestIndex(
length,
_length,
MODE_LOW //
);
result = IsValidSize(highestIDX);
@@ -3286,7 +3286,7 @@ struct XOHCL
XOHCL &highSwingBars[],
XOHCL &lowSwingBars[],
bool forceMethod2 = false,
int loopback = 3,
int _loopback = 3,
int tries = 3,
ENUM_X_PRICE type = X_PRICE_CLOSE //
)
@@ -3323,7 +3323,7 @@ struct XOHCL
symbol,
period,
X_SWING_HIGH,
loopback,
_loopback,
lastIDX //
);
result = IsValidIndex(iHIDX);
@@ -3376,7 +3376,7 @@ struct XOHCL
symbol,
period,
X_SWING_LOW,
loopback,
_loopback,
lastIDX //
);
result = IsValidIndex(iLIDX);
@@ -3429,12 +3429,12 @@ struct XOHCL
else
{
//
int length = i * loopback;
int _length = i * _loopback;
int start =
//
i == 1
? 1
: length - loopback
: _length - _loopback
//
;
@@ -3443,7 +3443,7 @@ struct XOHCL
symbol,
period,
MODE_HIGH,
loopback,
_loopback,
start //
);
result = IsValidIndex(iHIDX);
@@ -3496,7 +3496,7 @@ struct XOHCL
symbol,
period,
MODE_LOW,
loopback,
_loopback,
start //
);
result = IsValidIndex(iLIDX);
@@ -3576,7 +3576,7 @@ struct XOHCL
XOHCL &highSwingBars[],
XOHCL &lowSwingBars[],
bool forceMethod2 = false,
int loopback = 3,
int _loopback = 3,
int tries = 3,
ENUM_X_PRICE type = X_PRICE_CLOSE //
)
@@ -3613,7 +3613,7 @@ struct XOHCL
symbol,
period,
X_SWING_HIGH,
loopback,
_loopback,
lastIDX //
);
result = IsValidIndex(iHIDX);
@@ -3666,7 +3666,7 @@ struct XOHCL
symbol,
period,
X_SWING_LOW,
loopback,
_loopback,
lastIDX //
);
result = IsValidIndex(iLIDX);
@@ -3719,12 +3719,12 @@ struct XOHCL
else
{
//
int length = i * loopback;
int _length = i * _loopback;
int start =
//
i == 1
? 1
: length - loopback
: _length - _loopback
//
;
@@ -3733,7 +3733,7 @@ struct XOHCL
symbol,
period,
MODE_HIGH,
loopback,
_loopback,
start //
);
result = IsValidIndex(iHIDX);
@@ -3786,7 +3786,7 @@ struct XOHCL
symbol,
period,
MODE_LOW,
loopback,
_loopback,
start //
);
result = IsValidIndex(iLIDX);
File diff suppressed because it is too large Load Diff