更多精彩内容,欢迎关注公众号:数量技术宅。想要获取本期分享的完整策略代码,请加技术宅微信: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爬虫分享

【数量技术宅|金融数据分析系列分享】如何正确抄底商品期货、大宗商品

【数量技术宅|量化投资策略系列分享】股指期货IF分钟波动率统计策略

【数量技术宅 | Python爬虫系列分享】实时监控股市重大公告的Python爬虫

如何使用TradingView(TV)回测数字货币交易策略的更多相关文章

  1. 如何使用交易开拓者(TB)开发数字货币策略

    更多精彩内容,欢迎关注公众号:数量技术宅.想要获取本期分享的完整策略代码,请加技术宅微信:sljsz01 为何使用交易开拓者(TB)作为回测工具 交易开拓者(后文以TB简称)是一个支持国内期货市场K线 ...

  2. 回测框架pybacktest简介(一)

    pybacktest 教程 本教程让你快速了解 pybacktest's 的功能.为此,我们回测精典交易策略移动平均线MA交叉. MA快线上穿慢线时,买进做多 MA快线下穿慢线时,卖出做空 进场规则, ...

  3. 手把手教你用Python搭建自己的量化回测框架【均值回归策略】

    手把手教你用Python搭建自己的量化回测框架[均值回归策略] 引言 大部分量化策略都可以归类为均值回归与动量策略.事实上,只有当股票价格是均值回归或趋势的,交易策略才能盈利.否则,价格是随机游走的, ...

  4. 量化投资学习笔记01——初识Pyalgotrade量化交易回测框架

    年初学习量化投资,一开始想自己从头写,还是受了C/C++的影响.结果困在了计算回测数据那里,结果老也不对,就暂时放下了.最近试了一下python的各个量化投资框架,发现一个能用的——pyalgotra ...

  5. FMZ发明者量化平台回测机制说明

    原文连接:https://www.fmz.com/digest-topic/4009 大部分策略在实盘之前都需要回测进行验证,FMZ支持部分品种数字货币现货.期货和永续合约,以及商品期货所有品种.但发 ...

  6. [LeetCode] Palindrome Number 验证回文数字

    Determine whether an integer is a palindrome. Do this without extra space. click to show spoilers. S ...

  7. javascript 实现一个回文数字

    写一个方法,让"1234"变成回文数字“1234321”,就是顺着读和倒着读都是一样的:注:不让用reverse()方法: function palindrome(str){ va ...

  8. 用Python编写的第一个回测程序

    用Python编写的第一个回测程序 2016-08-06 def savfig(figureObj, fn_prefix1='backtest8', fn_prefix2='_1_'): import ...

  9. UVALive 2889(回文数字)

    题意:给定i,输出第i个回文数字. 分析:1,2,3,4,……,9------------------------------------------------------------------- ...

随机推荐

  1. 对于button元素的理解

    button有四种常用的类型: submit:  此按钮将表单数据提交给服务器.如果未指定属性,或者属性动态更改为空值或无效值,则此值为默认值. reset:  此按钮重置所有组件为初始值. butt ...

  2. c++ templates 第二版(英文)

    关注公众号:红宸笑. 回复:电子书 即可

  3. Java程序员成长之路

    北哥在前文总结了程序员的核心能力,但在专业能力维度,只是做了大概的阐述,并没有详细展开.从今天开始,我会把我作为程序员成长过程中,学习的知识总结成系列文章陆续发出来,供大家学习参考. 本文是第一篇,关 ...

  4. 8. Prism导航

    1. 背景 导航是为了实现不同界面的切换,是一种组织系统功能的方式.提供两种导航,一是基于View切换,二是基于ViewModel状态. 2. 基于View切换的导航 最常用导航方式.在该种导航中首先 ...

  5. C++常见的面试题目整理

    本文列出C++面试中经常遇到的一些问题,都是一些常见的面试考点,如果后续遇到其他常见面试问题还会再次更新.希望对近期参加面试的同学有一些帮助.先后顺序与问题的重要性无关,查看的时候,最好是全面了解一下 ...

  6. 类和对象在JVM中是如何存储的,竟然有一半人回答不上来!

    前言 这篇博客主要来说说类与对象在JVM中是如何存储的,由于JVM是个非常庞大的课题,所以我会把他分成很多章节来细细阐述,具体的数量还没有决定,当然这不重要,重点在于是否可以在文章中学到东西,是否对J ...

  7. Fiddler的一系列学习瞎记3

    Http: 不安全.可以很容易被拦截,或者其他的嗅探工具发现.怎么样做到安全?起码一下两点: 1.浏览器和we服务器之间的内容应该只有浏览器和web服务器能看到通信内容. 2.Http请求和Http的 ...

  8. 三:登录功能实现,servlet

    1)servlet 2)request 请求对象 3)response响应对象 4)转发 5)重定向 1.servlet就是用来处理客户端的请求的 1.1去官网下载 1.2 在STS上添加该包ctrl ...

  9. 重写ceph-lazy

    前言 这个工具最开始是从sebastien的blog里面看到的,这个是 Gregory Charot(工具的作者)写的,通常我们在获取一个ceph的信息的时候,需要敲一连串的命令去获得自己需要的信息, ...

  10. 利用虚拟化环境虚拟nvme盘

    前情介绍 SPDK SPDK的全称为Storage Performance Development Kit ,是Intel发起的一个开源驱动项目,这个是一个开发套件,可以让应用程序在用户态去访问存储资 ...