WeQuant教程—1.4 实践教学:比特币量化定投
我们使用数字货币比特币作为量化交易标的。使用比特币的好处有几个:
- 品种单一,计价方式简单;
- 24小时不间断交易;
- 交易资金门槛低;
- 接口授权简单。
接下来要做的,就是学习用WeQuant的标准,以完成一份有效的策略。我们将以比特币定投为例(定期自动买入比特币,来换取比特币升值收益),作一个简单的介绍。
基本名词介绍
bar
这里的bar不是指酒吧,是金融交易里面的行情bar,是一个图形概念。如果你多多少少看过交易的行情图,横向排列的高低不同的“小柱子”,每一根柱子都称为一个bar。
bar跟时间是高度关联的。bar记录了固定间隔内,从开始时间到结束时间,价格的信息,常规的bar会记录如下价格信息:开始价格(开盘价)、结束价格(收盘价)、最高价、最低价。一般来说,bar还会附带成交数量的信息。
bar在我们的量化系统里面有什么用呢?除了提供基础的价格信息,在WeQuant设计的量化系统里面,策略是循环不间断地运转的,bar是循环的依据。
为什么需要bar来支持循环呢?我们知道,bar是天然带有时间属性的信息合集,在图形里,左边的bar比右边的bar发生的更早,最右边的bar反映的是当前最新的动态,于是,我们可以利用bar的时间属性,让程序从左往右依次读取bar,来实现“从某时至某时”或者“实时不间断”的信息获取和计算的目的,既不遗漏,也不重复,时间间隔固定,于是我们在写策略的时候,可以省略掉很多时间定义和处理的步骤,只需要关心在所读取的当前的bar里面,设计交易触发条件“如果 => 那么”——从而,整个策略的设计和编写,由于bar的循环的帮助,变得非常简单。
bar就像老式时钟的钟摆,每摆一下,时间就往前进一格。只要bar不停地在更新和读取,我们的策略就会不断地运行。bar跟前面几篇文章提到的行情系统,有极大的关联。
bar本身有频率的区分,区别就是每隔多少时长汇总一根bar。WeQuant提供分钟、小时、天、周级别的bar,来满足执行频率不同的策略的要求。目前WeQuant提供的bar,主要针对数字货币交易市场,由于中间不休市,bar与bar之间所表示的时间区段是连续的,即紧密相连,不存在缝隙。
frequency
与bar密切相连,由于bar表示的是固定时间间隔内的价格信息,这里的frequency就是用来指定固定时间间隔有多长。
frequency有个正经的中文翻译叫频率,频率的单位是赫兹(次/秒)。而我们为了省略换算的复杂(很多人算不过来),frequency设定的值仅作代指而非学术上的频率值,例如当frequency为1分钟时,实际上我们说的是给策略指定成“依据1分钟时长的bar,每1分钟执行一次策略,所换算出来的频率值”。这段话献给特别较真的朋友们。
函数
这是编程语言的概念,不作累述。在WeQuant的策略模板里面,只需要在策略里定义清楚两个函数,策略就可以生效。具体是哪两个函数需要定义,后文会作示例讲解。
除了用户需要自己编写函数之外,WeQuant本身提供了一些列的函数来辅助完成策略的表达,包括但不限于获取历史数据、获取帐号信息、操作订单、计算和保存变量等等。详细的定义和使用方法,请在需要的时候移步至专门的API文档。
参数
由于策略需要跟量化系统作整合,我们要求在策略里添加一些预设的但跟交易逻辑本身无关的变量,让策略变得机器可读,使用方法请看示例,详细说明看API文档。
一个基本的策略-比特币定投
我们对上文进行一个简单的汇总,一个WeQuant标准的策略应该长这个样子:
我们看到,策略分成三部分,分别定义PARAMS(参数)变量、initialize和handle_data函数(分别需要传入context参数)。
- PARAMS里面定义回测的起始时间、结束时间、帐号初始资金和初始比特币数量、滑点误差率(就是交易过程产生的误差,解释另附);
- initialize函数设置context变量,包括frequency、基准品种价格、操作品种、用户自定义变量;
- handle_data函数写实际的策略逻辑,即每次读取bar的时候,按照什么条件触发订单。
这个策略什么意思呢?刨除掉其他设置的细节(想了解的话,请阅读API文档),我们只看handle_data里的内容:
代码的意思是,每天,检查账户里是不是剩余超过100块钱,如果超过,则按照当前的价格买入100块钱的比特币。
这样写完以后,平台就自动每天帮你买比特币了,作为一个自动化的定投策略,是不是很简单?
实际的定投策略会比这个更智能一些,那只是下单逻辑有了一些变化,整体的结构还是一样的,此处为了简化教学目的。
在回测阶段,这段代码也是可用的,而且可以从回测结果里面看到,因为比特币价格在上涨,所以这个定投策略也是挣钱的呢。
基本概念先介绍到这里。如果希望看更复杂的策略,策略讲堂里面有目前主流经典教科书策略的比特币版本,希望你们喜欢。
WeQuant教程—1.4 实践教学:比特币量化定投的更多相关文章
- WeQuant教程—1.2 从简单的量化系统开始
		你大概知道量化的思想最早在古巴比伦人计算行星轨迹的时候就已经诞生(算术运算),后来借助古希腊的形式化逻辑的发展,人们日益能从量化的思想中提炼和描述自然规律并运用到生产之中.不过,基于量化的思想打造一个 ... 
