1、先认识两个新函数:
用于计算最高点和最低点。
2、看下面代码,计算枢轴
//@version=5
indicator(title="枢轴高点与低点", shorttitle="枢轴点")
lengthL = input.int(11, title="左侧长度", minval=1)
lengthR = input.int(11, title="右侧长度", minval=1)
pivotH = ta.pivothigh(lengthL, lengthR)
pivotL = ta.pivotlow(lengthL, lengthR)
bgcolor(color = bool(pivotH) ? color.red : bool(pivotL) ? color.green : na)
计算枢轴点,左右两边都有11条K线的,最高点和最低点。
前面使用input.*( )函数,定义左右两侧的长度,方便用户修改。
最后一行,当最高点和最低点返回非na值时,即有最高点或者最低点时,背景改色:有高点时红色,有低点时绿色。
3、看图
我们发现,背景为红色的K线并不是最高点,背景为绿色的也不是最低点。这是为什么呢?思考一下。
是的,想想K线的运行方向,脚本的运行方向,从左向右每条K线运行一次。 只有当脚本运行到K线图最高点右侧第11条K线时,才会计算出发现了最高枢轴点,就是在当前K线前面的第11条K线。这时,是最高枢轴轴的发现点K线,背景为红色,而真正的最高点 在前方11条K线处。 最低枢轴点也是一样。
4、把枢轴点连起来
//@version=5
indicator(title="枢轴高点与低点", shorttitle="枢轴点")
lengthL = input.int(11, title="左侧长度", minval=1)
lengthR = input.int(11, title="右侧长度", minval=1)
pivotH = ta.pivothigh(lengthL, lengthR)
pivotL = ta.pivotlow(lengthL, lengthR)
bgcolor(color = bool(pivotH) ? color.new(color.red, 70) : bool(pivotL) ? color.new(color.green, 70) : na)
float pivotPoint = na
var float pivotLevel = na
if bool(pivotH)
pivotPoint := pivotH
pivotLevel := pivotPoint
if bool(pivotL)
pivotPoint := pivotL
pivotLevel := pivotPoint
plot(pivotPoint, style = plot.style_line)
plot(pivotLevel, style = plot.style_line, color = pivotLevel != pivotLevel[1] ? na : color.white)
var的用法
声明为var时,变量不会在每条K线上初始化。如 pivotLevel ,只在脚本运行的第一次运算时,初始化,此后的每条K线上,不初始化。
而没有声明 为var时,变量会在每条K线上初始化。pivotPoint变量,在每条K线上,都会被初始化一次,赋值为na.
看图:
5、图表平移“ offset = ”参数
//@version=5
indicator(title="枢轴高点与低点", shorttitle="枢轴点")
lengthL = input.int(11, title="左侧长度", minval=1)
lengthR = input.int(11, title="右侧长度", minval=1)
pivotH = ta.pivothigh(lengthL, lengthR)
pivotL = ta.pivotlow(lengthL, lengthR)
float pivotPoint = na
var float pivotLevel = na
if bool(pivotH)
pivotPoint := pivotH
pivotLevel:= pivotPoint
if bool(pivotL)
pivotPoint := pivotL
pivotLevel := pivotPoint
plot(pivotPoint, offset = -lengthL, style = plot.style_line, color = color.aqua)
plot(pivotLevel, offset = -lengthR, style = plot.style_circles, color = pivotLevel != pivotLevel[1] ? na : color.white)
效果:
6、优化
//@version=5
indicator(title="枢轴高点与低点", shorttitle="枢轴点")
lengthL = input.int(11, title="左侧长度", minval=1)
lengthR = input.int(11, title="右侧长度", minval=1)
pivotH = ta.pivothigh(lengthL, lengthR)
pivotL = ta.pivotlow(lengthL, lengthR)
bgcolor(color = bool(pivotH) ? color.new(color.red, 70) : bool(pivotL) ? color.new(color.green, 70) : na)
float pivotPoint = na
var float pivotLevel = na
if bool(pivotH)
pivotPoint := pivotH
pivotLevel := pivotPoint
if bool(pivotL)
pivotPoint := pivotL
pivotLevel := pivotPoint
plot(pivotPoint, offset = -lengthL, style = plot.style_line)
plot(pivotLevel, offset = -lengthL, style = plot.style_line, color = pivotLevel != pivotLevel[1] ? na : color.white)
plotshape(pivotH, offset = 0-lengthL, text = "卖出", textcolor = color.red, style = shape.arrowdown, color=color.new(color.red, 0), size = size.auto, location = location.abovebar)
plotshape(pivotL, offset = 0-lengthL, text = "买入", textcolor = color.lime, style = shape.arrowup, color=color.new(color.lime, 0), size = size.auto, location = location.belowbar)
永远在最高点卖出,最低点买入。
7、最终图:
代码:
//@version=5
indicator(title="枢轴高点与低点", shorttitle="枢轴点")
lengthL = input.int(11, title="左侧长度", minval=1)
lengthR = input.int(11, title="右侧长度", minval=1)
zigzagShow = input(false, "显示连线")
pivotLevelShow = input(false, "显示枢轴线")
bgcolorShow = input(false, "显示背景")
buySellShow = input(true, "显示买卖")
pivotH = ta.pivothigh(lengthL, lengthR)
pivotL = ta.pivotlow(lengthL, lengthR)
bgcolor(color = bool(pivotH) ? color.new(color.red, 70) : bool(pivotL) ? color.new(color.green, 70) : na, display = bgcolorShow ? display.all : display.none)
float pivotPoint = na
var float pivotLevel = na
if bool(pivotH)
pivotPoint := pivotH
pivotLevel := pivotPoint
if bool(pivotL)
pivotPoint := pivotL
pivotLevel := pivotPoint
plot(zigzagShow ? pivotPoint : na, offset = -lengthL, style = plot.style_line)
plot(pivotLevelShow ? pivotLevel : na, offset = -lengthL, style = plot.style_line, color = pivotLevel != pivotLevel[1] ? na : color.white)
plotshape(buySellShow ? pivotH : na, offset = 0-lengthL, text = "卖出", textcolor = color.red,
style = shape.arrowdown, color=color.new(color.red, 0), size = size.auto, location = location.abovebar)
plotshape(buySellShow ? pivotL : na, offset = 0-lengthL, text = "买入", textcolor = color.lime,
style = shape.arrowup, color=color.new(color.lime, 0), size = size.auto, location = location.belowbar)