|
#A-V2 Trading Cloud
input ColorBars = no;
input ma_type = {SMA, EMA, SMMA, WMA, default VWMA, RMS, DEMA, TEMA, ZLSMA, ZLDEMA, ZLTEMA, McGinley, HMA, SWMA, Gaussian, KAMA, MAV, LSMA}; # "MA Type"
input ma_period = 20; # "MA Period (Length)"
input ma_period_smoothing = 7; # "MA Period smoothing (Length)"
input Show_Signals = yes;
input show_High_Low_cloud = yes; # "Show (cloud)"
input show_High_Low_Lines = no; # "Show (High & Low Lines)"
input show_Open_Close_Lines = no; # "Show (Open & Close Lines)"
def na = Double.NaN;
#Color
DefineGlobalColor("pos" , CreateColor(42, 182, 169));
DefineGlobalColor("neg" , CreateColor(237, 60, 57));
#rms(source, length)=>
script rms {
input source = close;
input length = 14;
def rms = Sqrt(Sum(Power(source, 2), length) / length);
plot return = rms;
}
#mav (source, length) =>
script mav {
input source = close;
input length = 14;
def mav = ((SimpleMovingAvg(source, length)[1] * (length - 1)) + source) / length;
plot return = mav;
}
#kama(xPrice, Length)=>
script kama {
input xPrice = close;
input Length = 14;
def xvnoise = AbsValue(xPrice - xPrice[1]);
def nfastend = 0.666;
def nslowend = 0.0645;
def nsignal = AbsValue(xPrice - xPrice[Length]);
def nnoise = Sum(xvnoise, Length);
def nefratio = if nnoise != 0 then nsignal / nnoise else 0;
def nsmooth = Power(nefratio * (nfastend - nslowend) + nslowend, 2);
def nAMA;
nAMA = CompoundValue(1, nAMA[1] + nsmooth * (xPrice - nAMA[1]), xPrice);
plot returen = nAMA;
}
#Gaussianma(values, length) =>
script Gaussian {
input values = close;
input length = 20;
def stddev = length / 4;
def indices = length - 1;
def weights = Exp(-0.5 * (Power((indices - length), 2) / Power(stddev, 2)));
def sum = Sum(values * weights, length);
def gMA = sum / Sum(weights, length);
plot return = gMA;
}
#export zlSma(float src, simple int len) =>
script zlSma {
input src = close;
input len = 14;
def lsma = Inertia(src, len);
def lsma2 = Inertia(lsma, len);
def eq = lsma - lsma2;
def zlsma = lsma + eq;
plot return = zlsma;
}
#export zlDema(float src, simple int len) =>
script zlDema {
input src = close;
input len = 14;
def zdema1 = ExpAverage(src, len);
def zdema2 = ExpAverage(zdema1, len);
def dema1 = 2 * zdema1 - zdema2;
def zdema12 = ExpAverage(dema1, len);
def zdema22 = ExpAverage(zdema12, len);
def zldema = 2 * zdema12 - zdema22;
plot return = zldema;
}
#export zlTema(float src, simple int len) =>
script zlTema {
input src = close;
input len = 14;
def ema1 = ExpAverage(src, len);
def ema2 = ExpAverage(ema1, len);
def ema3 = ExpAverage(ema2, len);
def tema1 = 3 * (ema1 - ema2) + ema3;
def ema1a = ExpAverage(tema1, len);
def ema2a = ExpAverage(ema1a, len);
def ema3a = ExpAverage(ema2a, len);
def zltema = 3 * (ema1a - ema2a) + ema3a;
plot return = zltema;
}
#export multiMa(float source, simple int length, string type) =>
script f_ma_type {
input type = "SMA";
input source = close;
input length = 14;
def w = WMA(source, length);
def swma = source[3] * 1 / 6 + source[2] * 2 / 6 + source[1] * 2 / 6 + source[0] * 1 / 6;
def mg;
def t = ExpAverage(source, length);
mg = CompoundValue(1 , if IsNaN(mg[1]) then t else mg[1] + (source - mg[1]) / (length * Power(source / mg[1], 4)), t);
def v = if volume==0 or isNaN(volume) then 1 else volume;
def VWMA = SimpleMovingAvg(source * v, length) / SimpleMovingAvg(v, length);
def multiMa =
if type == "SMA" then SimpleMovingAvg(source, length) else
if type == "EMA" then ExpAverage(source, length) else
if type == "SMMA" then CompoundValue(1, if IsNaN(w[1]) then Average(source, length) else
(w[1] * (length - 1) + source) / length, Average(source, length)) else
if type == "WMA" then WMA(source, length) else
if type == "KAMA" then KAMA(source, length) else
if type == "MAV" then MAV(source, length) else
if type == "VWMA" then VWMA else
if type == "DEMA" then DEMA(source, length) else
if type == "TEMA" then TEMA(source, length) else
if type == "LSMA" then Inertia(source, length) else
if type == "RMS" then RMS(source, length) else
if type == "ZLSMA" then zlSma(source, length) else
if type == "ZLDEMA" then zlDema(source, length) else
if type == "ZLTEMA" then zlTema(source, length) else
if type == "McGinley" then mg else
if type == "SWMA" then swma else
if type == "Gaussian" then Gaussian(source, length) else
if type == "HMA" then HullMovingAvg(source, length ) else Double.NaN;
plot return = multiMa;
}
#// II.1. Calculations, MA
def o = f_ma_type(ma_type, open, ma_period);
def c = f_ma_type(ma_type, close, ma_period);
def h = f_ma_type(ma_type, high, ma_period);
def l = f_ma_type(ma_type, low, ma_period);
def ha_C = (o + h + l + c) / 4;
def ha_O = CompoundValue(1, (ha_O[1] + ha_C[1]) / 2, (o[1] + c[1]) / 2);
def ha_H = Max(Max(h, ha_O), ha_C);
def ha_L = Min(Min(l, ha_O), ha_C);
#// II.3. Calculations, MA (Smoothing)
def ha_o_smooth = f_ma_type(ma_type, ha_O, ma_period_smoothing);
def ha_c_smooth = f_ma_type(ma_type, ha_C, ma_period_smoothing);
def ha_h_smooth = f_ma_type(ma_type, ha_H, ma_period_smoothing);
def ha_l_smooth = f_ma_type(ma_type, ha_L, ma_period_smoothing);
#// III.1. Display, Colors
def trend = ha_c_smooth >= ha_o_smooth;
def o_line = ha_o_smooth; # "Open line"
def c_line = ha_c_smooth; # "Close line"
def h_line = if show_High_Low_cloud then ha_h_smooth else na; # "High line"
def l_line = if show_High_Low_cloud then ha_l_smooth else na; # "Low line"
AddCloud(c_line, o_line, GlobalColor("pos"), GlobalColor("neg"), show_Open_Close_Lines);
AddCloud(h_line, l_line, Color.DARK_GRAY, Color.DARK_GRAY, show_High_Low_Lines);
def crossUp = if (c_line>o_line and close > h_line) then crossUp[1]+1 else 0;
def crossDn = if (c_line) then crossDn[1]+1 else 0;
plot WedgUp = if Show_Signals and crossUp==2 then low else na;
plot WedgDn = if Show_Signals and crossDn==2 then high else na;
WedgUp.SetPaintingStrategy(PaintingStrategy.BOOLEAN_WEDGE_DOWN);
WedgDn.SetPaintingStrategy(PaintingStrategy.BOOLEAN_WEDGE_UP);
WedgUp.SetDefaultColor(Color.CYAN);
WedgDn.SetDefaultColor(Color.MAGENTA);
AssignPriceColor(if !ColorBars then Color.CURRENT else
if trend then Color.GREEN else Color.RED);
#-- Close of CODE
|
|