Pine语言类型系统讲解(1):Forms

大家好,上节课我们了解了在发明者平台上Pine语言的脚本结构,本节课我们的内容集中于Pine语言的类型系统讲解。Pine Script的类型系统很重要,因为它决定了在调用Pine Script函数时可以使用什么样的值,这是在Pine语言中做任何事情的必要条件。 虽然可以在不了解类型系统的情况下编写非常简单的脚本, 然而对它的合理理解对于实现Pine语言的熟练应用是必要的, 深入了解其微妙之处将使您能够充分发挥 Pine语言的潜力。

吸收了面向对象语言的优点,Pine语言的类型系统的定义和使用也是清晰明了。Pine语言是一门专门为交易而生的语言,因此Pine语言类型系统的设定也与交易逻辑的设定一致。交易是流动的,而策略就是使用参数构建的算法去捕捉交易的流动趋势. 因此不仅需要type确定参数的性质,还需要form描述一个参数定义的时间。Pine语言使用form-type对来描述所有的值。通过不同的参数时间(form)和性质(type)的确定,一个优秀的策略尝试着去拟合千变万化的金融市场,发现本质规律,进而预见可能性的收益机会。

Forms

当Pine脚本被加载到图表上时,它在每个历史条上执行一次,使用每个条的可用OHLCV(开盘open、最高high、最低low、收盘close、成交量volumn)值。一旦脚本的执行到达数据集的最右边的条形,如果目前交易活跃,那么Pine 指标将在每次更新发生时执行一次,即价格或成交量变化。Pine 策略默认只在最右边的条形图收盘时执行,但它们也可以被配置为在每次更新时执行,就像指标那样。

所有的符号/时间框架对都有一个数据集包括有限数量的条形图。当你向左滚动图表以查看数据集的早期条形时,相应的条形会在图表上加载。当脚本第一次在图表上运行时,数据集中的所有条形图都是历史条形图,除了最右边的条形图,如果交易时段是活跃的。当交易进行时候在最右边的条形图上,它被称为实时条形图。当检测到价格或成交量的变化时,实时条就会更新。当实时条形图关闭时,它将成为一个失效的实时条形图,并打开一个新的实时条形图。

我们如今尝试的交易系统,是利用历史信息,运用算法寻找其中的规律搭建模型。利用大数据的优势,模型搭建完成之后,我们需要不断调整模型的参数,而输入的数据信息也是伴随着市场源源不断整体流动的,因此在模型设定初期,我们需要设定不同模型参数确定的时间。

Pine语言forms确定了变量的值是何时已知的。共分四种类型:

  • “const”表示编译时已知的值(向图表添加指示符或将其保存在Pine脚本中时确定的)。

  • “input”表示输入时已知的值(当脚本的“设置/输入”选项卡中的值发生更改时设定)。

  • “simple”表示柱线 0 处已知的值(当脚本开始在图表的第一个历史柱上执行时设定)。

  • “series”表示每个柱上已知的值(在任何柱上执行脚本期间的任何时间设定)。

Forms按以下层次结构进行组织:const < simple < series < input,例如,其中“const”被认为是比“input”弱的形式,而“series”比"simple"强。 表达式的结果始终是表达式计算中使用的最强形式。此外,一旦变量获得更强的形式,该状态是不可逆的; 它永远无法转换回较弱的形式。因此,“series形式的变量永远不能转换回“simple"形式,以便与需要该形式参数的函数一起使用。

请注意,在所有这些形式中,只有“series”形式允许值在脚本执行期间动态更改图表历史记录的每个柱线。一旦脚本开始执行,“const”、“input”或“simple”形式的变量就不能更改。

Const

“Const”形式的值必须在编译时知道,然后脚本才能访问与其正在运行的交易品种/时间帧信息相关的任何信息。 当您在Pine脚本编辑器中保存脚本™时,就会进行编译,这甚至不需要它已经在图表上运行。“Const”变量在脚本执行期间不能更改。

