更多精彩内容,欢迎关注公众号:数量技术宅。想要获取本期分享的完整策略代码,请加技术宅微信: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. Docker(3)- Centos 7.x 下 Docker 镜像加速配置

    如果你还想从头学起 Docker,可以看看这个系列的文章哦! https://www.cnblogs.com/poloyy/category/1870863.html 前言 默认情况下,Docker ...

  2. 3.1 spring5源码系列--循环依赖 之 手写代码模拟spring循环依赖

    本次博客的目标 1. 手写spring循环依赖的整个过程 2. spring怎么解决循环依赖 3. 为什么要二级缓存和三级缓存 4. spring有没有解决构造函数的循环依赖 5. spring有没有 ...

  3. SQL存储过程返回值

    1 SQL存储过程返回值有3种 1.1 直接return返回(例如 return 1): 1.2 通过参数output返回(例如字符串类型): 1.3 直接返回程序集(Dataset程序集). 2 用 ...

  4. pip升级失败

    python -m pip install --upgrade pip失败 解决办法: easy_install pip

  5. 5 MVVM

    1.概述 MVVM各个部分功能如下: Model:定义业务逻辑 View:定义面向用户接口,UI逻辑,处理用户交互请求 ViewModel:负责界面导航逻辑和应用状态管理,呈现逻辑. 1.1. 各司其 ...

  6. win10免费通用永久激活秘钥分享 win1020H2正式版序列号推荐

    win10最新永久激活密钥神key如下: win10免费密钥 NW06D-722C0-5X6A1-MQ83B-2ER3D win10免费密钥 NP3KM-NQZD6-X406E-1QPKR-4VRZD ...

  7. 你真的会用PostGIS中的buffer缓冲吗?

    buffer - 图形缓冲区分析,GIS中最基本的空间分析之一. 实现buffer的工具有很多种,例如前端的truf.js.服务端的ArcGISserver.桌面端的ArcMap.数据库端的PosrG ...

  8. Java的内存区域划分

    内存分区简介 老生常谈的问题了,虽然网上一搜一大把,也很详细,但是我还是想写一写,通过自己的总结整理,加深一下印象. 我不知道学习Java内存分区有什么实际作用,但它就是像常识一样,一个使用Java语 ...

  9. 转载 Web前端开发 HTML设计 经验与技巧总结

    文章目录1.限制input 输入框只能输入纯数字.限制长度.默认显示文字2.input输入框自动获取焦点3.用CSS让背景有透明度文字不变4.a标签禁止点击5.文字两种居中对齐6.设置一个元素一直在页 ...

  10. powertool

    powertool简介 PowerTool 一款免费强大的进程管理器,支持进程强制结束,可以Unlock占用文件的进程,查看文件/文件夹被占用的情况,内核模块和驱动的查看和管理,进程模块的内存的dum ...