PineScript 基础与绘图

Tradingview 是一个价格图表和分析软件,提供免费和付费选项,由一群交易员和软件开发商在 2011 年 9 月推出。投资者可以通过 Tradingview 查看各种不同金融市场和资产类别的价格图表,包括股票、货币对、债券、期货以及加密货币。除此之外,投资者还可以通过该平台查看多个交易品种,比如股指期货、欧美货币对、黄金、原油、比特币等等。

Pine 编程

脚本模式

模式 说明
indicator 指标
strategy 策略(可以回测)
library 库的声明

价格调用

如果要调用前面第3跟K线,那么就要用下标标注如: close[3]

价格模式 说明
close 收盘价
open 开盘价
high 最高价
low 最低价
atr = ta.atr(14)  // 如果要调用往前数第 10 跟蜡烛图的 ATR 值
plot(art[10], color=color.white) // 根据往前数第10跟蜡烛图的atr值划线,白色
  • 当前 k 价格 close
  • 前1根 k 价格 close[1]
  • 前2根 k 价格 close[2]
  • 前3根 k 价格 close[3]

数据类型

类型 写法
整数 integer
浮点小数 float
布尔 boolean
颜色 color
字符 string
空值 na (必须制定类型)
// 空值的定义
//@version=5
indicator("", "", true)
var float pHi = na  // na 空值, 必须制定类型
pHi := nz(ta.pivothigh(5,5), pHi) // 此函数返回枢轴高点的价格
plot(pHi)

用户输入设置

inputvalue=input.bool(title="On/Off", defval=true, tooltip="提示语", group="设置分区1", inline="x", confirm=true)
关键词 说明
title 设置名称
defval 默认值:minival-最小值, maxval-最大值,step-输入值每次最小增减值
options 限制用户只能在列表中选择输入值 option=[1,2,3,4]
tooltip 提示语
group 设置分区
inline 当需要将参数在同一行现实时试用
confirm 定义为 true 则在调用程序前强制用户设置参数

在设置不同类型的输入值时,其参数也会不同,下面的示例展示了很多可能性

//@version=5
indicator("array.new_line example")

inputvalue=input.bool(title="On/Off", defval=true, tooltip="Turn on/off this setting", group="General Setting", inline="x", confirm=true)
inputColor = input.color(title="Color", defval=color.black)
inputInteger = input.int(title="Whole Number", defval=5, options=[1, 2, 3, 4, 5])
inputFloat = input.float(title="Decimal Number", defval=-0.5, minval=-3.14, maxval=3.14, step=0.01)
inputSymbol = input.symbol(title="Symbol", defval="SPY")
inputPrice = input.price(title="Price", defval=0.0)
inputSource = input.source(title="Source", defval=close)
inputString = input.string(title="String", defval="A", options=["A", "B", "C"], tooltip="Select an option")

// --- GET TIME INPUTS --- //
var G_TIME = "Time Settings"
inputTime = input.time(title="Time", defval=timestamp("01 Jan 2000 13:30 +0000"), group=G_TIME)
inputResolution = input.timeframe(title="Timeframe", defval="D", group=G_TIME)
inputSession = input.session(title="Session", defval="0300-1300", group=G_TIME)

plot(close)

内部函数

类型 快捷输入
技术分析 Technical Analysis ta.xxx
文本处理 String / Text str.xxx
财务信息调用 request.xxx
自定义工具类 Libraries

绘图位置选择

绘图模式 说明
默认 添加到下方
indicator(name, overlay=true) 添加在图标中

绘图

Plot 标准绘图

plot(close, title="title of plot element",color=color.purple, linewidth=5, sytle=columns, trackprice=true, histbase=0, offset=10,join=true,show_last=10)
  • close 以蜡烛图结束的价格绘图
  • title 后期在调整图表参数时显示的名字
  • color 绘图的颜色,如果需要透明显示可以用 color.new(color.purple, 100) 100代表透明度为100%
  • linewidth 绘图线条宽度
  • style 图表类型: line, stepline, histogram, cross, area, columns, circles, 默认值是line线型图
  • trackprice 如果=true, 则根据最新的值显示一条水平虚线
  • histbase 类似于MACD的显示方式,比如histbase=0, 则显示以0为中界上下显示
  • offset 某些特殊情况,需要把指标显示提前或推后显示,offset的值对应了移动的蜡烛图个数
  • join true则意味着显示的图形会被连起来,比如用circles的时候,每个圆点中间会有一条线连接
  • show_last 只显示最后 xx个蜡烛图对应的指标

plotcandle 画蜡烛

//@version=5
indicator("", "")    // Declaration statement (global scope)
paletteColor = close >= open ? color.green : color.red
plotcandle(open, high, low, close, title='txt', color = paletteColor)

Fill 填充模式

h=plot(high)
l=plot(low)
fill(h, l, color=color.new(color.red, 20), title="Fill area")

color 颜色控制

