更多精彩内容,欢迎关注公众号:数量技术宅。想要获取本期分享的完整策略代码,请加技术宅微信:sljsz01html
前段时间,有粉丝找到技术宅,表示他有一个经常使用的交易平台,叫作TradingView,但愿技术宅能将分享的策略,用这个平台的语言改写。确实,有部分交易者,他们长时间在某个平台交易,适应了这个平台的操做,而有至关一部分平台,会提供量化交易的接口,或者内置一些简易的可编程语言,帮助你们实现指标计算、甚至是自动交易。编程
打开TradingView的主页,能够看到TradingView不加有数字货币的行情,还有A股、美股、外汇、黄金、大宗商品等外盘行情,咱们在TradingView上编写的交易策略,不转换代码,便可在多市场进行测试。微信
TradingView能够说是 一个简单,易上手,且功能极其强大的交易图表工具,但它不只仅是主观交易者的利器,还内置了一种叫Pine的编程语言,并有对应的Pine编译器,Pine能够获取到TradingView的全部交易历史数据,而且能够快捷、简便地编写一些基于K线的交易策略(熟悉交易开拓者的同窗,能够将其类比为数字货币的TB)。编程语言
Pine编辑器的进入步骤很简单,首先,咱们点开某一个品种,好比BTC/USD,选择右上角图形的“全功能图表”按钮。编辑器
进入后,选择下方的“Pine编辑器”,便可进入策略编写界面。函数
在编写咱们的第一个TradingView策略前,先来简要看一下,Pine语言的基本语法。Pine语言,能够说,相对于时下最热门的Python语言的语法,简单了很多,技术宅甚至认为,没有什么编程基础的同窗,通过咱们这篇文章的引导,也可以写出一些简单的策略。Pine语言有一个语法参考手册,包含三部份内容,分布是运算子、内置变量、内置函数。运算子的部分比较好理解,大部分和咱们经常使用的数学公式或经常使用的计算机语法相似,好比下图中的!=表明不等于,而%表明取余数。工具
内置变量,指的是系统内置的一些关键词,经过这些关键词能够直接获取到策略计算过程当中所须要用到的关键数据,最典型的好比K线的开、高、低、收价格数据,如下图为例,在代码中调用close,能够直接获取到每根k线的收盘价,而open、high、low、volume同理,分别是k线的开盘价、最高价、最低价和成交量。post
而内置函数中,最多的一类是技术指标,咱们常见的技术指标,均可以在TradingView中找到对应的内置函数,好比RSI、ADX、KD、MACD、ATR等等,咱们若是在策略中想要用某个技术指标,只须要调用该指标的名称,没必要编写指标内部的计算公式,就能获得想要的结果了。语法手册中也有详细的例子,告诉你每一个技术指标如何使用。测试
双均线策略能够说是初学者最容易上手的一个策略了,交易规则很简单:当短时间均线上穿长期均线,平空作多;当长期均线下穿短时间均线,平多作空。咱们以这样一个简单的策略,开启Pine语言的编程之路,来看咱们是如何实现的:url
策略总共有效代码,只有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爬虫分享
【数量技术宅|金融数据分析系列分享】如何正确抄底商品期货、大宗商品