PHP Code:
//@version=4
indicator('..', overlay = true)
/////////////
// 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('BIST:XU100', group = 'Symbols', inline = 's01')
s02 = input.symbol('BIST:YKBNK', group = 'Symbols', inline = 's02')
s03 = input.symbol('BIST:KCHOL', group = 'Symbols', inline = 's03')
s04 = input.symbol('BIST:THYAO', group = 'Symbols', inline = 's04')
s05 = input.symbol('BIST:ASELS', group = 'Symbols', inline = 's05')
s06 = input.symbol('BIST:TUPRS', group = 'Symbols', inline = 's06')
s07 = input.symbol('BIST:SANFM', group = 'Symbols', inline = 's07')
s08 = input.symbol('BIST:SKYMD', group = 'Symbols', inline = 's08')
s09 = input.symbol('BIST:SAMAT', group = 'Symbols', inline = 's09')
s10 = input.symbol('BIST:ARENA', group = 'Symbols', inline = 's10')
//////////////////
// CALCULATIONS //
// 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
screener_func() =>
// MAs
ma = ta.sar(0, 0.9, 0.1)
ma_signal = 0.0
ma_signal := ta.crossover(close, ma) ? 1 : ta.crossunder(close, ma) ? -1 : ma_signal[1] + math.sign(ma_signal[1])
[math.round_to_mintick(close), math.round_to_mintick(ma), ma_signal]
// Set Up Matrix
screenerMtx = matrix.new<float>(0, 4, na)
screenerFun(numSym, sym, flg) =>
[cl, ma, ma_sig] = request.security(sym, timeframe.period, screener_func())
arr = array.from(numSym, cl, ma, ma_sig)
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_center, 4, 11, frame_color = #151715, frame_width = 1, border_width = 2, border_color = color.new(color.white, 100))
order_arr = array.new_string(0)
if barstate.islast
table.clear(tbl, 0, 0, 3, 10)
table.cell(tbl, 0, 0, 'Adı', text_halign = text.align_center, bgcolor = color.gray, text_color = color.white, text_size = size.small)
table.cell(tbl, 1, 0, 'Fiyat', text_halign = text.align_center, bgcolor = color.gray, text_color = color.white, text_size = size.small)
table.cell(tbl, 2, 0, 'Sar', text_halign = text.align_center, bgcolor = color.gray, text_color = color.white, text_size = size.small)
table.cell(tbl, 3, 0, 'Sinyal', text_halign = text.align_center, bgcolor = color.gray, text_color = color.white, text_size = size.small)
array.clear(order_arr)
if matrix.rows(screenerMtx) > 0
for i = 0 to matrix.rows(screenerMtx) - 1 by 1
sig = matrix.get(screenerMtx, i, 3)
if sig == 1
order = '{"ticker": "' + id_symbol(matrix.get(screenerMtx, i, 0)) + '","action": "buy","price": "' + str.tostring(matrix.get(screenerMtx, i, 1)) + '","time": "' + str.tostring(timenow) + '"}'
array.push(order_arr, order)
if sig == -1
order = '{"ticker": "' + id_symbol(matrix.get(screenerMtx, i, 0)) + '","action": "sell","price": "' + str.tostring(matrix.get(screenerMtx, i, 1)) + '","time": "' + str.tostring(timenow) + '"}'
array.push(order_arr, order)
ma_signal_txt = sig == 1 ? 'Long' : sig == -1 ? 'Short' : sig > 0 ? 'Long [' + str.tostring(math.abs(sig) - 1) + ']' : sig < 0 ? 'Short [' + str.tostring(math.abs(sig) - 1) + ']' : ''
ma_col = sig == 1 ? color.green : sig == -1 ? color.red : #aaaaaa
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 = #aaaaaa, text_color = color.white, text_size = size.small)
table.cell(tbl, 3, i + 1, ma_signal_txt, text_halign = text.align_center, bgcolor = ma_col, text_color = color.white, text_size = size.small)
varip last_alert_bar_sent = 0
if barstate.isconfirmed
if array.size(order_arr) > 0 and time_close > last_alert_bar_sent
log.info(str.tostring(last_alert_bar_sent) + ' ' + str.tostring(time_close))
last_alert_bar_sent := time_close
log.info(str.tostring(order_arr))
for i = 0 to array.size(order_arr) - 1 by 1
alert(array.pop(order_arr), freq = alert.freq_all)
///////////////////////////////////
// === Parameters ===
length = input.int(1, minval = 1, title = 'SMA Length for Candle Midpoint')
scale = input.float(200.0, minval = 1.0, step = 1.0, title = 'Band Scaling (% of Average Candle Height)')
fill_type = input.string('Gradient', title = 'Fill Type', options = ['Gradient', 'Solid', 'None'], group = 'Style')
// === Color Parameters ===
colUpper = input.color(color.rgb(162, 16, 6), title = 'Upper Band and Gradient Color', group = 'Style')
colLower = input.color(color.rgb(6, 162, 47), title = 'Lower Band and Gradient Color', group = 'Style')
solidFillColor = input.color(color.gray, title = 'Solid Fill Color', group = 'Style')
// === Signal Parameters ===
show_return_signals = input.bool(true, title = 'Show Band Reversal Signals', group = 'Signals')
bullishSignalColor = input.color(color.green, title = 'Lower Band Reversal Signal Color', group = 'Signals')
bearishSignalColor = input.color(color.red, title = 'Upper Band Reversal Signal Color', group = 'Signals')
show_sma_signals = input.bool(true, title = 'Show SMA Crossover Signals', group = 'Signals')
smaCrossUpColor = input.color(color.green, title = 'SMA Crossover Up Signal Color', group = 'Signals')
smaCrossDownColor = input.color(color.red, title = 'SMA Crossover Down Signal Color', group = 'Signals')
// === Calculations ===
// 1. Candle Midpoint
candleMid = (high + low) / 2
// 2. SMA of Candle Midpoint
midSma = ta.sma(candleMid, length)
// 3. Average Candle Height
avgRange = ta.sma(high - low, length)
// 4. Offset = % of Average Candle Height
offset = avgRange * scale / 100
// 5. Bands
upperBand = midSma + offset
lowerBand = midSma - offset
// === Reversal Signals ===
// Condition: Price closes above upper band
aboveUpper = close[1] > upperBand[1]
// Condition: Reversal candle (bearish, closes below upper band)
returnToUpper = show_return_signals and aboveUpper and close < upperBand and close < open
// Condition: Price closes below lower band
belowLower = close[1] < lowerBand[1]
// Condition: Reversal candle (bullish, closes above lower band)
returnToLower = show_return_signals and belowLower and close > lowerBand and close > open
// === SMA Crossover Signals ===
smaCrossUp = show_sma_signals and ta.crossover(close, midSma)
smaCrossDown = show_sma_signals and ta.crossunder(close, midSma)
// === Visualization ===
// Middle Line
plot(midSma, color = color.new(#e9f109, 70), title = 'Candle Midpoint SMA', linewidth = 1)
// Channel and Boundaries
plotUpper = plot(upperBand, title = 'Upper Band', color = colUpper, display = display.all)
plotLower = plot(lowerBand, title = 'Lower Band', color = colLower, display = display.all)
midCenter = (upperBand + lowerBand) / 2
plotMid = plot(midCenter, title = 'Midpoint', display = display.none)
// Gradient Levels (12 equal layers per half)
mid0 = plot(upperBand - (upperBand - midCenter) * 0 / 12, display = display.none)
mid1 = plot(upperBand - (upperBand - midCenter) * 1 / 12, display = display.none)
mid2 = plot(upperBand - (upperBand - midCenter) * 2 / 12, display = display.none)
mid3 = plot(upperBand - (upperBand - midCenter) * 3 / 12, display = display.none)
mid4 = plot(upperBand - (upperBand - midCenter) * 4 / 12, display = display.none)
mid5 = plot(upperBand - (upperBand - midCenter) * 5 / 12, display = display.none)
mid6 = plot(upperBand - (upperBand - midCenter) * 6 / 12, display = display.none)
mid7 = plot(upperBand - (upperBand - midCenter) * 7 / 12, display = display.none)
mid8 = plot(upperBand - (upperBand - midCenter) * 8 / 12, display = display.none)
mid9 = plot(upperBand - (upperBand - midCenter) * 9 / 12, display = display.none)
mid10 = plot(upperBand - (upperBand - midCenter) * 10 / 12, display = display.none)
mid11 = plot(upperBand - (upperBand - midCenter) * 11 / 12, display = display.none)
// Lower Half
mid12 = plot(midCenter + (lowerBand - midCenter) * 1 / 12, display = display.none)
mid13 = plot(midCenter + (lowerBand - midCenter) * 2 / 12, display = display.none)
mid14 = plot(midCenter + (lowerBand - midCenter) * 3 / 12, display = display.none)
mid15 = plot(midCenter + (lowerBand - midCenter) * 4 / 12, display = display.none)
mid16 = plot(midCenter + (lowerBand - midCenter) * 5 / 12, display = display.none)
mid17 = plot(midCenter + (lowerBand - midCenter) * 6 / 12, display = display.none)
mid18 = plot(midCenter + (lowerBand - midCenter) * 7 / 12, display = display.none)
mid19 = plot(midCenter + (lowerBand - midCenter) * 8 / 12, display = display.none)
mid20 = plot(midCenter + (lowerBand - midCenter) * 9 / 12, display = display.none)
mid21 = plot(midCenter + (lowerBand - midCenter) * 10 / 12, display = display.none)
mid22 = plot(midCenter + (lowerBand - midCenter) * 11 / 12, display = display.none)
mid23 = plot(midCenter + (lowerBand - midCenter) * 12 / 12, display = display.none)
// Gradient Fill - Upper Half
fill(plotUpper, mid0, color = fill_type == 'Gradient' ? color.new(colUpper, 60) : na)
fill(mid0, mid1, color = fill_type == 'Gradient' ? color.new(colUpper, 63) : na)
fill(mid1, mid2, color = fill_type == 'Gradient' ? color.new(colUpper, 66) : na)
fill(mid2, mid3, color = fill_type == 'Gradient' ? color.new(colUpper, 69) : na)
fill(mid3, mid4, color = fill_type == 'Gradient' ? color.new(colUpper, 72) : na)
fill(mid4, mid5, color = fill_type == 'Gradient' ? color.new(colUpper, 75) : na)
fill(mid5, mid6, color = fill_type == 'Gradient' ? color.new(colUpper, 78) : na)
fill(mid6, mid7, color = fill_type == 'Gradient' ? color.new(colUpper, 81) : na)
fill(mid7, mid8, color = fill_type == 'Gradient' ? color.new(colUpper, 84) : na)
fill(mid8, mid9, color = fill_type == 'Gradient' ? color.new(colUpper, 87) : na)
fill(mid9, mid10, color = fill_type == 'Gradient' ? color.new(colUpper, 90) : na)
fill(mid10, mid11, color = fill_type == 'Gradient' ? color.new(colUpper, 93) : na)
// Middle Transition - Neutral
fill(mid11, mid12, color = fill_type == 'Gradient' ? color.new(color.gray, 95) : na)
// Gradient Fill - Lower Half
fill(mid12, mid13, color = fill_type == 'Gradient' ? color.new(colLower, 90) : na)
fill(mid13, mid14, color = fill_type == 'Gradient' ? color.new(colLower, 87) : na)
fill(mid14, mid15, color = fill_type == 'Gradient' ? color.new(colLower, 84) : na)
fill(mid15, mid16, color = fill_type == 'Gradient' ? color.new(colLower, 81) : na)
fill(mid16, mid17, color = fill_type == 'Gradient' ? color.new(colLower, 78) : na)
fill(mid17, mid18, color = fill_type == 'Gradient' ? color.new(colLower, 75) : na)
fill(mid18, mid19, color = fill_type == 'Gradient' ? color.new(colLower, 72) : na)
fill(mid19, mid20, color = fill_type == 'Gradient' ? color.new(colLower, 69) : na)
fill(mid20, mid21, color = fill_type == 'Gradient' ? color.new(colLower, 66) : na)
fill(mid21, mid22, color = fill_type == 'Gradient' ? color.new(colLower, 63) : na)
fill(mid22, mid23, color = fill_type == 'Gradient' ? color.new(colLower, 60) : na)
// Solid Fill
fill(plotUpper, plotLower, color = fill_type == 'Solid' ? color.new(solidFillColor, 90) : na, title = 'Solid Fill')
Yer İmleri