大家好,从今天起,我们就要学习一门新的语言-Pine语言。如果你是java或者python用户,Pine语言的灵活简洁一定会让你的量化入门之路格外轻松。在保留完整语言和交易逻辑的基础上,Pine语言对很多交易的指标和函数都进行了封装,不需要让你重新import packages,轻松的指标的计算,清晰的图表展示,简洁的交易逻辑的判断,直到最后和市场对接的交易指令,可以这样说,Pine语言是一门专门为交易而生的语言。
如果你是一个量化新手,犹豫在Pine语言和文化财经麦语言之间,害怕高额的时间成本和学习成本的无用功,这里也请不用担心。相对于麦语言,Pine语言能实现的量化策略更多也更为灵活,并且在掌握Pine语言交易逻辑的基础上,对于麦语言的入门会起到事半功倍的效果。
Pine语言作为国外平台tradingview的交易脚本语言,需要我们跋山涉水的翻墙使用,而庆幸的是,优宽量化交易平台对Pine语言进行了完美的移植,在保留Pine语言简洁优雅属性的同时,优宽平台又对Pine语言进行了进一步的封装和改动,让量化爱好入门者使用起来更为轻松简便。
当然,熟练掌握一门完整的语言需要大家长久的努力,很高兴成为大家Pine语言教学的领路人,也许我们都习惯于害怕未知山峰的高度和自己残余勇气的不足,但请相信,努力终会有回报。让我们开始今天的课程吧!
本节课的课程是Pine语言的代码编辑器窗口和代码结构的讲解。作为一门计算机语言,一千个人都一千个钟爱的哈姆雷特编辑器。幸好,优宽平台解决了这个问题。不需要部署任何软件和服务器,优宽提供了在线的回测系统,通过丰富的图表和数据统计功能,及时的对量化策略进行收益的回测展示,减轻了大家的学习压力和理解难度。
首先我们登录了优宽量化交易平台,然后可以在控制中心快捷方式点击“新建策略”。这样我们进入了策略编辑页面,语言我们选择Pinescript,界面中显示了一个简单的例子,通过定义策略名称,我们就可以创建这个策略。
在编辑器的右上角,有一些按钮可以方便我们进行策略编辑:
策略编辑页面是编写这个派语言策略代码的地方,我们可以先删掉这个默认的代码。 Tv上Pine中代码遵循的一般结构:
<version>
<declaration_statement>
<code>
优宽对tv上的pine语言的脚本结构做了更为简洁的改进。在tv中,我们需要在首行指定脚本的版本(//@version=5
),在优宽平台上不用,因为优宽平台的默认脚本即是version 5,当然你也可以指定其它版本的脚本(//@version=4
),优宽也支持运行。
对于第二部分declaration statement,声明语句确定脚本的类型,这又决定了其中允许哪些内容,以及如何使用和执行。设置脚本的关键属性,比如它的名称,当它被添加到图表中时,它将出现在哪里,它所显示的数值的精度和格式,以及管理其运行时行为的某些数值,比如它将在图表中显示的最大绘图对象数量。对于策略,属性包括控制回测的参数,如初始资本、佣金、滑点等。而这些优宽平台封装在了Pine语言交易类库里,点击开始回测,通过设置不同的参数,你就可以对交易的参数进行设置,比如交易的设置,期货品种的选项,实盘的选项和现货的交易等,这些参数我将在后续Pine语言交易逻辑里面进行详细的讲解。
通过优宽对于Pine语言的封装,因此Pine语言不要求一个策略代码必须包含indicator()
或者strategy()
声明语句。因为优宽量化上本身就是可以实盘,因此也不区分这个画图和实盘的声明。
第三部分是代码板块,脚本中不是注释或编译器指令的行是语句,它实现了脚本的算法。脚本语句可以分为
有些语句可以用一行来表达,比如大多数变量声明、只包含一个函数调用的行或单行函数声明。多个单行语句可以通过使用逗号(,)作为分隔符在一行中串联起来。
var a = close[1]
var a = close[1], var b = open[1]
其他的,像结构,总是需要多行,因为它们需要一个局部的块。脚本的全局范围内的语句(即不属于局部块的部分)不能以空格或制表符(tab键)开始。它们的第一个字符也必须是该行的第一个字符。在行的第一个位置开始的行,根据定义成为脚本的全局范围的一部分。结构或多行函数声明总是需要一个local block。一个本地块必须缩进一个制表符或四个空格(否则,会被解析为上一行的串联代码,即被判定为上一行代码的连续内容),每个局部块定义了一个不同的局部范围。
plotColor = if barIsUp() // 变量声明 (全局范围)
color.green // 本地块 (本地范围)
else
color.red // 本地块 (本地范围)
长行可以被分割在多行上,或被 "包裹"起来。被包裹的行必须缩进任何数量的空格,只要它不是4的倍数(这些边界用于缩进局部块)。
a = open + high + low + close
可以被包装成(注意每行缩进的空格数量都不是4的倍数):
a = open +
high +
low +
close
一行中可以包含注释,也可以只是注释。
[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9) // 计算MACD指标
/*
plot函数在图表上画出指标线
*/
好了,本节课Pine语言的编辑器介绍和脚本结构介绍就到此为此了,我们下节课再见!