原文连接:https://www.fmz.com/digest-topic/4009

大部分策略在实盘之前都需要回测进行验证,FMZ支持部分品种数字货币现货、期货和永续合约,以及商品期货所有品种。但发明者量化平台的回测机制和常见的onbar回测有所区别,造成了很多新手的困惑。本文将详细说明并解答一些常见的回测问题。

 

回测系统是如何运作的?

如上图所示,回测开始时间到结束时间可以当作一个时间轴,回测时,回测时间点沿轴从左到右移动开始回测,在这个时间点上,只能获取到此点之前的历史数据,策略根据这些数据做出买卖,最终形成盈亏。显然,回测的时间点的分布是离散的,分布的密集程度代表了回测的精度。
当然考虑到回测时间点越密集,所需的时间越长,实际的回测系统需要在精度和效率之间做出取舍。

 

传统onBar回测机制

onbar回测机制是基于K线的,即每一个K线产生一个回测时间点,在此时间点上可以获取到当前K线的高开低收价格、交易量等信息,以及此时间点之前的历史K线信息。
这种机制的弊端很明显:在一根K线上,只能产生一次买卖,通常依据的价格是K线的收盘价。并且一根K线只能获取到高开低收四个价格,至于在一根K线内价格如何变化的,是最高价先发生、还是最低价先发生等等信息都无从获取。以1小时K线为例,实盘时肯定每隔几秒获取一次行情信息,交易指令也会在盘中发出而不是等待K线结束。onbar回测机制的好处是易于理解,回测速度极快。

 

FMZ发明者量化平台onTick回测机制

上图为FMZ回测设置界面。回测模式分为两种模拟级回测和实盘级回测,下面将分别介绍:

模拟级回测

模拟级回测要选择回测所使用的K线周期和底层K线周期。比如策略使用小时线回测,底层K线选择5分钟,那么回测时间点的间隔将以5分钟K线生成的tick为基础。具体根据K线生成K线内tick的机制和MT4类似,这个帖子里有详细的说明:https://www.fmz.com/bbs-topic/662


我们使用一个简单的策略来演示一下这个机制,策略代码:

function main() {
while(true){
var records = exchange.GetRecords()
var ticker = exchange.GetTicker()
Log('K线收盘价: ', records[records.length-1].Close, 'ticker买一卖一价: ', ticker.Buy, ticker.Sell)
//js回测不用Sleep,会自动跳到下一个tick。Python需要一个小的休眠时间
}
}

回测结果:

每根K线只有开盘和收盘的tick是固定的,中间加上模拟的12个tick,这样一根K线将会形成14个回测时间点。如果回测一天,共有24×12×14 = 4032 时间点,而传统的onBar回测只有24个,精度大幅提高。在一个K线周期内也能完成开仓平仓操作。虽然中间生成的tick是模拟的,但影响不大。回测中,只要买单价大于卖一,卖单价小于买一,就会撮合成交。这种回测方式兼顾了回测速度和精度,推荐大家使用。

实盘级回测

实盘级回测用到了真实的tick,每个时间点的间隔最短只有1s,这种回测的精度到每一秒的变化,但由于数据量大,回测速度慢、回测时间也不能很长。下图为真实的tick。实盘级回测可用于精确的验证策略。

 

回测和实盘的差距

即使实盘级回测和实盘还是有明显的数据不足,如不能获取到成交历史trades、不能获取到实际的深度变化、真实的网络延时等等。即使这样FMZ目前的回测系统也相对完善,还有很多小功能,如模拟网络错误,可以用于测试策略的容错能力,模拟网络延时、绘制行情图标等。

 

常见问题

为什么只支持几个交易对和交易所能回测?

目前只有几个常见交易对数据,其实策略和品种关系不是很大,已经足够验证策略了。

能模拟BitMEX收取资金费率吗?

可以,选取BitMEX回测可以打开事件记录。

回测在那里进行?

JavaScript策略的回测在浏览器中进行,Python可以选择FMZ的服务器或者自己的托管者。

回测日志可以下载吗?

可以,日志右上角有下载按钮

能本地回测吗?

FMZ开源了Python回测引擎。参考: https://www.fmz.com/bbs-topic/1687

