《零基础学Pine Script——基于TradingView平台的量化分析(全彩)》

作者:阎英姿

出版社:电子工业出版社

pine.png

注释

添加注释/取消注释的快捷键:在Pine Editor页面,可以使用快捷键“Ctrl+/”(电脑为Windows操作系统)或“Command+/”(电脑为Mac操作系统)来添加注释或取消注释。

多行代码

(1)在将一条语句进行多行续写时,续行前面需要有缩进空格,但是空格数量不能是4的倍数

(2)if语句、for语句或用户自定义函数的局部程序块(Local Block)内的语句需要缩进,且缩进的空格数必须是4的倍数。对于用户自定义函数,局部程序块在操作符“=>”的后面。

抬头模式

函数indicator的脚本执行模式:每当实时数据更新时,脚本就会执行一次。

函数strategy的脚本执行模式:系统默认仅在当前K线收盘时才会执行一次脚本。此外,函数strategy还提供了一些专用于回测和前测的参数,以满足用户不同的需求,例如参数calc_on_every_tick用于确定每当发生价格变动时是否执行一遍策略脚本;参数calc_on_order_fills用于确定每当订单成交后是否再执行一遍策略脚本。

多行续写

Pine Script多行续写的书写格式为:首行需要顶格书写,续行前面要有空格。但是,续行前面的空格数量不能是4的倍数。

首行缩进4的倍数的空格脚本的书写格式,专用在条件语句(包括if和switch)、循环语句(包括for和while)或者用户自定义函数的局部程序块中。 Pine Editor编辑器会自动将“Tab”(即按一次Tab键)替换为4个空格。

多行的多行续写

在Pine Script中,用户自定义函数的函数体(Function body)内的语句也可以多行续写。由于语法要求用户自定义函数的函数体内的语句必须以缩进(4个空格)开头,因此在多行续写时,续写语句必须缩进更多空格,但空格数不能是4的倍数。

一行写多条语句

Pine Script允许将多条语句写在同一行,语句之间需要用逗号分隔,例如以下脚本:

命名规则

对于常量,Pine Script推荐使用大写字母,并应用蛇形(SNAKE_CASE)命名法;

而对于其他标识符则推荐使用驼峰式(camelCase)命名法。

保留字

是指在Pine Script中已经被定义过,并且已经被赋予了特定含义的一些单词。在编写脚本时,这些保留字不能用作变量或常量的名称。Pine Script中的保留字包括:and、close、false、for、high、hl2、hlc3、hlcc4、if、low、na、not、ohlc4、open、or、switch、time、true、volume和while等。

Pine Script V5语言中的数据类型,包括5种基础数据类型(Fundamental Data Types)、6种特殊数据类型(Special Data Types)、5种数据形式(Data Form)和6种数据结构(Data Structure)。

5种基础数据类型

int:整数型

float:浮点型

bool:布尔型

string:字符串型

color:颜色类型

6种特殊数据类型

line、label、box和table数据类型

用户可以分别使用函数line.new()、label.new()、box.new()和table.new()创建line、label、box和table对象,这些对象的数据形式分别为series line、series label、series box和series table。

函数plot()和hline()的返回值在图表上创建类型为plot和hline的对象。由这些函数创建的对象还可以再传递给函数fill(),用于在指定区域内填充颜色。函数fill()可以在两个plot对象或两个hline对象之间的区域填充颜色。

常用的内置时间序列变量

常用的内置时间序列变量包括:open、high、low、close、hl2、hlc3、ohlc4、hlcc4、volume和time。

在Pine Script中,它们也都是保留字。 这里: 

hl2=(high+low)/2 

hlc3=(high+low+close)/3

ohlc4=(open+high+low+close)/4

hlcc4=(high+low+close+close)/4

特殊的内置变量na

“na类型不能赋值给没有类型关键字定义的变量”

正确写法:

color myVar = na
myVar = color(na)

多元组

多元组的元素可以是任何类型,也可以将整数、浮点数和字符串等任何类型的内容放入多元组中,并且在同一个多元组中,元素的类型可以不同,因为它们之间没有任何关系。

数组

Pine Script中,数组是一维的。一个数组中的所有元素都是相同类型的,可以是int、float、bool或color等类型,且数据形式总是时间序列数据形式。

逻辑运算符not

not是一元运算符,其只有一个操作数,且操作数只能是true或false。not true的结果是false,反之亦然。

条件运算符

条件运算符“?:”是三元运算符,通常用于条件表达式。条件表达式中包含3个操作数。

条件表达式:condition?result1:result2。在这里,如果condition为true,则条件表达式返回result1,否则返回result2。

历史行情数据引用操作符

ine script中的历史行情数据即series数据,可以使用“[]”操作符引用历史行情数据。“[]”内的数字表示时间序号,为非负整数。

例如,在日线图上,close[0]指当日收盘价;

close[1]指昨日的收盘价;

close[10]指时间往前数第10日的收盘价。

赋值运算符

赋值运算符“=”用于变量声明或变量初始化。

再赋值运算符

:=”用于对前面进行过变量声明或者初始化过的变量进行再赋值。

使用特殊值na进行变量初始化

在Pine Script中,na是一种特殊值,即表示数据缺失或未定义。在Pine Script中,变量初始化经常以na为初值。使用na初始化变量,如下所示。

var初始化

使用var模式的变量声明仅对变量初始化一次。

如果没有关键字var,则每次K线更新触发脚本重新计算时,变量count都会被重置为零。

