agirlhasnoname42
Member
I'm making an ADR CCI study, and am really just putting finishing touches on. I have a lower and upper study, and the upper study is supposed to show arrows on price, but there are too many, and I want the code to turn off arrows that are 1 bar after an arrow signal that already fired. I've been able to accomplish this with past studies and I'm not sure where I'm going wrong. The piece of code I'm looking at is immediately below, and I've included the whole study below that for reference. Can someone please help me?
#Lower Study Arrows Off by Default#
plot UpSignalOS_lt = if !lt_overOS125[1] and lt_overOS125 then CCI_Lt
else double.nan;
plot UpSignal_lt = if !UpSignalOS_lt[1] and (OSlb_lt and !OSlb_lt[1]) then CCI_Lt
else Double.NaN;
plot DownSignalOB_lt = if !lt_underOB125[1] and lt_underOB125 then CCI_Lt
else double.nan;
plot DownSignal_lt = if ShowLTBreakoutSignals and ShowLT_OBBreakoutSignals and (OBlb_lt and !OBlb_lt[1]) and !DownSignalOB_lt[1] then CCI_Lt
else Double.NaN;
Whole Code:
#Lower Study Arrows Off by Default#
plot UpSignalOS_lt = if !lt_overOS125[1] and lt_overOS125 then CCI_Lt
else double.nan;
plot UpSignal_lt = if !UpSignalOS_lt[1] and (OSlb_lt and !OSlb_lt[1]) then CCI_Lt
else Double.NaN;
plot DownSignalOB_lt = if !lt_underOB125[1] and lt_underOB125 then CCI_Lt
else double.nan;
plot DownSignal_lt = if ShowLTBreakoutSignals and ShowLT_OBBreakoutSignals and (OBlb_lt and !OBlb_lt[1]) and !DownSignalOB_lt[1] then CCI_Lt
else Double.NaN;
Whole Code:
Ruby:
declare upper;
input length = 20;
input ShowATR = no;
input ShowADR = no;
input ShowADRpercent = no;
input ShowADRpercentReal = no;
input ShowADRdiff = no;
def agg = AggregationPeriod.DAY;
def Pd = close(period = agg);
def hi = high(period = AggregationPeriod.DAY);
def lo = low(period = AggregationPeriod.DAY);
plot ATR = MovingAverage(AverageType.WILDERS, TrueRange(hi, Pd, lo), length);
ATR.SetDefaultColor(Color.GRAY);
ATR.SetHiding(!ShowATR);
##AddLabel (yes, "ATR:" + Round((ATR / close) * 100, 3) + "%", Color.LIGHT_GRAY);
##AddLabel (yes, "ATR:" + round((ATR) , 3), Color.LIGHT_GRAY);
plot ADR = MovingAverage(AverageType.WILDERS, hi - lo, length);
ADR.SetDefaultColor(Color.BLACK);
ADR.SetHiding(!ShowADR);
plot ADRpercent = Round((ADR / Pd) * 100, 2);
ADRpercent.SetDefaultColor(Color.BLUE);
ADRpercent.SetLineWeight(1);
ADRpercent.SetHiding(!ShowADRpercent);
###"today %" higher than the " Avg %" DOES IT WORK??
def ADRover = (((Pd[0] - Pd[1]) / Pd[1]) * 100) > ADRpercent;
def ADRunder = (((Pd[0] - Pd[1]) / Pd[1]) * 100) < ADRpercent;
#AddCloud(ADRover, ADRunder, Color.GREEN, Color.RED);
def ADRpercentReal = ((Pd - Pd[1]) / Pd[1] * 100);
##############################################################################################
##############################################################################################
# def average of %ADR Raw compared to %ADR 20 day Average
def ADRpD = ADRpercentReal;
input ba_length = 2;
input ba_type = AverageType.EXPONENTIAL;
def ba = MovingAverage(ba_type, ADRpD, ba_length);
def BaseAvg = ba;
##############################################################################################
####### Tema on 2 period EMA of %ADR Raw ##################################
input ADRdevT_length_lt = 68;
def ADRdevT_lt = TEMA(BaseAvg, ADRdevT_length_lt);
input ADRdevT_length_mt = 22;
def ADRdevT_mt = TEMA(BaseAvg, ADRdevT_length_mt);
input ADRdevT_length_st = 10;
def ADRdevT_st = TEMA(BaseAvg, ADRdevT_length_st);
#################################################################################################
###CCI Lengths ST, MT, LT###
input show_LT_CCI = yes;
input show_MT_CCI = yes;
input show_ST_CCI = yes;
input ccilength_lt = 51;
input ccilength_mt = 17;
input ccilength_st = 10;
input over_sold = -100;
input over_bought = 100;
def "-125" = -125;
#OBpos.SetDefaultColor(Color.DARK_GREEN);
#OBpos.SetStyle(Curve.FIRM);
#OBpos.SetLineWeight(2);
def "-145" = -145;
#lowpos.SetDefaultColor(Color.GREEN);
#lowpos.SetStyle(Curve.MEDIUM_DASH);
#lowpos.SetLineWeight(1);
def "+125" = 125;
#lowestpos.SetDefaultColor(Color.BLACK);
#lowestpos.SetStyle(Curve.POINTS);
#lowestpos.SetLineWeight(1);
def "+145" = 145;
#OSneg.SetDefaultColor(Color.DARK_RED);
#OSneg.SetStyle(Curve.FIRM);
#OSneg.SetLineWeight(2);
input showLT_OSBreakoutSignals = yes;
input showLT_OBBreakoutSignals = yes;
input showLTBreakoutSignals = yes;
input showMT_OSBreakoutSignals = no;
input showMT_OBBreakoutSignals = no;
input showMTBreakoutSignals = no;
input showST_OSBreakoutSignals = no;
input showST_OBBreakoutSignals = no;
input showSTBreakoutSignals = no;
##LT CCI Line##
def cciclose = ADRdevT_lt * 100;
def price_lt = cciclose + lo + hi;
def linDev_lt = LinDev(price_lt, ccilength_lt);
plot CCI_lt = if linDev_lt == 0 then 0 else (price_lt - Average(price_lt, ccilength_lt)) / linDev_lt / 0.015;
CCI_lt.SetDefaultColor(Color.DARK_GREEN);
CCI_lt.SetStyle(Curve.LONG_DASH);
CCI_lt.SetLineWeight(3);
CCI_lt.SetHiding(!show_LT_CCI);
def cciclose_mt = ADRdevT_mt * 100;
def price_mt = cciclose_mt + lo + hi;
def linDev_mt = LinDev(price_mt, ccilength_mt);
plot CCI_mt = if linDev_mt == 0 then 0 else (price_mt - Average(price_mt, ccilength_mt)) / linDev_mt / 0.015;
CCI_mt.SetDefaultColor(Color.BLUE);
CCI_mt.SetStyle(Curve.MEDIUM_DASH);
CCI_mt.SetLineWeight(2);
CCI_mt.SetHiding(!show_MT_CCI);
def cciclose_st = ADRdevT_st * 100;
def price_st = cciclose_st + lo + hi;
def linDev_st = LinDev(price_st, ccilength_st);
plot CCI_st = if linDev_st == 0 then 0 else (price_st - Average(price_st, ccilength_st)) / linDev_st / 0.015;
CCI_st.SetDefaultColor(Color.RED);
CCI_st.SetStyle(Curve.FIRM);
CCI_st.SetLineWeight(2);
CCI_st.SetHiding(!show_ST_CCI);
########
plot ZeroLine = 0;
ZeroLine.SetDefaultColor(Color.BLACK);
plot OverBought = over_bought;
plot OverSold = over_sold;
#CCI_lt.SetDefaultColor(color.black);
#CCI_mt.SetDefaultColor(color.green);
#CCI_st.SetDefaultColor(color.red);
#ADRdevTema.AssignValueColor(
# if ADRdevTema[0] >= zero and ADRdevTema[1] < zero then Color.GREEN
# else if ADRdevTema[0] < zero and ADRdevTema[1] >= zero then Color.RED
#else if ADRdevTema >= ADRdevTema[1] and ADRdevTema >= OverBought then Color.CYAN
# else if ADRdevTema >= ADRdevTema[1] and ADRdevTema <= Overbought and ADRdevTema >= zero then #Color.GREEN
# else if ADRdevTema >= ADRdevTema[1] and ADRdevTema <= zero and ADRdevTema > OverSold then #Color.Dark_GREEN
# else if ADRdevTema >= ADRdevTema[1] and ADRdevTema <= OverSold then Color.Cyan
# else if ADRdevTema <= ADRdevTema[1] and ADRdevTema >= Overbought then Color.ORANGE
# else if ADRdevTema <= ADRdevTema[1] and ADRdevTema <= OverBought and ADRdevTema >= zero then #Color.dark_red
# else if ADRdevTema <= ADRdevTema[1] and ADRdevTema <= zero and ADRdevTema > OverSold then #Color.red
# else if ADRdevTema <= ADRdevTema[1] and ADRdevTema <= Oversold then Color.Dark_Orange
# else Color.GRAY);
#ADRdevTema.SetLineWeight(3);
####################################################################################
#Create an smoothed MA on CCIs for signal
input show_avg_Signal = no;
input show_LT_Signal = no;
input show_MT_Signal = no;
input show_ST_Signal = no;
def avg_signallines = (CCI_st+CCI_mt+CCI_lt)/3;
#LT#
input lt_Signal_length = 2;
plot lt_Signal = Average(CCI_lt, lt_Signal_length);
lt_Signal.SetPaintingStrategy(PaintingStrategy.LINE);
lt_Signal.SetDefaultColor(Color.BLACK);
lt_Signal.SetLineWeight(2);
lt_Signal.SetHiding(!show_LT_Signal);
#MT#
input mt_Signal_length = 2;
plot mt_Signal = Average(CCI_mt, mt_Signal_length);
mt_Signal.SetPaintingStrategy(PaintingStrategy.LINE);
mt_Signal.SetDefaultColor(Color.GREEN);
mt_Signal.SetLineWeight(2);
mt_Signal.SetHiding(!show_MT_Signal);
#ST#
input st_Signal_length = 2;
plot st_Signal = Average(CCI_st, lt_Signal_length);
st_Signal.SetPaintingStrategy(PaintingStrategy.LINE);
st_Signal.SetDefaultColor(Color.RED);
st_Signal.SetLineWeight(2);
st_Signal.SetHiding(!show_ST_Signal);
#Create an combined Signal MA
input avg_Signal_length = 2;
plot avg_Signal = Average(avg_signallines, avg_Signal_length);
avg_Signal.SetPaintingStrategy(PaintingStrategy.LINE);
avg_Signal.SetDefaultColor(Color.black);
avg_Signal.SetLineWeight(3);
avg_Signal.SetHiding(!show_Avg_Signal);
####################################################################################
#Data#
def lt_overOS125 = ((CCI_lt[1] < "-125") and CCI_lt >= "-125");
def lt_overOS125lb = ((CCI_lt[2] < "-125") and CCI_lt[1] >= "-125");
def mt_overOS125 = ((CCI_mt[1] < "-125") and CCI_mt >= "-125");
def mt_overOS125lb = ((CCI_mt[2] < "-125") and CCI_mt[1] >= "-125");
def st_overOS125 = ((CCI_st[1] < "-125") and CCI_st > "-125");
def st_overOS125lb = ((CCI_st[2] < "-125") and CCI_st[1] >= "-125");
def lt_underOB125 = ((CCI_lt[1] >= "+125") and CCI_lt < "+125");
def mt_underOB125 = ((CCI_mt[1] >= "+125") and CCI_mt < "+125");
def st_underOB125 = ((CCI_st[1] >= "+125") and CCI_st < "+125");
def OSlb_lt = (CCI_lt[1] <= OverSold) and (CCI_lt > OverSold);
def OBlb_lt = (CCI_lt[1] >= OverBought) and (CCI_lt < OverBought);
def lowlb_lt = (CCI_lt[1] <= -50) and (CCI_lt > -50);
def highlb_lt = (CCI_lt[1] >= 50) and (CCI_lt < 50);
def xozerolb_lt = (CCI_lt[1] <= -20) and (CCI_lt > -20);
def xuzerolb_lt = (CCI_lt[1] >= 20) and (CCI_lt < 20);
def OSlb_mt = (CCI_mt[1] <= OverSold) and (CCI_mt > OverSold);
def OBlb_mt = (CCI_mt[1] >= OverBought) and (CCI_mt < OverBought);
def lowlb_mt = (CCI_mt[1] <= -50) and (CCI_mt > -50);
def highlb_mt = (CCI_mt[1] >= 50) and (CCI_mt < 50);
def xozerolb_mt = (CCI_mt[1] <= -20) and (CCI_mt > -20);
def xuzerolb_mt = (CCI_mt[1] >= 20) and (CCI_mt < 20);
def OSlb_st = (CCI_st[1] <= OverSold) and (CCI_st > OverSold);
def OBlb_st = (CCI_st[1] >= OverBought) and (CCI_st < OverBought);
def lowlb_st = (CCI_st[1] <= -50) and (CCI_st > -50);
def highlb_st = (CCI_st[1] >= 50) and (CCI_st < 50);
def xozerolb_st = (CCI_st[1] <= -20) and (CCI_st > -20);
def xuzerolb_st = (CCI_st[1] >= 20) and (CCI_st < 20);
#Lower Study Arrows Off by Default#
plot UpSignalOS_lt = if !lt_overOS125[1] and lt_overOS125 then CCI_Lt
else double.nan;
plot UpSignal_lt = if !UpSignalOS_lt[1] and (OSlb_lt and !OSlb_lt[1]) then CCI_Lt
else Double.NaN;
plot DownSignalOB_lt = if !lt_underOB125[1] and lt_underOB125 then CCI_Lt
else double.nan;
plot DownSignal_lt = if ShowLTBreakoutSignals and ShowLT_OBBreakoutSignals and (OBlb_lt and !OBlb_lt[1]) and !DownSignalOB_lt[1] then CCI_Lt
else Double.NaN;
plot UpSignalOS_mt = if !mt_overOS125[1] and mt_overOS125 then (CCI_mt)
else double.nan;
plot UpSignal_mt = if !UpSignalOS_mt[1] and (OSlb_mt and !OSlb_mt[1]) then CCI_mt
else Double.NaN;
plot DownSignalOB_mt = if !mt_underOB125[1] and mt_underOB125 then CCI_mt
else double.nan;
plot DownSignal_mt = if (OBlb_mt and !OBlb_mt[1]) then CCI_mt
else Double.NaN;
plot UpSignalOS_st = if !st_overOS125[1] and st_overOS125 then CCI_st
else double.nan;
plot UpSignal_st = if (OSlb_st and !OSlb_st[1]) then CCI_st
else Double.NaN;
plot DownSignalOB_st = if !st_underOB125[1] and st_underOB125 then CCI_st
else double.nan;
plot DownSignal_st = if (OBlb_st and !OBlb_st[1]) then CCI_st
else Double.NaN;
UpSignalOS_lt.SetHiding(!showLT_OSBreakoutSignals);
DownSignalOB_lt.SetHiding(!showLT_OBBreakoutSignals);
UpSignal_lt.SetHiding(!showLTBreakoutSignals);
DownSignal_lt.SetHiding(!showLTBreakoutSignals);
UpSignalOS_mt.SetHiding(!showMT_OSBreakoutSignals);
DownSignalOB_mt.SetHiding(!showMT_OBBreakoutSignals);
UpSignal_mt.SetHiding(!showMTBreakoutSignals);
DownSignal_mt.SetHiding(!showMTBreakoutSignals);
UpSignalOS_st.SetHiding(!showST_OSBreakoutSignals);
DownSignalOB_st.SetHiding(!showST_OBBreakoutSignals);
UpSignal_st.SetHiding(!showSTBreakoutSignals);
DownSignal_st.SetHiding(!showSTBreakoutSignals);
UpSignalOS_lt.SetDefaultColor(Color.black);
UpSignalOS_lt.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
UpSignalOS_lt.SetLineWeight(3);
DownSignalOB_lt.SetDefaultColor(Color.black);
DownSignalOB_lt.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
DownSignalOB_lt.SetLineWeight(3);
UpSignal_lt.SetDefaultColor(Color.black);
UpSignal_lt.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
DownSignal_lt.SetDefaultColor(Color.black);
DownSignal_lt.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
UpSignalOS_mt.SetDefaultColor(Color.BLUE);
UpSignalOS_mt.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
UpSignalOS_mt.SetLineWeight(3);
DownSignalOB_mt.SetDefaultColor(Color.BLUE);
DownSignalOB_mt.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
DownSignalOB_mt.SetLineWeight(3);
UpSignal_mt.SetDefaultColor(Color.BLUE);
UpSignal_mt.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
DownSignal_mt.SetDefaultColor(Color.BLUE);
DownSignal_mt.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
UpSignalOS_st.SetDefaultColor(Color.RED);
UpSignalOS_st.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
UpSignalOS_st.SetLineWeight(3);
DownSignalOB_st.SetDefaultColor(Color.RED);
DownSignalOB_st.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
DownSignalOB_st.SetLineWeight(3);
UpSignal_st.SetDefaultColor(Color.RED);
UpSignal_st.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_UP);
DownSignal_st.SetDefaultColor(Color.RED);
DownSignal_st.SetPaintingStrategy(PaintingStrategy.BOOLEAN_ARROW_DOWN);
#####################################################
#Clouds#
#Avg_Signal Cloud
AddCloud(Avg_Signal, (-100), Color.green, Color.red);
#ST - LT CCI diff Cloud to Visualize Security Momentum
#AddCloud(CCI_st, avg_signal, Color.green, Color.red);
#Clouds for OB/OS#
OverBought.SetDefaultColor(GetColor(7));
#AddCloud(OverBought, CCI_lt, Color.white, Color.light_gray);
#AddCloud(OverBought, CCI_mt, Color.white, Color.light_gray);
#AddCloud(OverBought, CCI_st, Color.white, Color.light_gray);
OverSold.SetDefaultColor(GetColor(7));
#AddCloud(OverSold, CCI_lt, Color.light_gray, Color.white);
#AddCloud(OverSold, CCI_mt, Color.light_gray, Color.white);
#AddCloud(OverSold, CCI_st, Color.light_gray, Color.white);
######################################################
#LT, MT, ST CCI Highlights
CCI_LT.AssignValueColor(if CCI_LT >=50 and CCI_LT >= CCI_LT[1] and CCI_MT >= CCI_MT[1] then color.green
else if CCI_LT <=-50 and CCI_MT <= CCI_MT[1] then color.orange
else color.dark_green);
####################################################################################