OPEN-SOURCE SCRIPT

NP Screener with Alerts For Nifty 50 [NITIN PADALE]

78
//version=6
indicator('NP Screener with Alerts For Nifty 50 [NITIN PADALE]', overlay = true)

////////////
// INPUTS //

filter_enabled = input.bool(false, '', group = 'Filter', inline = 'Filter')
filter_column = input.string('Price', title = 'Column', options = ['Price', 'RSI', 'TSI', 'ADX', 'SuperTrend'], group = 'Filter', inline = 'Filter')
filter_from = input.float(-9999999, 'From', group = 'Filter', inline = 'Filter')
filter_to = input.float(9999999, 'To', group = 'Filter', inline = 'Filter')

// SMA
rsi_len = input.int(14, title = 'RSI Length', group = 'Indicators')
rsi_os = input.float(30, title = 'RSI Overbought', group = 'Indicators')
rsi_ob = input.float(70, title = 'RSI Oversold', group = 'Indicators')

// TSI
tsi_long_len = input.int(25, title = 'TSI Long Length', group = 'Indicators')
tsi_shrt_len = input.int(13, title = 'TSI Short Length', group = 'Indicators')
tsi_ob = input.float(30, title = 'TSI Overbought', group = 'Indicators')
tsi_os = input.float(-30, title = 'TSI Oversold', group = 'Indicators')

// ADX Params
adx_smooth = input.int(14, title = 'ADX Smoothing', group = 'Indicators')
adx_dilen = input.int(14, title = 'ADX DI Length', group = 'Indicators')
adx_level = input.float(40, title = 'ADX Level', group = 'Indicators')

// SuperTrend
sup_atr_len = input.int(10, 'Supertrend ATR Length', group = 'Indicators')
sup_factor = input.float(3.0, 'Supertrend Factor', group = 'Indicators')


/////////////
// SYMBOLS //

u01 = input.bool(true, title = '', group = 'Symbols', inline = 's01')
u02 = input.bool(true, title = '', group = 'Symbols', inline = 's02')
u03 = input.bool(true, title = '', group = 'Symbols', inline = 's03')
u04 = input.bool(true, title = '', group = 'Symbols', inline = 's04')
u05 = input.bool(true, title = '', group = 'Symbols', inline = 's05')
u06 = input.bool(true, title = '', group = 'Symbols', inline = 's06')
u07 = input.bool(true, title = '', group = 'Symbols', inline = 's07')
u08 = input.bool(true, title = '', group = 'Symbols', inline = 's08')
u09 = input.bool(true, title = '', group = 'Symbols', inline = 's09')
u10 = input.bool(true, title = '', group = 'Symbols', inline = 's10')


s01 = input.symbol('HDFCBANK', group = 'Symbols', inline = 's01')
s02 = input.symbol('ICICIBANK', group = 'Symbols', inline = 's02')
s03 = input.symbol('RELIANCE', group = 'Symbols', inline = 's03')
s04 = input.symbol('INFY', group = 'Symbols', inline = 's04')
s05 = input.symbol('BHARTIARTL', group = 'Symbols', inline = 's05')
s06 = input.symbol('LT', group = 'Symbols', inline = 's06')
s07 = input.symbol('ITC', group = 'Symbols', inline = 's07')
s08 = input.symbol('TCS', group = 'Symbols', inline = 's08')
s09 = input.symbol('AXISBANK', group = 'Symbols', inline = 's09')
s10 = input.symbol('SBIN', group = 'Symbols', inline = 's10')


//////////////////
// CALCULATIONS //

filt_col_id = switch filter_column
'Price' => 1
'RSI' => 2
'TSI' => 3
'ADX' => 4
'SuperTrend' => 5
=> 0

// Get only symbol
only_symbol(s) =>
array.get(str.split(s, ':'), 1)


id_symbol(s) =>
switch s
1 => only_symbol(s01)
2 => only_symbol(s02)
3 => only_symbol(s03)
4 => only_symbol(s04)
5 => only_symbol(s05)
6 => only_symbol(s06)
7 => only_symbol(s07)
8 => only_symbol(s08)
9 => only_symbol(s09)
10 => only_symbol(s10)

=> na


// for TSI
double_smooth(src, long, short) =>
fist_smooth = ta.ema(src, long)
ta.ema(fist_smooth, short)

// ADX
dirmov(len) =>
up = ta.change(high)
down = -ta.change(low)

plusDM = na(up) ? na : up > down and up > 0 ? up : 0
minusDM = na(down) ? na : down > up and down > 0 ? down : 0

truerange = ta.rma(ta.tr, len)

plus = fixnan(100 * ta.rma(plusDM, len) / truerange)
minus = fixnan(100 * ta.rma(minusDM, len) / truerange)

[plus, minus]

adx_func(dilen, adxlen) =>
[plus, minus] = dirmov(dilen)
sum = plus + minus
adx = 100 * ta.rma(math.abs(plus - minus) / (sum == 0 ? 1 : sum), adxlen)
adx

screener_func() =>

// RSI
rsi = ta.rsi(close, rsi_len)

// TSI
pc = ta.change(close)

double_smoothed_pc = double_smooth(pc, tsi_long_len, tsi_shrt_len)
double_smoothed_abs_pc = double_smooth(math.abs(pc), tsi_long_len, tsi_shrt_len)

