850 lines
18 KiB
Plaintext
850 lines
18 KiB
Plaintext
///////////////////////////////////////////////////////
|
|
//
|
|
// SaherElm IT Center MQL5 Helper Class Library
|
|
// ----------------------------------------------
|
|
// Name: XSCXMRBHelper
|
|
// 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
|
|
|
|
//
|
|
// START Definitions ...
|
|
//
|
|
|
|
//
|
|
// Inputs ...
|
|
struct XMRBInputs
|
|
{
|
|
//
|
|
// Ribbon 1 ...
|
|
int fast1Length; // Fast
|
|
int slow1Length; // Slow
|
|
|
|
//
|
|
// Ribbon 2 ...
|
|
int fast2Length; // Fast
|
|
int slow2Length; // Slow
|
|
|
|
//
|
|
// Ribbon 3 ...
|
|
int fast3Length; // Fast
|
|
int slow3Length; // Slow
|
|
|
|
//
|
|
// Ribbon 4 ...
|
|
int fast4Length; // Fast
|
|
int slow4Length; // Slow
|
|
|
|
//
|
|
// Ribbon 5 ...
|
|
int fast5Length; // Fast
|
|
int slow5Length; // Slow
|
|
|
|
//
|
|
// Calculation ...
|
|
ENUM_MA_METHOD ribbonMode; // Mode
|
|
ENUM_APPLIED_PRICE ribbonAppliedTo; // Applied To
|
|
|
|
//
|
|
// Presentation ...
|
|
bool showFastMa; // Show Fast
|
|
bool showSlowMa; // Show Slow
|
|
bool showRibbon; // Show Ribbon
|
|
};
|
|
|
|
//
|
|
// Index of Lines ...
|
|
enum ENUM_XMRB_BUFFERS
|
|
{
|
|
//
|
|
// Main Requirements ...
|
|
XMRB_FAST_LINE = 0,
|
|
XMRB_SLOW_LINE = 1,
|
|
//
|
|
// RIBBON 1 ...
|
|
XMRB_R1_FAST_LINE = 2,
|
|
XMRB_R1_SLOW_LINE = 3,
|
|
//
|
|
// RIBBON 2 ...
|
|
XMRB_R2_FAST_LINE = 4,
|
|
XMRB_R2_SLOW_LINE = 5,
|
|
//
|
|
// RIBBON 3 ...
|
|
XMRB_R3_FAST_LINE = 6,
|
|
XMRB_R3_SLOW_LINE = 7,
|
|
//
|
|
// RIBBON 4 ...
|
|
XMRB_R4_FAST_LINE = 8,
|
|
XMRB_R4_SLOW_LINE = 9,
|
|
//
|
|
// RIBBON 5 ...
|
|
XMRB_R5_FAST_LINE = 10,
|
|
XMRB_R5_SLOW_LINE = 11,
|
|
};
|
|
|
|
//
|
|
// Retrieve Info Model ...
|
|
struct XMRBInfo
|
|
{
|
|
//
|
|
// Symbol ...
|
|
string symbol;
|
|
|
|
//
|
|
// Period ...
|
|
ENUM_TIMEFRAMES period;
|
|
|
|
//
|
|
// Bar Time ...
|
|
datetime barTime;
|
|
|
|
//
|
|
// Bar Index ...
|
|
int barIndex;
|
|
|
|
//
|
|
// Values ...
|
|
double fast;
|
|
double slow;
|
|
double fastR1;
|
|
double slowR1;
|
|
double fastR2;
|
|
double slowR2;
|
|
double fastR3;
|
|
double slowR3;
|
|
double fastR4;
|
|
double slowR4;
|
|
double fastR5;
|
|
double slowR5;
|
|
|
|
//
|
|
// Conditions ...
|
|
|
|
//
|
|
bool isFastOverSlow;
|
|
bool isFastCrossedOverSlow;
|
|
bool isFastUnderSlow;
|
|
bool isFastCrossedUnderSlow;
|
|
|
|
//
|
|
bool isR1FastOverSlow;
|
|
bool isR1FastCrossedOverSlow;
|
|
bool isR1FastUnderSlow;
|
|
bool isR1FastCrossedUnderSlow;
|
|
|
|
//
|
|
bool isR2FastOverSlow;
|
|
bool isR2FastCrossedOverSlow;
|
|
bool isR2FastUnderSlow;
|
|
bool isR2FastCrossedUnderSlow;
|
|
|
|
//
|
|
bool isR3FastOverSlow;
|
|
bool isR3FastCrossedOverSlow;
|
|
bool isR3FastUnderSlow;
|
|
bool isR3FastCrossedUnderSlow;
|
|
|
|
//
|
|
bool isR4FastOverSlow;
|
|
bool isR4FastCrossedOverSlow;
|
|
bool isR4FastUnderSlow;
|
|
bool isR4FastCrossedUnderSlow;
|
|
|
|
//
|
|
bool isR5FastOverSlow;
|
|
bool isR5FastCrossedOverSlow;
|
|
bool isR5FastUnderSlow;
|
|
bool isR5FastCrossedUnderSlow;
|
|
};
|
|
|
|
//
|
|
// END Definitions ...
|
|
//
|
|
|
|
//
|
|
// START Import and Inclused requirements ...
|
|
//
|
|
|
|
//
|
|
// Includes ...
|
|
#include "../Libraries/x-saherelm.common.lib.mq5"
|
|
#include "../Classes/x-saherelm.xhelper.class.mq5"
|
|
|
|
//
|
|
// END Import and Inclused requirements ...
|
|
//
|
|
|
|
//
|
|
// START Overrides ...
|
|
//
|
|
|
|
//
|
|
// END Overrides ...
|
|
//
|
|
|
|
//
|
|
// a Class for Helping Indicators Requirements ...
|
|
class XSCXMRBHelper : public XSCBaseHelper
|
|
{
|
|
//
|
|
// Public ...
|
|
public:
|
|
//
|
|
// Buffers ...
|
|
double fastBuffer[];
|
|
double slowBuffer[];
|
|
double fastR1Buffer[];
|
|
double slowR1Buffer[];
|
|
double fastR2Buffer[];
|
|
double slowR2Buffer[];
|
|
double fastR3Buffer[];
|
|
double slowR3Buffer[];
|
|
double fastR4Buffer[];
|
|
double slowR4Buffer[];
|
|
double fastR5Buffer[];
|
|
double slowR5Buffer[];
|
|
|
|
//
|
|
// Constructor ...
|
|
void XSCXMRBHelper(
|
|
string symbol, // Trading Symbol
|
|
ENUM_TIMEFRAMES period // Trading Time Frame
|
|
) : XSCBaseHelper(symbol, period)
|
|
{
|
|
PrepareTag();
|
|
}
|
|
|
|
//
|
|
// Deconstructor ...
|
|
void ~XSCXMRBHelper()
|
|
{
|
|
}
|
|
|
|
//
|
|
// START Properties ...
|
|
//
|
|
|
|
//
|
|
// Show Fast ...
|
|
bool ShowFast(
|
|
bool show // Show or Hide
|
|
)
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
if (mShowFastMa == show)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
//
|
|
mShowFastMa = show;
|
|
result = Init();
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Show Slow ...
|
|
bool ShowSlow(
|
|
bool show // Show or Hide
|
|
)
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
if (mShowSlowMa == show)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
//
|
|
mShowSlowMa = show;
|
|
result = Init();
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Show Ribbon ...
|
|
bool ShowRibbon(
|
|
bool show // Show or Hide
|
|
)
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
if (mShowRibbon == show)
|
|
{
|
|
return true;
|
|
}
|
|
|
|
//
|
|
mShowRibbon = show;
|
|
result = Init();
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// END Properties ...
|
|
//
|
|
|
|
//
|
|
// START Provided Functions ...
|
|
//
|
|
|
|
//
|
|
// Prepare Tag ...
|
|
virtual void PrepareTag()
|
|
{
|
|
mTag = "XMRB" + GetTagPrefix();
|
|
}
|
|
|
|
//
|
|
virtual int GetMaxLength()
|
|
{
|
|
//
|
|
int result = -1;
|
|
|
|
//
|
|
result = MathMax(mFast1Length, mFast2Length);
|
|
result = MathMax(result, mFast3Length);
|
|
result = MathMax(result, mFast4Length);
|
|
result = MathMax(result, mFast5Length);
|
|
|
|
//
|
|
result = MathMax(result, mSlow1Length);
|
|
result = MathMax(result, mSlow2Length);
|
|
result = MathMax(result, mSlow3Length);
|
|
result = MathMax(result, mSlow4Length);
|
|
result = MathMax(result, mSlow5Length);
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Initial Indicator Handler ...
|
|
bool Init()
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
// Validate Inputs ...
|
|
result =
|
|
//
|
|
(mFast1Length > 2 &&
|
|
mFast2Length > mFast1Length &&
|
|
mFast3Length > mFast2Length &&
|
|
mFast4Length > mFast3Length &&
|
|
mFast5Length > mFast4Length &&
|
|
mSlow1Length > mFast1Length &&
|
|
mSlow2Length > mFast2Length &&
|
|
mSlow3Length > mFast3Length &&
|
|
mSlow4Length > mFast4Length &&
|
|
mSlow5Length > mFast5Length &&
|
|
mSlow2Length > mSlow1Length &&
|
|
mSlow3Length > mSlow2Length &&
|
|
mSlow4Length > mSlow3Length &&
|
|
mSlow5Length > mSlow4Length
|
|
//
|
|
)
|
|
//
|
|
;
|
|
if (!result)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Initialize Handler ...
|
|
mHandler = iCustom(
|
|
//
|
|
mSymbol,
|
|
mPeriod,
|
|
"x-saherelm.x121.xmrb",
|
|
//
|
|
// Inputs ...
|
|
//
|
|
// Ribbon 1 ...
|
|
"",
|
|
mFast1Length,
|
|
mSlow1Length,
|
|
//
|
|
// Ribbon 2 ...
|
|
"",
|
|
mFast2Length,
|
|
mSlow2Length,
|
|
//
|
|
// Ribbon 3 ...
|
|
"",
|
|
mFast3Length,
|
|
mSlow3Length,
|
|
//
|
|
// Ribbon 4 ...
|
|
"",
|
|
mFast4Length,
|
|
mSlow4Length,
|
|
//
|
|
// Ribbon 5 ...
|
|
"",
|
|
mFast5Length,
|
|
mSlow5Length,
|
|
//
|
|
// Calculation ...
|
|
"",
|
|
//
|
|
// Mode ...
|
|
mRibbonMode,
|
|
//
|
|
// Applied To ...
|
|
mRibbonAppliedTo,
|
|
//
|
|
// Presentation ...
|
|
"",
|
|
//
|
|
// Show Fast ...
|
|
mShowFastMa,
|
|
//
|
|
// Show Slow ...
|
|
mShowSlowMa,
|
|
//
|
|
// Show Ribbon ...
|
|
mShowRibbon
|
|
//
|
|
);
|
|
result = mHandler != INVALID_HANDLE;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Retrieve Current Config ...
|
|
XMRBInputs GetConfig()
|
|
{
|
|
//
|
|
XMRBInputs result;
|
|
|
|
//
|
|
result.fast1Length = mFast1Length;
|
|
result.slow1Length = mSlow1Length;
|
|
result.fast2Length = mFast2Length;
|
|
result.slow2Length = mSlow2Length;
|
|
result.fast3Length = mFast3Length;
|
|
result.slow3Length = mSlow3Length;
|
|
result.fast4Length = mFast4Length;
|
|
result.slow4Length = mSlow4Length;
|
|
result.fast5Length = mFast5Length;
|
|
result.slow5Length = mSlow5Length;
|
|
result.ribbonMode = mRibbonMode;
|
|
result.ribbonAppliedTo = mRibbonAppliedTo;
|
|
result.showFastMa = mShowFastMa;
|
|
result.showSlowMa = mShowSlowMa;
|
|
result.showRibbon = mShowRibbon;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Set Config ...
|
|
bool SetConfig(XMRBInputs &config)
|
|
{
|
|
//
|
|
bool result = false;
|
|
|
|
//
|
|
mFast1Length = config.fast1Length;
|
|
mSlow1Length = config.slow1Length;
|
|
mFast2Length = config.fast2Length;
|
|
mSlow2Length = config.slow2Length;
|
|
mFast3Length = config.fast3Length;
|
|
mSlow3Length = config.slow3Length;
|
|
mFast4Length = config.fast4Length;
|
|
mSlow4Length = config.slow4Length;
|
|
mFast5Length = config.fast5Length;
|
|
mSlow5Length = config.slow5Length;
|
|
mRibbonMode = config.ribbonMode;
|
|
mRibbonAppliedTo = config.ribbonAppliedTo;
|
|
mShowFastMa = config.showFastMa;
|
|
mShowSlowMa = config.showSlowMa;
|
|
mShowRibbon = config.showRibbon;
|
|
|
|
//
|
|
result = Init();
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Reading Buffers based on Given Bar Index ...
|
|
virtual void Calculate(
|
|
int barIndex // Given Bar Index
|
|
)
|
|
{
|
|
//
|
|
// FAST ...
|
|
ArraySetAsSeries(fastBuffer, true);
|
|
CopyBuffer(
|
|
mHandler,
|
|
XMRB_FAST_LINE,
|
|
barIndex,
|
|
mLoopbackBars,
|
|
fastBuffer);
|
|
|
|
//
|
|
// SLOW ...
|
|
ArraySetAsSeries(slowBuffer, true);
|
|
CopyBuffer(
|
|
mHandler,
|
|
XMRB_SLOW_LINE,
|
|
barIndex,
|
|
mLoopbackBars,
|
|
slowBuffer);
|
|
|
|
//
|
|
// RIBBON 1 ...
|
|
|
|
//
|
|
// FAST ...
|
|
ArraySetAsSeries(fastR1Buffer, true);
|
|
CopyBuffer(
|
|
mHandler,
|
|
XMRB_R1_FAST_LINE,
|
|
barIndex,
|
|
mLoopbackBars,
|
|
fastR1Buffer);
|
|
|
|
//
|
|
// SLOW ...
|
|
ArraySetAsSeries(slowR1Buffer, true);
|
|
CopyBuffer(
|
|
mHandler,
|
|
XMRB_R1_SLOW_LINE,
|
|
barIndex,
|
|
mLoopbackBars,
|
|
slowR1Buffer);
|
|
|
|
//
|
|
// RIBBON 2 ...
|
|
|
|
//
|
|
// FAST ...
|
|
ArraySetAsSeries(fastR2Buffer, true);
|
|
CopyBuffer(
|
|
mHandler,
|
|
XMRB_R2_FAST_LINE,
|
|
barIndex,
|
|
mLoopbackBars,
|
|
fastR2Buffer);
|
|
|
|
//
|
|
// SLOW ...
|
|
ArraySetAsSeries(slowR2Buffer, true);
|
|
CopyBuffer(
|
|
mHandler,
|
|
XMRB_R2_SLOW_LINE,
|
|
barIndex,
|
|
mLoopbackBars,
|
|
slowR2Buffer);
|
|
|
|
//
|
|
// RIBBON 3 ...
|
|
|
|
//
|
|
// FAST ...
|
|
ArraySetAsSeries(fastR3Buffer, true);
|
|
CopyBuffer(
|
|
mHandler,
|
|
XMRB_R3_FAST_LINE,
|
|
barIndex,
|
|
mLoopbackBars,
|
|
fastR3Buffer);
|
|
|
|
//
|
|
// SLOW ...
|
|
ArraySetAsSeries(slowR3Buffer, true);
|
|
CopyBuffer(
|
|
mHandler,
|
|
XMRB_R3_SLOW_LINE,
|
|
barIndex,
|
|
mLoopbackBars,
|
|
slowR3Buffer);
|
|
|
|
//
|
|
// RIBBON 4 ...
|
|
|
|
//
|
|
// FAST ...
|
|
ArraySetAsSeries(fastR4Buffer, true);
|
|
CopyBuffer(
|
|
mHandler,
|
|
XMRB_R4_FAST_LINE,
|
|
barIndex,
|
|
mLoopbackBars,
|
|
fastR4Buffer);
|
|
|
|
//
|
|
// SLOW ...
|
|
ArraySetAsSeries(slowR4Buffer, true);
|
|
CopyBuffer(
|
|
mHandler,
|
|
XMRB_R4_SLOW_LINE,
|
|
barIndex,
|
|
mLoopbackBars,
|
|
slowR4Buffer);
|
|
|
|
//
|
|
// RIBBON 5 ...
|
|
|
|
//
|
|
// FAST ...
|
|
ArraySetAsSeries(fastR5Buffer, true);
|
|
CopyBuffer(
|
|
mHandler,
|
|
XMRB_R5_FAST_LINE,
|
|
barIndex,
|
|
mLoopbackBars,
|
|
fastR5Buffer);
|
|
|
|
//
|
|
// SLOW ...
|
|
ArraySetAsSeries(slowR5Buffer, true);
|
|
CopyBuffer(
|
|
mHandler,
|
|
XMRB_R5_SLOW_LINE,
|
|
barIndex,
|
|
mLoopbackBars,
|
|
slowR5Buffer);
|
|
}
|
|
|
|
//
|
|
// Retrieve Info at Specific Bar Index ...
|
|
XMRBInfo GetInfo(
|
|
int barIndex // Given Bar Index
|
|
)
|
|
{
|
|
//
|
|
XMRBInfo result;
|
|
|
|
//
|
|
if (barIndex < 0)
|
|
{
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// Do Calculations ...
|
|
Calculate(barIndex);
|
|
|
|
//
|
|
barIndex--;
|
|
if (barIndex < 0) {
|
|
barIndex = 0;
|
|
}
|
|
|
|
//
|
|
// Generate Candle Time ...
|
|
datetime barTime = GetCandleTime(
|
|
mSymbol,
|
|
mPeriod,
|
|
barIndex);
|
|
|
|
//
|
|
// Fill Result ...
|
|
result.symbol = mSymbol;
|
|
result.period = mPeriod;
|
|
result.barTime = barTime;
|
|
result.barIndex = barIndex;
|
|
|
|
//
|
|
double fast = fastBuffer[barIndex];
|
|
double fastPrev = fastBuffer[barIndex + 1];
|
|
double slow = slowBuffer[barIndex];
|
|
double slowPrev = slowBuffer[barIndex + 1];
|
|
double fastR1 = fastR1Buffer[barIndex];
|
|
double fastR1Prev = fastR1Buffer[barIndex + 1];
|
|
double slowR1 = slowR1Buffer[barIndex];
|
|
double slowR1Prev = slowR1Buffer[barIndex + 1];
|
|
double fastR2 = fastR2Buffer[barIndex];
|
|
double fastR2Prev = fastR2Buffer[barIndex + 1];
|
|
double slowR2 = slowR2Buffer[barIndex];
|
|
double slowR2Prev = slowR2Buffer[barIndex + 1];
|
|
double fastR3 = fastR3Buffer[barIndex];
|
|
double fastR3Prev = fastR3Buffer[barIndex + 1];
|
|
double slowR3 = slowR3Buffer[barIndex];
|
|
double slowR3Prev = slowR3Buffer[barIndex + 1];
|
|
double fastR4 = fastR4Buffer[barIndex];
|
|
double fastR4Prev = fastR4Buffer[barIndex + 1];
|
|
double slowR4 = slowR4Buffer[barIndex];
|
|
double slowR4Prev = slowR4Buffer[barIndex + 1];
|
|
double fastR5 = fastR5Buffer[barIndex];
|
|
double fastR5Prev = fastR5Buffer[barIndex + 1];
|
|
double slowR5 = slowR5Buffer[barIndex];
|
|
double slowR5Prev = slowR5Buffer[barIndex + 1];
|
|
|
|
//
|
|
result.fast = fast;
|
|
result.slow = slow;
|
|
result.fastR1 = fastR1;
|
|
result.slowR1 = slowR1;
|
|
result.fastR2 = fastR2;
|
|
result.slowR2 = slowR2;
|
|
result.fastR3 = fastR3;
|
|
result.slowR3 = slowR3;
|
|
result.fastR4 = fastR4;
|
|
result.slowR4 = slowR4;
|
|
result.fastR5 = fastR5;
|
|
result.slowR5 = slowR5;
|
|
|
|
//
|
|
result.isFastOverSlow =
|
|
fast > slow;
|
|
result.isFastCrossedOverSlow =
|
|
fast > slow && fastPrev <= slowPrev;
|
|
result.isFastUnderSlow =
|
|
fast < slow;
|
|
result.isFastCrossedUnderSlow =
|
|
fast < slow && fastPrev >= slowPrev;
|
|
|
|
//
|
|
result.isR1FastOverSlow =
|
|
fastR1 > slowR1;
|
|
result.isR1FastCrossedOverSlow =
|
|
fastR1 > slowR1 && fastR1Prev <= slowR1Prev;
|
|
result.isR1FastUnderSlow =
|
|
fastR1 < slowR1;
|
|
result.isR1FastCrossedUnderSlow =
|
|
fastR1 < slowR1 && fastR1Prev >= slowR1Prev;
|
|
|
|
//
|
|
result.isR2FastOverSlow =
|
|
fastR2 > slowR2;
|
|
result.isR2FastCrossedOverSlow =
|
|
fastR2 > slowR2 && fastR2Prev <= slowR2Prev;
|
|
result.isR2FastUnderSlow =
|
|
fastR2 < slowR2;
|
|
result.isR2FastCrossedUnderSlow =
|
|
fastR2 < slowR2 && fastR2Prev >= slowR2Prev;
|
|
|
|
//
|
|
result.isR3FastOverSlow =
|
|
fastR3 > slowR3;
|
|
result.isR3FastCrossedOverSlow =
|
|
fastR3 > slowR3 && fastR3Prev <= slowR3Prev;
|
|
result.isR3FastUnderSlow =
|
|
fastR3 < slowR3;
|
|
result.isR3FastCrossedUnderSlow =
|
|
fastR3 < slowR3 && fastR3Prev >= slowR3Prev;
|
|
|
|
//
|
|
result.isR4FastOverSlow =
|
|
fastR4 > slowR4;
|
|
result.isR4FastCrossedOverSlow =
|
|
fastR4 > slowR4 && fastR4Prev <= slowR4Prev;
|
|
result.isR4FastUnderSlow =
|
|
fastR4 < slowR4;
|
|
result.isR4FastCrossedUnderSlow =
|
|
fastR4 < slowR4 && fastR4Prev >= slowR4Prev;
|
|
|
|
//
|
|
result.isR5FastOverSlow =
|
|
fastR5 > slowR5;
|
|
result.isR5FastCrossedOverSlow =
|
|
fastR5 > slowR5 && fastR5Prev <= slowR5Prev;
|
|
result.isR5FastUnderSlow =
|
|
fastR5 < slowR5;
|
|
result.isR5FastCrossedUnderSlow =
|
|
fastR5 < slowR5 && fastR5Prev >= slowR5Prev;
|
|
|
|
//
|
|
return result;
|
|
}
|
|
|
|
//
|
|
// END Provided Functions ...
|
|
//
|
|
|
|
//
|
|
// Protected ...
|
|
protected:
|
|
//
|
|
// Private ...
|
|
private:
|
|
//
|
|
// Indicator Properties ...
|
|
//
|
|
// Market ...
|
|
//
|
|
// Ribbon 1 ...
|
|
int mFast1Length;
|
|
int mSlow1Length;
|
|
//
|
|
// Ribbon 2 ...
|
|
int mFast2Length;
|
|
int mSlow2Length;
|
|
//
|
|
// Ribbon 3 ...
|
|
int mFast3Length;
|
|
int mSlow3Length;
|
|
//
|
|
// Ribbon 4 ...
|
|
int mFast4Length;
|
|
int mSlow4Length;
|
|
//
|
|
// Ribbon 5 ...
|
|
int mFast5Length;
|
|
int mSlow5Length;
|
|
//
|
|
// Calculation ...
|
|
//
|
|
// Mode ...
|
|
ENUM_MA_METHOD mRibbonMode;
|
|
//
|
|
// Applied To ...
|
|
ENUM_APPLIED_PRICE mRibbonAppliedTo;
|
|
//
|
|
// Presentation ...
|
|
//
|
|
// Show Fast ...
|
|
bool mShowFastMa;
|
|
//
|
|
// Show Slow ...
|
|
bool mShowSlowMa;
|
|
//
|
|
// Show Ribbon ...
|
|
bool mShowRibbon;
|
|
};
|
|
|
|
//
|
|
// START Usefull Functions ...
|
|
//
|
|
|
|
//
|
|
// END Usefull Functions ...
|
|
//
|