Bollinger Bands
# indie:lang_version = 5from indie import indicator, param, source, plot, colorfrom indie.algorithms import Bb@indicator('BB', overlay_main_pane=True) # Bollinger Bands@param.int('length', default=20, min=1)@param.source('src', default=source.CLOSE, title='Source')@param.float('mult', default=2.0, min=0.001, max=50.0, title='StdDev')@param.int('offset', default=0, min=-500, max=500)@plot.line('lower', color=color.BLUE, title='Lower')@plot.line(color=color.RED, title='Basis')@plot.line('upper', color=color.BLUE, title='Upper')@plot.fill('lower', 'upper', color=color.AQUA(0.05), title='Background')def Main(self, length, src, mult, offset):(lower, middle, upper) = Bb.new(src, length, mult)return (plot.Line(lower[0], offset=offset),plot.Line(middle[0], offset=offset),plot.Line(upper[0], offset=offset),plot.Fill(offset=offset),)
# indie:lang_version = 5from math import nanfrom indie import indicator, format, param, source, band, color, level, plotfrom indie.algorithms import Rsi, Ma, StdDev@indicator('RSI', format=format.PRICE) # Relative Strength Index@param.int('rsi_length', default=14, title='RSI Length', min=1)@param.source('src', default=source.CLOSE, title='Source')@param.str('ma_type', default='SMA', title='MA Type',options=['SMA', 'Bollinger Bands', 'EMA', 'SMMA (RMA)', 'WMA', 'VWMA'])@param.int('ma_length', default=14, title='MA Length', min=1)@param.float('bb_mult', default=2.0, title='BB StdDev', min=0.001, max=50)@band(30, 70, line_color=color.GRAY, fill_color=color.PURPLE(0.1))@level(50, line_color=color.GRAY(0.5))@plot.line(color=color.YELLOW, title='RSI-based MA')@plot.line(color=color.PURPLE, title='RSI')@plot.line('bb_lower', color=color.GREEN, title='RSI Lower Band')@plot.line('bb_upper', color=color.GREEN, title='RSI Upper Band')@plot.fill('bb_lower', 'bb_upper', color=color.GREEN(0.1), title='Bollinger Bands Background Fill')def Main(self, rsi_length, src, ma_type, ma_length, bb_mult):rsi = Rsi.new(src, rsi_length)is_bb = ma_type == 'Bollinger Bands'ma_algorithm = 'SMA' if is_bb else ma_typersi_ma = Ma.new(rsi, ma_length, ma_algorithm)std_dev = StdDev.new(rsi, ma_length)bb_lower = rsi_ma[0] - std_dev[0] * bb_mult if is_bb else nanbb_upper = rsi_ma[0] + std_dev[0] * bb_mult if is_bb else nanreturn rsi_ma[0], rsi[0], bb_lower, bb_upper, plot.Fill()
MACD
# indie:lang_version = 5from indie import indicator, param, source, level, color, plot, Colorfrom indie.algorithms import Macd@indicator('MACD') # Moving Average Convergence Divergence@param.int('fast_length', default=12, min=1, title='Fast Length')@param.int('slow_length', default=26, min=1, title='Slow Length')@param.source('src', default=source.CLOSE, title='Source')@param.int('signal_length', default=9, min=1, max=50, title='Signal Smoothing')@param.str('sma_source', default='EMA', title='Oscillator MA Type', options=['SMA', 'EMA'])@param.str('sma_signal', default='EMA', title='Signal Line MA Type', options=['SMA', 'EMA'])@level(0, line_color=color.GRAY(0.5))@plot.columns(title='Histogram')@plot.line(color=color.BLUE, title='MACD')@plot.line(color=color.MAROON, title='Signal')def Main(self, fast_length, slow_length, src, signal_length, sma_source, sma_signal):macd, signal, hist = Macd.new(src, fast_length, slow_length, signal_length, sma_source, sma_signal)hist_color: Colorif hist[0] >= 0:if hist[1] < hist[0]:hist_color = color.GREENelse:hist_color = color.LIMEelse:if hist[1] < hist[0]:hist_color = color.REDelse:hist_color = color.MAROONreturn (plot.Columns(hist[0], color=hist_color),macd[0],signal[0],)


Be the first to comment
Publish your first comment to unleash the wisdom of crowd.