用Python编写基于Supertrend“超级趋势线”强化策略

『正文』

ˇ

简文:

什么是超级趋势指标SuperTrend Indicator?

超级趋势指标SuperTrend Indicator是一个在外汇交易中常用指标,它的设计者是Jason Robinson。它的主要用途是确定价格趋势,和进行趋势追踪。

超级趋势指标SuperTrend Indicator的计算公式:

在做多时:

超级趋势指标SuperTrend =(最高价 最低价)/2 – N*ATR(M)

在作图中,这个值只上移不下移,就是取近期的最高值。

在做空时:

超级趋势指标= (最高价 最低价)/2 N*ATR(M)

在作图中,这个值只下移不上移,就是取近期的最低值。

在这个指标当中适用了均值(H L)/2,和ATR真是波动幅度的概念。在设置它的参数时,要考虑两个值,N,M。一个用来计算ATR的倍数,一个用来计算ATR的周期数。例如,周期数可以是10日,倍数可以是3倍,这是这个指标的基本设置。对于不同的交易市场,和交易对象来说,这两个参数是可以优化的。它的计算方法与肯特纳通道Keltner Channels很相似。

超级趋势指标SuperTrend的主要用途:

1,  可以作为决定趋势的过滤器;在上升趋势时,做多;在下降趋势中,做空。

2,  可以作为趋势追踪止损。在做多有盈利时,当收盘价小于这个指标近期最高值时,卖出,这样可以锁定利润,又不会因为止盈而错过大趋势。当然,它的正确适用和它的参数设置有密切关系。

原版源码:

/ This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/// © LonesomeTheBlue
//@version=4study('Pivot Point SuperTrend', overlay = true)prd = input(defval = 2, title='Pivot Point Period', minval = 1, maxval = 50)Factor=input(defval = 3, title = 'ATR Factor', minval = 1, step = 0.1)Pd=input(defval = 10, title = 'ATR Period', minval=1)showpivot = input(defval = false, title='Show Pivot Points')showlabel = input(defval = true, title='Show Buy/Sell Labels')showcl = input(defval = false, title='Show PP Center Line')showsr = input(defval = false, title='Show Support/Resistance')
float ph = nafloat pl = naph := pivothigh(prd, prd)pl := pivotlow(prd, prd)
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)
float center = nacenter := center[1]float lastpp = ph ? ph : pl ? pl : naif lastpp if na(center) center := lastpp else center := (center * 2 lastpp) / 3
Up = center - (Factor * atr(Pd))Dn = center (Factor * atr(Pd))
float TUp = nafloat TDown = naTrend = 0TUp := close[1] > TUp[1] ? max(Up, TUp[1]) : UpTDown := close[1] < TDown[1] ? min(Dn, TDown[1]) : DnTrend := close > TDown[1] ? 1: close < TUp[1]? -1: nz(Trend[1], 1)Trailingsl = Trend == 1 ? TUp : TDown
linecolor = Trend == 1 and nz(Trend[1]) == 1 ? color.lime : Trend == -1 and nz(Trend[1]) == -1 ? color.red : naplot(Trailingsl, color = linecolor , linewidth = 2, title = 'PP SuperTrend')
plot(showcl ? center : na, color = showcl ? center < hl2 ? color.blue : color.red : na, transp = 0)
bsignal = Trend == 1 and Trend[1] == -1ssignal = Trend == -1 and Trend[1] == 1plotshape(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)
float resistance = nafloat support = nasupport := pl ? pl : support[1]resistance := ph ? ph : resistance[1]
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)
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')

信号图:

Py01策略将国外的supertrend转编译到Python01,ST指标对趋势有很好的跟踪效果,在此基础上对它进行了进行了优化升级,使其更加适应国内商品的变化特征,经过优化升级的supertrend效果极佳。

导入

声明变量

核心计算

计算ATR值同时计算中轨HL2,然后构建上下轨道up和dn

将up和dn利用三元表达式进行迭代计算,更新最大或者最小值

KG值的计算是关键,KG是SuperTrend 的状态转换的重要变量,K==1为多头,K==2为空头如下图效果

仅仅使用SuperTrend 开平仓过于简单,我们引入OPV轨道来强化开仓条件:

同时引入动态止盈止损:

测试绩效

2019年7月-2020年7月绩效

TB同时间段绩效(2019.7-2020.7)

绩效基本一致

信号图

信号比对一致

TB绩效(10年)

螺纹钢5分钟(1.5%%,双向各1跳,2010年至今)

风险提示:

策略仅用于学习交流,松鼠宽客既不享受您的收益,也不承担您的风险。想要实盘请自行修改后谨慎使用,后果自负!

(0)

相关推荐