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
+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()));
}
}
}
//