apply all chanes on xatr indicator, remains Helper ...
This commit is contained in:
@@ -34,10 +34,12 @@ enum ENUM_X121_XATR_BUFFERS
|
|||||||
//
|
//
|
||||||
X121_ATR_UPPER_LINE = 0,
|
X121_ATR_UPPER_LINE = 0,
|
||||||
X121_ATR_LOWER_LINE = 1,
|
X121_ATR_LOWER_LINE = 1,
|
||||||
X121_ATR_LINE = 2,
|
X121_PRICE_CHANGE_LINE = 2,
|
||||||
X121_ATR_UPPER_RAW_LINE = 3,
|
X121_PRICE_CHANGE_MA_LINE = 3,
|
||||||
X121_ATR_LOWER_RAW_LINE = 4,
|
X121_ATR_LINE = 4,
|
||||||
X121_RSI_LINE = 5,
|
X121_ATR_UPPER_RAW_LINE = 5,
|
||||||
|
X121_ATR_LOWER_RAW_LINE = 6,
|
||||||
|
X121_RSI_LINE = 7,
|
||||||
};
|
};
|
||||||
|
|
||||||
//
|
//
|
||||||
|
|||||||
@@ -38,16 +38,23 @@ input group "Market";
|
|||||||
|
|
||||||
//
|
//
|
||||||
input group "RSI Detection";
|
input group "RSI Detection";
|
||||||
input int rsiLength = 14; // Length
|
input int rsiLength = 14; // Length
|
||||||
input ENUM_APPLIED_PRICE rsiAppliedTo = PRICE_CLOSE; // Applied To
|
input ENUM_X_PRICE rsiPriceType = X_PRICE_CLOSE; // Applied To
|
||||||
|
input ENUM_X_MA_METHOD rsiSmoothingMethod = X_MA_MODE_SMA; // Smoothing Method;
|
||||||
|
|
||||||
//
|
//
|
||||||
input group "ATR Detection";
|
input group "ATR Detection";
|
||||||
input int atrLength = 14; // Length
|
input int atrLength = 14; // Length
|
||||||
input double atrMultiplier = 1; // Multiplier
|
input double atrMultiplier = 1; // Multiplier
|
||||||
input ENUM_APPLIED_PRICE atrUpperAppliedTo = PRICE_HIGH; // Upper Zone Applied To
|
input ENUM_X_PRICE atrUpperPriceType = X_PRICE_HIGH; // Upper Zone Applied To
|
||||||
input ENUM_APPLIED_PRICE atrLowerAppliedTo = PRICE_LOW; // Lower Zone Applied To
|
input ENUM_X_PRICE atrLowerPriceType = X_PRICE_LOW; // Lower Zone Applied To
|
||||||
input ENUM_X_MA_METHOD atrSmoothingMode = X_MA_MODE_EMA; // Smoothing Method
|
input ENUM_X_MA_METHOD atrSmoothingMethod = X_MA_MODE_SMA; // Smoothing Method
|
||||||
|
|
||||||
|
//
|
||||||
|
input group "Price Change";
|
||||||
|
input int priceChangeSmoothingLength = 14; // Length
|
||||||
|
input ENUM_X_PRICE priceChangeType = X_PRICE_CLOSE; // Price Type
|
||||||
|
input ENUM_X_MA_METHOD priceChangeSmoothingMethod = X_MA_MODE_SMA; // Moving Average Moethod
|
||||||
|
|
||||||
//
|
//
|
||||||
input group "Presentation";
|
input group "Presentation";
|
||||||
@@ -56,8 +63,14 @@ input group "Presentation";
|
|||||||
input int startCalculationForLastBars = 1000; // Calculate Last n Bars
|
input int startCalculationForLastBars = 1000; // Calculate Last n Bars
|
||||||
|
|
||||||
//
|
//
|
||||||
input bool showAtrUpper = true; // Show Upper Zone
|
input bool showAtrUpper = true; // Show Upper Zone
|
||||||
input bool showAtrLower = true; // Show Lower Zone
|
input bool showAtrLower = true; // Show Lower Zone
|
||||||
|
input bool showSmoothedAtrUpper = true; // Show Smoothed Upper Zone
|
||||||
|
input bool showSmoothedAtrLower = true; // Show Smoothed Lower Zone
|
||||||
|
input bool showRSIChange = true; // Show RSI Change
|
||||||
|
input bool showSmoothedRSIChange = true; // ShowSmoothed RSI Change
|
||||||
|
input bool showPriceChange = true; // Show Price Change
|
||||||
|
input bool showSmoothedPriceChange = true; // ShowSmoothed Price Change
|
||||||
|
|
||||||
//
|
//
|
||||||
// Buffers ...
|
// Buffers ...
|
||||||
@@ -72,8 +85,8 @@ input bool showAtrLower = true; // Show Lower Zone
|
|||||||
#property indicator_chart_window
|
#property indicator_chart_window
|
||||||
|
|
||||||
//
|
//
|
||||||
#property indicator_buffers 6
|
#property indicator_buffers 10
|
||||||
#property indicator_plots 2
|
#property indicator_plots 8
|
||||||
|
|
||||||
//
|
//
|
||||||
// ATR ...
|
// ATR ...
|
||||||
@@ -89,7 +102,7 @@ double atrUpperBuffer[];
|
|||||||
#property indicator_type1 DRAW_LINE
|
#property indicator_type1 DRAW_LINE
|
||||||
#property indicator_color1 clrYellow
|
#property indicator_color1 clrYellow
|
||||||
#property indicator_style1 STYLE_SOLID
|
#property indicator_style1 STYLE_SOLID
|
||||||
#property indicator_width1 2
|
#property indicator_width1 1
|
||||||
|
|
||||||
//
|
//
|
||||||
// Lower ...
|
// Lower ...
|
||||||
@@ -102,13 +115,94 @@ double atrLowerBuffer[];
|
|||||||
#property indicator_type2 DRAW_LINE
|
#property indicator_type2 DRAW_LINE
|
||||||
#property indicator_color2 clrYellow
|
#property indicator_color2 clrYellow
|
||||||
#property indicator_style2 STYLE_SOLID
|
#property indicator_style2 STYLE_SOLID
|
||||||
#property indicator_width2 2
|
#property indicator_width2 1
|
||||||
|
|
||||||
|
//
|
||||||
|
// ATR Smoothed ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// Upper ...
|
||||||
|
|
||||||
|
//
|
||||||
|
#define atrSmoothedUpperBufferIndex 2
|
||||||
|
double atrSmoothedUpperBuffer[];
|
||||||
|
|
||||||
|
#property indicator_label3 "X121 ATRUSM"
|
||||||
|
#property indicator_type3 DRAW_LINE
|
||||||
|
#property indicator_color3 clrYellow
|
||||||
|
#property indicator_style3 STYLE_DASH
|
||||||
|
#property indicator_width3 1
|
||||||
|
|
||||||
|
//
|
||||||
|
// Lower ...
|
||||||
|
|
||||||
|
//
|
||||||
|
#define atrSmoothedLowerBufferIndex 3
|
||||||
|
double atrSmoothedLowerBuffer[];
|
||||||
|
|
||||||
|
#property indicator_label4 "X121 ATRLSM"
|
||||||
|
#property indicator_type4 DRAW_LINE
|
||||||
|
#property indicator_color4 clrYellow
|
||||||
|
#property indicator_style4 STYLE_DASH
|
||||||
|
#property indicator_width4 1
|
||||||
|
|
||||||
|
//
|
||||||
|
// Price Change ...
|
||||||
|
|
||||||
|
//
|
||||||
|
#define priceChangeBufferIndex 4
|
||||||
|
double priceChangeBuffer[];
|
||||||
|
|
||||||
|
#property indicator_label5 "X121 PCH"
|
||||||
|
#property indicator_type5 DRAW_LINE
|
||||||
|
#property indicator_color5 clrOrchid
|
||||||
|
#property indicator_style5 STYLE_SOLID
|
||||||
|
#property indicator_width5 1
|
||||||
|
|
||||||
|
//
|
||||||
|
// Price Change Smoothed ...
|
||||||
|
|
||||||
|
//
|
||||||
|
#define priceChangeSmoothedBufferIndex 5
|
||||||
|
double priceChangeSmoothedBuffer[];
|
||||||
|
|
||||||
|
#property indicator_label6 "X121 PCHSM"
|
||||||
|
#property indicator_type6 DRAW_LINE
|
||||||
|
#property indicator_color6 clrOrchid
|
||||||
|
#property indicator_style6 STYLE_SOLID
|
||||||
|
#property indicator_width6 1
|
||||||
|
|
||||||
|
//
|
||||||
|
// RSI Change ...
|
||||||
|
|
||||||
|
//
|
||||||
|
#define rsiChangeBufferIndex 6
|
||||||
|
double rsiChangeBuffer[];
|
||||||
|
|
||||||
|
#property indicator_label7 "X121 RSICH"
|
||||||
|
#property indicator_type7 DRAW_LINE
|
||||||
|
#property indicator_color7 clrCornflowerBlue
|
||||||
|
#property indicator_style7 STYLE_SOLID
|
||||||
|
#property indicator_width7 1
|
||||||
|
|
||||||
|
//
|
||||||
|
// RSI Change Smoothed ...
|
||||||
|
|
||||||
|
//
|
||||||
|
#define rsiChangeSmoothedBufferIndex 7
|
||||||
|
double rsiChangeSmoothedBuffer[];
|
||||||
|
|
||||||
|
#property indicator_label8 "X121 RSICHSM"
|
||||||
|
#property indicator_type8 DRAW_LINE
|
||||||
|
#property indicator_color8 clrCornflowerBlue
|
||||||
|
#property indicator_style8 STYLE_SOLID
|
||||||
|
#property indicator_width8 1
|
||||||
|
|
||||||
//
|
//
|
||||||
// Data Buffers ...
|
// Data Buffers ...
|
||||||
|
|
||||||
//
|
//
|
||||||
int mLastBufferIndex = 1;
|
int mLastBufferIndex = 7;
|
||||||
|
|
||||||
//
|
//
|
||||||
// ATR ...
|
// ATR ...
|
||||||
@@ -116,15 +210,9 @@ int mLastBufferIndex = 1;
|
|||||||
#define atrBufferIndex mLastBufferIndex + 1
|
#define atrBufferIndex mLastBufferIndex + 1
|
||||||
double atrBuffer[];
|
double atrBuffer[];
|
||||||
|
|
||||||
#define atrUpperRawBufferIndex mLastBufferIndex + 2
|
|
||||||
double atrUpperRawBuffer[];
|
|
||||||
|
|
||||||
#define atrLowerRawBufferIndex mLastBufferIndex + 3
|
|
||||||
double atrLowerRawBuffer[];
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// RSI ...
|
// RSI ...
|
||||||
#define rsiBufferIndex mLastBufferIndex + 4
|
#define rsiBufferIndex mLastBufferIndex + 2
|
||||||
double rsiBuffer[];
|
double rsiBuffer[];
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -146,9 +234,7 @@ int rsiHandler = INVALID_HANDLE;
|
|||||||
int atrHandler = INVALID_HANDLE;
|
int atrHandler = INVALID_HANDLE;
|
||||||
|
|
||||||
//
|
//
|
||||||
bool isStrTrendChanged;
|
ENUM_APPLIED_PRICE rsiAppliedTo = ToAppliedPrice(rsiPriceType);
|
||||||
bool isStrStartBearishTrend;
|
|
||||||
bool isStrStartBullishTrend;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Event Handlers ...
|
// Event Handlers ...
|
||||||
@@ -386,7 +472,14 @@ bool ValidateInputs()
|
|||||||
//
|
//
|
||||||
// ATR ...
|
// ATR ...
|
||||||
atrLength > 0 &&
|
atrLength > 0 &&
|
||||||
atrMultiplier > 0
|
atrMultiplier > 0 &&
|
||||||
|
//
|
||||||
|
priceChangeSmoothingLength > 0 &&
|
||||||
|
//
|
||||||
|
IsValid(rsiPriceType) &&
|
||||||
|
IsValid(priceChangeType) &&
|
||||||
|
IsValid(atrUpperPriceType) &&
|
||||||
|
IsValid(atrLowerPriceType)
|
||||||
//
|
//
|
||||||
;
|
;
|
||||||
|
|
||||||
@@ -406,6 +499,7 @@ int ExtractMaxLengthOfInputs()
|
|||||||
|
|
||||||
//
|
//
|
||||||
result = MathMax(rsiLength, atrLength);
|
result = MathMax(rsiLength, atrLength);
|
||||||
|
result = MathMax(result, priceChangeSmoothingLength);
|
||||||
|
|
||||||
//
|
//
|
||||||
return result;
|
return result;
|
||||||
@@ -421,46 +515,89 @@ void DefineBuffers()
|
|||||||
|
|
||||||
//
|
//
|
||||||
// UPPER ...
|
// UPPER ...
|
||||||
bool canShowAtrUpper = showAtrUpper;
|
ENUM_DRAW_TYPE atrUpperDrawType = showAtrUpper ? DRAW_LINE : DRAW_NONE;
|
||||||
ENUM_DRAW_TYPE atrUpperDrawType = canShowAtrUpper ? DRAW_LINE : DRAW_NONE;
|
|
||||||
ArraySetAsSeries(atrUpperBuffer, true);
|
ArraySetAsSeries(atrUpperBuffer, true);
|
||||||
SetIndexBuffer(atrUpperBufferIndex, atrUpperBuffer, INDICATOR_DATA);
|
SetIndexBuffer(atrUpperBufferIndex, atrUpperBuffer, INDICATOR_DATA);
|
||||||
PlotIndexSetDouble(atrUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE);
|
PlotIndexSetDouble(atrUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE);
|
||||||
PlotIndexSetInteger(atrUpperBufferIndex, PLOT_SHOW_DATA, canShowAtrUpper);
|
PlotIndexSetInteger(atrUpperBufferIndex, PLOT_SHOW_DATA, showAtrUpper);
|
||||||
PlotIndexSetInteger(atrUpperBufferIndex, PLOT_DRAW_TYPE, atrUpperDrawType);
|
PlotIndexSetInteger(atrUpperBufferIndex, PLOT_DRAW_TYPE, atrUpperDrawType);
|
||||||
|
|
||||||
//
|
//
|
||||||
// LOWER ...
|
// LOWER ...
|
||||||
bool canShowAtrLower = showAtrLower;
|
ENUM_DRAW_TYPE atrLowerDrawType = showAtrLower ? DRAW_LINE : DRAW_NONE;
|
||||||
ENUM_DRAW_TYPE atrLowerDrawType = canShowAtrLower ? DRAW_LINE : DRAW_NONE;
|
|
||||||
ArraySetAsSeries(atrLowerBuffer, true);
|
ArraySetAsSeries(atrLowerBuffer, true);
|
||||||
SetIndexBuffer(atrLowerBufferIndex, atrLowerBuffer, INDICATOR_DATA);
|
SetIndexBuffer(atrLowerBufferIndex, atrLowerBuffer, INDICATOR_DATA);
|
||||||
PlotIndexSetDouble(atrLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE);
|
PlotIndexSetDouble(atrLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE);
|
||||||
PlotIndexSetInteger(atrLowerBufferIndex, PLOT_SHOW_DATA, canShowAtrLower);
|
PlotIndexSetInteger(atrLowerBufferIndex, PLOT_SHOW_DATA, showAtrLower);
|
||||||
PlotIndexSetInteger(atrLowerBufferIndex, PLOT_DRAW_TYPE, atrLowerDrawType);
|
PlotIndexSetInteger(atrLowerBufferIndex, PLOT_DRAW_TYPE, atrLowerDrawType);
|
||||||
|
|
||||||
|
//
|
||||||
|
// ATR Smoothed ...
|
||||||
|
|
||||||
|
//
|
||||||
|
// UPPER ...
|
||||||
|
ENUM_DRAW_TYPE atrSmoothedUpperDrawType = showSmoothedAtrUpper ? DRAW_LINE : DRAW_NONE;
|
||||||
|
ArraySetAsSeries(atrSmoothedUpperBuffer, true);
|
||||||
|
SetIndexBuffer(atrSmoothedUpperBufferIndex, atrSmoothedUpperBuffer, INDICATOR_DATA);
|
||||||
|
PlotIndexSetDouble(atrSmoothedUpperBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE);
|
||||||
|
PlotIndexSetInteger(atrSmoothedUpperBufferIndex, PLOT_SHOW_DATA, showSmoothedAtrUpper);
|
||||||
|
PlotIndexSetInteger(atrSmoothedUpperBufferIndex, PLOT_DRAW_TYPE, atrSmoothedUpperDrawType);
|
||||||
|
|
||||||
|
//
|
||||||
|
// LOWER ...
|
||||||
|
ENUM_DRAW_TYPE atrSmoothedLowerDrawType = showSmoothedAtrLower ? DRAW_LINE : DRAW_NONE;
|
||||||
|
ArraySetAsSeries(atrSmoothedLowerBuffer, true);
|
||||||
|
SetIndexBuffer(atrSmoothedLowerBufferIndex, atrSmoothedLowerBuffer, INDICATOR_DATA);
|
||||||
|
PlotIndexSetDouble(atrSmoothedLowerBufferIndex, PLOT_EMPTY_VALUE, EMPTY_VALUE);
|
||||||
|
PlotIndexSetInteger(atrSmoothedLowerBufferIndex, PLOT_SHOW_DATA, showSmoothedAtrLower);
|
||||||
|
PlotIndexSetInteger(atrSmoothedLowerBufferIndex, PLOT_DRAW_TYPE, atrSmoothedLowerDrawType);
|
||||||
|
|
||||||
|
//
|
||||||
|
// PriceChange ...
|
||||||
|
ENUM_DRAW_TYPE priceChangeDrawType = showPriceChange ? DRAW_LINE : DRAW_NONE;
|
||||||
|
ArraySetAsSeries(priceChangeBuffer, true);
|
||||||
|
SetIndexBuffer(priceChangeBufferIndex, priceChangeBuffer, INDICATOR_DATA);
|
||||||
|
PlotIndexSetDouble(priceChangeBufferIndex, PLOT_EMPTY_VALUE, 0.0);
|
||||||
|
PlotIndexSetInteger(priceChangeBufferIndex, PLOT_SHOW_DATA, showPriceChange);
|
||||||
|
PlotIndexSetInteger(priceChangeBufferIndex, PLOT_DRAW_TYPE, priceChangeDrawType);
|
||||||
|
|
||||||
|
//
|
||||||
|
// PriceChange Smoothed ...
|
||||||
|
ENUM_DRAW_TYPE priceChangeSmoothedaDrawType = showSmoothedPriceChange ? DRAW_LINE : DRAW_NONE;
|
||||||
|
ArraySetAsSeries(priceChangeSmoothedBuffer, true);
|
||||||
|
SetIndexBuffer(priceChangeSmoothedBufferIndex, priceChangeSmoothedBuffer, INDICATOR_DATA);
|
||||||
|
PlotIndexSetDouble(priceChangeSmoothedBufferIndex, PLOT_EMPTY_VALUE, 0.0);
|
||||||
|
PlotIndexSetInteger(priceChangeSmoothedBufferIndex, PLOT_SHOW_DATA, showSmoothedPriceChange);
|
||||||
|
PlotIndexSetInteger(priceChangeSmoothedBufferIndex, PLOT_DRAW_TYPE, priceChangeSmoothedaDrawType);
|
||||||
|
|
||||||
|
//
|
||||||
|
// RSIChange ...
|
||||||
|
ENUM_DRAW_TYPE rsiChangeDrawType = showRSIChange ? DRAW_LINE : DRAW_NONE;
|
||||||
|
ArraySetAsSeries(rsiChangeBuffer, true);
|
||||||
|
SetIndexBuffer(rsiChangeBufferIndex, rsiChangeBuffer, INDICATOR_DATA);
|
||||||
|
PlotIndexSetDouble(rsiChangeBufferIndex, PLOT_EMPTY_VALUE, 0.0);
|
||||||
|
PlotIndexSetInteger(rsiChangeBufferIndex, PLOT_SHOW_DATA, showRSIChange);
|
||||||
|
PlotIndexSetInteger(rsiChangeBufferIndex, PLOT_DRAW_TYPE, rsiChangeDrawType);
|
||||||
|
|
||||||
|
//
|
||||||
|
// RSIChangeMa ...
|
||||||
|
ENUM_DRAW_TYPE rsiChangeMaDrawType = showSmoothedRSIChange ? DRAW_LINE : DRAW_NONE;
|
||||||
|
ArraySetAsSeries(rsiChangeSmoothedBuffer, true);
|
||||||
|
SetIndexBuffer(rsiChangeSmoothedBufferIndex, rsiChangeSmoothedBuffer, INDICATOR_DATA);
|
||||||
|
PlotIndexSetDouble(rsiChangeSmoothedBufferIndex, PLOT_EMPTY_VALUE, 0.0);
|
||||||
|
PlotIndexSetInteger(rsiChangeSmoothedBufferIndex, PLOT_SHOW_DATA, showSmoothedRSIChange);
|
||||||
|
PlotIndexSetInteger(rsiChangeSmoothedBufferIndex, PLOT_DRAW_TYPE, rsiChangeMaDrawType);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Data Buffers ...
|
// Data Buffers ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// ATR ...
|
// ATR ...
|
||||||
|
|
||||||
//
|
|
||||||
ArraySetAsSeries(atrBuffer, true);
|
ArraySetAsSeries(atrBuffer, true);
|
||||||
SetIndexBuffer(atrBufferIndex, atrBuffer, INDICATOR_CALCULATIONS);
|
SetIndexBuffer(atrBufferIndex, atrBuffer, INDICATOR_CALCULATIONS);
|
||||||
|
|
||||||
//
|
|
||||||
ArraySetAsSeries(atrUpperRawBuffer, true);
|
|
||||||
SetIndexBuffer(atrUpperRawBufferIndex, atrUpperRawBuffer, INDICATOR_CALCULATIONS);
|
|
||||||
|
|
||||||
//
|
|
||||||
ArraySetAsSeries(atrLowerRawBuffer, true);
|
|
||||||
SetIndexBuffer(atrLowerRawBufferIndex, atrLowerRawBuffer, INDICATOR_CALCULATIONS);
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// RSI ...
|
// RSI ...
|
||||||
|
|
||||||
//
|
|
||||||
ArraySetAsSeries(rsiBuffer, true);
|
ArraySetAsSeries(rsiBuffer, true);
|
||||||
SetIndexBuffer(rsiBufferIndex, rsiBuffer, INDICATOR_CALCULATIONS);
|
SetIndexBuffer(rsiBufferIndex, rsiBuffer, INDICATOR_CALCULATIONS);
|
||||||
}
|
}
|
||||||
@@ -470,7 +607,9 @@ void DefineBuffers()
|
|||||||
*/
|
*/
|
||||||
void SetIndicatorName()
|
void SetIndicatorName()
|
||||||
{
|
{
|
||||||
|
//
|
||||||
IndicatorSetString(INDICATOR_SHORTNAME, ShortName);
|
IndicatorSetString(INDICATOR_SHORTNAME, ShortName);
|
||||||
|
IndicatorSetInteger(INDICATOR_DIGITS, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -535,16 +674,16 @@ void CalculateBuffers(
|
|||||||
void FillBuffersZero(int barIndex)
|
void FillBuffersZero(int barIndex)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// RSIS ...
|
|
||||||
rsiBuffer[barIndex] = 0;
|
rsiBuffer[barIndex] = 0;
|
||||||
|
|
||||||
//
|
|
||||||
// ATRS ...
|
|
||||||
atrBuffer[barIndex] = 0;
|
atrBuffer[barIndex] = 0;
|
||||||
atrUpperBuffer[barIndex] = 0;
|
atrUpperBuffer[barIndex] = 0;
|
||||||
atrUpperRawBuffer[barIndex] = 0;
|
atrLowerBuffer[barIndex] = 0;
|
||||||
atrUpperBuffer[barIndex] = 0;
|
rsiChangeBuffer[barIndex] = 0;
|
||||||
atrLowerRawBuffer[barIndex] = 0;
|
priceChangeBuffer[barIndex] = 0;
|
||||||
|
atrSmoothedUpperBuffer[barIndex] = 0;
|
||||||
|
atrSmoothedLowerBuffer[barIndex] = 0;
|
||||||
|
rsiChangeSmoothedBuffer[barIndex] = 0;
|
||||||
|
priceChangeSmoothedBuffer[barIndex] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -569,15 +708,17 @@ void CalculateAtrZones(
|
|||||||
)
|
)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Select ATr Value ...
|
double points = GetPoints(_Symbol);
|
||||||
double atrValue = atrBuffer[bar_index];
|
|
||||||
double appliedAtrMultiplierValue = atrValue * atrMultiplier;
|
//
|
||||||
|
// ATR Calculations ...
|
||||||
|
double iAtr = atrBuffer[bar_index];
|
||||||
|
double iMultiPliedAtr = iAtr * atrMultiplier;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Select Upper Price ...
|
// Select Upper Price ...
|
||||||
ENUM_X_PRICE mUpperType = ToXPrice(atrUpperAppliedTo);
|
double iUpperPrice = GetAppliedPrice(
|
||||||
double upperPrice = GetAppliedPrice(
|
atrUpperPriceType,
|
||||||
mUpperType,
|
|
||||||
open,
|
open,
|
||||||
high,
|
high,
|
||||||
low,
|
low,
|
||||||
@@ -587,9 +728,8 @@ void CalculateAtrZones(
|
|||||||
|
|
||||||
//
|
//
|
||||||
// Select Lower Price ...
|
// Select Lower Price ...
|
||||||
ENUM_X_PRICE mLowerType = ToXPrice(atrLowerAppliedTo);
|
double iLowerPrice = GetAppliedPrice(
|
||||||
double lowerPrice = GetAppliedPrice(
|
atrLowerPriceType,
|
||||||
mLowerType,
|
|
||||||
open,
|
open,
|
||||||
high,
|
high,
|
||||||
low,
|
low,
|
||||||
@@ -598,21 +738,19 @@ void CalculateAtrZones(
|
|||||||
);
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
// Calculate Raw Atrs ...
|
// Calculate Atrs ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// Upper ...
|
double iAtrUpper = iUpperPrice + iMultiPliedAtr;
|
||||||
double atrUpperRawValue = upperPrice + appliedAtrMultiplierValue;
|
double iAtrLower = iLowerPrice - iMultiPliedAtr;
|
||||||
atrUpperRawBuffer[bar_index] = atrUpperRawValue;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
// Lower ...
|
atrUpperBuffer[bar_index] = iAtrUpper;
|
||||||
double atrLowerRawValue = lowerPrice - appliedAtrMultiplierValue;
|
atrLowerBuffer[bar_index] = iAtrLower;
|
||||||
atrLowerRawBuffer[bar_index] = atrLowerRawValue;
|
|
||||||
|
|
||||||
//
|
//
|
||||||
bool canSmooth = atrSmoothingMode != X_MA_MODE_NONE;
|
bool canSmoothAtr = atrSmoothingMethod != X_MA_MODE_NONE;
|
||||||
if (canSmooth)
|
if (canSmoothAtr)
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Upper ...
|
// Upper ...
|
||||||
@@ -621,9 +759,9 @@ void CalculateAtrZones(
|
|||||||
prevCalculated,
|
prevCalculated,
|
||||||
bar_index,
|
bar_index,
|
||||||
atrLength,
|
atrLength,
|
||||||
atrUpperRawBuffer,
|
|
||||||
atrUpperBuffer,
|
atrUpperBuffer,
|
||||||
atrSmoothingMode //
|
atrSmoothedUpperBuffer,
|
||||||
|
atrSmoothingMethod //
|
||||||
);
|
);
|
||||||
|
|
||||||
//
|
//
|
||||||
@@ -633,17 +771,111 @@ void CalculateAtrZones(
|
|||||||
prevCalculated,
|
prevCalculated,
|
||||||
bar_index,
|
bar_index,
|
||||||
atrLength,
|
atrLength,
|
||||||
atrLowerRawBuffer,
|
|
||||||
atrLowerBuffer,
|
atrLowerBuffer,
|
||||||
atrSmoothingMode //
|
atrSmoothedLowerBuffer,
|
||||||
|
atrSmoothingMethod //
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
// Use Raw Values ...
|
atrSmoothedUpperBuffer[bar_index] = iAtrUpper;
|
||||||
atrUpperBuffer[bar_index] = atrUpperRawValue;
|
atrSmoothedLowerBuffer[bar_index] = iAtrLower;
|
||||||
atrLowerBuffer[bar_index] = atrLowerRawValue;
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// RSI Change Calculations ...
|
||||||
|
|
||||||
|
//
|
||||||
|
double iRsi = rsiBuffer[bar_index];
|
||||||
|
double iRsiP = rsiBuffer[bar_index + 1];
|
||||||
|
double iRsiPrice = GetAppliedPrice(
|
||||||
|
rsiPriceType,
|
||||||
|
open,
|
||||||
|
high,
|
||||||
|
low,
|
||||||
|
close,
|
||||||
|
bar_index //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
double iRsiChanged = iRsi - iRsiP;
|
||||||
|
double iRsiPointsChanged = iRsiChanged / points;
|
||||||
|
|
||||||
|
//
|
||||||
|
double iRChange = iRsiPrice + (iRsiChanged * points);
|
||||||
|
rsiChangeBuffer[bar_index] = iRChange;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool canSmoothRsi = rsiSmoothingMethod != X_MA_MODE_NONE;
|
||||||
|
if (canSmoothRsi)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Upper ...
|
||||||
|
iMAOnBuffer(
|
||||||
|
ratesTotal,
|
||||||
|
prevCalculated,
|
||||||
|
bar_index,
|
||||||
|
atrLength,
|
||||||
|
rsiChangeBuffer,
|
||||||
|
rsiChangeSmoothedBuffer,
|
||||||
|
rsiSmoothingMethod //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
rsiChangeSmoothedBuffer[bar_index] = iRChange;
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
// PRICE Change Calculation ...
|
||||||
|
|
||||||
|
//
|
||||||
|
double iPChangePrice = GetAppliedPrice(
|
||||||
|
priceChangeType,
|
||||||
|
open,
|
||||||
|
high,
|
||||||
|
low,
|
||||||
|
close,
|
||||||
|
bar_index //
|
||||||
|
);
|
||||||
|
double iPPChangePrice = GetAppliedPrice(
|
||||||
|
priceChangeType,
|
||||||
|
open,
|
||||||
|
high,
|
||||||
|
low,
|
||||||
|
close,
|
||||||
|
bar_index + 1 //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
double iPriceChange = iPChangePrice - iPPChangePrice;
|
||||||
|
double iPricePointsChanged = iPriceChange / points;
|
||||||
|
double iVolatilityChange = iPriceChange / iAtr;
|
||||||
|
|
||||||
|
//
|
||||||
|
double iPChange = iPChangePrice + (iPricePointsChanged * points);
|
||||||
|
priceChangeBuffer[bar_index] = iPChange;
|
||||||
|
|
||||||
|
//
|
||||||
|
bool canSmoothPriceChange = priceChangeSmoothingMethod != X_MA_MODE_NONE;
|
||||||
|
if (canSmoothPriceChange)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
// Upper ...
|
||||||
|
iMAOnBuffer(
|
||||||
|
ratesTotal,
|
||||||
|
prevCalculated,
|
||||||
|
bar_index,
|
||||||
|
atrLength,
|
||||||
|
priceChangeBuffer,
|
||||||
|
priceChangeSmoothedBuffer,
|
||||||
|
priceChangeSmoothingMethod //
|
||||||
|
);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
priceChangeSmoothedBuffer[bar_index] = iPChange;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4788,6 +4788,105 @@ struct X121SMCStrategyConditionParser
|
|||||||
(cXConditions.isStrBearish ||
|
(cXConditions.isStrBearish ||
|
||||||
cXConditions.isStrSwitchedToBearish);
|
cXConditions.isStrSwitchedToBearish);
|
||||||
|
|
||||||
|
//
|
||||||
|
// Detecting Str Box ...
|
||||||
|
XBoxZone strBox;
|
||||||
|
bool hasStrBox = false;
|
||||||
|
if (!hasStrBox)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
hasStrBox =
|
||||||
|
cXConditions.isStrBullish ||
|
||||||
|
cXConditions.isStrBearish;
|
||||||
|
if (hasStrBox)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
ENUM_X_DIRECTION strDir =
|
||||||
|
cXConditions.isStrBullish
|
||||||
|
? X_DIRECTION_BULLISH
|
||||||
|
: X_DIRECTION_BEARISH;
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL lastBar;
|
||||||
|
ENUM_X_DIRECTION lastDir;
|
||||||
|
bool hasLast =
|
||||||
|
cHelper
|
||||||
|
.DetectNearestStrSwitched(
|
||||||
|
lastBar,
|
||||||
|
lastDir,
|
||||||
|
zIDX //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
XOHCL prevBar;
|
||||||
|
ENUM_X_DIRECTION prevDir;
|
||||||
|
bool hasPrev =
|
||||||
|
hasLast &&
|
||||||
|
cHelper
|
||||||
|
.DetectNearestStrSwitched(
|
||||||
|
prevBar,
|
||||||
|
prevDir,
|
||||||
|
lastBar.Index() + 1 //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
hasStrBox =
|
||||||
|
hasLast &&
|
||||||
|
hasPrev;
|
||||||
|
if (hasStrBox)
|
||||||
|
{
|
||||||
|
//
|
||||||
|
int fromIDX = MathMax(
|
||||||
|
lastBar.Index(),
|
||||||
|
prevBar.Index() //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
string symbol = cBar.symbol;
|
||||||
|
ENUM_TIMEFRAMES period = cBar.period;
|
||||||
|
|
||||||
|
//
|
||||||
|
datetime from = GetBarTime(
|
||||||
|
symbol,
|
||||||
|
period,
|
||||||
|
fromIDX //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
int length = fromIDX - barIndex;
|
||||||
|
|
||||||
|
//
|
||||||
|
double upper = zBar.FindHighest(
|
||||||
|
length,
|
||||||
|
MODE_HIGH //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
double lower = zBar.FindLowest(
|
||||||
|
length,
|
||||||
|
MODE_LOW //
|
||||||
|
);
|
||||||
|
|
||||||
|
//
|
||||||
|
strBox.from = from;
|
||||||
|
strBox.dir = strDir;
|
||||||
|
strBox.lower = lower;
|
||||||
|
strBox.upper = upper;
|
||||||
|
strBox.symbol = symbol;
|
||||||
|
strBox.period = period;
|
||||||
|
strBox.type = "XSTRBox";
|
||||||
|
strBox.to = TimeCurrent();
|
||||||
|
|
||||||
|
//
|
||||||
|
hasStrBox =strBox.IsValid();
|
||||||
|
}
|
||||||
|
|
||||||
|
//
|
||||||
|
lastBar.Clean();
|
||||||
|
prevBar.Clean();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
// XFastMa ...
|
// XFastMa ...
|
||||||
|
|
||||||
@@ -4820,6 +4919,7 @@ struct X121SMCStrategyConditionParser
|
|||||||
isBullish =
|
isBullish =
|
||||||
//
|
//
|
||||||
// false
|
// false
|
||||||
|
hasStrBox &&
|
||||||
isStrIsBullish &&
|
isStrIsBullish &&
|
||||||
isFastMaOverStr &&
|
isFastMaOverStr &&
|
||||||
// isDeltaIsBullish &&
|
// isDeltaIsBullish &&
|
||||||
@@ -4833,6 +4933,7 @@ struct X121SMCStrategyConditionParser
|
|||||||
isBearish =
|
isBearish =
|
||||||
//
|
//
|
||||||
// false
|
// false
|
||||||
|
hasStrBox &&
|
||||||
isStrIsBearish &&
|
isStrIsBearish &&
|
||||||
isFastMaUnderStr &&
|
isFastMaUnderStr &&
|
||||||
// isDeltaIsBearish &&
|
// isDeltaIsBearish &&
|
||||||
@@ -4848,6 +4949,18 @@ struct X121SMCStrategyConditionParser
|
|||||||
isBearish;
|
isBearish;
|
||||||
if (result)
|
if (result)
|
||||||
{
|
{
|
||||||
|
//
|
||||||
|
XCPOIDrawer *drawer = provider.visionCycleHelper.mPOIDrawer;
|
||||||
|
XCBoxObject *iObj;
|
||||||
|
bool isCreated = drawer.DrawBox(
|
||||||
|
strBox,
|
||||||
|
iObj //
|
||||||
|
);
|
||||||
|
if (isCreated) {
|
||||||
|
//
|
||||||
|
Print("STRBox");
|
||||||
|
}
|
||||||
|
|
||||||
//
|
//
|
||||||
dir =
|
dir =
|
||||||
isBullish
|
isBullish
|
||||||
@@ -4865,7 +4978,7 @@ struct X121SMCStrategyConditionParser
|
|||||||
double points = GetPoints(box.symbol);
|
double points = GetPoints(box.symbol);
|
||||||
|
|
||||||
//
|
//
|
||||||
double pivot = cXConditions.strBuffer[cIDX];
|
double pivot = cXConditions.strBuffer[cIDX];
|
||||||
// isBullish
|
// isBullish
|
||||||
// ? cBar.low - (points * 5)
|
// ? cBar.low - (points * 5)
|
||||||
// : cBar.high + (points * 5);
|
// : cBar.high + (points * 5);
|
||||||
@@ -4911,6 +5024,7 @@ struct X121SMCStrategyConditionParser
|
|||||||
pBar.Clean();
|
pBar.Clean();
|
||||||
pPBar.Clean();
|
pPBar.Clean();
|
||||||
cState.Clean();
|
cState.Clean();
|
||||||
|
strBox.Clean();
|
||||||
cConditions.Clean();
|
cConditions.Clean();
|
||||||
cConditions.Clean();
|
cConditions.Clean();
|
||||||
ZeroMemory(cHelper);
|
ZeroMemory(cHelper);
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ enum ENUM_X121SMC_XIND_PROVIDERS
|
|||||||
// Definitions ...
|
// Definitions ...
|
||||||
|
|
||||||
//
|
//
|
||||||
// XICH Signal Conditions ...
|
// XIND Signal Conditions ...
|
||||||
struct X121SMCStrategyXINDSignalConditions
|
struct X121SMCStrategyXINDSignalConditions
|
||||||
{
|
{
|
||||||
//
|
//
|
||||||
|
|||||||
Reference in New Issue
Block a user