商品期货量化交易-TradingviewPine语言基础课程(六):Pine语言类型系统讲解(2):Types

Author: ianzeng123, Created: 2023-02-02 11:41:12, Updated: 2023-02-10 08:45:26

大家好,上节课我们了解了Pine语言类型系统的Forms,Forms确定了Pine语言参数确定的时间,本节课我们将继续讲述Pine语言的类型系统之Types。Types确定参数的性质,types有基本类型(int, float, bool, color and string),还有特殊类型(array, na, 和元组tuples等)。本节课我们就这些常用的参数types和使用方法展开介绍。

FMZ平台对Pine语言是进行了一定程度的封装,因此它和Tradingview上的Pine语言有所不同,请大家注意辨别。如果大家在FMZ平台模仿tv的策略时,发生报错的情况下,大家可以查阅下https://www.fmz.cn/bbs-topic/9326这本pine语言使用手册,检查一下FMZ是否对某些函数进行了封装,然后对应修改下tv上的pine语言脚本。当然,在后续的时期,我们也会继续完善FMZ上的Pine语言,使其更加适合量化爱好入门者使用。

首先我们讲解下Pine语言的基本type类型:

Int

整数值必须写成十进制,例如:

1
-1
750

bar_index、 time、 timenow等内置变量 都返回“int”类型的值。

Float

浮点数包含一个小数点,也可能包含符号e或者E (表示“乘以 10 的 X 次方”,其中 X 是符号之后的数字e),例如:

3.14159    
-3.0
6.02e23    // 6.02 * 10^23 
1.6e-19    // 1.6 * 10^-19 

String

字符串文字可以用单引号或双引号括起来,单引号和双引号在功能上是等价的。你可以使用运算符“+”连接字符串。

A = "FMZ"
B = 'FMZ'
//C = 'FMZ" //error
C = 'FMZ"'
D = A + B

runtime.log(A, B, C, D)
runtime.error('stop')

布尔值

只有两个文字表示bool值:

true    // 真值
false   // 假值

类型转换

Pine语言中有一个自动类型转换机制,可以将某些类型转换(或转换)为另一种类型。自动转换规则是:“int”🠆“float”🠆“bool”,这意味着当需要“float”时,可以使用“int”代替它,当需要“bool”值时,可以使用“int”或“float”值代替它。在FMZ平台对Pine语言进行了一定程度的封装和改进,例如在tv上这段代码会报错,而在FMZ平台,float/string类型会自动转换为int运行。

indicator("")
len = 10.0
len1 = '10'
s = ta.sma(close, len) // tv报错
s = ta.sma(close, len1) // tv报错
plot(s)

Color

颜色文字具有以下格式:#RRGGBB或#RRGGBBAA。其中:RR,GG和BB是红色、绿色和蓝色分量的值。 AA是颜色透明度(或alpha分量)的可选值,其中00是不可见,FF是完全可见的。

例子:

#000000      // black color
#FF0000      // red color
#00FF00      // green color
#FF000050    // 50% transparent red color
#FF000000    // completely transparent color

Pine Script还具有内置颜色常量,例如 color.greencolor.red、 color.orange、 color.blue (plot()和其他绘图函数中使用的默认颜色)等。使用内置颜色时,可以使用 color.new向它们添加透明度信息。

#FF000050  == color.new(#FF0000, 50)  // 50% transparent red color
strategy(overlay=false)
p1 = plot(high)
p2 = plot(low)
fill(p1, p2, color=color.new(#FF0000, 80))
fill(p1, p2, color=#FF000080)

img

下面我们介绍一些特殊的type类型:

'na’值

在 Pine Script™ 中有一个名为na的特殊值,它是not available的首字母缩写词,表示表达式或变量的值未定义。它类似于Java中的null 或Python 中的None值。

Tuple值

元组是一组以逗号分隔的表达式,括在方括号中,当函数或局部块必须返回多个变量作为结果时可以使用它们。例如我们熟悉的MACD指标,就可以使用元组的形式,代表MACD的三个指标(MACD线、信号线和直方图线),下面我为大家画图展示下。

[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)
plot(macdLine, title = 'macdLine', color=color.blue)
plot(signalLine, title = 'signalLine', color=color.orange)
plot(histLine, title = 'histLine', color=color.red, style=plot.style_histogram)

img

当然,如果你只需要一个值,请使用像这样的占位符’_’:

[_, signalLine, _] = ta.macd(close, 12, 26, 9)
plot(signalLine, color=color.orange)

img

Array

用于显式声明变量或参数的“阵列”类型的关键字。可以使用array.new_type,array.from函数创建阵列对象。Array对象总是“series”形式。 Array.new_int/float/bool/string(),第一个值确定重复的次数,第二个值确定重复的对象。Array.from()从调用函数时提供给函数的参数,推断出数组的大小及其元素的类型。

m1 = array.new_int(10,12)
m2 = array.new_string(10, 'FMZ')
m3 = array.from(2, 12, 20, 50, 100, 200, 'FMZ')
m4 = array.from(close > open, high != close)
runtime.log(m1, m2, m3, m4)
runtime.error('stop')

标识符

上述我们讲解了变量的类型结构form和type,通常情况下在变量设定以后,我们需要对变量进行命名。通俗的讲“标识符”是用来当做函数和变量的名称的(用于命名变量、函数)。函数在我们之后的教程中会了解到,我们首先学习一下“标识符”。

  • 1、标识符必须以大写(A-Z)或小写(a-z)字母或下划线(_)开头,作为标识符的第一个字符。
  • 2、标识符第一个字符之后的下一个字符可以是字母、下划线或数字。
  • 3、标识符的命名是区分大小写的。
fmzVar
_fmzVar
fmz666Var
MAX_LEN
3barsDown //错误命名

如同大部分的编程语言一样,Pine语言也有书写建议。通常建议对标识符的命名时:全部字母大写用于命名常量。使用小驼峰规则(小写/大写单词)用于其它标识符命名。

LEN = 10 //全部字母大写用于命名常量
zeroOne(boolValue) => boolValue ? 1 : 0 //使用小驼峰规则用于其它标识符命名

通过对Pine语言第一个板块“类型系统”的学习,可以看出来相对于tradingview,在FMZ平台上的Pine语言的语法规则比较宽松。因此在FMZ上可以跑通的策略,在tradingview上可能会报错,希望大家仔细辨别。本节课的内容介绍完毕,我们下节课再见!


更多内容