量化投资与算法交易(二)
· 当我尝试用计算机科学去做股票分析的时候,我知道我的路走窄了,但是真的很赚钱; ---西蒙斯(数学家)
术语与概念
本来是直接开讲回测系统(backtest),但是线下有朋友反应很多术语以及概念不是很清楚,这样直接开讲回测系统的搭建就比较尴尬,所以为了更快的让大家知道怎么搞量化投资与算法交易,我将费点口舌一一介绍;
金融交易术语
1,超额收益:我们一般叫alpha,就是你超出大盘的收益,举个demo:大盘1个月上涨17%,而你1个月上涨5%,表面上看上去你赚钱了,其实你是个憨憨,你亏了12%,也就是说,你的alpha是-12%。。。
2,最大回撤:用来描述买入产品后可能出现的最糟糕的情况。后面会慢慢细说这个指标,很多公司会把这个题目当做算法题,有兴趣的同学可以去写个代码算一下收益曲线的最大回撤;
3,夏普比率:1单位风险所获得的收益,这个比较普遍;
4,市价单:以市场价进行买入的一笔合约;
5,限价单:以低于市场价格挂在市场上的合约;
6,一手:就是100个股票;
7,前复权:复权就是对[股价]和[成交量]进行权息修复,按照股票的实际涨跌绘制股价[走势图],并把成交量调整为相同的[股本]口径。[股票除权]、[除息]之后,股价随之产生了变化,但实际成本并没有变化。如:原来20元的股票,十送十之后为10元,但实际还是相当于20元。从K线图上看这个价位看似很低,但很可能就是一个历史高位。(很多人看上面这句话都不知道在说啥,一脸懵逼,没事,我详细给你解释一下:假设原来你有20个锤子,每个锤子1块钱,突然你会魔法,又变出20个锤子,但是,锤子对于这个世界来说,所有的加起来就值20快,所以,相当于你一个锤子变成0.5块了,但是实际你的总价值还是20块)
8,后复权:复权后价格=复权前价格×(1+流通股份变动比例)+[现金红利]
9,K线图:就是统计学上的箱线图,没有任何区别,通过K线图可以知道当前时间过的最高价,最低价,成交量等信息;
金融宏观术语
牛市:市场总体偏好,就是大盘涨,持续时间长的那种时候的市场;
熊市:和上面的相反;
对冲:狭义的讲:在两个同样标的的不同市场,比如螺纹钢A期货和螺纹钢A股票,一个做多,一个做空,这样叫对冲,背后的数学物理意义如下
1,假设在未来,股票市场市涨的,那么常识来讲,期货市场应该涨的稍微缓慢一点;所以,如果我股票市场做多(低买高卖)赚到的钱应该大于我期货市场做空(借货物,用未来某个价格买入货物,归还货物,如果期货是涨的,相当于我本来的货物20元能买到,但是我愚蠢的花了未来的24元买了这些货物,亏了4元)上述的情况,可以任意组合,你应该回发现对冲对于降低风险的意义;
配股:股票复制,价格不变,一般需要消费者出钱;
高送转:股数增加,股价变小,总票面价值不变;
拆股:将股票股数复制N倍;
冲击成本:自己的交易行为对自己的损失;
做空:希望货物在未来便宜,所以现在借货物,卖掉,未来用市场价买入,再归还货物;
做多:希望低买高卖;
算法和策略
任何可以让金融衍生产品增值的哲学,在没有形成系统的数量化之前,都叫策略,在有高级数学表示的时候,我们称为算法;所以,我们接下来为了方便术语的统一,要明确一点,我们的标的是A股市场;
我们必须明确一点:所有算法和策略的时效性市非常短暂的,这个是常识,应该放弃我们在学自然科学的那套理论,在和人类打交道的时候,随机性已经大于传统算法的稳定性要求了;
所有算法和策略在历史上是可以有限程度的复现的,具体受限于历史复现不能影响历史价格,历史复现不能体现冲击成本;
算法交易属于量化投资的一个branch,算法交易并不是超高频交易;(很多人理解错误)
如何体现算法/策略的靠谱程度
引入回测系统的概念
刚才已经明确说了,算法/策略是可以有限的在历史上复现,那么这个复现需要科学的系统和数据的统一,这就是我们所说的回测系统:
回测系统一句话总结: 在回测当时日期的时候,不能出现任何当时日期之后的数据,而且,回测系统必须保持高复用性能; 在一个handle_bar的时间段内,我们需要一直调度我们的算法,让他产生在每一个bar的某个时刻,对某个股票的交情况;举个例子: 回测日期选择的是2018年1月1号至2020年1月1号,交易频率选择的是日级别开盘交易: 那么我们的所有数据就一定是日级别的,对应的逻辑应该调整为日级别的,一个回测系统应该包含:盘前处理,盘中处理,盘后处理;
华为FinanceGo内测版本回测系统的逻辑架构
1,数据层,结构化的所有关于股票的数据,热压缩,bcolz;
2,盘前,盘中,盘后的事件驱动框架,也就是注册机制;也要做到和事实数据的对接;
3,计算层,对portfolio的计算,包括对收益等指标的每日结算;
4,交易日志层,包括每一个bar的交易状态;
5,仿真层:交易规则,税务处理原则等
一个策略在回测的表现的意义
可以有限的表现当前策略在历史上的虚拟表现,一般要除以2,代表踢出产生的所有成本(沉没成本 冲击成本 滑点 等)
可以给基金管理人一个真实的导向,排错,升级策略,制作更完善的风控;
可以作为研究,给整个基金提供完整的收益导向;
策略举例子
我将解释一下一个标准策略的demo,用于解释整个回测系统要做的事情:
[回测系统将在第三节种慢慢讲]
from financego import * __config__ = {设置回测开始结束,回测标的,回测资金,回测频率等等} def before_bar(init): # 处理开盘前的逻辑,比如计算选哪些股票当做股票池 pass def handle_bar(init): # 处理信号的推理 比如在股票池中选什么股票,买/卖多少,持有多久,怎么做风控; pass def after_bar(init): # 处理盘后,用于第二天集合竞价的时候需要做的事情,或者选择第二天需要选择的股票池,在模拟交易中,意义比较大; pass def schedule_algo(period="2week"): # 每两周做一个事情,你自己选择需要处理啥; pass run(__config__) """我们上述带有bar的函数,在每一个回测频率都会执行一次"""
量化交易包含什么步骤(哲学武器)
1,量化选股
使用任何算法,去选出你的股票池(可能会交易的股票的列表,注意只是可能)
这个任何算法已经说的很透了;你甚至
2,量化择时
使用任何算法,用回测当前所在日期之前的所有数据,选择股票什么时候买,什么时候卖,卖/买多少手,等等;
3,风控
是附加规则,发生什么情况的时候,止损;止盈;
4,回测
使用1,2,3开始回测,形成必要的调试,记住一点:你的调试必须合乎市场逻辑,否则一定是过拟合,市场会教你做人,千万不要自欺欺人;
4,模拟盘
在回测达到满意的效果的时候,对虚拟账户,采用实时数据进行交易,并通过这个稳定运行几个周期,稍微调整算法和策略;
5,小盘实盘
在模拟盘稳定的情况下,可以开始用小额资金上实盘交易;并在这个关键点发现自己的策略是否能够合乎自己的市场逻辑;
6,正式发布产品
小盘实盘可以的情况下,经过专家的风险评估,正式发布产品;
几种算法哲学
1,模式识别,价格的表现由N种因素造成,但是归根到底都会反应在价格上,因此市场上出现了很多模式识别学派;实验证明这个是可以的;包括深度学习,机器学习;
2,根因识别,价格是有几种因素造成的,那么通过特征工程可以找到相对应的因子,所以这个一定是有效果的,因此多因子打分派别诞生了;【google搜索关键词,多因子打分即可获得一些启发】
3,价值挖掘,有人认为股票价格是由公司前景决定的,因此会从财务指标的角度,长期持有某些股票;
4,高频差价学派:只要我速度够快就可以找到价差,从而达到低买高卖;实验证明这个也是可以的;
后续我们有非常具体的例子逐一对上述算法做剖析;
- 点赞
- 收藏
- 关注作者
评论(0)