Created
September 16, 2024 11:46
-
-
Save paschmann/67dfb80f20aadc28792c41f108f9ca54 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Inputs can be set from the strategy/study options | |
# _______________________ Required Parameter definitions ________________ | |
input method = { default average, high_low }; | |
input dollarpositionsize = 5000; | |
def bubbleoffset = .0005; | |
# reversal parameters | |
def percentreversal = .01; | |
def absolutereversal = .05; | |
def atrreversal = 2.0; | |
def atrlength = 5; | |
# Used for moving averages | |
def averagelength = 5; | |
def averagetype = AverageType.EXPONENTIAL; | |
def price = close; | |
def superfast_length = 9; | |
def fast_length = 14; | |
def slow_length = 21; | |
def displace = 0; | |
def showMomentumAlerts = no; | |
def showTradeAlerts = yes; | |
def showTradeSignals = yes; | |
# showReversalBubbles are added to previous periods only when a BUY is initiated (i.e. its retroactive, not realtime) | |
def showReversalBubbles = yes; | |
# _______________________ Optional Parameter definitions ________________ | |
input showSupplyDemand = { default Pivot, Arrow, None }; | |
#Hint usemanualfibskip: Select no to use preprogrammed fibskip amounts.Select no, to use the amount entered at input fibskip. | |
input usemanualfibskip = no; | |
#Hint fibskip: Set input usemanualfibskip == yes to use this amount versus preprogrammed amounts.Standard is 1.0.This is percentage difference between fib high and low before a new fib grid created. | |
input fibskip = .50; | |
# _______________________ Optional plot and label displays ________________ | |
# | |
def showMovingAverages = yes; | |
def showEnhancedLines = yes; | |
# ZigZagHighLow Bubbles | |
def showBubbleschange = no; | |
def showBubblesprice = no; | |
def showBubblesbarcount = no; | |
# High/Low Lines on candles (Retroactive, not realtime) | |
def showTopAndBottomLine = yes; | |
def showsupplydemandcloud = yes; | |
def showBubblesVolume = no; | |
def showFibExtLines = no; | |
def showtodayonly = no; | |
def showBubblesfibratio = no; | |
#Hint showfibLabel: Select yes to show label of current fib level as of last price | |
def showFibLabel = no; | |
def showfiblines = no; | |
# _______________________ Optional Alerts ________________ | |
def showZigZagAlerts = yes; | |
# _______________________ Configure moving average conditions ________________ | |
plot mov_avg9 = ExpAverage(price[-displace], superfast_length); | |
plot mov_avg14 = ExpAverage(price[-displace], fast_length); | |
plot mov_avg21 = ExpAverage(price[-displace], slow_length); | |
mov_avg9.SetHiding(!showMovingAverages); | |
mov_avg14.SetHiding(!showMovingAverages); | |
mov_avg21.SetHiding(!showMovingAverages); | |
# _______________________ Buy Related conditions ________________ | |
#use common names for moving averages | |
def Superfast = mov_avg9; | |
def Fast = mov_avg14; | |
def Slow = mov_avg21; | |
def buy = Superfast > Fast and Fast > Slow and low > Superfast; | |
def stopbuy = Superfast <= Fast; | |
def buynow = !buy[1] and buy; | |
def buysignal = CompoundValue(1, if buynow and !stopbuy then 1 else if buysignal[1] == 1 and stopbuy then 0 else buysignal[1], 0); | |
# _______________________ Sell Related conditions ________________ | |
def sell = Superfast < Fast and Fast < Slow and high < Superfast; | |
def stopsell = Superfast >= Fast; | |
def sellnow = !sell[1] and sell; | |
def sellsignal = CompoundValue(1, if sellnow and !stopsell then 1 else if sellsignal[1] == 1 and stopsell then 0 else sellsignal[1],0); | |
# _______________________ Alerts ________________ | |
def Momentum_Down = buysignal[1] == 1 and buysignal == 0; | |
Alert(Momentum_Down and showMomentumAlerts, text = "Momentum_Down", sound = Sound.Bell, "alert type" = Alert.BAR); | |
def Momentum_Up = sellsignal[1] == 1 and sellsignal == 0; | |
Alert(Momentum_Up and showMomentumAlerts, text = "Momentum_Up", sound = Sound.Bell, "alert type" = Alert.BAR); | |
# _______________________ Chart plots config ________________ | |
plot Colorbars = if buysignal == 1 then 1 else if sellsignal == 1 then 2 else if buysignal == 0 or sellsignal == 0 then 3 else 0; | |
Colorbars.Hide(); | |
Colorbars.DefineColor("Buy_Signal_Bars", Color.GREEN); | |
Colorbars.DefineColor("Sell_Signal_Bars", Color.RED); | |
Colorbars.DefineColor("Neutral", Color.PLUM); | |
# _______________________ Average definitions ________________ | |
def movingaveragehigh = MovingAverage(averagetype, high, averagelength); | |
def movingaveragelow = MovingAverage(averagetype, low, averagelength); | |
def priceh = if method == method.high_low then high else movingaveragehigh; | |
def pricel = if method == method.high_low then low else movingaveragelow; | |
# _______________________ ZigZagHighLow ________________ | |
# https://tlc.thinkorswim.com/center/reference/Tech-Indicators/studies-library/V-Z/ZigZagHighLow | |
# ZigZagHighLow plot identifies and connects swing points if the difference between their prices exceeds a certain calculated value | |
# https://tlc.thinkorswim.com/center/reference/Tech-Indicators/studies-library/A-B/ATR | |
# By default, the average true range is a 14-period Wilder's moving average of this value; both the period and the type of moving average can be customized using the study input parameters. | |
def EI = ZigZagHighLow("price h" = priceh, "price l" = pricel, "percentage reversal" = percentreversal, "absolute reversal" = absolutereversal, "atr length" = atrlength, "atr reversal" = atrreversal); | |
# calculate the most? restrictive reversalAmount between the percentamount, revAmount and atrreversal | |
def reversalAmount = if (close * percentreversal / 100) > Max(absolutereversal < atrreversal * reference ATR(atrlength), percentreversal) then(close * percentreversal / 100) else if percentreversal < atrreversal * reference ATR(atrlength) then atrreversal * reference ATR(atrlength) else percentreversal; | |
rec EISave = if !IsNaN(EI) then EI else GetValue(EISave, 1); | |
def chg = (if EISave == priceh then priceh else pricel) - GetValue(EISave, 1); | |
def isUp = chg >= 0; | |
rec isConf = AbsValue(chg) >= reversalAmount or(IsNaN(GetValue(EI, 1)) and GetValue(isConf, 1)); | |
def EId = if isUp then 1 else 0; | |
# _______________________ Creates and Prints Buy/Sell signals and prints arrows ________________ | |
def EIL = if !IsNaN(EI) and!isUp then pricel else GetValue(EIL, 1); | |
def EIH = if !IsNaN(EI) and isUp then priceh else GetValue(EIH, 1); | |
def dir = CompoundValue(1, if EIL != EIL[1] or pricel == EIL[1] and pricel == EISave then 1 else if EIH != EIH[1] or priceh == EIH[1] and priceh == EISave then - 1 else dir[1], 0); | |
def signal = CompoundValue(1, if dir > 0 and pricel > EIL then if signal[1] <= 0 then 1 else signal[1] else if dir < 0 and priceh < EIH then if signal[1] >= 0 then - 1 else signal[1] else signal[1], 0); | |
def U1 = signal > 0 and signal[1] <= 0; | |
def D1 = signal < 0 and signal[1] >= 0; | |
def barnumber = BarNumber()[10]; | |
# _______________________ Creates buy and Sell orders based on signals ________________ | |
def buyqty = dollarpositionsize/priceh; | |
Alert(U1, text = "Buy to Open" + U1, sound = Sound.Bell, "alert type" = Alert.BAR); | |
#plot upArrow = signal > 0 and buysignal; #STUDY Specific for scanner | |
AddOrder(OrderType.BUY_TO_OPEN, signal > 0 and buysignal, tickColor = GetColor(1), arrowColor = GetColor(1), name = "Buy @ " + priceh, tradesize = buyqty, price = priceh); | |
Alert(D1, text = "Sell to Close: " + D1, sound = Sound.Bell, "alert type" = Alert.BAR); | |
#plot downArrow = D1; # STUDY specific for scanner | |
AddOrder(OrderType.SELL_TO_CLOSE, D1, tickColor = GetColor(2), arrowColor = GetColor(2), name = "Sell @ " + pricel, price = pricel); | |
AddChartBubble((barnumber and U1 and showReversalBubbles), if isUp then low else high, if U1 then "" + low else "", if Colorbars == 3 then Color.PLUM else Color.UPTICK, no); | |
AddChartBubble((barnumber and D1 and showReversalBubbles), if isUp then low else high, if D1 then "" + high else "", if Colorbars == 3 then Color.PLUM else Color.DOWNTICK, yes); | |
# _______________________ Items below are optional Labels/Plots which do not effect buy/sell signals ________________ | |
# _______________________ Plots the ZigZagHighLow ________________ | |
plot EnhancedLines = if EId <= 1 then EI else Double.NaN; | |
EnhancedLines.AssignValueColor(if EId == 1 then Color.GREEN else if EId == 0 then Color.RED else Color.DARK_ORANGE); | |
EnhancedLines.SetStyle(Curve.FIRM); | |
EnhancedLines.EnableApproximation(); | |
EnhancedLines.HideBubble(); | |
EnhancedLines.setHiding(!showEnhancedLines); | |
# _______________________ Prints high and low price bubbles at ZigZagHighLow swings ________________ | |
def xxhigh = if EISave == priceh then priceh else xxhigh[1]; | |
def chghigh = priceh - xxhigh[1]; | |
def xxlow = if EISave == pricel then pricel else xxlow[1]; | |
def chglow = pricel - xxlow[1]; | |
# Label for Price at High / Low | |
AddChartBubble(showBubbleschange and!IsNaN(EI) and BarNumber() != 1, if isUp then priceh * (1 + bubbleoffset) else pricel * (1 - bubbleoffset), "$" + chg, if isUp and chghigh > 0 then Color.GREEN else if isUp and chghigh < 0 then Color.RED else if isUp then Color.YELLOW else if !isUp and chglow > 0 then Color.GREEN else if !isUp and chglow < 0 then Color.RED else Color.YELLOW, isUp); | |
# Label for Confirmed / Unconfirmed Status of Current Enhanced | |
AddChartBubble(showBubblesprice and!IsNaN(EI) and BarNumber() != 1, if isUp then priceh * (1 + bubbleoffset) else pricel * (1 - bubbleoffset), if isUp then "$" + priceh else "$" + pricel, if isUp and chghigh > 0 then Color.GREEN else if isUp and chghigh < 0 then Color.RED else if isUp then Color.YELLOW else if !isUp and chglow > 0 then Color.GREEN else if !isUp and chglow < 0 then Color.RED else Color.YELLOW, isUp); | |
# Label for Bar Count between Enhanceds | |
rec EIcount = if EISave[1] != EISave then 1 else if EISave[1] == EISave then EIcount[1] + 1 else 0; | |
def EIcounthilo = if EIcounthilo[1] == 0 and(EISave == priceh or EISave == pricel) then 1 else if EISave == priceh or EISave == pricel then EIcounthilo[1] + 1 else EIcounthilo[1]; | |
def EIhilo = if EISave == priceh or EISave == pricel then EIcounthilo else EIcounthilo + 1; | |
def EIcounthigh = if EISave == priceh then EIcount[1] else Double.NaN; | |
def EIcountlow = if EISave == pricel then EIcount[1] else Double.NaN; | |
AddChartBubble(showBubblesbarcount and !IsNaN(EI) and BarNumber() != 1, if isUp then priceh * (1 + bubbleoffset) else pricel * (1 - bubbleoffset), if EISave == priceh then EIcounthigh else EIcountlow, if isUp and chghigh > 0 then Color.GREEN else if isUp and chghigh < 0 then Color.RED else if isUp then Color.YELLOW else if !isUp and chglow > 0 then Color.GREEN else if !isUp and chglow < 0 then Color.RED else Color.YELLOW, if isUp then yes else no ); | |
# _______________________ Alerts for ZigZagHighLow changes ________________ | |
Alert(showZigZagAlerts and U1, "EI-UP", Alert.BAR, Sound.Bell); | |
Alert(showZigZagAlerts and D1, "EI-DOWN", Alert.BAR, Sound.Chimes); | |
# _______________________ Prints horizontal lines to show bottom and tops of up and down reversals ________________ | |
def revLineTop; | |
def revLineBot; | |
if barnumber and D1 { | |
revLineBot = Double.NaN; | |
revLineTop = high[1]; | |
} else if barnumber and U1 { | |
revLineTop = Double.NaN; | |
revLineBot = low[1]; | |
} else if !IsNaN(revLineBot[1]) and(Colorbars[2] == 2 or Colorbars[1] == 2) { | |
revLineBot = revLineBot[1]; | |
revLineTop = Double.NaN; | |
} else if !IsNaN(revLineTop[1]) and(Colorbars[2] == 1 or Colorbars[1] == 1) { | |
revLineTop = revLineTop[1]; | |
revLineBot = Double.NaN; | |
} else { | |
revLineTop = Double.NaN; | |
revLineBot = Double.NaN; | |
} | |
plot botLine = revLineBot[-1]; | |
botLine.SetDefaultColor(Color.LIGHT_GREEN); | |
plot topLine = revLineTop[-1]; | |
topLine.SetDefaultColor(Color.LIGHT_RED); | |
botLine.setHiding(!showTopAndBottomLine); | |
topLine.setHiding(!showTopAndBottomLine); | |
# _______________________ Supply and Demand Areas ________________ | |
rec data1 = CompoundValue(1, if (EISave == priceh or EISave == pricel) then data1[1] + 1 else data1[1], 0); | |
def datacount1 = (HighestAll(data1) - data1[1]); | |
def numbersuppdemandtoshow = 0; | |
def idx = if showSupplyDemand == showSupplyDemand.Pivot then 1 else 0; | |
def rLow; | |
def rHigh; | |
if signal crosses 0 { | |
rLow = pricel[idx]; | |
rHigh = priceh[idx]; | |
} else { | |
rLow = rLow[1]; | |
rHigh = rHigh[1]; | |
} | |
def HighLine = if datacount1 <= numbersuppdemandtoshow and showSupplyDemand != showSupplyDemand.None and!IsNaN(close) and rHigh != 0 then rHigh else Double.NaN; | |
def LowLine = if datacount1 <= numbersuppdemandtoshow and showSupplyDemand != showSupplyDemand.None and!IsNaN(close) and rLow != 0 then rLow else Double.NaN; | |
def hlUp = if signal > 0 then HighLine else Double.NaN; | |
def hlDn = if signal < 0 then HighLine else Double.NaN; | |
AddCloud(if showsupplydemandcloud then hlUp else Double.NaN, LowLine, Color.LIGHT_GREEN, Color.LIGHT_GREEN); | |
AddCloud(if showsupplydemandcloud then hlDn else Double.NaN, LowLine, Color.LIGHT_RED, Color.LIGHT_RED); | |
# _______________________ Store previous data ________________ | |
def EIsave1 = if !IsNaN(EISave) then EISave else EIsave1[1]; | |
def EIsave2 = EIsave1; | |
rec priorEI1 = if EIsave2 != EIsave2[1] then EIsave2[1] else priorEI1[1]; | |
rec priorEI2 = if priorEI1 != priorEI1[1] then priorEI1[1] else priorEI2[1]; | |
rec priorEI3 = if priorEI2 != priorEI2[1] then priorEI2[1] else priorEI3[1]; | |
# _______________________ Fibonacci Extensions ________________ | |
rec data = CompoundValue(1, if (EISave == priceh or EISave == pricel) then data[1] + 1 else data[1], 0); | |
def datacount = (HighestAll(data) - data[1]); | |
def numberextfibstoshow = 2; | |
rec cpo = if dir[1] != dir then 0 else 1; | |
def today = if showtodayonly == yes then GetDay() == GetLastDay() else GetDay(); | |
def extfib1 = if EISave == priceh then priceh - AbsValue(priorEI2 - priorEI1) * 1 | |
else extfib1[1]; | |
def extfib100 = if datacount <= numberextfibstoshow and today and showFibExtLines and!IsNaN(extfib1) and dir < 0 and cpo != 0 then extfib1[1] else Double.NaN; | |
def extfib1a = if EISave == priceh then priceh - AbsValue(priorEI2 - priorEI1) * 0.382 | |
else extfib1a[1]; | |
def extfib382 = if datacount <= numberextfibstoshow and today and showFibExtLines and!IsNaN(extfib1a) and dir < 0 and cpo != 0 then extfib1a[1] else Double.NaN; | |
def extfib2 = if EISave == priceh then priceh - AbsValue(priorEI2 - priorEI1) * | |
0.618 else extfib2[1]; | |
def extfib618 = if datacount <= numberextfibstoshow and today and showFibExtLines and!IsNaN(extfib2) and dir < 0 and cpo != 0 then extfib2[1] else Double.NaN; | |
def extfib3 = if EISave == priceh then priceh - AbsValue(priorEI2 - priorEI1) * | |
1.618 else extfib3[1]; | |
def extfib1618 = if datacount <= numberextfibstoshow and today and showFibExtLines and!IsNaN(extfib3) and dir < 0 and cpo != 0 then extfib3[1] else Double.NaN; | |
def extfib3a = if EISave == priceh then priceh - AbsValue(priorEI2 - priorEI1) * | |
2.000 else extfib3a[1]; | |
def extfib2000 = if datacount <= numberextfibstoshow and today and showFibExtLines and!IsNaN(extfib3a) and dir < 0 and cpo != 0 then extfib3a[1] else Double.NaN; | |
def extfib4 = if EISave == priceh then priceh - AbsValue(priorEI2 - priorEI1) * | |
2.618 else extfib4[1]; | |
def extfib2618 = if datacount <= numberextfibstoshow and today and showFibExtLines and!IsNaN(extfib4) and dir < 0 and cpo != 0 then extfib4[1] else Double.NaN; | |
def extfib5 = if EISave == priceh then priceh - AbsValue(priorEI2 - priorEI1) * | |
3.618 else extfib5[1]; | |
def extfib3618 = if datacount <= numberextfibstoshow and today and showFibExtLines and!IsNaN(extfib5) and dir < 0 and cpo != 0 then extfib5[1] else Double.NaN; | |
def extfib1_ = if EISave == pricel then pricel + AbsValue(priorEI2 - priorEI1) * 1 | |
else extfib1_[1]; | |
def extfib100_ = if datacount <= numberextfibstoshow and today and showFibExtLines and!IsNaN(extfib1_) and dir > 0 and cpo != 0 then extfib1_[1] else Double.NaN; | |
def extfib1a_ = if EISave == pricel then pricel + AbsValue(priorEI2 - priorEI1) * 0.382 | |
else extfib1a_[1]; | |
def extfib382_ = if datacount <= numberextfibstoshow and today and showFibExtLines and!IsNaN(extfib1a_) and dir > 0 and cpo != 0 then extfib1a_[1] else Double.NaN; | |
def extfib2_ = if EISave == pricel then pricel + AbsValue(priorEI2 - priorEI1) * | |
0.618 else extfib2_[1]; | |
def extfib618_ = if datacount <= numberextfibstoshow and today and showFibExtLines and!IsNaN(extfib2_) and dir > 0 and cpo != 0 then extfib2_[1] else Double.NaN; | |
def extfib3_ = if EISave == pricel then pricel + AbsValue(priorEI2 - priorEI1) * | |
1.618 else extfib3_[1]; | |
def extfib1618_ = if datacount <= numberextfibstoshow and today and showFibExtLines and!IsNaN(extfib3_) and dir > 0 and cpo != 0 then extfib3_[1] else Double.NaN; | |
def extfib3a_ = if EISave == pricel then pricel + AbsValue(priorEI2 - priorEI1) * | |
2.000 else extfib3a_[1]; | |
def extfib2000_ = if datacount <= numberextfibstoshow and today and showFibExtLines and!IsNaN(extfib3a_) and dir > 0 and cpo != 0 then extfib3a_[1] else Double.NaN; | |
def extfib4_ = if EISave == pricel then pricel + AbsValue(priorEI2 - priorEI1) * | |
2.618 else extfib4_[1]; | |
def extfib2618_ = if datacount <= numberextfibstoshow and today and showFibExtLines and!IsNaN(extfib4_) and dir > 0 and cpo != 0 then extfib4_[1] else Double.NaN; | |
def extfib5_ = if EISave == pricel then pricel + AbsValue(priorEI2 - priorEI1) * | |
3.618 else extfib5_[1]; | |
def extfib3618_ = if datacount <= numberextfibstoshow and today and showFibExtLines and!IsNaN(extfib5_) and dir > 0 and cpo != 0 then extfib5_[1] else Double.NaN; | |
def fibextbubblespacesinexpansion = 8; | |
def b = fibextbubblespacesinexpansion; | |
def direction = if !isUp then 1 else 0; | |
AddChartBubble(direction[b + 1] == 1 and showFibExtLines and!IsNaN(close[b + 1]) and IsNaN(close), extfib1[b + 2], "100%", Color.RED, no); | |
AddChartBubble(direction[b + 1] == 1 and showFibExtLines and!IsNaN(close[b + 1]) and IsNaN(close), extfib1a[b + 2], "38.2%", Color.RED, no); | |
AddChartBubble(direction[b + 1] == 1 and showFibExtLines and!IsNaN(close[b + 1]) and IsNaN(close), extfib2[b + 2], "61.8%", Color.RED, no); | |
AddChartBubble(direction[b + 1] == 1 and showFibExtLines and!IsNaN(close[b + 1]) and IsNaN(close), extfib3[b + 2], "161.8%", Color.RED, no); | |
AddChartBubble(direction[b + 1] == 1 and showFibExtLines and!IsNaN(close[b + 1]) and IsNaN(close), extfib3a[b + 2], "200%", Color.RED, no); | |
AddChartBubble(direction[b + 1] == 1 and showFibExtLines and!IsNaN(close[b + 1]) and IsNaN(close), extfib4[b + 2], "261.8%", Color.RED, no); | |
AddChartBubble(direction[b + 1] == 1 and showFibExtLines and!IsNaN(close[b + 1]) and IsNaN(close), extfib5[b + 2], "361.8%", Color.RED, no); | |
AddChartBubble(direction[b + 1] == 0 and showFibExtLines and!IsNaN(close[b + 1]) and IsNaN(close), extfib1_[b + 2], "100%", Color.GREEN, yes); | |
AddChartBubble(direction[b + 1] == 0 and showFibExtLines and!IsNaN(close[b + 1]) and IsNaN(close), extfib1a_[b + 2], "38.2%", Color.GREEN, yes); | |
AddChartBubble(direction[b + 1] == 0 and showFibExtLines and!IsNaN(close[b + 1]) and IsNaN(close), extfib2_[b + 2], "61.8%", Color.GREEN, yes); | |
AddChartBubble(direction[b + 1] == 0 and showFibExtLines and!IsNaN(close[b + 1]) and IsNaN(close), extfib3_[b + 2], "161.8%", Color.GREEN, yes); | |
AddChartBubble(direction[b + 1] == 0 and showFibExtLines and!IsNaN(close[b + 1]) and IsNaN(close), extfib3a_[b + 2], "200%", Color.GREEN, yes); | |
AddChartBubble(direction[b + 1] == 0 and showFibExtLines and!IsNaN(close[b + 1]) and IsNaN(close), extfib4_[b + 2], "261.8%", Color.GREEN, yes); | |
AddChartBubble(direction[b + 1] == 0 and showFibExtLines and!IsNaN(close[b + 1]) and IsNaN(close), extfib5_[b + 2], "361.8%", Color.GREEN, yes); | |
# _______________________ Show Volume at Reversals ________________ | |
def vol = if BarNumber() == 0 then 0 else volume + vol[1]; | |
def vol1 = if BarNumber() == 1 then volume else vol1[1]; | |
def xxvol = if EISave == priceh or EISave == pricel then TotalSum(volume) else xxvol[1]; | |
def chgvol = if xxvol - xxvol[1] + vol1 == vol then vol else xxvol - xxvol[1]; | |
AddChartBubble(showBubblesVolume and!IsNaN(EI) and BarNumber() != 1, if isUp then priceh * (1 + bubbleoffset) else pricel * (1 - bubbleoffset), chgvol, if isUp and chghigh > 0 then Color.GREEN else if isUp and chghigh < 0 then Color.RED else if isUp then Color.YELLOW else if !isUp and chglow > 0 then Color.GREEN else if !isUp and chglow < 0 then Color.RED else Color.YELLOW, if isUp then yes else no ); | |
# _______________________ Show Fibbonacci Sequence Bubbles or Labels ________________ | |
def fib1level = .236; | |
def fib2level = .382; | |
def fibMlevel = .500; | |
def fib3level = .618; | |
def fib4level = .786; | |
#Fibs | |
def datacount2 = (HighestAll(data1) - data1[1]); | |
def numberfibretracementstoshow = 2; | |
def fibskipit = if usemanualfibskip == no then if close > 800 then .25 else .5 else fibskip; | |
def EIfibh = if EISave == priceh and AbsValue(EISave - EISave[1]) > priceh * fibskipit * .01 then priceh else EIfibh[1]; | |
def EIfibl = if EISave == pricel and AbsValue(EISave - EISave[1]) > priceh * fibskipit * .01 then pricel else EIfibl[1]; | |
def range = EIfibh - EIfibl; | |
def fibH = if showfiblines == no then Double.NaN else if datacount2 <= numberfibretracementstoshow then EIfibh else Double.NaN; | |
def fibL = if showfiblines == no then Double.NaN else if datacount2 <= numberfibretracementstoshow then EIfibl else Double.NaN; | |
def fibM = if showfiblines == no then Double.NaN else if datacount2 <= numberfibretracementstoshow then EIfibl + range * fibMlevel else Double.NaN; | |
def fib1 = if showfiblines == no then Double.NaN else if datacount2 <= numberfibretracementstoshow then EIfibl + range * fib1level else Double.NaN; | |
def fib2 = if showfiblines == no then Double.NaN else if datacount2 <= numberfibretracementstoshow then EIfibl + range * fib2level else Double.NaN; | |
def fib3 = if showfiblines == no then Double.NaN else if datacount2 <= numberfibretracementstoshow then EIfibl + range * fib3level else Double.NaN; | |
def fib4 = if showfiblines == no then Double.NaN else if datacount2 <= numberfibretracementstoshow then EIfibl + range * fib4level else Double.NaN; | |
AddLabel(showFibLabel, Concat("Current Fib Level ", AsPercent((close - EIfibl) / (range))), if close > EIfibl then Color.GREEN else if EIfibh == close then Color.WHITE else Color.RED); | |
AddChartBubble(showBubblesfibratio and!IsNaN(EI) and BarNumber() != 1, if isUp then priceh * (1 + bubbleoffset) else pricel * (1 - bubbleoffset), if isUp then AsPercent((priceh - EIfibl) / (range)) else AsPercent((pricel - EIfibl) / range), if isUp and chghigh > 0 then Color.GREEN else if isUp and chghigh < 0 then Color.RED else if isUp then Color.GREEN else if !isUp and chglow > 0 then Color.GREEN else if !isUp and chglow < 0 then Color.RED else Color.RED, isUp); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment