用 Python 实现你的量化交易策略

简介: Python 由于开发方便,工具库丰富,尤其科学计算方面的支持很强大,所以目前在量化领域的使用很广泛。市面上也出现了很多支持 Python 语言的量化平台。通过这些平台,你可以很方便地实现自己的交易策略,进行验证,甚至对接交易系统(由于政策原因,现在很多交易接口暂停开放)。

Python 的学习者中,有相当一部分是冲着爬虫去的。因为爬虫可以帮你解决很多工作和生活中的问题,节约你的生命。不过 Python 还有一个神秘而有趣的应用领域,那就是量化交易。


量化交易,就是以数学模型替代人的主观判断来制定交易策略。通常会借助计算机程序来进行策略的计算和验证,最终也常直接用程序根据策略设定的规则自动进行交易。


Python 由于开发方便,工具库丰富,尤其科学计算方面的支持很强大,所以目前在量化领域的使用很广泛。市面上也出现了很多支持 Python 语言的量化平台。通过这些平台,你可以很方便地实现自己的交易策略,进行验证,甚至对接交易系统(由于政策原因,现在很多交易接口暂停开放)。


在交易策略方面,我是外行(虽然曾经也有证券从业资格)。所以本文只是介绍几个 Python 量化平台,以及一些最基本的使用方法。更多的功能、更强大的策略还有待各位自己去挖掘。


目前国内比较知名的几个平台:


优矿 uqer.io

聚宽 joinquant.com

米筐 ricequant.com


国外知名平台:


quantopian.com


它们都可以使用 Python 进行策略开发。


以优矿为例,注册之后,在“开始研究”页面,新建一个 Notebook,就可以开始用 Python 写你自己的策略。



右上角的下拉框选择“策略”,就会帮你自动填写上策略回测的基本结构代码。



开始的一些变量是对回测的基本配置。initialize 里可以做一些初始化的工作。handle_data 则是回测代码的核心,用来实现每个交易日(或每分钟)的交易指令。


具体的变量含义,这里不做特别细致的解释,文档里都有说明。仅从命名和注释里也可以看出,设定了回测的时间,股票池,资金,交易频率等。


文档里给了一个最简单的日线策略代码:


def handle_data(account):
    for stock in account.universe:
        order(stock,100)


此策略就是,在每个交易日,把股票池里每一只股票都买入一手。


account.universe 就是开头设定的 universe 值。这里遍历股票池中的股票。


order 是买卖指令,函数原型是:order(symbol, amount)

参数 symbol 是股票代码,amount 是买卖数量,正为买入,负为卖出。此处买入 100 股,即 1 手。


点击“运行”,或 Ctrl+Enter,即可在页面上看到策略的执行情况。



我们再尝试改动一点点,写一个自己的策略。


我拍脑袋想了这样一个策略:


如果一只未持有的股票 2 个交易日累计涨了 10% 以上,就以当前资金的 5% 买入它。反过来,如果累计跌了 10% 以上,就全部卖出止损。


下面把它实现出来看下回测效果如何。



时间设为去年(2015)全年,起始资金 10 万元。


universe = set_universe('A')


股票池为 A 股所有股票。


account.get_attribute_history('closePrice', 3)


取得股票池中所有股票前 3 天的收盘价(closePrice)。


hist[s][2] - hist[s][0]


得到 1 天前和 3 天前收盘价的差值。


account.valid_secpos


是账户当前所持有的证券信息。


如果收盘价 2 天的差值满足买入条件且未持有,就执行:


order_pct(s, 0.05)


order_pct 表示按账户当前总价值的百分比买入股票。


如果满足卖出条件则执行:


order_to(s, 0)


OK,一个简单到不行的策略已完成。运行一下:



居然,这么简单的策略在最高的时候有超过 90% 的收益,即使在经历了年中的股灾和下半年的震荡之后,到年底也还有 30% 多的收益率,应该超越了大部分散户去年的成绩吧。如果按照这个策略进行交易,啧啧,想想还有点小激动呢。(喂!快醒醒!)


然而现实是残酷的,真实的市场分分钟教你做人。


量化投资以及程序化交易是很有前途的行业,但在你想从事这行,甚至用它赚钱之前,请先深入了解它。


有兴趣的,去看下知乎上的这个问题:


学习量化交易如何入门?

https://www.zhihu.com/question/22211032