整形 int: 1, -1, 42
浮点型 float: 1., 1.0, 3.14, 6.02E-23, 3e8
布尔型 bool: true, false
字符 string: "FMZ"
颜色 color: #FF55C6, #FF55C6ff

Input

当确定通过函数初始化的值时,“输入”形式的值是已知的。 这些函数确定脚本用户可以在脚本的“设置/输入”选项卡中修改的值。 当这些值发生更改时,这总是会触发从图表历史的开头(柱线零)重新执行脚本, 因此,“input”形式的变量在脚本开始执行时始终是已知的,并且在脚本执行期间它们不会更改。凡是需要“input”形式的地方,也可以使用“const”。

在FMZ上的input函数和在Trading View上的有些不同,不过该函数都是作为策略参数的赋值输入使用。input函数的几个主要参数如下所示:

  • defval :作为input函数设置的策略参数选项的默认值,支持Pine语言的内置变量、数值、字符串
  • title :策略在实盘/回测的策略界面上显示的参数名称。
  • tooltip :策略参数的提示信息,当鼠标悬停在策略参数上会显示出这个参数设置的文本信息。
  • group :策略参数分组名称,可以给参数分组。

在声明变量时给变量赋值,经常使用的就是input函数,在FMZ上input函数会在FMZ策略界面自动画出用于设置策略参数的控件。FMZ上支持的控件目前有数值输入框、文本输入框、下拉框、布尔值勾选。并且可以设置策略参数分组、设置参数的提示文本信息等功能。下面我们来通过一个例子详细说明input函数在FMZ上的使用:

param1 = input(10, title="参数1名称", tooltip="参数1的描述信息", group="分组名称A")
param2 = input("close", title="参数2名称", tooltip="参数2的描述信息", group="分组名称A")
param3 = input(color.red, title="参数3名称", tooltip="参数3的描述信息", group="分组名称B")
param4 = input(close, title="参数4名称", tooltip="参数4的描述信息", group="分组名称B")
param5 = input(true, title="参数5名称", tooltip="参数5的描述信息", group="分组名称C")

ma = ta.ema(param4, param1)
plot(ma, title=param2, color=param3, overlay=param5)

Simple

只有当脚本在图表历史记录的第一个栏上开始执行时,“simple” forms的值才是已知的,并且在脚本执行过程中这些值永远不会改变。例如,syminfo.*等系列的内置变量都返回“simple”形式的结果,因为它们的值取决于图表的品种,只有在脚本对其执行时才能检测到。在需要“simple”格式的地方,也可以使用“const”或“input”格式。

runtime.log(syminfo.ticker)
runtime.log(timeframe.period)
runtime.error('stop')

Series

“Series ”形式的值提供了最大的灵活性,因为它们可以在任何柱上更改, 甚至在同一根柱线中多次,例如循环。 开盘价(open)、收盘价(close)、最高价(high)、时间(time)或交易量(volume)等内置变量是“series”形式, 就像使用它们计算的表达式的结果一样. “Series ”会改变柱线, 用于访问时间序列的过去值的 [] 历史引用运算符也是如此。凡是需要“series ”形式的地方,也可以使用其他三种形式代替。

strategy(overlay=true)
a = close + 100
b = close[1] + 100
plot(a, title='close', color=color.black)
plot(b, title='close[1]', color=color.blue)

本节课,我们学习了Pine语言的类型系统的forms。可以发现,对比于其它多功能的语言(如python,c++等),Pine语言更加纯粹与精巧。因此对于Pine语言的学习,在除去死板的语法结构之外,我希望和大家一起探讨的是,对于整个市场和交易的理解,运用代码去尝试庖丁解牛,即将自身的交易逻辑和心得用Pine语言的形式进行交易的梳理和建构。我们下节课再见!

免责声明:信息仅供参考,不构成投资及交易建议。投资者据此操作,风险自担。
如果觉得文章对你有用,请随意赞赏收藏
相关推荐
相关下载
登录后评论
Copyright © 2019 宽客在线