本页源码来自 TradingView 公开发布的开源脚本,版权归原作者所有, 请遵循其原始许可(Pine 脚本常见 CC BY-NC-SA / MPL-2.0 / MIT)。 本项目仅用于研究检索与许可范围内的移植。
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © LonesomeTheBlue
//@version=4
study("Donchian Trend", overlay = true)
dlen = input(defval = 20, title = "Donchian Channel Period", minval = 10)
dchannel(len)=>
float hh = highest(len)
float ll = lowest(len)
int trend = 0
trend := close > hh[1] ? 1 : close < ll[1] ? -1 : nz(trend[1])
[hh, ll, trend]
dchanneltr(len)=>
float hh = highest(len)
float ll = lowest(len)
int trend = 0
trend := close >= hh[1] ? 1 : close <= ll[1] ? -1 : nz(trend[1])
[upper, lower, maintrend] = dchannel(dlen)
tt = maintrend == 1 ? 10 : -10
[u1, l1, t1] = dchannel(dlen -1 )
tt := tt - (sign(dchanneltr(dlen - 1)) != sign(maintrend) ? int(sign(maintrend)) : 0)
tt := tt - (sign(dchanneltr(dlen - 2)) != sign(maintrend) ? int(sign(maintrend)) : 0)
tt := tt - (sign(dchanneltr(dlen - 3)) != sign(maintrend) ? int(sign(maintrend)) : 0)
tt := tt - (sign(dchanneltr(dlen - 4)) != sign(maintrend) ? int(sign(maintrend)) : 0)
tt := tt - (sign(dchanneltr(dlen - 5)) != sign(maintrend) ? int(sign(maintrend)) : 0)
tt := tt - (sign(dchanneltr(dlen - 6)) != sign(maintrend) ? int(sign(maintrend)) : 0)
tt := tt - (sign(dchanneltr(dlen - 7)) != sign(maintrend) ? int(sign(maintrend)) : 0)
tt := tt - (sign(dchanneltr(dlen - 8)) != sign(maintrend) ? int(sign(maintrend)) : 0)
tt := tt - (sign(dchanneltr(dlen - 9)) != sign(maintrend) ? int(sign(maintrend)) : 0)
getcolor(trend)=>
_ret = trend >= 10.0 ? #00FF00ff :
trend >= 9.0 ? #00FF00e5 :
trend >= 8.0 ? #00FF00cc :
trend >= 7.0 ? #00FF00b2 :
trend >= 6.0 ? #00FF0099 :
trend >= 5.0 ? #00FF007f :
trend >= 4.0 ? #00FF0066 :
trend >= 3.0 ? #00FF004c :
trend >= 2.0 ? #00FF0033 :
trend >= 1.0 ? #00FF0019 :
trend == 0.0 ? color.new(color.white, 100) :
trend >= -1.0 ? #FF000019 :
trend >= -2.0 ? #FF000033 :
trend >= -3.0 ? #FF00004c :
trend >= -4.0 ? #FF000066 :
trend >= -5.0 ? #FF00007f :
trend >= -6.0 ? #FF000099 :
trend >= -7.0 ? #FF0000b2 :
trend >= -8.0 ? #FF0000cc :
trend >= -9.0 ? #FF0000e5 : #FF0000ff
tline = maintrend == 1 ? lower : upper
tcol = maintrend == 1 and nz(maintrend[1]) == 1 or maintrend == -1 and nz(maintrend[1]) == -1 ? getcolor(tt) : na
plot(tline, color = tcol, linewidth = 4)
plotchar(maintrend == 1 and tt > 2 and (tt < 10 or low == lower) ? lower : na, char = "↑", color = color.green, location = location.absolute, size = size.small)
plotchar(maintrend == -1 and tt < -2 and (tt > -10 or high == upper) ? upper : na, char = "↓", color = color.olive, location = location.absolute, size = size.small)