量化投资与算法交易(二)

举报
井冈山李德胜 发表于 2020/06/08 14:17:29 2020/06/08
【摘要】 量化投资第二章,将直接开始阐述量化投资的逻辑,回测框架以及很多金融术语;

· 当我尝试用计算机科学去做股票分析的时候,我知道我的路走窄了,但是真的很赚钱; ---西蒙斯(数学家)





术语与概念

本来是直接开讲回测系统(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,高频差价学派:只要我速度够快就可以找到价差,从而达到低买高卖;实验证明这个也是可以的;

后续我们有非常具体的例子逐一对上述算法做剖析;




【版权声明】本文为华为云社区用户原创内容,未经允许不得转载,如需转载请自行联系原作者进行授权。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。