《零基础学Pine Script:基于TradingView平台的量化分析》
《零基础学Pine Script——基于TradingView平台的量化分析(全彩)》
作者:阎英姿
出版社:电子工业出版社
注释
添加注释/取消注释的快捷键:在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平台支持此模式下的付费制,而且仅限于脚本提供者与使用者之间进行交易。