写在前面
i
距离上次更新博客已经过了一年多了,这么长时间不更新博客的主要原因是因为自身的懒惰造成的,最近由于突发奇想,又想把博客捡起来了,所以在这里希望更新一下,那么就先从最近开始做的量化交易框架开始做起吧!
为什么想到做量化交易?
因为最近股票一直亏钱…而且做长线实在是不够刺激,想寻求一些刺激的事情做做,让每天的生活充满激情,于是乎想到一种合法刺激多巴胺的方式,就是交易哈哈哈,Anyway,想用机器进行量化的交易的想法已经存在很久了,主要一直由于代码能力的限制,一直无法进行实现。最近本人完成了java的爬虫开发项目之后,加上chatGPT(这里手动狗头)的加持,愈发感觉身体内的一股代码的洪荒之力要喷射而出,刚好用在开发量化交易框架上,显得非常合适。
目前做到哪一步了?
说来惭愧,若干天的尝试仅仅实现了一个面向过程的MA5策略的回测,我甚至还不清楚回测的过程是否正确。
未来有哪些计划?
本人像构建一个属于自己的回测系统,并且通过简单的策略,便可发现合适的买入信号,这一套回测系统能够以面向对象的模式进行开发,并且附加文档,能够在未来进行维护的时候实现一个便捷的维护方式。更进一步,当开发的内容达到一定规模之后,我想将本人这套量化系统开源在github上,吸引更多的开发者共同修改代码,以达到完善代码功能和满足更多需求的目的。
本人目前的一些关于框架的想法
因为本人不是计算机科班出身,可能下面有些想法在计算机专业的同学看来比较蠢,但本人认为初步来看还是合理的,未来可能在实现代码的过程中会有一些不一样的想法。
问题的分解
- 获得股票交易的买入和卖出信号;
- 通过某个quote的API对一段时间内的股票走势进行询价;
- 通过信号和询价数据对利润进行计算,并对买卖价格、手续费、手数、日期进行记录;
- 建立数据对象。
第一步先从基于包的设计开始
我的想法是,先不build from scratch,在经过我激烈的思想斗争之后,发现build from scratch一方面太消耗时间,另一方面,可能会存在回测系统并不符合标准,即存在bug的可能性;并且回测系统有可能考虑不完全,无意义地消耗我大量的时间。于是,基于上述分析,我打算先基于一些包进行设计,等到后面有经验之后,在进行回测系统的搭建。
问题的分解
- 股票数据获取
- 计算交易指标
- 设计交易策略:择时策略
- 设计交易策略:选股策略
- 数据回测与优化(Zipline)
- 实现实盘交易(EasyTrader)
股票数据获取
之前我采用的是baostock的接口获取股票历史数据的,缺点是无法获取实时数据,如果需要历史数据进行回测还是有可行性的。目前,我在互联网上获知的一些接口包括天勤量化(期货接口),BigQuant、JoinQuant(免费近一年)等,可以接下去进行调研,貌似JoinQuant比较popular。
当然,我觉得到后期也可以自己实现一个数据接口,挂在自己的服务器上,就是不知道数据量的大小是不是非常大,可能需要评估这个的成本,提示:在Github上也有可能存在潜在的股票数据接口。
付费的股票数据接口有Wind和彭博,提供秒级的行情数据,可以获得最新最精准的交易数据。
对于基本面分析而言,基本面的数据的一手数据来源是企业的年报,企业的年报的来源主要是通过证券交易所的官网获取:
- 上海证券交易所http://www.sse.com.cn/
- 深圳证券交易所http://www.szse.cn/
- 巨潮资讯网http://www.cninfo.com.cn/new/index
股票的年报中的最重要的章节就是财务报告,可以自行获取和学习。
计算交易指标
- 涨跌幅(shift函数)
- 计算买入卖出信号(where)
- 持仓收益(直接按照公式计算即可)
- 累计收益率(cumprod)
- 最大回撤(rolling计算最值)
- 夏普比率(每单位风险会产生多少超额报酬)
$$SharpeRatio=\frac{E(R_P)-R_f}{\sigma_P}$$
其中$E(R_P)$为你的投资组合的预期收益,$R_f$年化无风险利率(比如国债的收益率3%),$\sigma_P$为你的投资组合的收益率的标准差。
相关的内容可以在如下链接里找到:https://github.com/Delta-F/DeltaTrader
基本知识
财务指标查询
- 资产负债表 体现企业家底和负债情况
- 利润表 公司盈利能力、赚了多少、怎么赚的隐含着对未来利润增长的预期,体现了市场空间、成长能力
- 现金流量表 权责发生制与收付实现制,利润表是权责发生制,是当签订合同后,默认我的利润表里马上就有体现;而现金流量表是权责发生制,是当现金到账后才会有体现。
常用财务指标
- eps(每股收益) 净利润/股本数
- operating_profit 收入-成本
- roe(净资产收益率)归属于母公司两倍的净利润/净资产,相当于公司一定资产下的产出,反映了盈利能力,净资产的使用能力,回报率。
- inc_net_profit_year_on_year(净利润同比增长率)
如何对企业进行估值
绝对估值法
计算了企业的内在价值,很难去真正估算股票的价值,并且估值法比较复杂,例如现金流折现模型等。
相对估值法
夏普比率
$R_f$国债年化回报$3%$左右,投资回报率的标准差$\sigma_P$
$$SharpeRatio=\frac{E(R_P)-R_f}{\sigma_P}$$
表示了投资者额外承受的每一单位的风险所获得的额外收益,所以$Sharp Ratio$越高越好。
假设检验
t-test
量化交易系统
基本框图
创建自己的股票数据库
最大回撤
$$
MDD=\frac{ThroughValue-Peak Value}{Peak Value}
$$
其中$ThroughValue$指低谷值,$PeakValue$指最大值