购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

第2章
快速上手Pine Script

2.1 第一个程序

在Pine Script中,指标函数indicator和策略函数strategy是两大核心函数。下面我们使用Pine Editor自动生成的脚本框架编写第一个indicator程序和第一个strategy程序。

2.1.1 第一个indicator程序

在图表界面下方,选择“Pine Editor”选项,单击右上方“Open”,在弹出的菜单中选择“TEMPLATES→Indicator”,然后由编辑器自动生成indicator脚本框架,如图2-1所示。

图2-1 由编辑器自动生成indicator脚本框架

简单地修改该脚本,如下所示。

在Pine Editor页面右上方的菜单中选择“Add to chart”,将该脚本添加到图表上。这里以深证指数(399001)为例,如图2-2所示。可以看到该脚本在图表的副图上添加了一个标题为“Hello world!”的指标,该指标根据收盘价(close)绘制了一条蓝色折线。

图2-2 第一个indicator程序“Hello World!”的图表界面

2.1.2 第一个strategy程序

策略函数strategy既有指标函数indicator的功能,又可以进行回测(Backtesting)和前测(Forwardtesting)。

在图表界面下方,选择“Pine Editor”,单击右上方“Open”,在弹出的菜单中选择“TEMPLATES→Strategy”,由编辑器自动生成strategy脚本框架,如图2-3所示。

图2-3 由编辑器自动生成strategy脚本框架

我们以此为框架编写一个标题为“Trend Following Strategy Example(趋势跟踪策略示例)”的脚本。“Trend Following Strategy”设定为当金融资产价格突破前高时做多,而当价格跌破前低时做空,默认周期为20天,脚本如下。

接下来,继续以深证指数(399001)为例,将Trend Following Strategy Example脚本添加到图表上,如图2-4所示。

图2-4 第一个strategy程序“Trend Following Strategy Example”的图表界面

如上图2-4所示,Trend Following Strategy Example脚本在主图上添加了一个标题为“Trend Following Strategy Example”的策略,该策略根据“前高”和“前低”数据绘制了两条折线。绿色折线表示前高线,红色折线表示前低线,并在图表上标注了做多和做空的订单。该策略绩效概览页面位于图表下方,可以查看该策略的盈利能力。根据橙色框内的数据,该策略的净利润率(Net Profit Rate)为49.59%,这证明该策略对于深证指数(399001)还是有效的。

2.2 Pine Script的脚本结构

2.2.1 脚本结构简介

Pine Script的脚本结构(Script Structure)可分为以下三部分。

(1)脚本头部: 通常包括开源软件协议(Mozilla Public License)、作者和版本号。脚本头部可以缺省,但强烈建议保留版本号“//@version=5”(当前Version 5是最新版本),若未指定版本号,则系统默认为“//@version=1”。

(2)主调函数indicator/strategy/library的函数声明语句: 在Pine Script中有三大主调函数,即indicator、strategy和library。其中,indicator和strategy是Pine Script的两大核心函数,而library是Pine Script V5新增函数,它既可以做主调函数也可以做被调函数,可用于封装、复用有特定功能的脚本,可以起到辅助作用。

(3)脚本主体: 包含变量声明、函数声明、函数调用、用户自定义函数的定义与调用、逻辑处理、数学运算、输入与输出等。

● 对于主调函数indicator,脚本主体必须至少包含一个图形/图表输出函数。

● 对于主调函数strategy,脚本主体必须至少包含一句对函数strategy.*的调用。

● 对于主调函数library,脚本主体必须至少包含一句export函数声明和一个图形/图表函数。

Pine Editor可自动生成基础的脚本,用户可以此作为框架编写自己的脚本。

2.2.2 由Pine Editor自动生成的基础脚本框架

在使用Pine Script时,用户可以利用系统自动生成的基础脚本作为框架,然后编写自己的脚本。

在“Pine Editor”页面中,单击右上方的“Open”选项,在弹出的菜单中显示了相应选项,如图2-5所示,这样做可以使编写脚本更加简单和方便。

图2-5 在Pine Editor页面上的Open菜单下的选项

1)指标函数indicator

在“Pine Editor”页面中,单击“Open”选项,在弹出的菜单中选择“TEMPLATES→Indicator”选项,系统自动生成代码,如下所示。

2)策略函数strategy

在“Pine Editor”页面中,单击“Open”选项,在弹出的菜单中选择“TEMPLATES→Strategy”选项,系统自动生成代码,如下所示。

3)库函数library

在“Pine Editor”页面中,单击“Open”选项,在弹出的菜单中选择“TEMPLATES→library”选项,系统自动生成代码,如下所示。

2.2.3 脚本头部

在“Pine Editor”页面中,单击“Open”选项,在弹出的菜单中选择“TEMPLATES→Indicator”、“TEMPLATES→Strategy”或“TEMPLATES→Library”,新建indicator、strategy或library脚本。系统自动生成Strategy代码,其中前4行代码为标准的Pine Script头部语句,如图2-6所示。

图2-6 标准的Pine Script头部语句

标准的Pine Script头部语句的注释包括以下内容。