tsi = 100 * (double_smoothed_pc / double_smoothed_abs_pc)

// ADX
adx = adx_func(adx_dilen, adx_smooth)

// Supertrend
[sup_value, sup_dir] = ta.supertrend(sup_factor, sup_atr_len)

[math.round_to_mintick(close), rsi, tsi, adx, sup_dir]

// Set Up Matrix
screenerMtx = matrix.new<float>(0, 6, na)

screenerFun(numSym, sym, flg) =>

[cl, rsi, tsi, adx, sup] = request.security(sym, timeframe.period, screener_func())

arr = array.from(numSym, cl, rsi, tsi, adx, sup)

if flg
matrix.add_row(screenerMtx, matrix.rows(screenerMtx), arr)

// Security call
screenerFun(01, s01, u01)
screenerFun(02, s02, u02)
screenerFun(03, s03, u03)
screenerFun(04, s04, u04)
screenerFun(05, s05, u05)
screenerFun(06, s06, u06)
screenerFun(07, s07, u07)
screenerFun(08, s08, u08)
screenerFun(09, s09, u09)
screenerFun(10, s10, u10)


///////////
// PLOTS //

var tbl = table.new(position.top_right, 6, 41, frame_color = #151715, frame_width = 1, border_width = 2, border_color = color.new(color.white, 100))

log.info(str.tostring(filt_col_id))

alert_msg = ''

if barstate.islast
table.clear(tbl, 0, 0, 5, 40)

table.cell(tbl, 0, 0, 'Symbol', text_halign = text.align_center, bgcolor = color.gray, text_color = color.white, text_size = size.small)
table.cell(tbl, 1, 0, 'Price', text_halign = text.align_center, bgcolor = color.gray, text_color = color.white, text_size = size.small)
table.cell(tbl, 2, 0, 'RSI', text_halign = text.align_center, bgcolor = color.gray, text_color = color.white, text_size = size.small)
table.cell(tbl, 3, 0, 'TSI', text_halign = text.align_center, bgcolor = color.gray, text_color = color.white, text_size = size.small)
table.cell(tbl, 4, 0, 'ADX', text_halign = text.align_center, bgcolor = color.gray, text_color = color.white, text_size = size.small)
table.cell(tbl, 5, 0, 'Supertrend', text_halign = text.align_center, bgcolor = color.gray, text_color = color.white, text_size = size.small)

if matrix.rows(screenerMtx) > 0
for i = 0 to matrix.rows(screenerMtx) - 1 by 1

is_filt = not filter_enabled or matrix.get(screenerMtx, i, filt_col_id) >= filter_from and matrix.get(screenerMtx, i, filt_col_id) <= filter_to

if is_filt

if str.length(alert_msg) > 0
alert_msg := alert_msg + ','
alert_msg
alert_msg := alert_msg + id_symbol(matrix.get(screenerMtx, i, 0))

rsi_col = matrix.get(screenerMtx, i, 2) > rsi_ob ? color.red : matrix.get(screenerMtx, i, 2) < rsi_os ? color.green : #aaaaaa
tsi_col = matrix.get(screenerMtx, i, 3) > tsi_ob ? color.red : matrix.get(screenerMtx, i, 3) < tsi_os ? color.green : #aaaaaa
adx_col = matrix.get(screenerMtx, i, 4) > adx_level ? color.green : #aaaaaa

sup_text = matrix.get(screenerMtx, i, 5) > 0 ? 'Down' : 'Up'
sup_col = matrix.get(screenerMtx, i, 5) < 0 ? color.green : color.red

table.cell(tbl, 0, i + 1, id_symbol(matrix.get(screenerMtx, i, 0)), text_halign = text.align_left, bgcolor = color.gray, text_color = color.white, text_size = size.small)
table.cell(tbl, 1, i + 1, str.tostring(matrix.get(screenerMtx, i, 1)), text_halign = text.align_center, bgcolor = #aaaaaa, text_color = color.white, text_size = size.small)
table.cell(tbl, 2, i + 1, str.tostring(matrix.get(screenerMtx, i, 2), '#.##'), text_halign = text.align_center, bgcolor = rsi_col, text_color = color.white, text_size = size.small)
table.cell(tbl, 3, i + 1, str.tostring(matrix.get(screenerMtx, i, 3), '#.##'), text_halign = text.align_center, bgcolor = tsi_col, text_color = color.white, text_size = size.small)
table.cell(tbl, 4, i + 1, str.tostring(matrix.get(screenerMtx, i, 4), '#.##'), text_halign = text.align_center, bgcolor = adx_col, text_color = color.white, text_size = size.small)
table.cell(tbl, 5, i + 1, sup_text, text_halign = text.align_center, bgcolor = sup_col, text_color = color.white, text_size = size.small)

if str.length(alert_msg) > 0
alert(alert_msg, freq = alert.freq_once_per_bar_close)

Penafian

Maklumat dan penerbitan adalah tidak dimaksudkan untuk menjadi, dan tidak membentuk, nasihat untuk kewangan, pelaburan, perdagangan dan jenis-jenis lain atau cadangan yang dibekalkan atau disahkan oleh TradingView. Baca dengan lebih lanjut di Terma Penggunaan.