add support for cycles ma in xfima ...
This commit is contained in:
+208
-18
@@ -145,8 +145,8 @@ input int valeArrowCode = 159; // Vales Arrow Code
|
|||||||
#property indicator_chart_window
|
#property indicator_chart_window
|
||||||
|
|
||||||
//
|
//
|
||||||
#property indicator_buffers 49
|
#property indicator_buffers 57
|
||||||
#property indicator_plots 18
|
#property indicator_plots 22
|
||||||
|
|
||||||
//
|
//
|
||||||
// Plot Buffers ...
|
// Plot Buffers ...
|
||||||
@@ -424,11 +424,60 @@ double atrBandLowerBuffer[];
|
|||||||
#property indicator_color18 clrOrange
|
#property indicator_color18 clrOrange
|
||||||
#property indicator_width18 2
|
#property indicator_width18 2
|
||||||
|
|
||||||
|
|
||||||
|
//
|
||||||
|
#define scMaBufferIndex 25
|
||||||
|
double scMaBuffer[];
|
||||||
|
|
||||||
|
//
|
||||||
|
#define scMaBufferPlotIndex 18
|
||||||
|
#property indicator_label19 "SCMA"
|
||||||
|
#property indicator_type19 DRAW_LINE
|
||||||
|
#property indicator_color19 clrChocolate
|
||||||
|
#property indicator_style19 STYLE_DASHDOT
|
||||||
|
#property indicator_width19 2
|
||||||
|
|
||||||
|
//
|
||||||
|
#define mcMaBufferIndex 26
|
||||||
|
double mcMaBuffer[];
|
||||||
|
|
||||||
|
//
|
||||||
|
#define mcMaBufferPlotIndex 19
|
||||||
|
#property indicator_label20 "MCMA"
|
||||||
|
#property indicator_type20 DRAW_LINE
|
||||||
|
#property indicator_color20 clrChocolate
|
||||||
|
#property indicator_style20 STYLE_DASHDOT
|
||||||
|
#property indicator_width20 2
|
||||||
|
|
||||||
|
//
|
||||||
|
#define lcMaBufferIndex 27
|
||||||
|
double lcMaBuffer[];
|
||||||
|
|
||||||
|
//
|
||||||
|
#define lcMaBufferPlotIndex 20
|
||||||
|
#property indicator_label21 "LCMA"
|
||||||
|
#property indicator_type21 DRAW_LINE
|
||||||
|
#property indicator_color21 clrChocolate
|
||||||
|
#property indicator_style21 STYLE_DASHDOT
|
||||||
|
#property indicator_width21 2
|
||||||
|
|
||||||
|
//
|
||||||
|
#define hcMaBufferIndex 28
|
||||||
|
double hcMaBuffer[];
|
||||||
|
|
||||||
|
//
|
||||||
|
#define hcMaBufferPlotIndex 21
|
||||||
|
#property indicator_label22 "HCMA"
|
||||||
|
#property indicator_type22 DRAW_LINE
|
||||||
|
#property indicator_color22 clrChocolate
|
||||||
|
#property indicator_style22 STYLE_DASHDOT
|
||||||
|
#property indicator_width22 2
|
||||||
|
|
||||||
//
|
//
|
||||||
// Data Buffers ...
|
// Data Buffers ...
|
||||||
|
|
||||||
//
|
//
|
||||||
#define mLastBufferIndex 24
|
#define mLastBufferIndex 28
|
||||||
|
|
||||||
//
|
//
|
||||||
// MA ...
|
// MA ...
|
||||||
@@ -559,32 +608,59 @@ double atrBandRawUpperBuffer[];
|
|||||||
#define atrBandRawLowerBufferIndex mLastBufferIndex + 24
|
#define atrBandRawLowerBufferIndex mLastBufferIndex + 24
|
||||||
double atrBandRawLowerBuffer[];
|
double atrBandRawLowerBuffer[];
|
||||||
|
|
||||||
|
//
|
||||||
|
// XCMA Data ...
|
||||||
|
|
||||||
|
//
|
||||||
|
#define scMaStateBufferIndex mLastBufferIndex + 25
|
||||||
|
double scMaStateBuffer[];
|
||||||
|
|
||||||
|
//
|
||||||
|
#define mcMaStateBufferIndex mLastBufferIndex + 26
|
||||||
|
double mcMaStateBuffer[];
|
||||||
|
|
||||||
|
//
|
||||||
|
#define lcMaStateBufferIndex mLastBufferIndex + 27
|
||||||
|
double lcMaStateBuffer[];
|
||||||
|
|
||||||
|
//
|
||||||
|
#define hcMaStateBufferIndex mLastBufferIndex + 28
|
||||||
|
double hcMaStateBuffer[];
|
||||||
|
|
||||||
//
|
//
|
||||||
// Variables, Properties and etc ...
|
// Variables, Properties and etc ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// XMarketCycle sc;
|
// XMarketCycle sc;
|
||||||
int mSCLength = 0;
|
int mSCLength = 0;
|
||||||
|
int mSCMALength = 0;
|
||||||
ENUM_TIMEFRAMES mSCPeriod = NULL;
|
ENUM_TIMEFRAMES mSCPeriod = NULL;
|
||||||
|
|
||||||
//
|
//
|
||||||
// XMarketCycle mc;
|
// XMarketCycle mc;
|
||||||
int mMCLength = 0;
|
int mMCLength = 0;
|
||||||
|
int mMCMALength = 0;
|
||||||
ENUM_TIMEFRAMES mMCPeriod = NULL;
|
ENUM_TIMEFRAMES mMCPeriod = NULL;
|
||||||
|
|
||||||
//
|
//
|
||||||
// XMarketCycle lc;
|
// XMarketCycle lc;
|
||||||
int mLCLength = 0;
|
int mLCLength = 0;
|
||||||
|
int mLCMALength = 0;
|
||||||
ENUM_TIMEFRAMES mLCPeriod = NULL;
|
ENUM_TIMEFRAMES mLCPeriod = NULL;
|
||||||
|
|
||||||
//
|
//
|
||||||
// XMarketCycle hc;
|
// XMarketCycle hc;
|
||||||
int mHCLength = 0;
|
int mHCLength = 0;
|
||||||
|
int mHCMALength = 0;
|
||||||
ENUM_TIMEFRAMES mHCPeriod = NULL;
|
ENUM_TIMEFRAMES mHCPeriod = NULL;
|
||||||
|
|
||||||
//
|
//
|
||||||
int sarHandler = INVALID_HANDLE;
|
int sarHandler = INVALID_HANDLE;
|
||||||
int atrHandler = INVALID_HANDLE;
|
int atrHandler = INVALID_HANDLE;
|
||||||
|
int scMaHandler = INVALID_HANDLE;
|
||||||
|
int mcMaHandler = INVALID_HANDLE;
|
||||||
|
int lcMaHandler = INVALID_HANDLE;
|
||||||
|
int hcMaHandler = INVALID_HANDLE;
|
||||||
int maFastHandler = INVALID_HANDLE;
|
int maFastHandler = INVALID_HANDLE;
|
||||||
int maSlowHandler = INVALID_HANDLE;
|
int maSlowHandler = INVALID_HANDLE;
|
||||||
int maUpperHandler = INVALID_HANDLE;
|
int maUpperHandler = INVALID_HANDLE;
|
||||||
@@ -599,11 +675,6 @@ int maxLength;
|
|||||||
//
|
//
|
||||||
int firstBarIndex;
|
int firstBarIndex;
|
||||||
|
|
||||||
//
|
|
||||||
// Requirements ...
|
|
||||||
CArrayObj mObjects;
|
|
||||||
XCPOIDrawer *mDrawer;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
double zigzagUppers[];
|
double zigzagUppers[];
|
||||||
double zigzagLowers[];
|
double zigzagLowers[];
|
||||||
@@ -703,17 +774,14 @@ void OnDeinit(const int reason)
|
|||||||
// REASON_INITFAILED 8 The OnInit() handler returned a non-zero value
|
// REASON_INITFAILED 8 The OnInit() handler returned a non-zero value
|
||||||
// REASON_CLOSE 9 Terminal closed
|
// REASON_CLOSE 9 Terminal closed
|
||||||
|
|
||||||
//
|
|
||||||
delete mDrawer;
|
|
||||||
ZeroMemory(mDrawer);
|
|
||||||
|
|
||||||
//
|
|
||||||
mObjects.Clear();
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// De Initialize all Handlers and etc ...
|
// De Initialize all Handlers and etc ...
|
||||||
IndicatorRelease(sarHandler);
|
IndicatorRelease(sarHandler);
|
||||||
IndicatorRelease(atrHandler);
|
IndicatorRelease(atrHandler);
|
||||||
|
IndicatorRelease(scMaHandler);
|
||||||
|
IndicatorRelease(mcMaHandler);
|
||||||
|
IndicatorRelease(lcMaHandler);
|
||||||
|
IndicatorRelease(hcMaHandler);
|
||||||
IndicatorRelease(maFastHandler);
|
IndicatorRelease(maFastHandler);
|
||||||
IndicatorRelease(maSlowHandler);
|
IndicatorRelease(maSlowHandler);
|
||||||
IndicatorRelease(maUpperHandler);
|
IndicatorRelease(maUpperHandler);
|
||||||
@@ -780,6 +848,12 @@ int OnCalculate(
|
|||||||
//
|
//
|
||||||
// Validate Calculated Bars ...
|
// Validate Calculated Bars ...
|
||||||
|
|
||||||
|
//
|
||||||
|
int scCalculatedBars = BarsCalculated(scMaHandler);
|
||||||
|
int mcCalculatedBars = BarsCalculated(mcMaHandler);
|
||||||
|
int lcCalculatedBars = BarsCalculated(lcMaHandler);
|
||||||
|
int hcCalculatedBars = BarsCalculated(hcMaHandler);
|
||||||
|
|
||||||
//
|
//
|
||||||
// MA ...
|
// MA ...
|
||||||
int maFastCalculatedBars = BarsCalculated(maFastHandler);
|
int maFastCalculatedBars = BarsCalculated(maFastHandler);
|
||||||
@@ -797,6 +871,12 @@ int OnCalculate(
|
|||||||
|
|
||||||
//
|
//
|
||||||
bool isPassedRequiredCalculatedBars =
|
bool isPassedRequiredCalculatedBars =
|
||||||
|
//
|
||||||
|
// Cycles MA Handlers ...
|
||||||
|
scCalculatedBars >= maxLength &&
|
||||||
|
mcCalculatedBars >= maxLength &&
|
||||||
|
lcCalculatedBars >= maxLength &&
|
||||||
|
hcCalculatedBars >= maxLength &&
|
||||||
//
|
//
|
||||||
// MA ...
|
// MA ...
|
||||||
maFastCalculatedBars >= maxLength &&
|
maFastCalculatedBars >= maxLength &&
|
||||||
@@ -808,8 +888,7 @@ int OnCalculate(
|
|||||||
sarCalculatedBars >= maxLength &&
|
sarCalculatedBars >= maxLength &&
|
||||||
//
|
//
|
||||||
// ATR ...
|
// ATR ...
|
||||||
atrCalculatedBars >= maxLength
|
atrCalculatedBars >= maxLength //
|
||||||
//
|
|
||||||
;
|
;
|
||||||
if (!isPassedRequiredCalculatedBars)
|
if (!isPassedRequiredCalculatedBars)
|
||||||
{
|
{
|
||||||
@@ -824,6 +903,12 @@ int OnCalculate(
|
|||||||
//
|
//
|
||||||
// Buffers Copy ...
|
// Buffers Copy ...
|
||||||
|
|
||||||
|
//
|
||||||
|
int copiedSCs = CopyBuffer(scMaHandler, MAIN_LINE, 0, limit, scMaBuffer);
|
||||||
|
int copiedMCs = CopyBuffer(mcMaHandler, MAIN_LINE, 0, limit, mcMaBuffer);
|
||||||
|
int copiedLCs = CopyBuffer(lcMaHandler, MAIN_LINE, 0, limit, lcMaBuffer);
|
||||||
|
int copiedHCs = CopyBuffer(hcMaHandler, MAIN_LINE, 0, limit, hcMaBuffer);
|
||||||
|
|
||||||
//
|
//
|
||||||
// MA ...
|
// MA ...
|
||||||
int copiedMAFasts = CopyBuffer(maFastHandler, MAIN_LINE, 0, limit, maFastBuffer);
|
int copiedMAFasts = CopyBuffer(maFastHandler, MAIN_LINE, 0, limit, maFastBuffer);
|
||||||
@@ -842,6 +927,12 @@ int OnCalculate(
|
|||||||
//
|
//
|
||||||
// Validate Copied Items ...
|
// Validate Copied Items ...
|
||||||
bool isPassedRequiredCopiedItems =
|
bool isPassedRequiredCopiedItems =
|
||||||
|
//
|
||||||
|
// Cycles MA ...
|
||||||
|
copiedSCs >= limit &&
|
||||||
|
copiedMCs >= limit &&
|
||||||
|
copiedLCs >= limit &&
|
||||||
|
copiedHCs >= limit &&
|
||||||
//
|
//
|
||||||
// MA ...
|
// MA ...
|
||||||
copiedMAFasts >= limit &&
|
copiedMAFasts >= limit &&
|
||||||
@@ -1479,6 +1570,21 @@ bool InitCycles()
|
|||||||
mMCLength > mSCLength &&
|
mMCLength > mSCLength &&
|
||||||
mLCLength > mMCLength &&
|
mLCLength > mMCLength &&
|
||||||
mHCLength > mLCLength;
|
mHCLength > mLCLength;
|
||||||
|
if (result)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Initialized Cycles MA Ribons Length ...
|
||||||
|
mSCMALength = maBandLength * mSCLength;
|
||||||
|
mMCMALength = maBandLength * mMCLength;
|
||||||
|
mLCMALength = maBandLength * mLCLength;
|
||||||
|
mHCMALength = maBandLength * mHCLength;
|
||||||
|
|
||||||
|
//
|
||||||
|
result = mSCMALength > 0 &&
|
||||||
|
mMCMALength > mSCMALength &&
|
||||||
|
mLCMALength > mMCMALength &&
|
||||||
|
mHCMALength > mLCMALength;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
@@ -1590,7 +1696,71 @@ bool InitRequirements()
|
|||||||
}
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
mDrawer = new XCPOIDrawer();
|
// Cycles MA Handler ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// SC ...
|
||||||
|
scMaHandler = iMA(
|
||||||
|
_Symbol,
|
||||||
|
_Period,
|
||||||
|
mSCMALength,
|
||||||
|
0,
|
||||||
|
maMethod,
|
||||||
|
maAppliedTo //
|
||||||
|
);
|
||||||
|
result = scMaHandler != INVALID_HANDLE;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// MC ...
|
||||||
|
mcMaHandler = iMA(
|
||||||
|
_Symbol,
|
||||||
|
_Period,
|
||||||
|
mMCMALength,
|
||||||
|
0,
|
||||||
|
maMethod,
|
||||||
|
maAppliedTo //
|
||||||
|
);
|
||||||
|
result = mcMaHandler != INVALID_HANDLE;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// LC ...
|
||||||
|
lcMaHandler = iMA(
|
||||||
|
_Symbol,
|
||||||
|
_Period,
|
||||||
|
mLCMALength,
|
||||||
|
0,
|
||||||
|
maMethod,
|
||||||
|
maAppliedTo //
|
||||||
|
);
|
||||||
|
result = lcMaHandler != INVALID_HANDLE;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// HC ...
|
||||||
|
hcMaHandler = iMA(
|
||||||
|
_Symbol,
|
||||||
|
_Period,
|
||||||
|
mHCMALength,
|
||||||
|
0,
|
||||||
|
maMethod,
|
||||||
|
maAppliedTo //
|
||||||
|
);
|
||||||
|
result = hcMaHandler != INVALID_HANDLE;
|
||||||
|
if (!result)
|
||||||
|
{
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
@@ -2577,6 +2747,26 @@ void CalculateATR(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
void CalculateCyclesMA(
|
||||||
|
int barIndex,
|
||||||
|
const int prevCalculated,
|
||||||
|
const int ratesTotal,
|
||||||
|
const double &open[],
|
||||||
|
const double &high[],
|
||||||
|
const double &close[],
|
||||||
|
const double &low[],
|
||||||
|
const long &tickVolume[] //
|
||||||
|
)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int lastBarIndex = barIndex + 1;
|
||||||
|
bool isFirstBar =
|
||||||
|
startCalculationForLastBars > 0
|
||||||
|
? barIndex == startCalculationForLastBars
|
||||||
|
: barIndex == firstBarIndex;
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
void CalculateCycleRanges(
|
void CalculateCycleRanges(
|
||||||
int barIndex,
|
int barIndex,
|
||||||
|
|||||||
Reference in New Issue
Block a user