● 第一行用于指定Pine Script代码所遵循的开源代码协议,通常为Mozilla Public License Version 2.0。

● 第二行包含用户名,即脚本的创建者。

● 第三行为空白。

● 第四行“//@version=5”用于标识当前Pine Script的版本号,以便编译器能够正确识别。如果未指定版本号,则系统默认为“//@version=1”,强烈建议保留版本号为“//@version=5”。

这些注释语句的目的是提供有关Pine Script代码的重要信息,例如使用的协议、脚本创建者、版本等,它们还提供了编译器所需的信息,以确保代码能够正确编译并在运行时正常工作。

2.2.4 主调函数indicator/strategy/library的声明语句

在前文中,我们介绍过“在Pine Script中,有三大主调函数indicator、strategy和library”,而每个Pine Script脚本都必须有函数indicator、strategy或library的声明语句。

2.2.5 脚本主体

脚本主体可以包含的语句有变量声明、函数声明、函数调用、用户自定义函数的定义、逻辑处理、数学运算、输入与输出等。

当编写函数indicator、strategy和library的脚本时,需要遵守以下规则。

● indicator脚本必须至少包含一个图形/图表输出函数,如plot、plotshape、barcolor和line.new等。

● strategy脚本必须至少包含一句对函数strategy.*的调用,例如:strategy.entry、strategy.close等。此外,函数strategy还兼有函数indicator的功能,可以用于计算和输出技术指标,并且生成图形或图表。因此,通过使用函数strategy,可以实现全面的交易策略分析和可视化。

● library脚本必须至少包含一个图形/图表输出函数(这一点类似于indicator脚本),而且还需要至少包含一句export函数声明。

2.3 执行模式

在Pine Script中,执行模式(Execution model)指的是Pine Script代码在图表上的执行方式。

2.3.1 执行模式简介

Pine Script执行模式根据触发方式可以分为两种:由时间触发的脚本执行模式和由事件触发的脚本执行模式。

由时间触发的脚本执行模式 :在该模式下,Pine Script对于实时行情与历史行情的处理方式有所不同。实时行情中最右侧的K线(即当前时间)的最高价(High)、最低价(Low)、收盘价(Close)和成交量(Volume)都是随着行情实时更新的,直到当前K线(图表上最右侧的K线)也成为历史数据,且有新的K线出现。

由事件触发的脚本执行模式 :在该模式下,脚本的执行不依赖于时间,而是在事件发生时被触发。在图表界面,若用户输入的参数值发生变动,则会触发脚本执行;此外,刷新浏览器也会触发脚本的执行。

2.3.2 由时间触发的脚本执行模式

Pine Script提供了两种由时间触发的脚本执行模式:历史行情数据下的执行模式和实时行情数据下的执行模式

1)历史行情数据下的执行模式

在历史行情数据模式下,OHLCV(即Open、High、Low、Close和Volume)的值是已知的。当查看或回测历史数据时,Pine Script会按照时间顺序对每一根K线进行计算。在该模式下,对于每一根K线的OHLCV数据,脚本都只会执行一次,从而产生对历史数据的分析结果。

2)实时行情数据下的执行模式

在实时行情数据模式下,最右侧(即当前时间)的K线的OHLCV数据都是实时更新的,而最右侧的K线的收盘价也就是当前价格。

在实时行情数据模式中,对K线数据的处理方式取决于所使用的函数。

● 对于函数indicator而言,每当实时数据更新时,脚本就会执行一次。

● 对于函数strategy而言,系统默认仅在当前K线收盘时才会执行一次脚本。此外,函数strategy还提供了一些专用于回测和前测的参数,以满足用户不同的需求,例如参数calc_on_every_tick可用于确定每当价格发生最小幅变动时是否执行一次脚本。

在实时行情数据模式下,函数strategy的执行模式比较复杂,我们会在后面的第14章中进行更详细的讲解。

2.3.3 由事件触发的脚本执行模式

在Pine Script图表界面中,存在两种情况可以触发脚本执行并涉及所有历史行情数据。

● 第一种情况:用户输入的参数值发生变动。

① 更改图表界面的商品代码或时间周期。

② 在Pine Editor页面中保存脚本或将脚本添加到图表;在主图上方的菜单栏中单击“Indicators,Metrics&Strategies”选项,然后在弹出窗口的搜索栏中输入该指标/策略脚本名称并将其添加到图表。

③ 从“Settings/Inputs”窗口修改或输入参数值或者从“Settings/Properties”窗口修改或输入参数值。

● 第二种情况:刷新浏览器。

刷新浏览器也会触发脚本执行。

2.3.4 函数indicator与函数strategy在脚本执行模式中的差异

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

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

2.4 小结

本章是Pine Script的入门章节,首先介绍了如何编写第一个indicator/strategy程序,然后讲解了脚本的基本结构,最后概述了脚本的执行模式。通过学习本章内容,读者可以初步掌握Pine Script的脚本结构和执行模式,为后续的深入学习奠定基础。 iSmF+JUvkyUadxUiZI5ZSt09mJdBh68xFr83XMRT0opYHP0R+EphVO5b+t24MQ1n

点击中间区域
呼出菜单
上一章
目录
下一章
×