final script
final script
// TEMA
len1 = input.int(10, minval=1, title="Length 1")
len2 = input.int(20, minval=2, title="Length 2")
ema1 = ta.ema(close, len1)
ema11 = ta.ema(ema1, len1)
ema111 = ta.ema(ema11, len1)
tema1 = 3 * (ema1 - ema11) + ema111
ema2 = ta.ema(close, len2)
ema22 = ta.ema(ema2, len2)
ema222 = ta.ema(ema22, len2)
tema2 = 3 * (ema2 - ema22) + ema222
color_tema1 = color.new(color.black, 20)
color_tema2 = color.new(color.maroon, 20)
plot(tema1, color=color_tema1)
plot(tema2, color=color_tema2)
//LRC
src = input.source(defval = close, title = "Source")
len = input.int(defval = 100, title = "Length", minval = 10)
devlen = input.float(defval = 2., title = "Deviation", minval = 0.1, step = 0.1)
extendit = input(defval = true, title = "Extend Lines")
showfibo = input(defval = false, title = "Show Fibonacci Levels")
showbroken = input(defval = true, title = "Show Broken Channel", inline = "brk")
brokencol = input(defval = color.blue, title = "", inline = "brk")
upcol = input(defval = color.lime, title = "Up/Down Trend Colors", inline =
"trcols")
dncol = input(defval = color.red, title = "", inline = "trcols")
widt = input.int(defval = 2, title = "Line Width")
get_channel(src, len)=>
mid = math.sum(src, len) / len
slope = ta.linreg(src, len, 0) - ta.linreg(src, len, 1)
intercept = mid - slope * math.floor(len / 2) + ((1 - (len % 2)) / 2) * slope
endy = intercept + slope * (len - 1)
dev = 0.0
for x = 0 to len - 1
dev := dev + math.pow(src[x] - (slope * (len - x) + intercept), 2)
dev := math.sqrt(dev/len)
[intercept, endy, dev, slope]
outofchannel = (slope > 0 and close < y2_ - dev * devlen) ? 0 : (slope < 0 and
close > y2_ + dev * devlen) ? 2 : -1
array.set(reglines, x,
line.new(x1 = bar_index - (len - 1),
y1 = y1_ + dev * devlen * (x - 1),
x2 = bar_index,
y2 = y2_ + dev * devlen * (x - 1),
color = array.get(colors,
math.round(math.max(math.sign(slope), 0))),
style = x % 2 == 1 ? line.style_solid : line.style_dashed,
width = widt,
extend = extendit ? extend.right : extend.none))
if showfibo
for x = 0 to 3
line.delete(array.get(fibolines, x))
array.set(fibolines, x,
line.new(x1 = bar_index - (len - 1),
y1 = y1_ - dev * devlen + dev * devlen * 2 *
array.get(fibo_ratios, x),
x2 = bar_index,
y2 = y2_ - dev * devlen + dev * devlen * 2 *
array.get(fibo_ratios, x),
color = array.get(colors,
math.round(math.max(math.sign(slope), 0))),
style = line.style_dotted,
width = widt,
extend = extendit ? extend.right : extend.none))
var label sidelab = label.new(x = bar_index - (len - 1), y = y1_, text = "S", size
= size.large)
txt = slope > 0 ? slope > slope[1] ? "⇑" : "⇗" : slope < 0 ? slope < slope[1] ? "⇓"
: "⇘" : "⇒"
stl = slope > 0 ? slope > slope[1] ? label.style_label_up :
label.style_label_upper_right : slope < 0 ? slope < slope[1] ?
label.style_label_down : label.style_label_lower_right : label.style_label_right
label.set_style(sidelab, stl)
label.set_text(sidelab, txt)
label.set_x(sidelab, bar_index - (len - 1))
label.set_y(sidelab, slope > 0 ? y1_ - dev * devlen : slope < 0 ? y1_ + dev *
devlen : y1_)
label.set_color(sidelab, slope > 0 ? upcol : slope < 0 ? dncol : color.blue)
// direction
trendisup = math.sign(slope) != math.sign(slope[1]) and slope > 0
trendisdown = math.sign(slope) != math.sign(slope[1]) and slope < 0
alertcondition(trendisup, title='Up trend', message='Up trend')
alertcondition(trendisdown, title='Down trend', message='Down trend')
//INPUTS
MaFast_period = input.int(1,"Ma Fast period",1,1000,1)
MaSlow_period = input.int(34,"Ma Slow period",1,1000,1)
Signal_period = input.int(4,"Signal period",1,1000,1)
Show_gains = input(title="Show Wins/Losses ?", defval=true)
//CALCULATION
smaFast = ta.sma(hl2, MaFast_period)
smaSlow = ta.sma(hl2, MaSlow_period)
//SIGNAL
buffer1 = smaFast - smaSlow
buffer2 = ta.wma(buffer1, Signal_period)
//CONDITIONS
buyCondition = buffer1 > buffer2 and buffer1[1] < buffer2[1] and not (buffer1 <
buffer2 and buffer1[1] > buffer2[1])
sellCondition = buffer1 < buffer2 and buffer1[1] > buffer2[1] and not (buffer1 >
buffer2 and buffer1[1] < buffer2[1])
buy = buyCondition==1
sell = sellCondition==1
win = (buy[MaFast_period]==1 and close[MaFast_period]<close) or
(sell[MaFast_period]==1 and close[MaFast_period]>close)
loss = (buy[MaFast_period]==1 and close[MaFast_period]>=close) or
(sell[MaFast_period]==1 and close[MaFast_period]<=close)
//PLOTS
plotshape(series=buyCondition, title="Buy", style=shape.labelup,
location=location.belowbar, color=color.green, size=size.small, text="Buy",
textcolor=color.white)
plotshape(series=sellCondition, title="Sell", style=shape.labeldown,
location=location.abovebar, color=color.red, size=size.small, text="Sell",
textcolor=color.white)
//ALERTS
alertcondition(buyCondition, title='Alert: [SMT] BO1M: Buy Signal', message='Buy!')
alertcondition(sellCondition, title='Alert: [SMT] BO1M: Sell Signal',
message='Sell!')
// Channel settings
dcLen = input.int(20, title="Channel Length", minval=2)
// Visual settings
showMid = input.bool(false, title="Show Midpoint Line?")
fillDc = input.bool(false, title="Fill Donchian Channel?")
// Signal settings
brkOutFilter = input.int(0, title="Breakout Filter (Ticks)", minval=0) *
syminfo.mintick
bgcolor(highlightColour)
alertcondition(condition=downBrkOut,
title="Short Entry",
message="Price closed below Donchian Channel")
// Figure out the plot colour for the lower wick columns
downWickColour = if LowerWickRange() >= avgDownWick
color.orange
else
color.teal
// Figure out the plot colour for the lower wick columns
// Request the last confirmed `topLeft` and `bottomRight` chart points from the
`higherTimeframe`.
[requestedTopLeft, requestedBottomRight] = request.security(
syminfo.tickerid, higherTimeframe, [topLeft, bottomRight], lookahead =
barmerge.lookahead_on
)
// Plot the requested rates. We can multiply TRY values by these rates to convert
them to KRW.
plot(securityRequestedRate, "`request.security()` value", color.purple, 5)
plot(nonSecurityRequestedRate, "`request.currency_rate()` value", color.yellow, 2)