Files
MQL5Data/Helpers/x-saherelm.xom1.helper.mq5
T
2025-09-07 18:48:24 +03:30

2056 lines
40 KiB
Plaintext

///////////////////////////////////////////////////////
//
// SaherElm IT Center MQL5 Helper Class Library
// ----------------------------------------------
// Name: XCXOM1Helper
// 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"
//
// Definitions ...
//
// Buffers ...
enum ENUM_XOM1_BUFFERS
{
XOM1_MA_FAST_LINE = 0,
XOM1_MA_FAST_COLOR_LINE = 1,
XOM1_MA_FAST_STATE_LINE = 10,
XOM1_MA_SLOW_LINE = 2,
XOM1_MA_SLOW_COLOR_LINE = 3,
XOM1_MA_SLOW_STATE_LINE = 11,
XOM1_SAR_LINE = 4,
XOM1_SAR_COLOR_LINE = 5,
XOM1_SAR_STATE_LINE = 12,
XOM1_PEAK_LINE = 6,
XOM1_VALE_LINE = 7,
XOM1_FINO_UPPER_LINE = 8,
XOM1_FINO_LOWER_LINE = 9,
// 10 Ma Fast State
// 11 Ma Slow State
// 12 Sar State
XOM1_SC_HH_LINE = 13,
XOM1_SC_LL_LINE = 14,
XOM1_MC_HH_LINE = 15,
XOM1_MC_LL_LINE = 16,
XOM1_LC_HH_LINE = 17,
XOM1_LC_LL_LINE = 18,
XOM1_HC_HH_LINE = 19,
XOM1_HC_LL_LINE = 20,
};
//
// Input Models ...
struct XOM1Inputs
{
//
// Props ...
//
// Calculation ...
ENUM_X_PERIOD_METHOD scMethod; // How to Find Short Period
ENUM_TIMEFRAMES scPeriod; // Short Period
ENUM_X_PERIOD_METHOD mcMethod; // How to Find Medium Period
ENUM_TIMEFRAMES mcPeriod; // Medium Period
ENUM_X_PERIOD_METHOD lcMethod; // How to Find Long Period
ENUM_TIMEFRAMES lcPeriod; // Long Period
ENUM_X_PERIOD_METHOD hcMethod; // How to Find Hind Period
ENUM_TIMEFRAMES hcPeriod; // Hind Period
ENUM_SERIESMODE upperMode; // Peak Method
ENUM_SERIESMODE lowerMode; // Vale Method
ENUM_X_FIBO_LEVELS upperZoneLevel; // Upper Zone Level
ENUM_X_FIBO_LEVELS lowerZoneLevel; // Lower Zone Level
double sarStep; // SAR Step
double sarMax; // SAR Maximum
ENUM_MA_METHOD maMethod; // MA Method
ENUM_APPLIED_PRICE maAppliedTo; // MA Applied To
int maFastLength; // Fast MA Length
int maSlowLength; // Slow MA Length
//
// Presentation ...
bool showPV; // Show PV
bool showSAR; // Show Sar
bool showMAFast; // Show MA Fast
bool showMASlow; // Show MA Slow
bool showFiboZone; // Show Fibo Zone
int startCalculationForLastBars; // Calculate Last n Bars
int sarArrowCode; // Parabolic Sar Arrow Code
int peakArrowCode; // Peaks Arrow Code
int valeArrowCode; // Vales Arrow Code
//
// Constructor(s) ...
XOM1Inputs()
{
Clean();
}
//
// Tools ...
//
// Clean ...
void Clean()
{
ZeroMemory(this);
}
//
// Default ...
void Default()
{
//
// Calculations ...
scMethod = X_PERIOD_AUTO; // How to Find Short Period
scPeriod = NULL; // Short Period
mcMethod = X_PERIOD_AUTO; // How to Find Medium Period
mcPeriod = NULL; // Medium Period
lcMethod = X_PERIOD_AUTO; // How to Find Long Period
lcPeriod = NULL; // Long Period
hcMethod = X_PERIOD_AUTO; // How to Find Hind Period
hcPeriod = NULL; // Hind Period
upperMode = MODE_HIGH; // Peak Method
lowerMode = MODE_LOW; // Vale Method
upperZoneLevel = X_FIBO_LEVEL_618; // Upper Zone Level
lowerZoneLevel = X_FIBO_LEVEL_764; // Lower Zone Level
sarStep = 0.02; // SAR Step
sarMax = 0.2; // SAR Maximum
maMethod = MODE_EMA; // MA Method
maAppliedTo = PRICE_CLOSE; // MA Applied To
maFastLength = 7; // Fast MA Length
maSlowLength = 20; // Slow MA Length
//
// Presentation ...
showPV = true; // Show PV
showSAR = true; // Show Sar
showMAFast = true; // Show MA Fast
showMASlow = true; // Show MA Slow
showFiboZone = true; // Show Fibo Zone
startCalculationForLastBars = 1500; // Calculate Last n Bars
sarArrowCode = 159; // Parabolic Sar Arrow Code
peakArrowCode = 159; // Peaks Arrow Code
valeArrowCode = 159; // Vales Arrow Code
}
//
// Hide all Visible Buffers ...
void Hide()
{
//
showPV = false;
showSAR = false;
showMAFast = false;
showMASlow = false;
showFiboZone = false;
}
//
// Validate ...
bool IsValid()
{
//
bool result = false;
//
result =
//
// MA ...
maFastLength >= 2 &&
maSlowLength >= 2 &&
maSlowLength > maFastLength &&
//
// SAR ...
sarMax > 0 &&
sarStep > 0 &&
sarMax > sarStep &&
//
// CYCLES ...
(IsSpecifiedValid(scMethod, scPeriod) &&
IsSpecifiedValid(mcMethod, mcPeriod) &&
IsSpecifiedValid(lcMethod, lcPeriod) &&
IsSpecifiedValid(hcMethod, hcPeriod))
//
;
//
return result;
}
};
//
// Conditions ...
struct XOM1Conditions
{
//
// Common ...
string symbol;
ENUM_TIMEFRAMES period;
datetime time;
//
datetime to;
datetime from;
XOHCL bars[];
//
// Buffers ...
double maFastBuffer[];
double maFastColorBuffer[];
double maFastStateBuffer[];
double maSlowBuffer[];
double maSlowColorBuffer[];
double maSlowStateBuffer[];
double sarBuffer[];
double sarColorBuffer[];
double sarStateBuffer[];
double peakBuffer[];
double valeBuffer[];
double fiboUpperBuffer[];
double fiboLowerBuffer[];
double sHHBuffer[];
double sLLBuffer[];
double mHHBuffer[];
double mLLBuffer[];
double lHHBuffer[];
double lLLBuffer[];
double hHHBuffer[];
double hLLBuffer[];
//
// Conditions ...
//
// Constructor ...
XOM1Conditions()
{
Clean();
}
//
// Tools ...
/**
* Cleaning Up ...
*/
void Clean()
{
//
// Commons ...
to = NULL;
from = NULL;
time = NULL;
symbol = NULL;
period = NULL;
//
// Buffers ...
//
SpecifiedClean(bars);
//
SpecifiedClean(maFastBuffer);
SpecifiedClean(maFastColorBuffer);
SpecifiedClean(maFastStateBuffer);
SpecifiedClean(maSlowBuffer);
SpecifiedClean(maSlowColorBuffer);
SpecifiedClean(maSlowStateBuffer);
SpecifiedClean(sarBuffer);
SpecifiedClean(sarColorBuffer);
SpecifiedClean(sarStateBuffer);
SpecifiedClean(peakBuffer);
SpecifiedClean(valeBuffer);
SpecifiedClean(fiboUpperBuffer);
SpecifiedClean(fiboLowerBuffer);
SpecifiedClean(sHHBuffer);
SpecifiedClean(sLLBuffer);
SpecifiedClean(mHHBuffer);
SpecifiedClean(mLLBuffer);
SpecifiedClean(lHHBuffer);
SpecifiedClean(lLLBuffer);
SpecifiedClean(hHHBuffer);
SpecifiedClean(hLLBuffer);
//
// Conditions ...
//
ArraySetAsSeries(bars, true);
//
ArraySetAsSeries(maFastBuffer, true);
ArraySetAsSeries(maFastColorBuffer, true);
ArraySetAsSeries(maFastStateBuffer, true);
ArraySetAsSeries(maSlowBuffer, true);
ArraySetAsSeries(maSlowColorBuffer, true);
ArraySetAsSeries(maSlowStateBuffer, true);
ArraySetAsSeries(sarBuffer, true);
ArraySetAsSeries(sarColorBuffer, true);
ArraySetAsSeries(sarStateBuffer, true);
ArraySetAsSeries(peakBuffer, true);
ArraySetAsSeries(valeBuffer, true);
ArraySetAsSeries(fiboUpperBuffer, true);
ArraySetAsSeries(fiboLowerBuffer, true);
ArraySetAsSeries(sHHBuffer, true);
ArraySetAsSeries(sLLBuffer, true);
ArraySetAsSeries(mHHBuffer, true);
ArraySetAsSeries(mLLBuffer, true);
ArraySetAsSeries(lHHBuffer, true);
ArraySetAsSeries(lLLBuffer, true);
ArraySetAsSeries(hHHBuffer, true);
ArraySetAsSeries(hLLBuffer, true);
//
ZeroMemory(this);
}
/**
* Generate Conditions Scores ...
*
* @param bullishScore: Double, Directional Scores Reference ...
* @param bearishScore: Double, Directional Scores Reference ...
*/
void GenerateScore(
double &bullishScore,
double &bearishScore //
)
{
}
/**
* Generate Summary String for Represent Conditions State ...
*
* @param onlyCommons: Boolean, Just Generate Only Commons Conditions ...
* @param onlyConditions: Boolean, Just Generate Only Conditions ...
* @param includeScores: Boolean, Attach Scores Representations on Result ...
* @param ignoreFalseConditions: Boolean, Ignore False Conditions on Result ...
* @param separator: String, Separate Lines ...
*
* @return ( string )
*/
string GenerateSummary(
bool onlyCommons = false,
bool onlyConditions = false,
bool includeScores = true,
bool ignoreFalseConditions = true,
string separator = "\n" //
)
{
return "";
}
/**
* Retrieve Unique Tag Identifier ...
*
* @return ( string )
*/
string GetTag()
{
return GetTypeName(this);
}
};
//
// Class ...
class XCXOM1Helper : public XCBaseHelper
{
//
// Public ...
public:
//
// Props ...
//
// Buffers ...
double maFastBuffer[];
double maFastColorBuffer[];
double maFastStateBuffer[];
double maSlowBuffer[];
double maSlowColorBuffer[];
double maSlowStateBuffer[];
double sarBuffer[];
double sarColorBuffer[];
double sarStateBuffer[];
double peakBuffer[];
double valeBuffer[];
double fiboUpperBuffer[];
double fiboLowerBuffer[];
double sHHBuffer[];
double sLLBuffer[];
double mHHBuffer[];
double mLLBuffer[];
double lHHBuffer[];
double lLLBuffer[];
double hHHBuffer[];
double hLLBuffer[];
//
// Constructors ...
XCXOM1Helper()
: XCBaseHelper(_Symbol, _Period)
{
}
//
// Deconstructor ...
~XCXOM1Helper()
{
}
//
// Tools ...
//
// Initialize Helper Cleass ...
bool Init(
string symbol, // Trading Symbol
ENUM_TIMEFRAMES period, // Trading Period
XOM1Inputs &inputs // Inputs
)
{
//
bool result = false;
//
mSymbol = symbol;
mPeriod = period;
//
result = inputs.IsValid();
if (!result)
{
return result;
}
//
ArraySetAsSeries(maFastBuffer, true);
ArraySetAsSeries(maFastColorBuffer, true);
ArraySetAsSeries(maFastStateBuffer, true);
ArraySetAsSeries(maSlowBuffer, true);
ArraySetAsSeries(maSlowColorBuffer, true);
ArraySetAsSeries(maSlowStateBuffer, true);
ArraySetAsSeries(sarBuffer, true);
ArraySetAsSeries(sarColorBuffer, true);
ArraySetAsSeries(sarStateBuffer, true);
ArraySetAsSeries(peakBuffer, true);
ArraySetAsSeries(valeBuffer, true);
ArraySetAsSeries(fiboUpperBuffer, true);
ArraySetAsSeries(fiboLowerBuffer, true);
ArraySetAsSeries(sHHBuffer, true);
ArraySetAsSeries(sLLBuffer, true);
ArraySetAsSeries(mHHBuffer, true);
ArraySetAsSeries(mLLBuffer, true);
ArraySetAsSeries(lHHBuffer, true);
ArraySetAsSeries(lLLBuffer, true);
ArraySetAsSeries(hHHBuffer, true);
ArraySetAsSeries(hLLBuffer, true);
//
mInputs = inputs;
//
mHandler = iCustom(
mSymbol,
mPeriod,
"x-saherelm.xom1",
"", // Calculation ...
mInputs.scMethod,
mInputs.scPeriod,
mInputs.mcMethod,
mInputs.mcPeriod,
mInputs.lcMethod,
mInputs.lcPeriod,
mInputs.hcMethod,
mInputs.hcPeriod,
mInputs.upperMode,
mInputs.lowerMode,
mInputs.upperZoneLevel,
mInputs.lowerZoneLevel,
mInputs.sarStep,
mInputs.sarMax,
mInputs.maMethod,
mInputs.maAppliedTo,
mInputs.maFastLength,
mInputs.maSlowLength,
"", // Presentation ...
mInputs.showPV,
mInputs.showSAR,
mInputs.showMAFast,
mInputs.showMASlow,
mInputs.showFiboZone,
mInputs.startCalculationForLastBars,
mInputs.sarArrowCode,
mInputs.peakArrowCode,
mInputs.valeArrowCode
//
);
result = mHandler != INVALID_HANDLE;
if (!result)
{
return result;
}
//
return result;
}
//
// Inputs ...
//
XOM1Inputs GetInputs()
{
return mInputs;
}
//
bool SetInputs(
XOM1Inputs &inputs // Configs
)
{
//
return Init(
mSymbol,
mPeriod,
inputs
//
);
}
//
// Tools ...
//
void Update(
int barIndex // Bar Index
)
{
Calculate(barIndex);
}
//
void Free() override
{
Cleanup(10);
}
//
bool GetConditions(
XOM1Conditions &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;
}
//
int zIDX = 0;
int cIDX = 1;
int pIDX = cIDX + 1;
int p2IDX = pIDX + 1;
int p3IDX = p2IDX + 1;
int p4IDX = p3IDX + 1;
//
conditions.to = conditions.bars[0].time;
conditions.from = conditions.bars[ArraySize(conditions.bars) - 1].time;
//
int zIndex = barIndex;
//
// Buffers ...
//
CopyMAFast(
zIndex,
loopback,
conditions.maFastBuffer //
);
//
CopyMAFastState(
zIndex,
loopback,
conditions.maFastStateBuffer //
);
//
CopyMASlow(
zIndex,
loopback,
conditions.maSlowBuffer //
);
//
CopyMASlowState(
zIndex,
loopback,
conditions.maSlowStateBuffer //
);
//
CopySar(
zIndex,
loopback,
conditions.sarBuffer //
);
//
CopySarState(
zIndex,
loopback,
conditions.sarStateBuffer //
);
//
CopyPeak(
zIndex,
loopback,
conditions.peakBuffer //
);
//
CopyVale(
zIndex,
loopback,
conditions.valeBuffer //
);
//
CopyFiboUpper(
zIndex,
loopback,
conditions.fiboUpperBuffer //
);
//
CopyFiboLower(
zIndex,
loopback,
conditions.fiboLowerBuffer //
);
//
CopySHH(
zIndex,
loopback,
conditions.sHHBuffer //
);
//
CopySLL(
zIndex,
loopback,
conditions.sLLBuffer //
);
//
CopyMHH(
zIndex,
loopback,
conditions.mHHBuffer //
);
//
CopyMLL(
zIndex,
loopback,
conditions.mLLBuffer //
);
//
CopyLHH(
zIndex,
loopback,
conditions.lHHBuffer //
);
//
CopyLLL(
zIndex,
loopback,
conditions.lLLBuffer //
);
//
CopyHHH(
zIndex,
loopback,
conditions.hHHBuffer //
);
//
CopyHLL(
zIndex,
loopback,
conditions.hLLBuffer //
);
//
// Conditions ...
//
return result;
}
//
// Values Retrievers ...
//
// Fast MA ...
//
double GetMAFast(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate(barIndex);
//
int count = ArraySize(maFastBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return maFastBuffer[barIndex];
}
//
int CopyMAFast(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate(start);
//
// Copy Items ...
return Copy(
0,
count,
maFastBuffer,
buffer,
forceClean
//
);
}
//
// Fast MA State ...
//
double GetMAFastState(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate(barIndex);
//
int count = ArraySize(maFastStateBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return maFastStateBuffer[barIndex];
}
//
int CopyMAFastState(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate(start);
//
// Copy Items ...
return Copy(
0,
count,
maFastStateBuffer,
buffer,
forceClean
//
);
}
//
// Slow MA ...
//
double GetMASlow(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate(barIndex);
//
int count = ArraySize(maSlowBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return maSlowBuffer[barIndex];
}
//
int CopyMASlow(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate(start);
//
// Copy Items ...
return Copy(
0,
count,
maSlowBuffer,
buffer,
forceClean
//
);
}
//
// Slow MA State ...
//
double GetMASlowState(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate(barIndex);
//
int count = ArraySize(maSlowStateBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return maSlowStateBuffer[barIndex];
}
//
int CopyMASlowState(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate(start);
//
// Copy Items ...
return Copy(
0,
count,
maSlowStateBuffer,
buffer,
forceClean
//
);
}
//
// SAR ...
//
double GetSar(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate(barIndex);
//
int count = ArraySize(sarBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return sarBuffer[barIndex];
}
//
int CopySar(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate(start);
//
// Copy Items ...
return Copy(
0,
count,
sarBuffer,
buffer,
forceClean
//
);
}
//
// SAR State ...
//
double GetSarState(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate(barIndex);
//
int count = ArraySize(sarStateBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return sarStateBuffer[barIndex];
}
//
int CopySarState(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate(start);
//
// Copy Items ...
return Copy(
0,
count,
sarStateBuffer,
buffer,
forceClean
//
);
}
//
// PEAK ...
//
double GetPeak(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate(barIndex);
//
int count = ArraySize(peakBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return peakBuffer[barIndex];
}
//
int CopyPeak(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate(start);
//
// Copy Items ...
return Copy(
0,
count,
peakBuffer,
buffer,
forceClean
//
);
}
//
// VALE ...
//
double GetVale(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate(barIndex);
//
int count = ArraySize(valeBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return valeBuffer[barIndex];
}
//
int CopyVale(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate(start);
//
// Copy Items ...
return Copy(
0,
count,
valeBuffer,
buffer,
forceClean
//
);
}
//
// FIBO Zone ...
//
// FIBO Upper ...
//
double GetFiboUpper(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate(barIndex);
//
int count = ArraySize(fiboUpperBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return fiboUpperBuffer[barIndex];
}
//
int CopyFiboUpper(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate(start);
//
// Copy Items ...
return Copy(
0,
count,
fiboUpperBuffer,
buffer,
forceClean
//
);
}
//
// FIBO Lower ...
//
double GetFiboLower(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate(barIndex);
//
int count = ArraySize(fiboLowerBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return fiboLowerBuffer[barIndex];
}
//
int CopyFiboLower(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate(start);
//
// Copy Items ...
return Copy(
0,
count,
fiboLowerBuffer,
buffer,
forceClean
//
);
}
//
// CYCLES Range ...
//
// SHORT ...
//
// HH ...
//
double GetSHH(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate(barIndex);
//
int count = ArraySize(sHHBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return sHHBuffer[barIndex];
}
//
int CopySHH(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate(start);
//
// Copy Items ...
return Copy(
0,
count,
sHHBuffer,
buffer,
forceClean
//
);
}
//
// LL ...
//
double GetSLL(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate(barIndex);
//
int count = ArraySize(sLLBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return sLLBuffer[barIndex];
}
//
int CopySLL(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate(start);
//
// Copy Items ...
return Copy(
0,
count,
sLLBuffer,
buffer,
forceClean
//
);
}
//
// MEDIUM ...
//
// HH ...
//
double GetMHH(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate(barIndex);
//
int count = ArraySize(mHHBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return mHHBuffer[barIndex];
}
//
int CopyMHH(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate(start);
//
// Copy Items ...
return Copy(
0,
count,
mHHBuffer,
buffer,
forceClean
//
);
}
//
// LL ...
//
double GetMLL(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate(barIndex);
//
int count = ArraySize(mLLBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return mLLBuffer[barIndex];
}
//
int CopyMLL(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate(start);
//
// Copy Items ...
return Copy(
0,
count,
mLLBuffer,
buffer,
forceClean
//
);
}
//
// LONG ...
//
// HH ...
//
double GetLHH(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate(barIndex);
//
int count = ArraySize(lHHBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return lHHBuffer[barIndex];
}
//
int CopyLHH(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate(start);
//
// Copy Items ...
return Copy(
0,
count,
lHHBuffer,
buffer,
forceClean
//
);
}
//
// LL ...
//
double GetLLL(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate(barIndex);
//
int count = ArraySize(lLLBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return lLLBuffer[barIndex];
}
//
int CopyLLL(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate(start);
//
// Copy Items ...
return Copy(
0,
count,
lLLBuffer,
buffer,
forceClean
//
);
}
//
// HIND ...
//
// HH ...
//
double GetHHH(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate(barIndex);
//
int count = ArraySize(hHHBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return hHHBuffer[barIndex];
}
//
int CopyHHH(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate(start);
//
// Copy Items ...
return Copy(
0,
count,
hHHBuffer,
buffer,
forceClean
//
);
}
//
// LL ...
//
double GetHLL(
int barIndex // Bar Index
)
{
//
if (barIndex < 0)
{
barIndex = 0;
}
//
Calculate(barIndex);
//
int count = ArraySize(hLLBuffer);
if (barIndex >= count)
{
barIndex = count - 1;
}
//
return hLLBuffer[barIndex];
}
//
int CopyHLL(
int start, // Start
int count, // Number of Items for read
double &buffer[], // Dest Buffer
bool forceClean = true // Force To Clean buffer
)
{
//
// Update Calculations ...
Calculate(start);
//
// Copy Items ...
return Copy(
0,
count,
hLLBuffer,
buffer,
forceClean
//
);
}
//
// Protected ...
protected:
//
// Private ...
private:
//
// Props ...
XOM1Inputs mInputs; // Inputs ...
//
// Buffers ...
// Define in Public ...
//
void Calculate(
int barIndex = 0,
int maxRequiredBars = 100 //
)
{
//
// Buffers ...
if (barIndex < 0)
{
barIndex = 0;
}
//
CopyBuffer(
mHandler,
XOM1_MA_FAST_LINE,
barIndex,
maxRequiredBars,
maFastBuffer //
);
//
CopyBuffer(
mHandler,
XOM1_MA_FAST_COLOR_LINE,
barIndex,
maxRequiredBars,
maFastColorBuffer //
);
//
CopyBuffer(
mHandler,
XOM1_MA_FAST_STATE_LINE,
barIndex,
maxRequiredBars,
maFastStateBuffer //
);
//
CopyBuffer(
mHandler,
XOM1_MA_SLOW_LINE,
barIndex,
maxRequiredBars,
maSlowBuffer //
);
//
CopyBuffer(
mHandler,
XOM1_MA_SLOW_COLOR_LINE,
barIndex,
maxRequiredBars,
maSlowColorBuffer //
);
//
CopyBuffer(
mHandler,
XOM1_MA_SLOW_STATE_LINE,
barIndex,
maxRequiredBars,
maSlowStateBuffer //
);
//
CopyBuffer(
mHandler,
XOM1_SAR_LINE,
barIndex,
maxRequiredBars,
sarBuffer //
);
//
CopyBuffer(
mHandler,
XOM1_SAR_COLOR_LINE,
barIndex,
maxRequiredBars,
sarColorBuffer //
);
//
CopyBuffer(
mHandler,
XOM1_SAR_STATE_LINE,
barIndex,
maxRequiredBars,
sarStateBuffer //
);
//
CopyBuffer(
mHandler,
XOM1_PEAK_LINE,
barIndex,
maxRequiredBars,
peakBuffer //
);
//
CopyBuffer(
mHandler,
XOM1_VALE_LINE,
barIndex,
maxRequiredBars,
valeBuffer //
);
//
CopyBuffer(
mHandler,
XOM1_FINO_UPPER_LINE,
barIndex,
maxRequiredBars,
fiboUpperBuffer //
);
//
CopyBuffer(
mHandler,
XOM1_FINO_LOWER_LINE,
barIndex,
maxRequiredBars,
fiboLowerBuffer //
);
//
CopyBuffer(
mHandler,
XOM1_SC_HH_LINE,
barIndex,
maxRequiredBars,
sHHBuffer //
);
//
CopyBuffer(
mHandler,
XOM1_SC_LL_LINE,
barIndex,
maxRequiredBars,
sLLBuffer //
);
//
CopyBuffer(
mHandler,
XOM1_MC_HH_LINE,
barIndex,
maxRequiredBars,
mHHBuffer //
);
//
CopyBuffer(
mHandler,
XOM1_MC_LL_LINE,
barIndex,
maxRequiredBars,
mLLBuffer //
);
//
CopyBuffer(
mHandler,
XOM1_LC_HH_LINE,
barIndex,
maxRequiredBars,
lHHBuffer //
);
//
CopyBuffer(
mHandler,
XOM1_LC_LL_LINE,
barIndex,
maxRequiredBars,
lLLBuffer //
);
//
CopyBuffer(
mHandler,
XOM1_HC_HH_LINE,
barIndex,
maxRequiredBars,
hHHBuffer //
);
//
CopyBuffer(
mHandler,
XOM1_HC_LL_LINE,
barIndex,
maxRequiredBars,
hLLBuffer //
);
}
//
void Cleanup(
int maxAllowed = 100 //
)
{
//
CleanupArray(
maFastBuffer,
maxAllowed //
);
//
CleanupArray(
maFastColorBuffer,
maxAllowed //
);
//
CleanupArray(
maFastStateBuffer,
maxAllowed //
);
//
CleanupArray(
maSlowBuffer,
maxAllowed //
);
//
CleanupArray(
maSlowColorBuffer,
maxAllowed //
);
//
CleanupArray(
maSlowStateBuffer,
maxAllowed //
);
//
CleanupArray(
sarBuffer,
maxAllowed //
);
//
CleanupArray(
sarColorBuffer,
maxAllowed //
);
//
CleanupArray(
sarStateBuffer,
maxAllowed //
);
//
CleanupArray(
peakBuffer,
maxAllowed //
);
//
CleanupArray(
valeBuffer,
maxAllowed //
);
//
CleanupArray(
fiboUpperBuffer,
maxAllowed //
);
//
CleanupArray(
fiboLowerBuffer,
maxAllowed //
);
//
CleanupArray(
sHHBuffer,
maxAllowed //
);
//
CleanupArray(
sLLBuffer,
maxAllowed //
);
//
CleanupArray(
mHHBuffer,
maxAllowed //
);
//
CleanupArray(
mLLBuffer,
maxAllowed //
);
//
CleanupArray(
lHHBuffer,
maxAllowed //
);
//
CleanupArray(
lLLBuffer,
maxAllowed //
);
//
CleanupArray(
hHHBuffer,
maxAllowed //
);
//
CleanupArray(
hLLBuffer,
maxAllowed //
);
}
};