ass support for PV and KISuperSlow and MASuper Slow in KI Indicator and also Helper and implement them in BackTester ...
1485 lines
32 KiB
Plaintext
1485 lines
32 KiB
Plaintext
///////////////////////////////////////////////////////
|
|
//
|
|
// SaherElm IT Center MQL5 Helper Class Library
|
|
// ----------------------------------------------
|
|
// Name: XCX121XKIHelper
|
|
// Description: provides all Indicator
|
|
// Helper requirements ...
|
|
//
|
|
//
|
|
// 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
|
|
|
|
//
|
|
// Imports ...
|
|
#include "../Classes/x-saherelm.x-helper.class.mq5"
|
|
|
|
// #region Buffers ...
|
|
enum ENUM_X121_XKI_BUFFERS
|
|
{
|
|
//
|
|
// KI Fast ...
|
|
X121_XKI_KI_FAST_LINE = 0,
|
|
X121_XKI_KI_FAST_COLOR_LINE = 1,
|
|
X121_XKI_KI_FAST_STATE_LINE = 15,
|
|
//
|
|
// KI Slow ...
|
|
X121_XKI_KI_SLOW_LINE = 8,
|
|
X121_XKI_KI_SLOW_COLOR_LINE = 9,
|
|
X121_XKI_KI_SLOW_STATE_LINE = 22,
|
|
//
|
|
// KI Super Slow ...
|
|
X121_XKI_KI_SUPER_SLOW_LINE = 10,
|
|
X121_XKI_KI_SUPER_SLOW_COLOR_LINE = 11,
|
|
X121_XKI_KI_SUPER_SLOW_STATE_LINE = 24,
|
|
//
|
|
// KI Wave ...
|
|
X121_XKI_KI_WAVE_LINE = 2,
|
|
X121_XKI_KI_WAVE_RAW_LINE = 20,
|
|
X121_XKI_KI_WAVE_COLOR_LINE = 3,
|
|
X121_XKI_KI_WAVE_STATE_LINE = 21,
|
|
//
|
|
// Upper/Lower ...
|
|
X121_XKI_KI_UPPER_LINE = 4,
|
|
X121_XKI_KI_LOWER_LINE = 5,
|
|
//
|
|
// MA Fast/Slow ...
|
|
X121_XKI_MA_FAST_LINE = 6,
|
|
X121_XKI_MA_SLOW_LINE = 7,
|
|
X121_XKI_MA_SUPER_SLOW_LINE = 12,
|
|
//
|
|
// PV ...
|
|
X121_XKI_PEAK_LINE = 13,
|
|
X121_XKI_VALE_LINE = 14,
|
|
//
|
|
// ATR ...
|
|
X121_XKI_ATR_LINE = 16,
|
|
X121_XKI_ATR_SMOOTHED_LINE = 23,
|
|
X121_XKI_ATR_RAW_UPPER_LINE = 17,
|
|
X121_XKI_ATR_RAW_LOWER_LINE = 18,
|
|
//
|
|
// RSI ...
|
|
X121_XKI_RSI_LINE = 19,
|
|
};
|
|
// #endregion
|
|
|
|
// #region Inputs ...
|
|
struct X121XKIInputs
|
|
{
|
|
// #region Props ...
|
|
// #region Calculations ...
|
|
int kiFastLength; // KI Fast Length
|
|
int kiSlowLength; // KI Slow Length
|
|
int kiSuperSlowLength; // KI Super Slow Length
|
|
int maFastLength; // MA Fast Length
|
|
int maSlowLength; // MA Slow Length
|
|
int maSuperSlowLength; // MA Super Slow Length
|
|
ENUM_MA_METHOD maMethod; // MA Mode
|
|
ENUM_APPLIED_PRICE maAppliedTo; // MA Applied To
|
|
int rsiLength; // RSI Length
|
|
ENUM_APPLIED_PRICE rsiAppliedTo; // RSI Applied To
|
|
int kiWaveSmoothingLength; // RSI KI Wave Smoothing Length
|
|
ENUM_X_MA_METHOD kiWaveSmoothingMode; // RSI KI Wave Smoothing Method
|
|
double rsiMultiplier; // RSI Multiplier
|
|
int atrLength; // ATR Length
|
|
double atrMultiplier; // ATR Multiplier
|
|
int atrSmoothingLength; // ATR Smoothing Length
|
|
ENUM_X_MA_METHOD atrSmoothingMode; // ATR Smoothing Method
|
|
ENUM_X_PRICE atrUpperPriceType; // ATR Upper Price Type
|
|
ENUM_X_PRICE atrLowerPriceType; // ATR Lower Price Type
|
|
// #endregion
|
|
|
|
// #region Presentations ...
|
|
bool showPV; // Show PV
|
|
bool showKIFast; // Show KI
|
|
bool showKISlow; // Show KI Slow
|
|
bool showKISuperSlow; // Show KI Super Slow
|
|
bool showMaFast; // Show Ma Fast
|
|
bool showMaSlow; // Show MA Slow
|
|
bool showMaSuperSlow; // Show MA Super Slow
|
|
bool showKIWave; // Show KI Wave
|
|
bool showKIUpper; // Show KI Upper
|
|
bool showKILower; // Show KI Lower
|
|
|
|
//
|
|
int startCalculationForLastBars; // Calculate Last n Bars
|
|
|
|
//
|
|
int peakArrowCode; // Peaks Arrow Code
|
|
int valeArrowCode; // Vales Arrow Code
|
|
// #endregion
|
|
// #endregion
|
|
|
|
//
|
|
// Constructor(s) ...
|
|
X121XKIInputs()
|
|
{
|
|
Clean();
|
|
}
|
|
|
|
// #region Tools ...
|
|
//
|
|
// Clean ...
|
|
void Clean()
|
|
{
|
|
ZeroMemory(this);
|
|
}
|
|
|
|
//
|
|
// Default ...
|
|
void Default()
|
|
{
|
|
//
|
|
// Calculations ...
|
|
kiFastLength = 26;
|
|
kiSlowLength = 104;
|
|
kiSuperSlowLength = 208;
|
|
maFastLength = 26;
|
|
maSlowLength = 104;
|
|
maSuperSlowLength = 208;
|
|
maMethod = MODE_EMA;
|
|
maAppliedTo = PRICE_CLOSE;
|
|
rsiLength = 14;
|
|
rsiAppliedTo = PRICE_CLOSE;
|
|
kiWaveSmoothingLength = 14;
|
|
kiWaveSmoothingMode = X_MA_MODE_EMA;
|
|
rsiMultiplier = 0.5;
|
|
atrLength = 14;
|
|
atrMultiplier = 2;
|
|
atrSmoothingLength = 14;
|
|
atrSmoothingMode = X_MA_MODE_EMA;
|
|
atrUpperPriceType = X_PRICE_HIGH;
|
|
atrLowerPriceType = X_PRICE_LOW;
|
|
|
|
//
|
|
// Presentations ...
|
|
showPV = true;
|
|
showKIFast = true;
|
|
showKISlow = true;
|
|
showKISuperSlow = true;
|
|
showMaFast = true;
|
|
showMaSlow = true;
|
|
showMaSuperSlow = true;
|
|
showKIWave = true;
|
|
showKIUpper = true;
|
|
showKILower = true;
|
|
|
|
//
|
|
startCalculationForLastBars = 1500;
|
|
|
|
//
|
|
peakArrowCode = 159;
|
|
valeArrowCode = 159;
|
|
}
|
|
|
|
//
|
|
// Hide ...
|
|
void Hide()
|
|
{
|
|
//
|
|
// Presentations ...
|
|
showPV = false;
|
|
showKIFast = false;
|
|
showKISlow = false;
|
|
showKISuperSlow = false;
|
|
showMaFast = false;
|
|
showMaSlow = false;
|
|
showMaSuperSlow = false;
|
|
showKIWave = false;
|
|
showKIUpper = false;
|
|
showKILower = false;
|
|
}
|
|
|
|
//
|
|
// Validate ...
|
|
bool IsValid()
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
result =
|
|
//
|
|
// KI ...
|
|
kiFastLength >= 5 &&
|
|
kiSlowLength > kiFastLength &&
|
|
kiSuperSlowLength > kiSlowLength &&
|
|
//
|
|
// MA ...
|
|
maFastLength >= 2 &&
|
|
maSlowLength > maFastLength &&
|
|
maSuperSlowLength > maSlowLength &&
|
|
//
|
|
// ATR ...
|
|
atrLength >= 5 &&
|
|
//
|
|
// RSI ...
|
|
rsiLength >= 5
|
|
//
|
|
;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
// #endregion
|
|
};
|
|
// #endregion
|
|
|
|
// #region Conditions ...
|
|
struct X121XKIConditions
|
|
{
|
|
// #region Commons ...
|
|
string symbol;
|
|
ENUM_TIMEFRAMES period;
|
|
datetime time;
|
|
|
|
//
|
|
datetime to;
|
|
datetime from;
|
|
XOHCL bars[];
|
|
// #endregion
|
|
|
|
// #region Buffers ...
|
|
double kiFastBuffer[];
|
|
double kiFastColorBuffer[];
|
|
double kiFastStateBuffer[];
|
|
double kiSlowBuffer[];
|
|
double kiSlowColorBuffer[];
|
|
double kiSlowStateBuffer[];
|
|
double kiSuperSlowBuffer[];
|
|
double kiSuperSlowColorBuffer[];
|
|
double kiSuperSlowStateBuffer[];
|
|
double kiWaveBuffer[];
|
|
double kiWaveColorBuffer[];
|
|
double kiUpperBuffer[];
|
|
double kiLowerBuffer[];
|
|
double maFastBuffer[];
|
|
double maSlowBuffer[];
|
|
double maSuperSlowBuffer[];
|
|
double peakBuffer[];
|
|
double valeBuffer[];
|
|
double atrBuffer[];
|
|
double atrSmoothedBuffer[];
|
|
double atrRawUpperBuffer[];
|
|
double atrRawLowerBuffer[];
|
|
double rsiBuffer[];
|
|
double kiWaveRawBuffer[];
|
|
double kiWaveStateBuffer[];
|
|
// #endregion
|
|
|
|
//
|
|
// Constructor ...
|
|
X121XKIConditions()
|
|
{
|
|
Clean();
|
|
}
|
|
|
|
// #region Tools ...
|
|
/**
|
|
* Cleaning Up ...
|
|
*/
|
|
void Clean()
|
|
{
|
|
//
|
|
// Commons ...
|
|
to = NULL;
|
|
from = NULL;
|
|
time = NULL;
|
|
symbol = NULL;
|
|
period = NULL;
|
|
|
|
//
|
|
// Buffers ...
|
|
|
|
//
|
|
XClean(kiFastBuffer);
|
|
XClean(kiFastColorBuffer);
|
|
XClean(kiFastStateBuffer);
|
|
XClean(kiSlowBuffer);
|
|
XClean(kiSlowColorBuffer);
|
|
XClean(kiSlowStateBuffer);
|
|
XClean(kiSuperSlowBuffer);
|
|
XClean(kiSuperSlowColorBuffer);
|
|
XClean(kiSuperSlowStateBuffer);
|
|
XClean(kiWaveBuffer);
|
|
XClean(kiWaveColorBuffer);
|
|
XClean(kiUpperBuffer);
|
|
XClean(kiLowerBuffer);
|
|
XClean(maFastBuffer);
|
|
XClean(maSlowBuffer);
|
|
XClean(maSuperSlowBuffer);
|
|
XClean(peakBuffer);
|
|
XClean(valeBuffer);
|
|
XClean(atrBuffer);
|
|
XClean(atrSmoothedBuffer);
|
|
XClean(atrRawUpperBuffer);
|
|
XClean(atrRawLowerBuffer);
|
|
XClean(rsiBuffer);
|
|
XClean(kiWaveRawBuffer);
|
|
XClean(kiWaveStateBuffer);
|
|
|
|
//
|
|
ArraySetAsSeries(kiFastBuffer, true);
|
|
ArraySetAsSeries(kiFastColorBuffer, true);
|
|
ArraySetAsSeries(kiFastStateBuffer, true);
|
|
ArraySetAsSeries(kiSlowBuffer, true);
|
|
ArraySetAsSeries(kiSlowColorBuffer, true);
|
|
ArraySetAsSeries(kiSlowStateBuffer, true);
|
|
ArraySetAsSeries(kiSuperSlowBuffer, true);
|
|
ArraySetAsSeries(kiSuperSlowColorBuffer, true);
|
|
ArraySetAsSeries(kiSuperSlowStateBuffer, true);
|
|
ArraySetAsSeries(kiWaveBuffer, true);
|
|
ArraySetAsSeries(kiWaveColorBuffer, true);
|
|
ArraySetAsSeries(kiUpperBuffer, true);
|
|
ArraySetAsSeries(kiLowerBuffer, true);
|
|
ArraySetAsSeries(maFastBuffer, true);
|
|
ArraySetAsSeries(maSlowBuffer, true);
|
|
ArraySetAsSeries(maSuperSlowBuffer, true);
|
|
ArraySetAsSeries(peakBuffer, true);
|
|
ArraySetAsSeries(valeBuffer, true);
|
|
ArraySetAsSeries(atrBuffer, true);
|
|
ArraySetAsSeries(atrSmoothedBuffer, true);
|
|
ArraySetAsSeries(atrRawUpperBuffer, true);
|
|
ArraySetAsSeries(atrRawLowerBuffer, true);
|
|
ArraySetAsSeries(rsiBuffer, true);
|
|
ArraySetAsSeries(kiWaveRawBuffer, true);
|
|
ArraySetAsSeries(kiWaveStateBuffer, true);
|
|
|
|
//
|
|
ZeroMemory(this);
|
|
}
|
|
|
|
/**
|
|
* Retrieve Unique Tag Identifier ...
|
|
*
|
|
* @return ( string )
|
|
*/
|
|
string GetTag()
|
|
{
|
|
return GetToken(this);
|
|
}
|
|
// #endregion
|
|
};
|
|
// #endregion
|
|
|
|
// #region Class ...
|
|
class XCX121XKIHelper : public XCBaseHelper
|
|
{
|
|
//
|
|
// Public ...
|
|
public:
|
|
//
|
|
// Constructors ...
|
|
XCX121XKIHelper()
|
|
: XCBaseHelper(_Symbol, _Period)
|
|
{
|
|
}
|
|
|
|
//
|
|
// Deconstructor ...
|
|
~XCX121XKIHelper()
|
|
{
|
|
}
|
|
|
|
// #region Tools ...
|
|
bool Init(
|
|
string symbol, // Trading Symbol
|
|
ENUM_TIMEFRAMES period, // Trading Period
|
|
X121XKIInputs &inputs // Inputs
|
|
)
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
mSymbol = symbol;
|
|
mPeriod = period;
|
|
|
|
//
|
|
result = inputs.IsValid();
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
mInputs = inputs;
|
|
|
|
//
|
|
mHandler = iCustom(
|
|
mSymbol,
|
|
mPeriod,
|
|
"x-saherelm.x121.xki",
|
|
"", // Calculation ...
|
|
mInputs.kiFastLength,
|
|
mInputs.kiSlowLength,
|
|
mInputs.kiSuperSlowLength,
|
|
mInputs.maFastLength,
|
|
mInputs.maSlowLength,
|
|
mInputs.maSuperSlowLength,
|
|
mInputs.maMethod,
|
|
mInputs.maAppliedTo,
|
|
mInputs.rsiLength,
|
|
mInputs.rsiAppliedTo,
|
|
mInputs.kiWaveSmoothingLength,
|
|
mInputs.kiWaveSmoothingMode,
|
|
mInputs.rsiMultiplier,
|
|
mInputs.atrLength,
|
|
mInputs.atrMultiplier,
|
|
mInputs.atrSmoothingLength,
|
|
mInputs.atrSmoothingMode,
|
|
mInputs.atrUpperPriceType,
|
|
mInputs.atrLowerPriceType,
|
|
"", // Presentation ...
|
|
mInputs.showPV,
|
|
mInputs.showKIFast,
|
|
mInputs.showKISlow,
|
|
mInputs.showKISuperSlow,
|
|
mInputs.showMaFast,
|
|
mInputs.showMaSlow,
|
|
mInputs.showMaSuperSlow,
|
|
mInputs.showKIWave,
|
|
mInputs.showKIUpper,
|
|
mInputs.showKILower,
|
|
mInputs.startCalculationForLastBars,
|
|
mInputs.peakArrowCode,
|
|
mInputs.valeArrowCode //
|
|
);
|
|
result = mHandler != INVALID_HANDLE;
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Inputs ...
|
|
|
|
//
|
|
X121XKIInputs GetInputs()
|
|
{
|
|
return mInputs;
|
|
}
|
|
|
|
//
|
|
bool SetInputs(
|
|
X121XKIInputs &inputs // Configs
|
|
)
|
|
{
|
|
//
|
|
return Init(
|
|
mSymbol,
|
|
mPeriod,
|
|
inputs //
|
|
);
|
|
}
|
|
|
|
//
|
|
bool GetConditions(
|
|
X121XKIConditions &conditions, //
|
|
int barIndex = 0, //
|
|
int loopback = 5 //
|
|
)
|
|
{
|
|
//
|
|
bool result = true;
|
|
|
|
//
|
|
if (loopback < 5)
|
|
{
|
|
loopback = 5;
|
|
}
|
|
|
|
//
|
|
conditions.Clean();
|
|
|
|
//
|
|
conditions.symbol = mSymbol;
|
|
conditions.period = mPeriod;
|
|
conditions.time = TimeCurrent();
|
|
|
|
//
|
|
// Filling Bars ...
|
|
int barsCount = GetBars(
|
|
conditions.bars,
|
|
mSymbol,
|
|
mPeriod,
|
|
barIndex,
|
|
loopback //
|
|
);
|
|
result = barsCount == loopback;
|
|
if (!result)
|
|
{
|
|
//
|
|
conditions.Clean();
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
conditions.to = conditions.bars[0].time;
|
|
conditions.from = conditions.bars[ArraySize(conditions.bars) - 1].time;
|
|
|
|
//
|
|
int zIndex = barIndex;
|
|
|
|
// #region Reading Buffers ...
|
|
CopyKIFast(
|
|
zIndex,
|
|
loopback,
|
|
conditions.kiFastBuffer //
|
|
);
|
|
CopyKIFastColor(
|
|
zIndex,
|
|
loopback,
|
|
conditions.kiFastColorBuffer //
|
|
);
|
|
CopyKIFastState(
|
|
zIndex,
|
|
loopback,
|
|
conditions.kiFastStateBuffer //
|
|
);
|
|
CopyKISlow(
|
|
zIndex,
|
|
loopback,
|
|
conditions.kiSlowBuffer //
|
|
);
|
|
CopyKISlowColor(
|
|
zIndex,
|
|
loopback,
|
|
conditions.kiSlowColorBuffer //
|
|
);
|
|
CopyKISlowState(
|
|
zIndex,
|
|
loopback,
|
|
conditions.kiSlowStateBuffer //
|
|
);
|
|
CopyKISuperSlow(
|
|
zIndex,
|
|
loopback,
|
|
conditions.kiSuperSlowBuffer //
|
|
);
|
|
CopyKISuperSlowColor(
|
|
zIndex,
|
|
loopback,
|
|
conditions.kiSuperSlowColorBuffer //
|
|
);
|
|
CopyKISuperSlowState(
|
|
zIndex,
|
|
loopback,
|
|
conditions.kiSuperSlowStateBuffer //
|
|
);
|
|
CopyKIWave(
|
|
zIndex,
|
|
loopback,
|
|
conditions.kiWaveBuffer //
|
|
);
|
|
CopyKIWaveRaw(
|
|
zIndex,
|
|
loopback,
|
|
conditions.kiWaveRawBuffer //
|
|
);
|
|
CopyKIWaveColor(
|
|
zIndex,
|
|
loopback,
|
|
conditions.kiWaveColorBuffer //
|
|
);
|
|
CopyKIWaveState(
|
|
zIndex,
|
|
loopback,
|
|
conditions.kiWaveStateBuffer //
|
|
);
|
|
CopyKIUpper(
|
|
zIndex,
|
|
loopback,
|
|
conditions.kiUpperBuffer //
|
|
);
|
|
CopyKILower(
|
|
zIndex,
|
|
loopback,
|
|
conditions.kiLowerBuffer //
|
|
);
|
|
CopyMAFast(
|
|
zIndex,
|
|
loopback,
|
|
conditions.maFastBuffer //
|
|
);
|
|
CopyMASlow(
|
|
zIndex,
|
|
loopback,
|
|
conditions.maSlowBuffer //
|
|
);
|
|
CopyMASuperSlow(
|
|
zIndex,
|
|
loopback,
|
|
conditions.maSuperSlowBuffer //
|
|
);
|
|
CopyPeak(
|
|
zIndex,
|
|
loopback,
|
|
conditions.peakBuffer //
|
|
);
|
|
CopyVale(
|
|
zIndex,
|
|
loopback,
|
|
conditions.valeBuffer //
|
|
);
|
|
CopyRSI(
|
|
zIndex,
|
|
loopback,
|
|
conditions.rsiBuffer //
|
|
);
|
|
CopyATR(
|
|
zIndex,
|
|
loopback,
|
|
conditions.atrBuffer //
|
|
);
|
|
CopyATRSmoothed(
|
|
zIndex,
|
|
loopback,
|
|
conditions.atrSmoothedBuffer //
|
|
);
|
|
CopyATRRawUpper(
|
|
zIndex,
|
|
loopback,
|
|
conditions.atrRawUpperBuffer //
|
|
);
|
|
CopyATRRawLower(
|
|
zIndex,
|
|
loopback,
|
|
conditions.atrRawLowerBuffer //
|
|
);
|
|
// #endregion
|
|
|
|
//
|
|
return result;
|
|
}
|
|
// #endregion
|
|
|
|
// #region Buffer Readers ...
|
|
// #region KI Fast ...
|
|
//
|
|
double GetKIFast(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_KI_FAST_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyKIFast(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_KI_FAST_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region KI Fast Color ...
|
|
//
|
|
double GetKIFastColor(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_KI_FAST_COLOR_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyKIFastColor(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_KI_FAST_COLOR_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region KI Fast State ...
|
|
//
|
|
double GetKIFastState(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_KI_FAST_STATE_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyKIFastState(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_KI_FAST_STATE_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region KI Slow ...
|
|
//
|
|
double GetKISlow(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_KI_SLOW_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyKISlow(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_KI_SLOW_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region KI Slow Color ...
|
|
//
|
|
double GetKISlowColor(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_KI_SLOW_COLOR_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyKISlowColor(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_KI_SLOW_COLOR_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region KI Slow State ...
|
|
//
|
|
double GetKISlowState(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_KI_SLOW_STATE_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyKISlowState(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_KI_SLOW_STATE_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region KI Super Slow ...
|
|
//
|
|
double GetKISuperSlow(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_KI_SUPER_SLOW_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyKISuperSlow(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_KI_SUPER_SLOW_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region KI Super Slow Color ...
|
|
//
|
|
double GetKISuperSlowColor(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_KI_SUPER_SLOW_COLOR_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyKISuperSlowColor(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_KI_SUPER_SLOW_COLOR_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region KI Super Slow State ...
|
|
//
|
|
double GetKISuperSlowState(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_KI_SUPER_SLOW_STATE_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyKISuperSlowState(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_KI_SUPER_SLOW_STATE_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region KI Wave ...
|
|
//
|
|
double GetKIWave(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_KI_WAVE_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyKIWave(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_KI_WAVE_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region KI Wave Raw ...
|
|
//
|
|
double GetKIWaveRaw(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_KI_WAVE_RAW_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyKIWaveRaw(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_KI_WAVE_RAW_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region KI Wave Color ...
|
|
//
|
|
double GetKIWaveColor(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_KI_WAVE_COLOR_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyKIWaveColor(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_KI_WAVE_COLOR_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region KI Wave State ...
|
|
//
|
|
double GetKIWaveState(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_KI_WAVE_STATE_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyKIWaveState(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_KI_WAVE_STATE_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region KI Upper ...
|
|
//
|
|
double GetKIUpper(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_KI_UPPER_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyKIUpper(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_KI_UPPER_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region KI Lower ...
|
|
//
|
|
double GetKILower(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_KI_LOWER_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyKILower(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_KI_LOWER_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region MA Fast ...
|
|
//
|
|
double GetMAFast(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_MA_FAST_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyMAFast(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_MA_FAST_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region MA Slow ...
|
|
//
|
|
double GetMASlow(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_MA_SLOW_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyMASlow(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_MA_SLOW_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region MA Super Slow ...
|
|
//
|
|
double GetMASuperSlow(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_MA_SUPER_SLOW_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyMASuperSlow(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_MA_SUPER_SLOW_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region Peak ...
|
|
//
|
|
double GetPeak(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_PEAK_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyPeak(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_PEAK_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region Vale ...
|
|
//
|
|
double GetVale(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_VALE_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyVale(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_VALE_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region RSI ...
|
|
//
|
|
double GetRSI(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_RSI_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyRSI(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_RSI_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region ATR ...
|
|
//
|
|
double GetATR(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_ATR_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyATR(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_ATR_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region ATRSmoothed ...
|
|
//
|
|
double GetATRSmoothed(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_ATR_SMOOTHED_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyATRSmoothed(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_ATR_SMOOTHED_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region ATR Raw Upper...
|
|
//
|
|
double GetATRRawUpper(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_ATR_RAW_UPPER_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyATRRawUpper(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_ATR_RAW_UPPER_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
|
|
// #region ATR Raw Lower...
|
|
//
|
|
double GetATRRawLower(
|
|
int barIndex // Bar Index
|
|
)
|
|
{
|
|
//
|
|
return ReadValue(
|
|
(int)X121_XKI_ATR_RAW_LOWER_LINE,
|
|
barIndex //
|
|
);
|
|
}
|
|
|
|
//
|
|
int CopyATRRawLower(
|
|
int start, // Start
|
|
int count, // Number of Items for read
|
|
double &buffer[], // Dest Buffer
|
|
bool asSeries = true // As Series Flag
|
|
)
|
|
{
|
|
//
|
|
return ReadValues(
|
|
buffer,
|
|
(int)X121_XKI_ATR_RAW_LOWER_LINE,
|
|
start,
|
|
count,
|
|
asSeries //
|
|
);
|
|
}
|
|
// #endregion
|
|
// #endregion
|
|
|
|
//
|
|
// Protected ...
|
|
protected:
|
|
//
|
|
// Private ...
|
|
private:
|
|
//
|
|
// Props ...
|
|
X121XKIInputs mInputs; // Inputs ...
|
|
};
|
|
// #endregion |