首页/作品&作者/学习笔记/ ta.pivothigh( )与ta.pivotlow( )的用法
ta.pivothigh( )与ta.pivotlow( )的用法
2024年05月28日

1、先认识两个新函数:

截图-20240523202906截图-20240523202950

用于计算最高点和最低点。    

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、看图

截图-20240523204242

我们发现,背景为红色的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.

看图:

截图-20240523211959

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)

效果:

截图-20240523212529

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)


截图-20240523212858

永远在最高点卖出,最低点买入。


7、最终图:

截图-20240523213938

代码:


//@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)



要开始Pine量化创作,
请微信扫码,加入我们: