大家好,
有许多类型的超潮流。最近,我考虑了一个基于枢轴点的超趋势,然后我写了“枢轴点超趋势”脚本。看起来它在保持你更多的趋势方面有更好的表现。
这个脚本背后的想法是找到轴心点,计算它们的平均值,并在超级趋势策略中通过ATR创建更高/更低的频带。正如您在算法中所看到的,脚本为过去的轴点提供了权重,这是为了稍微平滑它。
回测测试
/*backtest start: 2022-05-01 09:00:00 end: 2022-07-11 15:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}] args: [["v_input_1",5],["v_input_2",1],["v_input_3",8],["v_input_4",true],["v_input_6",true],["v_input_7",true],["ContractType","rb2210",360008]] */ // 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("Pivot Point SuperTrend", overlay = true) prd = input(defval = 3, title="枢轴点周期", minval = 1, maxval = 50) Factor=input(defval = 2, title = "ATR乘数", minval = 1, step = 0.1) Pd=input(defval = 6, title = "ATR周期", minval=1) showpivot = input(defval = false, title="显示枢轴点") showlabel = input(defval = true, title="显示标签") showcl = input(defval = false, title="显示 PP 中线") showsr = input(defval = false, title="显示支撑线/阻力线") // get Pivot High/Low float ph = pivothigh(prd, prd) float pl = pivotlow(prd, prd) // drawl Pivot Points if "showpivot" is enabled plotshape(ph and showpivot, text="H", style=shape.labeldown, color=na, textcolor=color.red, location=location.abovebar, transp=0, offset = -prd) plotshape(pl and showpivot, text="L", style=shape.labeldown, color=na, textcolor=color.lime, location=location.belowbar, transp=0, offset = -prd) // calculate the Center line using pivot points var float center = na float lastpp = ph ? ph : pl ? pl : na if lastpp if na(center) center := lastpp else //weighted calculation center := (center * 2 + lastpp) / 3 // upper/lower bands calculation Up = center - (Factor * atr(Pd)) Dn = center + (Factor * atr(Pd)) // get the trend float TUp = na float TDown = na Trend = 0 TUp := close[1] > TUp[1] ? max(Up, TUp[1]) : Up TDown := close[1] < TDown[1] ? min(Dn, TDown[1]) : Dn Trend := close > TDown[1] ? 1: close < TUp[1]? -1: nz(Trend[1], 1) Trailingsl = Trend == 1 ? TUp : TDown // plot the trend linecolor = Trend == 1 and nz(Trend[1]) == 1 ? color.lime : Trend == -1 and nz(Trend[1]) == -1 ? color.red : na plot(Trailingsl, color = linecolor , linewidth = 2, title = "PP SuperTrend") plot(showcl ? center : na, color = showcl ? center < hl2 ? color.blue : color.red : na) // check and plot the signals bsignal = Trend == 1 and Trend[1] == -1 ssignal = Trend == -1 and Trend[1] == 1 plotshape(bsignal and showlabel ? Trailingsl : na, title="Buy", text="Buy", location = location.absolute, style = shape.labelup, size = size.tiny, color = color.lime, textcolor = color.black, transp = 0) plotshape(ssignal and showlabel ? Trailingsl : na, title="Sell", text="Sell", location = location.absolute, style = shape.labeldown, size = size.tiny, color = color.red, textcolor = color.white, transp = 0) //get S/R levels using Pivot Points float resistance = na float support = na support := pl ? pl : support[1] resistance := ph ? ph : resistance[1] // if enabled then show S/R levels plot(showsr and support ? support : na, color = showsr and support ? color.lime : na, style = plot.style_circles, offset = -prd) plot(showsr and resistance ? resistance : na, color = showsr and resistance ? color.red : na, style = plot.style_circles, offset = -prd) // alerts alertcondition(Trend == 1 and Trend[1] == -1, title='Buy Signal', message='Buy Signal') alertcondition(Trend == -1 and Trend[1] == 1, title='Sell Signal', message='Sell Signal') alertcondition(change(Trend), title='Trend Changed', message='Trend Changed') if Trend == 1 and Trend[1] == -1 strategy.entry("Enter Long", strategy.long) else if Trend == -1 and Trend[1] == 1 strategy.entry("Enter Short", strategy.short)