平台介绍
前段时间有一位粉丝找到技术宅,说自己有一个常用的交易平台叫,希望技术宅能把分享的策略改写成这个平台的语言。的确,有些交易者在某个平台上交易很久了,已经适应了这个平台的操作,而且相当一部分平台都会提供量化交易接口或者内置一些简单的可编程语言,帮助大家实现指标计算,甚至自动交易。
打开首页就可以看到不添加数字货币的市场行情,以及A股、美股、外汇、黄金、大宗商品等国外市场行情,我们在上面写的交易策略可以在多个市场进行测试,不需要转换代码。
关于 Pine 编辑器
它可以说是一款简洁、易用、功能极其强大的交易图表工具,但它不仅仅是主观交易者的武器,还内置了一门名为Pine的编程语言以及相应的Pine编译器。Pine可以获取所有历史交易数据,可以快速轻松地编写一些基于K线的交易策略(熟悉交易先锋的同学可以将其比喻为TB级的数字货币)。
进入Pine编辑器的步骤很简单,首先我们点击某个产品okx,比如BTC/USD,选择右上角的“全功能图表”按钮。
进入之后选择下方的“Pine ”,进入策略编写界面。
在编写我们的第一条策略之前,我们先来简单了解一下 Pine 语言的基本语法。可以说,Pine 语言比现在最流行的语言的语法要简单得多。技术极客们甚至认为,没有编程基础的同学在按照本文的指导后,也能编写出一些简单的策略。Pine 语言有语法参考手册,包含运算符、内置变量、内置函数三部分。运算符部分比较容易理解,大部分都和常用的数学公式或者常用的计算机语法类似。例如下图中 != 表示不等于,% 表示取余数。
内置变量是指系统内置的一些关键字,通过这些关键字可以直接获取策略计算过程中所需要的关键数据,比如K线的开盘价、最高价、最低价、收盘价数据等。以下图为例,在代码中调用close可以直接获取每根K线的收盘价,open、high、low,同样分别是K线的开盘价、最高价、最低价、成交量。
在内置函数中,最常见的就是技术指标,常见的技术指标,比如RSI、ADX、KD、MACD、ATR等,我们都可以找到对应的内置函数。如果我们想在策略中使用某个技术指标,只需要调用指标名称,而不用在指标里面写计算公式,就可以得到想要的结果。语法手册里也有详细的示例告诉你如何使用每个技术指标。
开始练习,双移动平均线策略
双均线策略是新手最容易上手的策略,交易规则很简单:当短期均线穿越长期均线时,平空头,做多头;当长期均线穿越短期均线时,平多头,做空头。我们就以这样一个简单的策略开启Pine语言的编程之旅,我们来看看如何实现:
该策略只有 7 行有效代码。第一行相当于声明策略。第一个“My”是策略的名称。下一行是一个判断变量。您不必担心数据类型。Pine 脚本对于变量类型定义是开放的,也就是说,它是分配给它的类型。
我们再看等号右边,(sma(close,20),sma(close,60))。我们已经知道这里的close是K线的收盘价okx,而sma和又代表什么意思呢?别着急,Pine编辑器有一个很好用的功能,只要把鼠标放到关键字上,我们就能知道系统对这个关键字的定义(内置变量,内置函数)。比如sma,系统提示我们它返回的是移动平均线。同理,和也可以用同样的方式解释(不得不说,真的好用)。
了解了各个系统内置关键字的用法之后,我们就可以翻译上面的策略代码了。多头开仓条件:20日收盘价均线与60日收盘价均线相交,若满足开仓条件,则平空头仓位,现价买入1手,并将信号标记为“My Long”;空头开仓条件:20日收盘价均线与60日收盘价均线相交,若满足开仓条件,则平多头仓位,现价买入1手,并将信号标记为“My Short”。将策略加载到要测试(交易)的K线图上,就可以看到“My Long”和“My Short”对应的交易信号标记。
当我们将策略信号加载到K线图中之后,我们可以通过Pine编辑器右侧的策略测试器来测试策略的表现。我们将这个策略应用到BTC的日线周期中,可以看到虽然策略简单基础,但依然是一个长期盈利的策略,只是中间的回撤会让人感到难受。
实施另一种类似乌龟的策略
有了第一个双均线策略的基础,我们来实现一个比双均线策略稍微复杂一点的龟形交易策略。之所以叫龟形交易策略,是因为我们在龟形交易策略的唐奇安通道进出点的基础上,增加了不同周期的均线过滤器。只有当均线和唐奇安通道同时满足做多或做空条件时,才会触发进场操作。
我们分三段来写这个策略,首先第一段我们在方法中声明这个策略,然后定义三个参数变量,分别是通道进入周期20,通道退出周期10,移动平均周期15,将它们定义为输入变量,这样我们就可以在Pine测试界面中直接修改参数值,而不需要改变原有的代码。
在策略的第二部分中,我们利用Pine内置的指标函数来定义唐奇安通道进出点的上下轨,以及收盘价的移动平均线。在代码中我们可以看到,对于每根K线,我们在最高价、最低价、收盘价的末尾都加上了[1]。这是为了计算并获取前一根K线周期的指标数据,防止在当前计算信号K线时使用未来的数据。
最后,策略的第三部分是开仓和平仓条件的判断与执行。为了避免连续开仓,这里引入系统内置变量,这个变量可以自动读取策略当前的持仓情况。前4行是开仓的判断与操作,如果当前K线突破唐奇安通道上轨,前一根K线收盘价大于均线,此时策略没有多头仓位,那么在突破价位做多头操作;如果当前K线突破唐奇安通道下轨,前一根K线收盘价小于均线,此时策略没有空头仓位,那么在突破价位做空头操作。后4行是平仓的判断与操作,如果当前持有多头仓位,价格突破唐奇安通道平仓,将多头仓位全部平掉,持有空头仓位,平仓逻辑类似。
我们将编辑好的策略加载到稍微细化一点的周期:BTC 4小时K线中,测试策略的表现。下图中可以看到策略信号和回测结果。从测试结果来看,虽然策略逻辑并不复杂,但在BTC的中周期中依然能获得比较稳定的收益,这也说明数字货币市场的交易机会还是比较多的。
我们没有改变任何条件和参数,将策略移植到了同样是热门数字货币的ETF上,策略依然表现稳定。我们提供来自多家主流交易所的数字货币对,以及外汇市场上的商品、股指、A股等测试数据。您可以测试自己编写的Pine语言策略,只需要在图表左上角修改产品即可快速完成产品切换和策略测试,尝试一下,也许会发现更好的策略。
如果大家有想要分享本次Pine语言攻略的文字代码的话,欢迎和我交流。
【量化技术宅】股票基金怎么投资?什么时候买?买什么?
【量化技术宅 | 量化投资策略系列分享】基于指数移动平均线的股指期货交易策略
【量化技术屋】套利策略的价差序列计算,或许没有你想象的那么简单
网友评论