过程
在任何时候,您都可以在此脚本中看到多达4条趋势线。
旧的线路将一直保留,直到新的线路通过相同类型的线路。因此,您仍然可以看到很久以前创建的下降趋势工具的上升和下降趋势线!!此外,只有当旧趋势线更强时,新趋势线才会取代旧趋势线(连接到更多枢轴,溢出更少)
回测测试
/*backtest start: 2021-12-01 00:00:00 end: 2022-03-05 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}] args: [["ContractType","rb2210",360008]] */ //@version=4 study("BRAHMASTRA", precision=2, overlay=true) // compilation: capissimo // This script utilizes two modules, Trendlines Module (by Joris Duyck) and HMA-Kahlman Trend Module. // Trendlines module produces crossovers predictive of the next local trend. //*** HMA-Kahlman Trend Module price = input(hl2, "价格数据(默认hl2)") hkmod = input(true, "===HMA-Kahlman 趋势模型===") length = input(22, "回看窗口周期", minval=2) k = input(true, "使用Kahlman") gain = input(.7, "赢得", minval=.0001, step=.01) labels = input(true, "显示标签?") o = input(true, "使用偏移") hma(x, p) => wma((2 * wma(x, p / 2)) - wma(x, p), round(sqrt(p))) hma3() => p = length/2, wma(wma(close, p/3)*3 - wma(close, p/2) - wma(close, p), p) kahlman(x, g) => kf = 0.0 dk = x - nz(kf[1], x) smooth = nz(kf[1],x)+dk*sqrt(g*2) velo = 0.0 velo := nz(velo[1],0) + (g*dk) kf := smooth+velo a = k ? kahlman(hma(price, length), gain) : hma(price, length) b = k ? kahlman(hma3(), gain) : hma3() c = b > a ? color.lime : color.red crossdn = a > b and a[1] < b[1] crossup = b > a and b[1] < a[1] ofs = o ? -1 : 0 fill(plot(a,color=c,linewidth=1,transp=75), plot(b,color=c,linewidth=1,transp=75), color=c, transp=55) plotshape(labels and crossdn ? a : na, location=location.abovebar, style=shape.labeldown, color=color.red, size=size.tiny, text="S", textcolor=color.white, transp=0, offset=ofs) plotshape(labels and crossup ? a : na, location=location.belowbar, style=shape.labelup, color=color.green, size=size.tiny, text="B", textcolor=color.white, transp=0, offset=ofs) //*** Trendlines Module, see https://www.tradingview.com/script/mpeEgn5J-Trendlines-JD/ tlmod = input(true, "===趋势线模型===") l1 = input(2, "枢轴点回看窗口周期", minval=1) trendline(input_function, delay, only_up) => // Calculate line coordinates (Ax,Ay) - (Bx,By) var int Ax = 0, var int Bx = 0, var float By = 0.0, var float slope = 0.0 Ay = fixnan(input_function) if change(Ay)!=0 Ax := time[delay], By:= Ay[1], Bx := Ax[1] slope := ((Ay-By)/(Ax-Bx)) else Ax := Ax[1], Bx := Bx[1], By := By[1] var line trendline=na, var int Axbis=0, var float Aybis=0.0, var bool xtend=true extension_time = 0 Axbis := Ax + extension_time Aybis := (Ay + extension_time*slope) if tlmod and change(Ay)!=0 line_color = slope*time<0?(only_up?na:color.red):(only_up?color.lime:na) if not na(line_color) trendline = line.new(Bx,By,Axbis, Aybis, xloc.bar_time, extend=xtend?extend.right:extend.none, color=line_color, style=line.style_dotted, width=1) line.delete(trendline[1]) slope pivot(len) => high_point = pivothigh(high, len,len/2) low_point = pivotlow(low, len,len/2) slope_high = trendline(high_point, len/2,false) slope_low = trendline(low_point, len/2,true) [high_point, low_point, slope_high, slope_low] [high_point1, low_point1, slope_high1, slope_low1] = pivot(l1) color_high1 = slope_high1 * time<0 ? color.red : na color_low1 = slope_low1 * time>0 ? color.lime : na plot(tlmod ? high_point1 : na, color=color_high1, offset=-l1/2, linewidth=2) plot(tlmod ? low_point1 : na, color=color_low1, offset=-l1/2, linewidth=2) if crossup strategy.entry("Enter Long", strategy.long) else if crossdn strategy.entry("Enter Short", strategy.short)