last works ...

This commit is contained in:
2024-05-20 18:57:56 +03:30
parent 88bb1a880f
commit 74ffc15d04
5 changed files with 258 additions and 68 deletions
+64 -1
View File
@@ -2781,8 +2781,12 @@ public:
{ {
// //
string mConditionsStr = mConditions.GenerateSummary(true); string mConditionsStr = mConditions.GenerateSummary(true);
//
string providerTypeStr = provider + "(" + (hasLong ? "Long" : "Short") + ")" + "\n";
mConditionsStr = providerTypeStr + "\n" + mConditionsStr;
mConditionsCollector.Add(mConditionsStr); mConditionsCollector.Add(mConditionsStr);
Print("Conditions: " + "\n" + mConditionsStr); Print(mConditionsStr);
} }
// //
@@ -94956,6 +94960,59 @@ private:
// //
// Tools ... // Tools ...
//
// Model Provider Descriptor ...
struct X5ProvierDescriptor
{
//
X5ProviderInputs inputs;
XSCX5Provider *provider;
//
XSignal signal;
X5MarketConditions conditions;
//
// Tools ...
//
// Cleanup ...
void Clean()
{
//
signal.Clean();
conditions.Clear();
}
//
// Check Signal ...
bool HasSignal(int barIndex = 0)
{
//
bool result = false;
//
result = inputs.IsValid();
if (!result)
{
return result;
}
//
// Clear Signal and Conditions ...
Clean();
//
result = provider.HasSignal(
barIndex,
signal,
conditions);
//
return result;
}
};
// //
void GetAllX5SignalProviders(ENUM_X5_SIGNAL_PROVIDERS &result[]) void GetAllX5SignalProviders(ENUM_X5_SIGNAL_PROVIDERS &result[])
{ {
@@ -94975,6 +95032,12 @@ void GetAllX5SignalProviders(ENUM_X5_SIGNAL_PROVIDERS &result[])
Add(XCHMAMX, result); Add(XCHMAMX, result);
} }
//
string ToString(ENUM_X5_SIGNAL_PROVIDERS value)
{
return EnumToString(value);
}
// //
ENUM_X5_SIGNAL_PROVIDERS ToX5SignalProvider(string content) ENUM_X5_SIGNAL_PROVIDERS ToX5SignalProvider(string content)
{ {
+156 -39
View File
@@ -24,15 +24,13 @@
// //
#include "../Libraries/x-saherelm.log.lib.mq5" #include "../Libraries/x-saherelm.log.lib.mq5"
#include "../Libraries/x-saherelm.draw.lib.mq5"
#include "../Libraries/x-saherelm.common.lib.mq5"
#include "../Classes/x-saherelm.xtrade.class.mq5"
#include "../Classes/x-saherelm.x5.provider.class.mq5" #include "../Classes/x-saherelm.x5.provider.class.mq5"
// //
// Inputs ... // Inputs ...
long x5EAMagicNumber = 78692110; // Magic Number long x5EAMagicNumber = 78692110; // Magic Number
int x5EASlippage = 10; // Slippgae int x5EASlippage = 10; // Slippgae
string x5EASymbols = "EURUSDb,USDCHFb,USDJPYb,XAUUSDb";
// //
double x5EAVolume = 0.01; double x5EAVolume = 0.01;
@@ -48,12 +46,13 @@ MqlTick x5EATick;
// //
// X5Provider ... // X5Provider ...
XSignal signal; XSignal signal;
X5ProviderInputs x5Inputs;
XSCX5Provider *x5Provider; //
X5MarketConditions conditions; X5ProvierDescriptor mProviderDescriptors[];
// //
// Event Handlers ... // Event Handlers ...
// //
// Initialization ... // Initialization ...
int OnInit() int OnInit()
@@ -79,42 +78,14 @@ int OnInit()
// //
logTag = ShortName; logTag = ShortName;
drawPrefix = ShortName;
// //
// Set Default and Validate X5Provider Inputs ... // Initial Providers ...
x5Inputs.Default(); if (!InitialProviders())
if (!x5Inputs.IsValid())
{ {
return INIT_PARAMETERS_INCORRECT; return INIT_PARAMETERS_INCORRECT;
} }
//
// Init X5Provider Class ...
x5Provider = new XSCX5Provider(
x5EASymbol,
x5EAPeriod
//
);
if (!x5Provider.Init(x5Inputs))
{
return INIT_PARAMETERS_INCORRECT;
}
//
// Enable Required Signallers and Types ...
x5Provider.SetSignalTypeState(
POSITION_TYPE_BUY,
true);
x5Provider.SetSignalTypeState(
POSITION_TYPE_SELL,
true);
//
ENUM_X5_SIGNAL_PROVIDERS providers[];
GetAllX5SignalProviders(providers);
x5Provider.SetSignalProviderStates(providers, true);
// //
// Init Succeed ... // Init Succeed ...
return INIT_SUCCEEDED; return INIT_SUCCEEDED;
@@ -152,9 +123,7 @@ void OnTick()
} }
// //
signal.Clean(); ProcessProvidersTick();
conditions.Clear();
x5Provider.HasSignal(1, signal, conditions);
} }
// //
@@ -178,3 +147,151 @@ bool X5EAValidateInputs()
// //
return result; return result;
} }
//
// Initialize Specific Providers ...
bool InitialProviders()
{
//
bool result = false;
//
// Here We Have to Initial 4 instance of X5Provider ...
// - EURUSD/M5;
// - USDCHF/M5;
// - USDJPY/M5;
// - XAUUSD/M5;
//
result = IsValid(x5EASymbols);
if (!result)
{
return result;
}
//
string symbols[];
int symbolsCount = SplitContent(
symbols,
x5EASymbols);
result = symbolsCount > 0;
if (!result)
{
return result;
}
//
// Define Signallers ...
ENUM_X5_SIGNAL_PROVIDERS signallers[];
GetAllX5SignalProviders(signallers);
//
for (int i = 0; i < symbolsCount; i++)
{
//
// Define Structure ...
X5ProvierDescriptor iDescriptor;
//
// Set Inputs to Default ...
iDescriptor.inputs.Default();
//
// Validate Inputs ...
bool isInputsValid = iDescriptor.inputs.IsValid();
if (!isInputsValid)
{
continue;
}
//
// Initialize Provider Class ...
iDescriptor.provider = new XSCX5Provider(
symbols[i],
PERIOD_M5 //
);
//
// Enable Required Signallers and Types ...
// TODO: add Support for TYPE Specifications ...
iDescriptor.provider
.SetSignalTypeState(
POSITION_TYPE_BUY,
true //
);
iDescriptor.provider
.SetSignalTypeState(
POSITION_TYPE_SELL,
true //
);
//
// Enable Required Signallers ...
iDescriptor.provider
.SetSignalProviderStates(signallers, true);
//
// Try to Initialize Provider Instance ...
bool isInitialized = iDescriptor.provider
.Init(iDescriptor.inputs);
if (!isInitialized)
{
continue;
}
//
// Add Prepared Descriptor to Collection ...
AddRef(
iDescriptor,
mProviderDescriptors
//
);
}
//
// Validate Result ...
result = ArraySize(mProviderDescriptors) == symbolsCount;
//
return result;
}
//
// Check Providers Signals ...
void ProcessProvidersTick()
{
//
// Here We Have to Check 4 instance of X5Provider for Signals ...
// - EURUSD/M5;
// - USDCHF/M5;
// - USDJPY/M5;
// - XAUUSD/M5;
//
int descriptorsCount = ArraySize(mProviderDescriptors);
if (descriptorsCount <= 0)
{
return;
}
//
int signalsCount = 0;
for (int i = 0; i < descriptorsCount; i++)
{
//
X5ProvierDescriptor iDescriptor = mProviderDescriptors[i];
//
bool iHasSignal = iDescriptor.HasSignal(0);
//
if (iHasSignal)
{
//
signalsCount++;
Print("Signal: " + iDescriptor.provider.GetSymbol() + ", " + ToString(iDescriptor.provider.GetPeriod()));
}
}
}
//
+15 -7
View File
@@ -36,12 +36,13 @@ struct XCCInputs
// //
// Chart Style ... // Chart Style ...
color upColor; // Up Color ENUM_CHART_MODE mode; // Mode
color downColor; // Down Color color upColor; // Up Color
color lineColor; // Line mode and Doji candlestick Color color downColor; // Down Color
color bearishColor; // Bullish Color color lineColor; // Line mode and Doji candlestick Color
color bullishColor; // Bearish Color color bearishColor; // Bullish Color
color volumesColor; // Volumes Color color bullishColor; // Bearish Color
color volumesColor; // Volumes Color
// //
// Presentation ... // Presentation ...
@@ -62,6 +63,9 @@ struct XCCInputs
// Clean ... // Clean ...
void Clean() void Clean()
{ {
//
mode = CHART_CANDLES;
// //
upColor = CLR_NONE; upColor = CLR_NONE;
downColor = CLR_NONE; downColor = CLR_NONE;
@@ -78,6 +82,9 @@ struct XCCInputs
// Default ... // Default ...
void Default() void Default()
{ {
//
mode = CHART_CANDLES;
// //
upColor = clrLime; upColor = clrLime;
downColor = clrRed; downColor = clrRed;
@@ -147,7 +154,7 @@ public:
bool Init( bool Init(
string symbol, // Trading Symbol string symbol, // Trading Symbol
ENUM_TIMEFRAMES period, // Trading Period ENUM_TIMEFRAMES period, // Trading Period
XCCInputs &inputs // Inputs XCCInputs &inputs // Inputs
) )
{ {
// //
@@ -177,6 +184,7 @@ public:
// //
// Chart Style ... // Chart Style ...
"", "",
mInputs.mode, // Mode
mInputs.upColor, // Up Color mInputs.upColor, // Up Color
mInputs.downColor, // Down Color mInputs.downColor, // Down Color
mInputs.lineColor, // Line mode and Doji candlestick Color mInputs.lineColor, // Line mode and Doji candlestick Color
+8 -6
View File
@@ -106,12 +106,13 @@ struct XChartStyle
// //
input group "Chart Style"; input group "Chart Style";
input color upColor = clrLime; // Up Color input ENUM_CHART_MODE mode = CHART_CANDLES; // Mode
input color downColor = clrRed; // Down Color input color upColor = clrLime; // Up Color
input color lineColor = clrLime; // Line mode and Doji candlestick Color input color downColor = clrRed; // Down Color
input color bearishColor = clrRed; // Bullish Color input color lineColor = clrLime; // Line mode and Doji candlestick Color
input color bullishColor = clrLime; // Bearish Color input color bearishColor = clrRed; // Bullish Color
input color volumesColor = clrGreen; // Volumes Color input color bullishColor = clrLime; // Bearish Color
input color volumesColor = clrGreen; // Volumes Color
// //
input group "Presentation"; input group "Presentation";
@@ -412,6 +413,7 @@ void ReadChartStyle()
chartStyle.volumesColor = (color)ChartGetInteger(chartId, CHART_COLOR_VOLUME); chartStyle.volumesColor = (color)ChartGetInteger(chartId, CHART_COLOR_VOLUME);
// //
chartStyle.mode = mode;
chartStyle.upColor = upColor; chartStyle.upColor = upColor;
chartStyle.downColor = downColor; chartStyle.downColor = downColor;
chartStyle.lineColor = lineColor; chartStyle.lineColor = lineColor;
+15 -15
View File
@@ -1022,7 +1022,7 @@ struct XOHCL
} }
// //
ENUM_SERIESMODE mode = swing == X_SWING_HIGH ENUM_SERIESMODE mMode = swing == X_SWING_HIGH
? MODE_HIGH ? MODE_HIGH
: MODE_LOW; : MODE_LOW;
@@ -1031,13 +1031,13 @@ struct XOHCL
? iHighest( ? iHighest(
symbol, symbol,
period, period,
mode, mMode,
mLength, mLength,
from) from)
: iLowest( : iLowest(
symbol, symbol,
period, period,
mode, mMode,
mLength, mLength,
from); from);
@@ -1049,7 +1049,7 @@ struct XOHCL
// Find Lowest Bar Index ... // Find Lowest Bar Index ...
int FindHighestIndex( int FindHighestIndex(
int mLength, // Loopback ... int mLength, // Loopback ...
ENUM_SERIESMODE mode // Calculation mode ENUM_SERIESMODE mMode // Calculation mode
) )
{ {
// //
@@ -1071,7 +1071,7 @@ struct XOHCL
result = iHighest( result = iHighest(
symbol, symbol,
period, period,
mode, mMode,
mLength, mLength,
Index()); Index());
@@ -1083,7 +1083,7 @@ struct XOHCL
// Find Lowest ... // Find Lowest ...
double FindHighest( double FindHighest(
int mLength, // Loopback ... int mLength, // Loopback ...
ENUM_SERIESMODE mode // Calculation mode ENUM_SERIESMODE mMode // Calculation mode
) )
{ {
// //
@@ -1098,7 +1098,7 @@ struct XOHCL
// //
int idx = FindHighestIndex( int idx = FindHighestIndex(
mLength, mLength,
mode); mMode);
if (idx <= -1) if (idx <= -1)
{ {
return result; return result;
@@ -1118,7 +1118,7 @@ struct XOHCL
} }
// //
result = iH.GetPrice(mode); result = iH.GetPrice(mMode);
// //
return result; return result;
@@ -1128,7 +1128,7 @@ struct XOHCL
// Find Lowest Bar Index ... // Find Lowest Bar Index ...
int FindLowestIndex( int FindLowestIndex(
int mLength, // Loopback ... int mLength, // Loopback ...
ENUM_SERIESMODE mode // Calculation mode ENUM_SERIESMODE mMode // Calculation mode
) )
{ {
// //
@@ -1150,7 +1150,7 @@ struct XOHCL
result = iLowest( result = iLowest(
symbol, symbol,
period, period,
mode, mMode,
mLength, mLength,
Index()); Index());
@@ -1162,7 +1162,7 @@ struct XOHCL
// Find Lowest ... // Find Lowest ...
double FindLowest( double FindLowest(
int mLength, // Loopback ... int mLength, // Loopback ...
ENUM_SERIESMODE mode // Calculation mode ENUM_SERIESMODE mMode // Calculation mode
) )
{ {
// //
@@ -1177,7 +1177,7 @@ struct XOHCL
// //
int idx = FindLowestIndex( int idx = FindLowestIndex(
mLength, mLength,
mode); mMode);
if (idx <= -1) if (idx <= -1)
{ {
return result; return result;
@@ -1197,7 +1197,7 @@ struct XOHCL
} }
// //
result = iL.GetPrice(mode); result = iL.GetPrice(mMode);
// //
return result; return result;
@@ -3069,14 +3069,14 @@ double PointToPrice(
// //
// Converts Series Mode to XPRICE ... // Converts Series Mode to XPRICE ...
ENUM_X_PRICE ToPrice( ENUM_X_PRICE ToPrice(
ENUM_SERIESMODE mode // Specified Series Mode ... ENUM_SERIESMODE mMode // Specified Series Mode ...
) )
{ {
// //
ENUM_X_PRICE result = X_PRICE_CLOSE; ENUM_X_PRICE result = X_PRICE_CLOSE;
// //
switch (mode) switch (mMode)
{ {
// //
// High ... // High ...