last works on strategies ...

This commit is contained in:
2024-07-12 23:58:17 +03:30
parent 721c3ec5fc
commit f3118b226e
4 changed files with 260 additions and 24 deletions
+215 -20
View File
@@ -44,7 +44,7 @@ XSCXCTHelper *mCTHelper;
XSCXCCHelper *mCCHelper; XSCXCCHelper *mCCHelper;
// //
XSCXSRBRStrategy *strategy; XSCBaseStrategy *strategies[];
// //
// Event Handlers ... // Event Handlers ...
@@ -66,7 +66,8 @@ int OnInit()
} }
// //
EventSetTimer(1); // EventSetTimer(1);
// EventSetMillisecondTimer(100);
// //
// Init Succeed ... // Init Succeed ...
@@ -95,14 +96,17 @@ void OnDeinit(const int reason)
delete mCCHelper; delete mCCHelper;
// //
EventKillTimer(); // EventKillTimer();
//
Clean(strategies);
} }
// //
// On Tick Handler ... // On Tick Handler ...
void OnTick() void OnTick()
{ {
// HandleStrategiesOnTick();
} }
// //
@@ -110,13 +114,14 @@ void OnTick()
void OnTimer() void OnTimer()
{ {
// //
strategy.HandleTick(); // HandleStrategiesOnTick();
} }
// //
// Custom Functions ... // Custom Functions ...
// //
// Validate Inputs ...
bool ValidateInputs() bool ValidateInputs()
{ {
// //
@@ -130,6 +135,7 @@ bool ValidateInputs()
} }
// //
// Initialize all Requirements ...
bool InitialEA() bool InitialEA()
{ {
// //
@@ -166,26 +172,215 @@ bool InitialEA()
} }
// //
strategy = new XSCXSRBRStrategy( XSymbolParser symbolParser;
_Symbol,
_Period, //
eaVolume, bool drawAreas = false;
1.5, // R2R ...
mSlippage, //
mMagicNumber + 1, // EURUSD ...
eaAllowLong, string eurusdSymbol = "EURUSDb"; // symbolParser.GetEURUSDSymbol();
eaAllowShort, if (IsValid(eurusdSymbol))
0, // Max Longs {
0 // Max Shorts //
); // MAGIC NUMBER ...
strategy.SetAlertLogAlerts(true); long magicNumber = mMagicNumber + 1;
strategy.SetAlertEnableAlerts(true);
strategy.DarwSupportAndResistances(true); // //
// // Register XSRBR on EURUSD in M5 ...
// XSCXSRBRStrategy *eurusdM5SRBRStrategy;
// eurusdM5SRBRStrategy = new XSCXSRBRStrategy(
// eurusdSymbol,
// PERIOD_M5,
// eaVolume,
// 1.5, // R2R ...
// mSlippage,
// magicNumber,
// eaAllowLong,
// eaAllowShort,
// 0, // Max Longs
// 0 // Max Shorts
// );
// eurusdM5SRBRStrategy.SetAlertLogAlerts(true);
// eurusdM5SRBRStrategy.SetAlertEnableAlerts(true);
// eurusdM5SRBRStrategy.DarwSupportAndResistances(drawAreas);
// RegisterStrategy(eurusdM5SRBRStrategy);
// //
// // Register XSRBR on EURUSD in M10 ...
// XSCXSRBRStrategy *eurusdM10SRBRStrategy;
// eurusdM10SRBRStrategy = new XSCXSRBRStrategy(
// eurusdSymbol,
// PERIOD_M10,
// eaVolume,
// 1.5, // R2R ...
// mSlippage,
// magicNumber,
// eaAllowLong,
// eaAllowShort,
// 0, // Max Longs
// 0 // Max Shorts
// );
// eurusdM10SRBRStrategy.SetAlertLogAlerts(true);
// eurusdM10SRBRStrategy.SetAlertEnableAlerts(true);
// eurusdM10SRBRStrategy.DarwSupportAndResistances(drawAreas);
// RegisterStrategy(eurusdM10SRBRStrategy);
}
// //
// // XAUUSD ...
// string xauusdSymbol = "XAUUSDb";
// if (IsValid(xauusdSymbol))
// {
// //
// // MAGIC NUMBER ...
// long magicNumber = mMagicNumber + 2;
// //
// // Register XSRBR on XAUUSD in M5 ...
// XSCXSRBRStrategy *xauusdM5SRBRStrategy;
// xauusdM5SRBRStrategy = new XSCXSRBRStrategy(
// xauusdSymbol,
// PERIOD_M15,
// eaVolume,
// 1.5, // R2R ...
// mSlippage,
// magicNumber,
// eaAllowLong,
// eaAllowShort,
// 0, // Max Longs
// 0 // Max Shorts
// );
// xauusdM5SRBRStrategy.SetAlertLogAlerts(true);
// xauusdM5SRBRStrategy.SetAlertEnableAlerts(true);
// xauusdM5SRBRStrategy.DarwSupportAndResistances(drawAreas);
// RegisterStrategy(xauusdM5SRBRStrategy);
// }
//
// GBPUSD ...
string gbpusdSymbol = "GBPUSDb";
if (IsValid(gbpusdSymbol))
{
//
// MAGIC NUMBER ...
long magicNumber = mMagicNumber + 3;
// //
// // Register XSRBR on XAUUSD in M5 ...
// XSCXSRBRStrategy *gbpusdM15SRBRStrategy;
// gbpusdM15SRBRStrategy = new XSCXSRBRStrategy(
// gbpusdSymbol,
// PERIOD_M15,
// eaVolume,
// 1.5, // R2R ...
// mSlippage,
// magicNumber,
// eaAllowLong,
// eaAllowShort,
// 0, // Max Longs
// 0 // Max Shorts
// );
// gbpusdM15SRBRStrategy.SetAlertLogAlerts(true);
// gbpusdM15SRBRStrategy.SetAlertEnableAlerts(true);
// gbpusdM15SRBRStrategy.DarwSupportAndResistances(drawAreas);
// RegisterStrategy(gbpusdM15SRBRStrategy);
//
// Register XSRBR on XAUUSD in M5 ...
// XSCXSRBRStrategy *gbpusdM30SRBRStrategy;
// gbpusdM30SRBRStrategy = new XSCXSRBRStrategy(
// gbpusdSymbol,
// PERIOD_M30,
// eaVolume,
// 1.5, // R2R ...
// mSlippage,
// magicNumber,
// eaAllowLong,
// eaAllowShort,
// 0, // Max Longs
// 0 // Max Shorts
// );
// gbpusdM30SRBRStrategy.SetAlertLogAlerts(true);
// gbpusdM30SRBRStrategy.SetAlertEnableAlerts(true);
// gbpusdM30SRBRStrategy.DarwSupportAndResistances(drawAreas);
// RegisterStrategy(gbpusdM30SRBRStrategy);
}
//
// USDJPY ...
string usdjpySymbol = "USDJPYb";
if (IsValid(usdjpySymbol))
{
//
// MAGIC NUMBER ...
long magicNumber = mMagicNumber + 3;
//
// Register XSRBR on XAUUSD in M5 ...
XSCXSRBRStrategy *usdjpyM5SRBRStrategy;
usdjpyM5SRBRStrategy = new XSCXSRBRStrategy(
usdjpySymbol,
PERIOD_M5,
eaVolume,
1.5, // R2R ...
mSlippage,
magicNumber,
eaAllowLong,
eaAllowShort,
0, // Max Longs
0 // Max Shorts
);
usdjpyM5SRBRStrategy.SetAlertLogAlerts(true);
usdjpyM5SRBRStrategy.SetAlertEnableAlerts(true);
usdjpyM5SRBRStrategy.DarwSupportAndResistances(drawAreas);
RegisterStrategy(usdjpyM5SRBRStrategy);
}
// //
return result; return result;
} }
//
// Register Strategy ...
void RegisterStrategy(XSCBaseStrategy *strategy)
{
//
if (strategy == NULL)
{
return;
}
//
ArrayResize(
strategies,
ArraySize(strategies) + 1 //
);
//
strategies[ArraySize(strategies) - 1] = strategy;
}
//
// Call All Registered Strategis Tick Handler Functions ...
void HandleStrategiesOnTick()
{
//
int count = ArraySize(strategies);
if (!IsValidSize(count))
{
return;
}
//
for (int i = 0; i < count; i++)
{
//
// Call Tick Handler Function ...
strategies[i].HandleTick();
}
}
// //
// Custom Testing Functions ... // Custom Testing Functions ...
+35 -1
View File
@@ -2075,7 +2075,7 @@ struct XBarTracker
int CountBars() int CountBars()
{ {
// //
return Bars( return iBars(
symbol, symbol,
period period
// //
@@ -2958,6 +2958,9 @@ struct XSymbolParser
// //
// Forext ... // Forext ...
//
// Symbol Parsing ...
// //
bool IsEURUSD(string symbol) bool IsEURUSD(string symbol)
{ {
@@ -3245,6 +3248,37 @@ struct XSymbolParser
// //
return result; return result;
} }
//
// Symbol Finder ...
string GetEURUSDSymbol() {
//
string result = NULL;
//
string symbols[];
int symbolsCount = GetAllSymbols(
symbols //
);
if (!IsValidSize(symbolsCount)) {
return result;
}
//
for (int i = 0; i < symbolsCount; i++) {
//
string iSymbol = symbols[i];
if (IsEURUSD(iSymbol)) {
//
result = iSymbol;
break;
}
}
//
return result;
}
}; };
// //
+8 -2
View File
@@ -503,10 +503,12 @@ struct XPivot
// //
bool isSupport; bool isSupport;
int supportLength;
datetime supportTime; datetime supportTime;
// //
bool isResistance; bool isResistance;
int resistanceLength;
datetime resistanceTime; datetime resistanceTime;
// //
@@ -598,7 +600,7 @@ struct XPivot
_symbol, _symbol,
_period // _period //
); );
int maxAllowedBars = bars - 500; int maxAllowedBars = bars / 10;
int currentLength = _supResVerificationsStep; int currentLength = _supResVerificationsStep;
// //
@@ -659,6 +661,7 @@ struct XPivot
{ {
// //
supportTime = llBar.time; supportTime = llBar.time;
supportLength = currentLength;
break; break;
} }
} }
@@ -751,7 +754,7 @@ struct XPivot
_symbol, _symbol,
_period // _period //
); );
int maxAllowedBars = bars - 500; int maxAllowedBars = bars / 10;
int currentLength = _supResVerificationsStep; int currentLength = _supResVerificationsStep;
// //
@@ -812,6 +815,7 @@ struct XPivot
{ {
// //
resistanceTime = hhBar.time; resistanceTime = hhBar.time;
resistanceLength = currentLength;
break; break;
} }
} }
@@ -1294,6 +1298,8 @@ struct XPivot
price = 0; price = 0;
// //
supportLength = 0;
resistanceLength = 0;
breakedAsSupport = 0; breakedAsSupport = 0;
rejectedAsSupport = 0; rejectedAsSupport = 0;
breakedAsResistance = 0; breakedAsResistance = 0;
+2 -1
View File
@@ -180,7 +180,8 @@ public:
); );
// //
if (!result) if (!result ||
(!trendDetector.isUpTrend && !trendDetector.isDownTrend))
{ {
// //
trendDetector.Clean(); trendDetector.Clean();