如何使用TradingView(TV)回测数字货币交易策略
更多精彩内容,欢迎关注公众号:数量技术宅。想要获取本期分享的完整策略代码,请加技术宅微信:sljsz01
TradingView平台简介
前段时间,有粉丝找到技术宅,表示他有一个常用的交易平台,叫做TradingView,希望技术宅能将分享的策略,用这个平台的语言改写。确实,有部分交易者,他们长时间在某个平台交易,适应了这个平台的操作,而有相当一部分平台,会提供量化交易的接口,或者内置一些简易的可编程语言,帮助大家实现指标计算、甚至是自动交易。
打开TradingView的主页,可以看到TradingView不加有数字货币的行情,还有A股、美股、外汇、黄金、大宗商品等外盘行情,我们在TradingView上编写的交易策略,不转换代码,即可在多市场进行测试。
关于Pine编辑器
TradingView可以说是 一个简单,易上手,且功能极其强大的交易图表工具,但它不仅仅是主观交易者的利器,还内置了一种叫Pine的编程语言,并有对应的Pine编译器,Pine可以获取到TradingView的所有交易历史数据,并且可以快捷、简便地编写一些基于K线的交易策略(熟悉交易开拓者的同学,可以将其类比为数字货币的TB)。
Pine编辑器的进入步骤很简单,首先,我们点开某一个品种,比如BTC/USD,选择右上角图形的“全功能图表”按钮。
进入后,选择下方的“Pine编辑器”,即可进入策略编写界面。
在编写我们的第一个TradingView策略前,先来简要看一下,Pine语言的基本语法。Pine语言,可以说,相对于时下最热门的Python语言的语法,简单了不少,技术宅甚至认为,没有什么编程基础的同学,经过我们这篇文章的引导,也能够写出一些简单的策略。Pine语言有一个语法参考手册,包含三部分内容,分布是运算子、内置变量、内置函数。运算子的部分比较好理解,大部分和我们常用的数学公式或常用的计算机语法类似,比如下图中的!=代表不等于,而%代表取余数。
内置变量,指的是系统内置的一些关键词,通过这些关键词可以直接获取到策略计算过程中所需要用到的关键数据,最典型的比如K线的开、高、低、收价格数据,以下图为例,在代码中调用close,可以直接获取到每根k线的收盘价,而open、high、low、volume同理,分别是k线的开盘价、最高价、最低价和成交量。
而内置函数中,最多的一类是技术指标,我们常见的技术指标,都可以在TradingView中找到对应的内置函数,比如RSI、ADX、KD、MACD、ATR等等,我们如果在策略中想要用某个技术指标,只需要调用该指标的名称,不必编写指标内部的计算公式,就能得到想要的结果了。语法手册中也有详细的例子,告诉你每个技术指标如何使用。
开始练手,双均线策略
双均线策略可以说是初学者最容易上手的一个策略了,交易规则很简单:当短期均线上穿长期均线,平空做多;当长期均线下穿短期均线,平多做空。我们以这样一个简单的策略,开启Pine语言的编程之路,来看我们是如何实现的:
策略总共有效代码,只有7行。第一行的strategy,相当于申明这个策略,第一个"My"是该策略的名称。接下来是一个判断变量longCondition, 大家不用纠结longCondition是什么数据类型,Pine脚本对于变量类型定义是开放式的,即赋给它什么类型,它就是什么类型。
我们再来看等号右边,crossover(sma(close,20),sma(close,60)),此处的close我们在前文已经知道,是k线的收盘价,而sma、crossover又分别代表什么?别着急,Pine编辑器有一个很好用的功能,只需要将鼠标放在关键词上,我们就能知道系统对于这个关键词(内置变量、内置函数)的定义。比如sma,系统提示我们,返回的是移动平均值。 同理,crossover和crossunder也可以通过同样方式获取解释(不得不说,真的好用)。
在理解了每个系统内置关键词的用法,我们就可以来翻译上述策略代码了。开多条件:20日收盘价均线上穿60日收盘价均线,如果满足开多条件,则以当时的价格平空做多1手,同时标记该信号为“My Long”;开空条件:20日收盘价均线下穿60日收盘价均线,如果满足开空条件,则以当时的价格平多做空1手,同时标记该信号为“My Short”。将该策略加载到想测试(交易)的K线图表上,可以看到“My Long”、“My Short”对应的交易信号标记。
当我们把策略信号加载到K线图表后,通过Pine编辑器右侧的策略测试器,就可以测试得到该策略的绩效。我们把这个策略应用到BTC的日线周期上,可以看到尽管策略很简单、很基础,它仍然是一个长期能够盈利的策略,但中间的回撤幅度会让人比较难受。
再实现一个类海龟策略
有了第一个练手的双均线策略的基础,我们再来一起实现一个比双均线策略略微复杂一点的类海龟交易策略。之所以称之为类海龟交易策略,是因为我们在海龟交易策略的唐奇安通道进、出场的基础之上,添加了一个不同周期的均线过滤,只有当均线和唐奇安通道同时满足多头或空头条件的时候,才会触发进场的操作。
我们分成三段来编写这个策略。首先第一段,还是在strategy方法中申明这个策略,然后,我们定义了3个参数变量,分别是唐奇安通道的进场周期20,唐奇安通道的出场周期10,以及均线的周期15。定义为input变量,是为了方便我们能够直接在Pine的测试界面修改参数数值,而不需要改动原始的代码。
策略的第二段,我们通过Pine内置的指标函数,分别定义了唐奇安通道进场、出场的上、下轨道,以及收盘价的均线,在代码中可以看到,每个K线所获取的high、low、close,我们都在后面加了[1],这是为了计算并取前1个K线周期的指标数据,以防止在当前的计算信号K线中用到未来的数据。
最后是策略第三段,开仓、平仓条件的判断与执行,此处为了避免连续开仓,引入系统内置变量strategy.position_size,该变量能自动读取策略的当前仓位。前4行是开仓的判断与操作,如果当前K线突破唐奇安通道上轨、前一个K线收盘价大于均线、并且此时策略没有做多仓位,则在突破价位进行做多的操作;如果当前K线突破唐奇安通道下轨、前一个K线收盘价小于均线、并且此时策略没有做空仓位,则在突破价位进行做空的操作。后4行是平仓的判断与操作,如果当前持有多头仓位,价格向下突破平仓唐奇安通道,平掉所有多头仓位,持有空头仓位,平仓逻辑相似。
我们将编辑好的策略加载到一个稍精细的周期:BTC4小时K线,并测试策略的绩效。可以看到下图中策略的信号以及回测结果,从测试情况来看,尽管策略逻辑不复杂,但仍可以在BTC的中周期,取得比较稳定的收益了,这也说明数字货币市场,是有着很多交易机会的。
我们不改变任何条件和参数,将策略移植到ETF这个同样是热门的数字货币品种上,策略依旧是有稳定的表现。TradingView提供了许多主流交易所的数字货币对,再包括外盘的商品、股指、A股等测试数据,都可以对所写的Pine语言策略进行测试,只需要修改图表左上方的品种,就能迅速完成品种的切换和策略的测试。动动手,说不定你能找到更优秀的策略。
如果你想要本次分享Pine语言策略的文本代码,欢迎加小编微信,与我交流。
往期干货分享推荐阅读
【数量技术宅|量化投资策略系列分享】基于指数移动平均的股指期货交易策略
AMA指标原作者Perry Kaufman 100+套交易策略源码分享
【数量技术宅|金融数据系列分享】套利策略的价差序列计算,恐怕没有你想的那么简单
【数量技术宅|量化投资策略系列分享】成熟交易者期货持仓跟随策略
【数量技术宅|金融数据分析系列分享】为什么中证500(IC)是最适合长期做多的指数
商品现货数据不好拿?商品季节性难跟踪?一键解决没烦恼的Python爬虫分享
【数量技术宅|金融数据分析系列分享】如何正确抄底商品期货、大宗商品