牛刀小试:用Pine语言画出顶背离和底背离指标观察系统

Author: ianzeng123, Created: 2023-02-24 13:43:20, Updated: 2023-11-15 20:00:53

img

注:本内容为实盘模拟,切勿直接带入市场运行:)

Pine语言是一门基于图表的语言,而在期货交易中,我们做的最多的事情就是看盘。众所周知,看盘是一件很累的事情,K线的不断涨跌彷佛牵动我们的每一刻神经。因此,如果能使用Pine语言,根据我们的交易理解,对我们的K线图进行私人优化,对指标进行更好的呈现,帮助我们快速进行决策的判断,这就是程序化交易的方便之处。

顶背离和底背离指标大家一定不陌生,作为“多空转向”的重要参考指标,在不少的交易平台都有显示。

img

Pine语言当然不能认输,没有现成的内置函数,我们就自己造一个!本文在介绍顶背离和底背离指标含义的基础上,利用Pine语言进行一个完美的复刻。

顶背离 & 底背离

顶背离:K线图上的价格走势一峰比一峰高,价格一直在向上涨,而MACD指标图形上的由红柱构成的图形的走势是一峰比一峰低,即当价格的高点比前一次的高点高、而MACD指标的高点比指标的前一次高点低,这叫顶背离现象。这是一个有“多”转“空”的参考信号。 底背离:K线图上的价格走势一峰比一峰低,价格一直在向下跌,而MACD指标图形上的由绿构成的图形的走势是一峰比一峰高,即当价格的低点比前一次的低点低、而MACD指标的低点比指标的前一次低点高,这叫底背离现象。这是一个有“空”转“多”的参考信号。

MACD指标

MACD称为异同移动平均线,是从双指数移动平均线发展而来的,由快的指数移动平均线(EMA12)减去慢的指数移动平均线(EMA26)得到快线DIF,再用2×(快线DIF-DIF的9日加权移动均线DEA)得到MACD柱。MACD的变化代表着市场趋势的变化,不同K线级别的MACD代表当前级别周期中的买卖趋势(源自:百度百科)。

具体的指标计算公式如下:

12日EMA的计算:EMA12 = 前一日EMA12 * 11/13 + 今日收盘 * 2/13 26日EMA的计算:EMA26 = 前一日EMA26 * 25/27 + 今日收盘 * 2/27 差离值(DIF)的计算: DIF = EMA12 - EMA26 9日DEA = 前一日DEA * 8/10 + 今日DIF * 2/10BAR=(DIF-DEA)*2 MACD=(DIF-DEA)*2

在Pine语言里,我们既可以用ta.macd直接计算出来,也可以使用代码自己打造一个MACD轮子。参数(12,26,9)是公认的指标,当然你也可以使用input.int进行参数的调整。

fastline = ta.ema(close,12)  
slowline = ta.ema(close,26)
diff = fastline - slowline 

dea = ta.ema(diff,9) 
macd = 2*(diff - dea)


在MACD指标计算出来的基础上,我们进行“顶背离”和“底背离”信号确定的条件并进行画图。

顶背离:

快线下穿慢线: MACD 从正转为负(下穿0线) 价格逐渐上涨:今日价格(close)大于昨日(close[1])

top_diver = ta.crossunder(macd,0) and close[1] < close
plotchar(top_diver, char='顶背离', location = location.abovebar, size = size.normal, overlay=true)

底背离:

快线上穿慢线: MACD 从负转为正(上穿0线) 价格逐渐上跌:今日价格(close)小于昨日(close[1])

bot_diver = ta.crossover(macd,0) and close[1] > close
plotchar(bot_diver, char='底背离', location = location.belowbar, size = size.normal, overlay=true)

在计算出diff,dea和macd指标和确定顶背离和底背离逻辑判断,我们还需要画出diff线,dea线,和macd柱状图,这里呢,也很简单,对于diff和dea直接使用plot函数就好。需要注意的是,对于macd柱状图,plot函数中style需要选择histgram,然后颜色的选择使用一个三元表达式,正值使用红色,负值使用绿色。

plot(diff, title='diff', style=plot.style_line,overlay=false)
plot(dea, title='dea', style=plot.style_line,overlay=false)
plot(macd, title='delta', color=macd >= 0 ? color.red : color.green,style=plot.style_histogram,histbase=0,overlay=false)

最后,画图呈现的结果如下:

img

嗯,看起来确实具有参考意义,在以“顶背离”和“底背离”为拐点的前后,确实出现了“多空转向”。如果大家感兴趣的话,不妨来FMZ平台点击一试,具体策略参考代码在这里:https://www.fmz.cn/strategy/378551

再次提醒下:本策略为教学展示用,金融有风险,入市需谨慎!


更多内容