从零实现”搭积木式实现策略“的回测系统 part I

对量化交易感兴趣的同学,对于回测系统肯定不陌生。以quantopian为蓝本的回测平台,国内已经一抓一把,那为什么还需要从头实现一个系统?而且,什么是“搭积木式实现策略”呢?

对比现存的量化平台,实现如下价值:

1,市面上量化系统引擎是黑盒(当然大部分是zipline——代码是开源的,但可读性一般),从头实现可以做到知其然更知其所以然。

2,拥有自己的,代码易读性的系统,不用担心策略泄漏。

3,提供一个构架清晰且易扩展的系统。

4,”积木式“写策略,避免市面上那些冗长的模板代码——这个是本系统的亮点之一。

5,下一步会扩展到深度强化学习、机器学习自动调参等。

系统运行示例

”积木式“策略示例,如下实现“买入并持有”和“均线交叉”策略:

buy_and_hold = Strategy([

RunOnce(),

PrintBar(),

SelectAll(),

WeighEqually(),

],name='买入并持有-基准策略')


long_expr ='cross_up(ma(close,5),ma(close,10))'

flat_expr ='cross_down(ma(close,5),ma(close,10))'

ma_cross = Strategy([

SelectByExpr(long_expr=long_expr,flat_expr=flat_expr),

WeighEqually(),

],name='均线交叉策略')

几乎没有模板代码,没用调用api对不对?是的,就是这样,我们把大量常用的算法都以模块的形式,变成一个小小算法模块,我们按照自己的策略想法,按需把积木搭起来就好了,简单而且不容易出错,基本是不需要调试的!

运行状态截图


策略指标
策略绘图

背景说明

随着机器学习,人工智能的火热,AI+金融受到了很多关注。alpha go大败李世石之后,master再次完胜柯洁,人们自然而然会想,如果把前沿AI技术应用到“离钱最近”的金融证券投资会取得什么样的效果呢?

Quant涉及很多的基础知识,包括金融学,投资学,经济学,数学,统计学,甚至物理学,心理学等等,Quant系统也很复杂,由从多子系统构成。而量化回测系统(Backtesting)几乎是Quant系统里,最为基础且最为重要的一环。

什么是回测系统?

量化交易,就是计算机按指定的策略,产生特定的交易信号。因为二级市场所有历史数据、财务数据都是可获得的,既然是计算机进行操作,就很容易对整个交易进行复盘。好比我们玩扑克牌或者“狼人杀游戏”,在一局结束,总有自认逻辑严密的人喜欢对游戏过程进行复盘,刚哪里可以做得更好,分析出了什么问题,确保后续如何优先,调整和提高。这就是“回测”系统的价值

回测系统至少有如下优点:

一、回测系统几乎是无代价的,我们可以调整参数,或者各种创造性的想法,这个系统会告诉你,在过往一段时间(比如一年),假如你真的这么交易了,收益率,风险,最大回撤是多少。这就避免我们花大量真金白银去市场上买教训。

二、更重要的事,节省时间,你可以在几分钟内模拟几个股市周期,穿越牛熊。你如果要想经历几个股市周期,那估计是以10年甚至更长的时间维度来计算,但对于量化回测引擎,几秒钟就可以告诉你结果,且没有产生实质的损失。

量化回测系统对于初学者是神秘的,但其原理并不复杂。此系列文章的目的,就是带着大家,用python从零实现一个量化回测系统。

量化回测系统总体架构一览:

SymbolBroker —— 记录单支证券交易详情,包括持仓情况(position),交易佣金(Commission),证券的收盘价(Close)。投资组合(Portfolio)会根据外部给出的交易指令,调用SymbolBroker的接口,去更改该证券的持仓情况,并计算交易所产生的佣金。

Portfolio —— 记录整个投资组合交易详情,包含组合的总市值(total),现金余额(cash),交易佣金,同时维护一个SymbolBroker的dict,包含所有的证券的SymbolBroker。每一期,会根据传入的FLAT(平仓)列表,把相应的证券平仓,同时根据需要持仓的证券的比例,将现金余额按指定的比例分配到对应的证券上。

TradingEnv —— 交易环境,根据策略(Strategy)产生的指令,调用Portfolio更新持仓组合情况。

DataFeed —— 数据获取,目前支持quandl平台的美股数据。

Strategy —— 策略,执行相应的“积木”模块化的算法集合。

Algo —— 算法基类,用户可以自行定义所需的算法模式。系统已经内置了许多常用的模块,包括执行频率,比如执行一次,按周执行,按月执行;资金分配模块,按信号产生交易指令模块等。

这就是系统的核心组件了,其中TradingEnv是系统的最外层。


外层循环

项目在github上开源,欢迎star。github项目-量化回测系统

微信公众号:ailabx

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,312评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,578评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,337评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,134评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,161评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,303评论 1 280
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,761评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,421评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,609评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,450评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,504评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,194评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,760评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,836评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,066评论 1 257
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,612评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,178评论 2 341

推荐阅读更多精彩内容