该参数可以使用具名常量进行设置。

平滑曲线绘制

如果timeframe_gaps=false,则系统将绘制阶梯状折线,并用前一个时间段的数据填充当前缺口。

如果timeframe_gaps=true,则系统将绘制平滑曲线,并自动连接初值与终值的之间的两点,而无须填充缺口。

indicator

指标函数indicator的参数划分为如下几类。 

title和shorttitile:分别用于定义脚本的标题和短标题。

timeframe和timeframe_gaps:有关时间周期的参数。timeframe用于指定时间周期,如“W”、“D”和“4H”;timeframe_gaps用来控制指标如何处理由更长时间周期的数据所引起的数据缺口。

format、precision和scale:分别用于定义指标的格式、精度和刻度尺。 

overlay和explicit_plot_zorder:用于指定所绘制的图形如何添加到图表上。overlay用于确定指标是否叠加到主图上;explicit_plot_zorder用于指定绘图函数(plot*、fill*、hline和label等)所绘制的图形/图表是否按照Z-index顺序堆叠。 

max_lines_count、max_labels_count、max_boxes_count:分别用于指定指标的画线、标签和方框的总数计数。 

max_bars_back:用于限制脚本所引用的历史行情K线数据的最大数量,其意义在于限制指标回溯的周期数,以提高代码效率。

display

参数display(类型:const int),用于控制所绘制的图形/图表是否可见,可以设置为以下具名常量。

display.all:表示所绘制的图形/图表都可见,此为默认值。

display.none:表示所绘制的图形/图表都不可见。

display.data_window:表示仅在数据窗口中显示所绘制的图形/图表的当前值。数据窗口位于图表右侧边栏的面板上,如图12-6所示。

display.status_line:表示仅在指标左上方的状态行上显示当前值,如图12-7所示。

display.pane:表示仅在当前窗格中显示所绘制的图形/图表,但无法在状态行或数据窗口中显示。

display.price_scale:用于控制绘图的价格和标签在Price Scale中的显示方式。

display.all-display.status_line:表除了不显示状态行,其余的都显示。

display.price_scale+display.status_line:表示只显示Price Scale和状态行。

Plot:画线

plot.style_line:实线。

plot.style_linebr:可带有中断的线。

plot.style_stepline:阶梯状折线。

plot.style_steplinebr:可带有中断的阶梯状折线。

plot.style_stepline_diamond:带有钻石(或菱形)节点的阶梯状折线。

plot.style_cross:由十字连接而成的虚线。

plot.style_circles:由圆点连接而成的虚线。

plot.style_histogram:直方图。

plot.style_columns:柱状图。

plot.style_area:面积图。

plot.style_areabr:可带有中断的面积图。

plot

在plot系列函数中,以函数plot最为常用,而plot系列的其他函数则用于绘制特定的图形,如下所示。

plotarrow:用于绘制箭头。

plotchar:用于根据给出的Unicode字符在图表上绘图。

plotshape:用于在图表上绘制某些特定图形符号。

plotbar:用于绘制美式K线。

plotcandle:用于绘制蜡烛线。

非plot系列的绘图函数包括:

bgcolor:用于绘制图表的背景。

fill:用于在两个plot或hline对象之间填充颜色。

hline:用于在图表上画一条水平线。

box.*:用于在图表上画方框。

line.*:用于在图表上绘制多种风格的线。

linefill.*:用于在两条线之间填充颜色。

table.*:用于在图表上绘制表格。

strategy

strategy中参数pyramiding(类型:const int),指在同一方向(做多/做空)开仓的最大订单数。

参数margin_long与margin_short 参数margin_long(类型:const int/float),指多头的保证金比例(百分比)。 

参数margin_short(类型:const int/float),指空头的保证金比例(百分比)。

参数:pyramiding

参数pyramiding(类型:const int),指在同一方向(做多/做空)开仓的最大订单数。

参数:backtest_fill_limits_assumption

参数backtest_fill_limits_assumption(类型:const int),用于确定在回测时限价单的执行阈值,以tick(最小价格变动)为单位。该参数的作用是限定回测期间限价单的成交价。若使用了该参数,则只有在市场价格满足限价单的价格要求,且满足所指定的tick倍数时,限价单才会被成交。该参数的默认值为0。

参数:slippage

参数slippage(类型:const int),表示滑点,以tick(最小价格变动)为单位。

滑点是指在交易时,由于市场价格的波动或者流动性的不足,导致实际成交价格与订单预设的成交价格之间存在一定的偏差。例如,若最小价格变动mintick=0.01,滑点slippage=5,则滑点的金额为5×0.01=0.05。

参数:use_bar_magnifier

参数use_bar_magnifier(类型:const bool),表示是否允许在回测中使用更低的时间框架数据。

参数process_orders_on_close

参数process_orders_on_close表示在业务逻辑处理完成且K线关闭后是否再次执行脚本,默认值为false。

可见性/发布模式有以下三种

Open(开源):所有用户都可以查看脚本的源码。

Protected(保护):只有脚本的作者可以查看源码。需要注意的是,只有Pro、Pro+或Premium账户才能发布公共受保护脚本。

Invite-only(仅限邀请):仅限脚本作者和被邀请的用户才可以查看源码。需要注意的是,只有Premium用户可以发布仅限邀请的脚本。TradingView平台支持此模式下的付费制,而且仅限于脚本提供者与使用者之间进行交易。