FMZ发明者量化平台回测机制说明的更多相关文章

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

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

  2. 量化交易回测系统---RQalpha、qstrade学习笔记

    一.RQalpha github 地址  https://github.com/ricequant/rqalpha 1.运行test.py文件,显示 No module named 'logbook. ...

  3. 量化投资:第8节 A股市场的回测

    作者: 阿布 阿布量化版权所有 未经允许 禁止转载 abu量化系统github地址(欢迎+star) 本节ipython notebook 之前的小节回测示例都是使用美股,本节示例A股市场的回测. 买 ...

  4. 量化投资策略:常见的几种Python回测框架(库)

    量化投资策略:常见的几种Python回测框架(库) 原文地址:http://blog.csdn.net/lawme/article/details/51454237 本文章为转载文章.这段时间在研究量 ...

  5. OnePy--构建属于自己的量化回测框架

    本文主要记录我构建量化回测系统的学习历程. 被遗弃的项目:Chandlercjy/OnePy_Old 新更新中的项目:Chandlercjy/OnePy 目录 1. 那究竟应该学习哪种编程语言比较好呢 ...

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

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

  7. 量化框架zipline--分钟回测改写

    转自:http://www.cnblogs.com/dxf813/p/7845398.html 基于zipline的分钟回测改写,其中数据源为自定义,使用bcolz的ctable,该数据格式与pand ...

  8. 如何使用TradingView(TV)回测数字货币交易策略

    更多精彩内容,欢迎关注公众号:数量技术宅.想要获取本期分享的完整策略代码,请加技术宅微信:sljsz01 TradingView平台简介 前段时间,有粉丝找到技术宅,表示他有一个常用的交易平台,叫做T ...

  9. 转自 BotVS 量化平台社区 --- 如何从绩效报告中分辨出“好模型 or 坏模型”

    ## NO:01 在投资行业一直有一个说法,靠交易盈利是所有赚钱方式中最难的一种,以至于有人戏谑称交易为投资领域的搬砖工作. 为了提升交易效率.挖掘潜在投资机会,量化交易伴随着信息技术的发展大行其道, ...

随机推荐

  1. Mongo Restore

    #!/bin/sh HOST_IP=`/sbin/ifconfig | sed -n 's/.*inet addr:\([0-9.]\+\)\s.*/\1/p' | head -n1` echo &q ...

  2. Task异步

    快速示例 class Program { static void Main(string[] args) { //Console.WriteLine("main start..") ...

  3. MongoDB 比较适用哪些业务场景

    转载自:https://www.cnblogs.com/williamjie/p/10416294.html 在云栖社区上发起了一个 MongoDB 使用场景及运维管理问题交流探讨的技术话题,有近50 ...

  4. 五十四.自定义镜像及仓库、持久化存储 、 Docker网络架构

    1. 制作自定义镜像(base基础镜像,搭建共性环境) 基于centos镜像使用commit创建新的镜像文件 基于centos镜像使用Dockerfile文件创建一个新的镜像文件   1.1 使用镜像 ...

  5. 富文本编辑器从word粘贴公式

    很多时候我们用一些管理系统的时候,发布新闻.公告等文字类信息时,希望能很快的将word里面的内容直接粘贴到富文本编辑器里面,然后发布出来.减少排版复杂的工作量. 下面是借用百度doc 来快速实现这个w ...

  6. js 弹层下面的body禁止滚动

    弹窗是一种常见的交互方式,而蒙层是弹窗必不可少的元素,用于隔断页面与弹窗区块,暂时阻断页面的交互.但是,在蒙层元素中滑动的时候,滑到内容的尽头时,再继续滑动,蒙层底部的页面会开始滚动,显然这不是我们想 ...

  7. 数据库学习之一--DBMS种类

    一.定义 数据库(DB):数据库是将大量数据保存尔来,通过计算机加工而成的可以进行高效访问的数据集合: 数据库管理系统(DBMS):是一种操纵和管理数据库信息的大型管理软件,用于建立,使用和维护数据库 ...

  8. CF915E 动态开线段树

    CF915E 动态开线段树 题面 因为\(n\le10^9\),所以动态开点,线段树维护\([1,n]\)天非工作日数量. 之前的结构体写法被卡了,只能改成函数传l,r(虽然也不难) 动态开点好写,但 ...

  9. HDOJ->考新郎(sdut1021)

    考新郎 Problem Description 在一场盛大的集体婚礼中,为了使婚礼进行的丰富一些,司仪临时想出了有一个有意思的节目,叫做"考新郎",具体的操作是这样的: 首先,给每 ...

  10. ie中打印的问题

    一般正常的情况下使用window.print();各个浏览器都可以调用出打印功能来但是ie有个坑就是如果页面在iframe里的话打印出来就是错的页面所以在这里要这样写: var agent = nav ...