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 providerTypeStr = provider + "(" + (hasLong ? "Long" : "Short") + ")" + "\n";
mConditionsStr = providerTypeStr + "\n" + mConditionsStr;
mConditionsCollector.Add(mConditionsStr);
Print("Conditions: " + "\n" + mConditionsStr);
Print(mConditionsStr);
}
//
@@ -94956,6 +94960,59 @@ private:
//
// 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[])
{
@@ -94975,6 +95032,12 @@ void GetAllX5SignalProviders(ENUM_X5_SIGNAL_PROVIDERS &result[])
Add(XCHMAMX, result);
}
//
string ToString(ENUM_X5_SIGNAL_PROVIDERS value)
{
return EnumToString(value);
}
//
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.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"
//
// Inputs ...
long x5EAMagicNumber = 78692110; // Magic Number
int x5EASlippage = 10; // Slippgae
string x5EASymbols = "EURUSDb,USDCHFb,USDJPYb,XAUUSDb";
//
double x5EAVolume = 0.01;
@@ -48,12 +46,13 @@ MqlTick x5EATick;
//
// X5Provider ...
XSignal signal;
X5ProviderInputs x5Inputs;
XSCX5Provider *x5Provider;
X5MarketConditions conditions;
//
X5ProvierDescriptor mProviderDescriptors[];
//
// Event Handlers ...
//
// Initialization ...
int OnInit()
@@ -79,42 +78,14 @@ int OnInit()
//
logTag = ShortName;
drawPrefix = ShortName;
//
// Set Default and Validate X5Provider Inputs ...
x5Inputs.Default();
if (!x5Inputs.IsValid())
// Initial Providers ...
if (!InitialProviders())
{
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 ...
return INIT_SUCCEEDED;
@@ -152,9 +123,7 @@ void OnTick()
}
//
signal.Clean();
conditions.Clear();
x5Provider.HasSignal(1, signal, conditions);
ProcessProvidersTick();
}
//
@@ -178,3 +147,151 @@ bool X5EAValidateInputs()
//
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 ...
color upColor; // Up Color
color downColor; // Down Color
color lineColor; // Line mode and Doji candlestick Color
color bearishColor; // Bullish Color
color bullishColor; // Bearish Color
color volumesColor; // Volumes Color
ENUM_CHART_MODE mode; // Mode
color upColor; // Up Color
color downColor; // Down Color
color lineColor; // Line mode and Doji candlestick Color
color bearishColor; // Bullish Color
color bullishColor; // Bearish Color
color volumesColor; // Volumes Color
//
// Presentation ...
@@ -62,6 +63,9 @@ struct XCCInputs
// Clean ...
void Clean()
{
//
mode = CHART_CANDLES;
//
upColor = CLR_NONE;
downColor = CLR_NONE;
@@ -78,6 +82,9 @@ struct XCCInputs
// Default ...
void Default()
{
//
mode = CHART_CANDLES;
//
upColor = clrLime;
downColor = clrRed;
@@ -147,7 +154,7 @@ public:
bool Init(
string symbol, // Trading Symbol
ENUM_TIMEFRAMES period, // Trading Period
XCCInputs &inputs // Inputs
XCCInputs &inputs // Inputs
)
{
//
@@ -177,6 +184,7 @@ public:
//
// Chart Style ...
"",
mInputs.mode, // Mode
mInputs.upColor, // Up Color
mInputs.downColor, // Down Color
mInputs.lineColor, // Line mode and Doji candlestick Color
+8 -6
View File
@@ -106,12 +106,13 @@ struct XChartStyle
//
input group "Chart Style";
input color upColor = clrLime; // Up Color
input color downColor = clrRed; // Down Color
input color lineColor = clrLime; // Line mode and Doji candlestick Color
input color bearishColor = clrRed; // Bullish Color
input color bullishColor = clrLime; // Bearish Color
input color volumesColor = clrGreen; // Volumes Color
input ENUM_CHART_MODE mode = CHART_CANDLES; // Mode
input color upColor = clrLime; // Up Color
input color downColor = clrRed; // Down Color
input color lineColor = clrLime; // Line mode and Doji candlestick Color
input color bearishColor = clrRed; // Bullish Color
input color bullishColor = clrLime; // Bearish Color
input color volumesColor = clrGreen; // Volumes Color
//
input group "Presentation";
@@ -412,6 +413,7 @@ void ReadChartStyle()
chartStyle.volumesColor = (color)ChartGetInteger(chartId, CHART_COLOR_VOLUME);
//
chartStyle.mode = mode;
chartStyle.upColor = upColor;
chartStyle.downColor = downColor;
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_LOW;
@@ -1031,13 +1031,13 @@ struct XOHCL
? iHighest(
symbol,
period,
mode,
mMode,
mLength,
from)
: iLowest(
symbol,
period,
mode,
mMode,
mLength,
from);
@@ -1049,7 +1049,7 @@ struct XOHCL
// Find Lowest Bar Index ...
int FindHighestIndex(
int mLength, // Loopback ...
ENUM_SERIESMODE mode // Calculation mode
ENUM_SERIESMODE mMode // Calculation mode
)
{
//
@@ -1071,7 +1071,7 @@ struct XOHCL
result = iHighest(
symbol,
period,
mode,
mMode,
mLength,
Index());
@@ -1083,7 +1083,7 @@ struct XOHCL
// Find Lowest ...
double FindHighest(
int mLength, // Loopback ...
ENUM_SERIESMODE mode // Calculation mode
ENUM_SERIESMODE mMode // Calculation mode
)
{
//
@@ -1098,7 +1098,7 @@ struct XOHCL
//
int idx = FindHighestIndex(
mLength,
mode);
mMode);
if (idx <= -1)
{
return result;
@@ -1118,7 +1118,7 @@ struct XOHCL
}
//
result = iH.GetPrice(mode);
result = iH.GetPrice(mMode);
//
return result;
@@ -1128,7 +1128,7 @@ struct XOHCL
// Find Lowest Bar Index ...
int FindLowestIndex(
int mLength, // Loopback ...
ENUM_SERIESMODE mode // Calculation mode
ENUM_SERIESMODE mMode // Calculation mode
)
{
//
@@ -1150,7 +1150,7 @@ struct XOHCL
result = iLowest(
symbol,
period,
mode,
mMode,
mLength,
Index());
@@ -1162,7 +1162,7 @@ struct XOHCL
// Find Lowest ...
double FindLowest(
int mLength, // Loopback ...
ENUM_SERIESMODE mode // Calculation mode
ENUM_SERIESMODE mMode // Calculation mode
)
{
//
@@ -1177,7 +1177,7 @@ struct XOHCL
//
int idx = FindLowestIndex(
mLength,
mode);
mMode);
if (idx <= -1)
{
return result;
@@ -1197,7 +1197,7 @@ struct XOHCL
}
//
result = iL.GetPrice(mode);
result = iL.GetPrice(mMode);
//
return result;
@@ -3069,14 +3069,14 @@ double PointToPrice(
//
// Converts Series Mode to XPRICE ...
ENUM_X_PRICE ToPrice(
ENUM_SERIESMODE mode // Specified Series Mode ...
ENUM_SERIESMODE mMode // Specified Series Mode ...
)
{
//
ENUM_X_PRICE result = X_PRICE_CLOSE;
//
switch (mode)
switch (mMode)
{
//
// High ...