前面提到的另外几个平台,和优矿基本类似,API 和功能会有些差异,可以自行尝试,这里不再分别演示。知乎上也有人做过比较:

已知国内量化平台的比较, Ricequant / 优矿究竟谁是下一个quantopian,哪家挖矿强?

https://www.zhihu.com/question/35097533

如果你对这个领域充满好奇,不如现在就立刻动手,从你的第一个策略开始。谁知道你会不会成为下一个巴菲特呢:)


近期文章推荐阅读:

极简 Github 上手教程

如何在 Python 中使用断点调试

Python爬虫:一些常用的爬虫技巧总结

Python 抓取网页乱码原因分析

一些常见的新手问题

如何直观地理解程序的运行过程?

用 Python 实现一个简单的微信红包算

相关文章
|
11月前
|
存储 算法 调度
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
【复现】【遗传算法】考虑储能和可再生能源消纳责任制的售电公司购售电策略(Python代码实现)
475 26
|
11月前
|
数据采集 Web App开发 前端开发
处理动态Token:Python爬虫应对AJAX授权请求的策略
处理动态Token:Python爬虫应对AJAX授权请求的策略
|
数据可视化 数据挖掘 数据安全/隐私保护
Python实现时间序列动量策略:波动率标准化让量化交易收益更平稳
时间序列动量策略(TSMOM)是一种基于资产价格趋势的量化交易方法,通过建立多头或空头头寸捕捉市场惯性。然而,传统TSMOM策略因风险敞口不稳定而面临收益波动问题。波动率调整技术通过动态调节头寸规模,维持恒定风险水平,优化了策略表现。本文系统分析了波动率调整TSMOM的原理、实施步骤及优势,强调其在现代量化投资中的重要地位,并探讨关键参数设定与实际应用考量,为投资者提供更平稳的风险管理体验。
821 4
Python实现时间序列动量策略:波动率标准化让量化交易收益更平稳
|
存储 监控 算法
基于 Python 跳表算法的局域网网络监控软件动态数据索引优化策略研究
局域网网络监控软件需高效处理终端行为数据,跳表作为一种基于概率平衡的动态数据结构,具备高效的插入、删除与查询性能(平均时间复杂度为O(log n)),适用于高频数据写入和随机查询场景。本文深入解析跳表原理,探讨其在局域网监控中的适配性,并提供基于Python的完整实现方案,优化终端会话管理,提升系统响应性能。
315 4
|
12月前
|
机器学习/深度学习 算法 调度
【EI复现】基于深度强化学习的微能源网能量管理与优化策略研究(Python代码实现)
【EI复现】基于深度强化学习的微能源网能量管理与优化策略研究(Python代码实现)
433 0
|
12月前
|
数据采集 存储 XML
Python爬虫XPath实战:电商商品ID的精准抓取策略
Python爬虫XPath实战:电商商品ID的精准抓取策略
|
Python
解决Python中AttributeError:'image'对象缺少属性'read_file'的问题策略。
通过上述策略综合考虑,您将能够定位问题并确定如何解决它。记住,Python社区很庞大,也很乐于帮助解决问题,因此不要害怕在求助时提供尽可能多的上下文和您已经尝试过的解决方案。
302 0
|
网络协议 API Python
解析http.client与requests在Python中的性能比较和改进策略。
最后,需要明确的是,这两种库各有其优点和适用场景。`http.client` 更适合于基础且并行的请求,`requests` 则因其易用且强大的功能,更适用于复杂的 HTTP 场景。对于哪种更适合你的应用,可能需要你自己进行实际的测试来确定。
312 10
|
测试技术 Python
Python测试报告生成:整合错误截图,重复用例执行策略,调整测试顺序及多断言机制。
如何组织这一切呢?你可以写一本名为“Python测试之道”的动作指南手册,或者创建一个包含测试策略、测试顺序、多断言机制的脚本库。只要你的测试剧本编写得足够独到,你的框架就会像一位执行任务的超级英雄,将任何潜伏于代码深处的错误无情地揪出来展现在光天化日之下。这些整理好的测试结果,不仅有利于团队协作,更像冒险故事中的精彩篇章,带给读者无尽的探索乐趣和深刻的思考。
339 10
|
数据采集 Web App开发 前端开发
Python+Selenium爬虫:豆瓣登录反反爬策略解析
Python+Selenium爬虫:豆瓣登录反反爬策略解析

推荐镜像

更多