- WeQuant教程—1.3 利用回测工具降低交易风险
		量化系统投入实际使用之前,人们会希望提前测试交易的效果.这个期间往往涉及代码的改动和参数的调整.最常见的做法是将历史数据输入量化系统,让量化系统根据既定的交易逻辑进行操作,观察和分析交易结果,找到问题 ... 
- EffectiveTensorflow:Tensorflow 教程和最佳实践
		Tensorflow和其他数字计算库(如numpy)之间最明显的区别在于Tensorflow中的操作是符号. 这是一个强大的概念,允许Tensorflow进行所有类型的事情(例如自动区分),这些命令式 ... 
- 区块链教程(二):比特币、区块链、以太坊、Hyperledger的关系
		不知道大家喜不喜欢音乐! 朋克音乐:诞生于七十年代中期,一种源于六十年代车库摇滚和前朋克摇滚的简单摇滚乐.它由一个简单悦耳的主旋律和三个和弦组成,经过演变,朋克已经逐渐脱离摇滚,成为一种独立的音乐,朋 ... 
- Sublime Text3工具的安装、破解、VIM功能vintage插件教程(已经实践、绝对可用)
		工欲善其事,必先利其器.Sublime Text是一款很好的开发工具,开发php项目很好用,尤其是Sublime Text的一些插件功能,可以享用VIM的快捷编辑和html.js等自动补全 ... 
- 大爽Python入门教程 2-5 *拓展实践,对比与思考
		大爽Python入门公开课教案 点击查看教程总目录 本文偏难. 推荐等第一二三四章上完后,回过来拓展阅读. 基础情景思考 假设有这样一张成绩表 最左边的一列是名字,起名麻烦. 这里直接用ABC...来 ... 
- 【转】一篇很全面的freemarker教程---有空慢慢实践
		FreeMarker的模板文件并不比HTML页面复杂多少,FreeMarker模板文件主要由如下4个部分组成: 1,文本:直接输出的部分 2,注释:<#-- ... -->格式部分,不会输 ... 
- python爬虫实践教学
		i春秋作家:Mochazz 一.前言 这篇文章之前是给新人培训时用的,大家觉的挺好理解的,所以就分享出来,与大家一起学习.如果你学过一些python,想用它做些什么又没有方向,不妨试试完成下面几个案例 ... 
- Lance老师UI系列教程第九课->高仿比特币监控大师
		http://blog.csdn.net/lancees/article/details/22898971 
随机推荐
- Swagger 学习资料
			Swagger 学习资料 网址 Spring Boot中使用Swagger2构建强大的RESTful API文档 http://blog.didispace.com/springbootswagger ... 
- C++对象内存模型2 (虚函数,虚指针,虚函数表)(转)
			class A { public: virtual void vfunc1(); virtual void vfunc2(); void func1(); void func2(); virtual ... 
- brew 又叫Homebrew,是Mac OSX上的软件包管理工具
			brew 又叫Homebrew,是Mac OSX上的软件包管理工具; Homebrew是一款Mac OS平台下的软件包管理工具,拥有安装.卸载.更新.查看.搜索等很多实用的功能.简单的一条指令,就可以 ... 
- There is no type initializer in Swift----One answer is to use static, it is the same as class final.
			“Unlike stored instance properties, you must always give stored type properties a default value. Thi ... 
- 学习:CMP/TEST比较指令
			cmp指令:比较 cmp指令,和sub指令的最大的不同点就是影响标志位 不储存结果 1.当前汇编指令为cmp ecx,edx 2.当前ecx寄存器中的地址为00000000,edx寄存器中的地址000 ... 
- VMware空虚拟机通过网络安装系统时获取不到IP地址情况(基于Linux的DHCP服务器)
			当虚拟机提示no DHCP or proxyDHCP offers were received时 1.dhcp服务配置错误(留意句尾分号“ :”) 2.dhcp服务未启动(用 systemctl s ... 
- three.js 加载3DS 404 文件找不到
			web.config修改如下: code: <?xml version="1.0" encoding="utf-8"?> <!-- 有关如何配 ... 
- 洛谷 P1991 无线通讯网 题解
			P1991 无线通讯网 题目描述 国防部计划用无线网络连接若干个边防哨所.2 种不同的通讯技术用来搭建无线网络: 每个边防哨所都要配备无线电收发器:有一些哨所还可以增配卫星电话. 任意两个配备了一条卫 ... 
- 【luoguP2986】[USACO10MAR]伟大的奶牛聚集Great Cow Gathering
			题目链接 先把\(1\)作为根求每个子树的\(size\),算出把\(1\)作为集会点的代价,不难发现把集会点移动到\(u\)的儿子\(v\)上后的代价为原代价-\(v\)的\(size\)*边权+( ... 
- K8s的存储卷使用总结
			K8s的存储卷: 它有四种存储卷: 1. emptyDir: 空目录,这种存储卷会随着Pod的删除而被清空,它一般作为缓存目录使用,或临时目录, 当做缓存目录时,通常会将一块内存空间映射到该目录上,让 ... 