color = color.blue  用于设置常见颜色
color.new(color.red, 50)  用于设置透明度
color.rgb(xxx,xxx,xxx)  设置RGB颜色,选择更精准
color=#fffff  设置HEX颜色

bgcolor 背景颜色

inside=high<high[1] and low>low[1]
bg(inside ? color.blue:na)
// 如果inside是true,则颜色为蓝色,否则没有颜色

Bar color 蜡烛颜色

inside=high<high[1] and low>low[1]
barcolor(inside ? color.purple : na )  // 如果inside的值是true,bar的颜色改为紫色,否则颜色不变
// 公式局限,只能更改蜡烛图中间部分的颜色,无法改上引线和下引线的颜色,日后我们会介绍其他公式更改这部分的颜色

Bars & Candles 绘制蜡烛

c=close>open ? color.green : color.red  // 如果收盘价>开盘价,颜色为绿色,否则为红色
plotcandle (open, high,low,close, color=c, title="Cancle", wickcolor=c, bordercolor=color.pine)  //绘制蜡烛图, wickcolor就是上下引线的颜色, bordercolor是蜡烛图外边框的颜色

plotshape 绘制图形

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © rum7126

//@version=5
indicator("Test", overlay=true)   //overlay=true 绘制的图形将在蜡烛图上直接显示,就像移动平均线一样

higherclose=close>high[1]
lowerclose=close<low[1]

plotshape(
     higherclose, 
     title="Higher Close", 
     style=shape.triangleup, 
     location=location.belowbar,
     color=color.green,
     text="hc",
     textcolor=color.white,
     size=size.auto
     )   //当higherclose为true的时候绘制向上的三角形,位于蜡烛图下方,绿色,尺寸大小自动调整

plotshape(
     lowerclose, 
     title="Lower Close", 
     style=shape.arrowdown, 
     color=color.red,
     text="lc",
     textcolor=color.white,
     size=size.auto
     )

plot character 绘制符号

//@version=5

indicator("plotchar example", overlay=true)
data = close >= open
plotchar(data, char='❄')

plot arrow 绘制箭头

indicator("plotarrow example", overlay=true)
codiff = close - open
plotarrow(codiff, colorup=color.new(color.teal,40), colordown=color.new(color.orange, 40))

Lines 绘制直线

该功能功能非常多,可以在官方文档详细阅读

//@version=5
indicator("plotarrow example", overlay=true)
// 绘制直线需要起点和终点的坐标,x1, y1 就是起点坐标,x2,y2是终点坐标
myline=line.new(x1=bar_index[10],y1=low[10], x2=bar_index,y2=high)
line.set_color(myline, color.orange)
//现在的问题是,每一根蜡烛图结束后都会画一条线,所以我们需要删除无用的线,通过下面的代码每次画新线的同时也会删除之前的线
line.delete(myline[1])
plot(na)

labels 绘制标签

indicator("Labels", overlay=true)
mylabel=barstate.islast ? label.new(x=bar_index, y=low, text="close " + str.tostring(close) ) : na 
//只在最后一个bar上显示标签, str.tostring(xx)将数字转换成文本
label.delete(mylabel[1])  //也可以用这个功能删除前一个标签

mylabel=label.new(
     x=bar.index,    //bar.index是当前蜡烛图在X轴的位置
     y=close,
     text="Close: " + str.tostring(close) + "\nHigh: " + str.tostring(high),   
     //这是显示在标签上的文字,由于是文本类型数据,需要把价格通过str.tostring转换为文本, \n 是换行的意思
     yloc=yloc.price   //标签相对蜡烛图的具体问之,现在选择的是当前价格的高度
     color=close>open ? color.green : color.red,   //如果收盘价大于开盘价 显示绿色,否则红色
     sytle=label.style_label_down   //标签的式样,箭头向下
     textcolor=color.white     //标签内文字颜色
     tooltip="Current ATR: " + str.tostring(atr)    //当鼠标悬浮在标签上时显示的内容if syminfo.type=="crypto"    //如果当前交易品种是加密货币
     label.set_color(mylabel, low<low[1] ? color.purple : high>high[1] ? color.blue : na)
     // 如果最低价低于上一根蜡烛图的最低价,颜色为紫色,如果最高价大于上一根蜡烛图的最高价,颜色为蓝色,其他显示默认色

table 表格绘制

//@version=5
indicator("table.new example")
var testTable = table.new(position = position.top_right, columns = 2, rows = 1, bgcolor = color.yellow, border_width = 1)
if barstate.islast
    table.cell(table_id = testTable, column = 0, row = 0, text = "Open is " + str.tostring(open))
    table.cell(table_id = testTable, column = 1, row = 0, text = "Close is " + str.tostring(close), bgcolor=color.teal)

box 箱体

//@version=5
indicator("box.new")
var b = box.new(time, open, time + 60 * 60 * 24, close, xloc=xloc.bar_time, border_style=line.style_dashed)
box.set_lefttop(b, time, 100)
box.set_rightbottom(b, time + 60 * 60 * 24, 500)
box.set_bgcolor(b, color.green)

本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!