263 lines
4.9 KiB
Plaintext
263 lines
4.9 KiB
Plaintext
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// SaherElm IT Center MQL5 XTS Indicator Helper for Signal Providers
|
|
// --------------------------------------------------------------------------
|
|
//
|
|
// Maintainer:
|
|
// ------------
|
|
// Hadi Khazaee Asl (hadi_khazaee_asl@yahoo.com)
|
|
//
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
//
|
|
// Global Properties ...
|
|
#property library
|
|
#property copyright "Copyright 2023, SaherElm IT Center"
|
|
#property link "https://www.saherelm.ir"
|
|
#property version "1.00"
|
|
#property strict
|
|
|
|
//
|
|
// Includes ...
|
|
#include "..\Libraries\x-saherelm.log.lib.mq5"
|
|
#include "..\Libraries\x-saherelm.common.lib.mq5"
|
|
|
|
//
|
|
// START Enum Definitions ...
|
|
//
|
|
|
|
enum ENUM_X_PERIOD_METHOD
|
|
{
|
|
//
|
|
X_PERIOD_NOTHING,
|
|
//
|
|
X_PERIOD_AUTO,
|
|
//
|
|
X_PERIOD_MANUALLY
|
|
};
|
|
|
|
enum ENUM_X_XTS_BUFFER_LINES
|
|
{
|
|
X_XTS_CURRENT_LINE = 0,
|
|
X_XTS_NEAREST_LINE = 1,
|
|
X_XTS_MEDIEST_LINE = 2,
|
|
X_XTS_FAREST_LINE = 3,
|
|
};
|
|
|
|
//
|
|
// END Enum Definitions ...
|
|
//
|
|
|
|
//
|
|
// START Inputs ...
|
|
//
|
|
|
|
//
|
|
input group "XTS Indicator";
|
|
|
|
//
|
|
input group "XTS Current Period";
|
|
input ENUM_APPLIED_PRICE xTSCurrentAppliedTo = PRICE_CLOSE; // Current Applied To
|
|
//
|
|
input group "XTS Nearest Period";
|
|
input ENUM_X_PERIOD_METHOD xTSNearestMethod = X_PERIOD_AUTO; // How to Find Nearest Period
|
|
input ENUM_TIMEFRAMES xTSNearestPeriod = NULL; // Nearest Time Frame
|
|
input ENUM_APPLIED_PRICE xTSNearestAppliedTo = PRICE_CLOSE; // Nearest Applied To
|
|
//
|
|
input group "XTS Mediest Period";
|
|
input ENUM_X_PERIOD_METHOD xTSMediestMethod = X_PERIOD_AUTO; // How to Find Mediest Period
|
|
input ENUM_TIMEFRAMES xTSMediestPeriod = NULL; // Mediest Time Frame
|
|
input ENUM_APPLIED_PRICE xTSMediestAppliedTo = PRICE_CLOSE; // Mediest Applied To
|
|
//
|
|
input group "XTS Farest Period";
|
|
input ENUM_X_PERIOD_METHOD xTSFarestMethod = X_PERIOD_AUTO; // How to Find Farest Period
|
|
input ENUM_TIMEFRAMES xTSFarestPeriod = NULL; // Farest Time Frame
|
|
input ENUM_APPLIED_PRICE xTSFarestAppliedTo = PRICE_CLOSE; // Farest Applied To
|
|
|
|
//
|
|
|
|
//
|
|
// END Inputs ...
|
|
//
|
|
|
|
//
|
|
// START Definitions ...
|
|
//
|
|
|
|
int xTSHandler = INVALID_HANDLE;
|
|
double xTSCurrentBuffer[];
|
|
double xTSNearestBuffer[];
|
|
double xTSMediestBuffer[];
|
|
double xTSFarestBuffer[];
|
|
|
|
//
|
|
// END Definitions ...
|
|
//
|
|
|
|
//
|
|
// START Handler Functions ...
|
|
//
|
|
|
|
//
|
|
// Validate Inputs ...
|
|
bool XTSValidateInputs()
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
result = true;
|
|
|
|
//
|
|
if (!result)
|
|
{
|
|
//
|
|
LogMessage("XTS Indicator Inputs Validation Failed ...");
|
|
}
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Init Indicators ...
|
|
bool XTSInitHandlers()
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
// Initialize Indicator/Indicator Handlers ...
|
|
ResetLastError();
|
|
|
|
//
|
|
// XTS Handler ...
|
|
ArraySetAsSeries(xTSCurrentBuffer, true);
|
|
ArraySetAsSeries(xTSNearestBuffer, true);
|
|
ArraySetAsSeries(xTSMediestBuffer, true);
|
|
ArraySetAsSeries(xTSFarestBuffer, true);
|
|
xTSHandler = iCustom(
|
|
_Symbol,
|
|
_Period,
|
|
"x-saherelm.xts.oscillator",
|
|
//
|
|
// Inputs ...
|
|
"",
|
|
xTSCurrentAppliedTo,
|
|
"",
|
|
xTSNearestMethod,
|
|
xTSNearestPeriod,
|
|
xTSNearestAppliedTo,
|
|
"",
|
|
xTSMediestMethod,
|
|
xTSMediestPeriod,
|
|
xTSMediestAppliedTo,
|
|
"",
|
|
xTSFarestMethod,
|
|
xTSFarestPeriod,
|
|
xTSFarestAppliedTo
|
|
//
|
|
);
|
|
if (xTSHandler == INVALID_HANDLE)
|
|
{
|
|
//
|
|
LogMessage("failed to Initialize XTS Indicator: " + (string)GetLastError());
|
|
return result;
|
|
}
|
|
|
|
//
|
|
result = true;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Release Indicators ...
|
|
void XTSReleaseHandlers()
|
|
{
|
|
IndicatorRelease(xTSHandler);
|
|
}
|
|
|
|
//
|
|
// Handle Reading Buffers ...
|
|
void XTSReadBuffers(
|
|
int xTSItemsPerTick // Number Of Reading Buffer Items Per Tick
|
|
)
|
|
{
|
|
//
|
|
// XTS Current ...
|
|
CopyBuffer(
|
|
xTSHandler,
|
|
X_XTS_CURRENT_LINE,
|
|
0,
|
|
xTSItemsPerTick,
|
|
xTSCurrentBuffer);
|
|
|
|
//
|
|
// XTS Nearest ...
|
|
CopyBuffer(
|
|
xTSHandler,
|
|
X_XTS_NEAREST_LINE,
|
|
0,
|
|
xTSItemsPerTick,
|
|
xTSNearestBuffer);
|
|
|
|
//
|
|
// XTS Mediest ...
|
|
CopyBuffer(
|
|
xTSHandler,
|
|
X_XTS_MEDIEST_LINE,
|
|
0,
|
|
xTSItemsPerTick,
|
|
xTSMediestBuffer);
|
|
|
|
//
|
|
// XTS Farest ...
|
|
CopyBuffer(
|
|
xTSHandler,
|
|
X_XTS_FAREST_LINE,
|
|
0,
|
|
xTSItemsPerTick,
|
|
xTSFarestBuffer);
|
|
}
|
|
|
|
//
|
|
// END Handler Funcions ...
|
|
//
|
|
|
|
//
|
|
// START XTS Custom Functions ...
|
|
//
|
|
|
|
//
|
|
// Check all Buffers has valid Size ...
|
|
bool XTSIsValidBuffersSize(
|
|
int size // the size of buffers which min size for requirements
|
|
)
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
if (
|
|
size <= 0 ||
|
|
//
|
|
ArraySize(xTSCurrentBuffer) < size
|
|
//
|
|
)
|
|
{
|
|
result = false;
|
|
}
|
|
else
|
|
{
|
|
result = true;
|
|
}
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// END XTS Custom Functions ...
|
|
//
|