0%

常用数据/收益指标

  1. 无风险利率(Risk-Free Rate)
  • 无风险利率表示投资者在一定时间内能够期望从无任何风险的投资中获得的利率。现实中,通常使用伦敦同业拆放利率(London Inter bank Offered Rate,LIBOR)或美国国债利率作为无风险利率。因为一般认为金融机构倒闭的机会很低,财政有问题的银行会被禁止参与同业拆放,因此LIBOR是没有风险的。政府可以发行主权货币应付到期的债务,因此国债不可能违约。不过,此说法并不适用于欧元。欧元区国家无权发行货币,因此发生了欧洲主权债务危机
  1. Cumulative Return & 复合年均增长率(cagr:Compound Annual Growth Rate)
  • Cumulative Return:累计收益= (Ending Value/Beginning Value)
  • cagr计算方法为:总增长率百分比的n方根,n相等于有关时期内的年数。CAGR = (Ending Value/Beginning Value)^(1/# of years)-1
  1. 总杠杆(gross leverage)
  • 总杠杆率是敞口绝对值的总和除以净资产(Net asset value,简称NAV),不考虑多空抵消和对冲。1亿美元标普500股票的长仓和1亿美元的标普500期货空仓总杠杆率为200%。这一指标反映的是总体投资活动水平,是交易对手风险和流动性风险的关注对象之一
  1. 最大回撤(Max Drawdown)
  • 描述策略可能出现的最糟糕的情况,是指在某一段时期内产品净值从最高点开始回落到最低点的幅度。具体计算方法为:max(1 - 策略当日价值 / 当日之前产品最高净值)
  • 举例说明:2010年7月20日初始净值1;恰逢2010年10月美国推出QE2全球股市大涨,该基金净值增长到1.8;其后国内股市剧烈震荡,截止2011年4月25,该基金净值为0.98.假设投资者在最高峰时期认购,半年后在最低潮时期赎回,亏损45.5%。这就是最大回撤率给高位追买的投资者的指示意义
  1. 波动率(Volatility)
  • 是金融资产价格的波动程度,是对资产收益率不确定性的衡量,用于反映金融资产的风险水平。波动率越高,金融资产价格的波动越剧烈,资产收益率的不确定性就越强;波动率越低,金融资产价格的波动越平缓,资产收益率的确定性就越强。具体计算方法为:策略每日收益的年化标准差
  1. 胜率(win rate)
  • 胜率的定义是赢钱次数除以总买入次数
  • 举例说明:投入十次,七次盈利,三次亏损,胜率就是70%
  1. 胜负比(win loss ratio)
  • 胜负比也称为“成功率”。赢/亏比率是赢的交易总数与输的交易数之比。它不考虑赢或输了多少钱,只考虑输赢次数
  1. 盈亏比(risk return ratio)
  • 也叫赔率。指的是每次交易的盈利和亏损的比例,代表投资的风险收益比。投资系统的盈亏比=一段时间所有投资盈利单的盈利之和/相同时间段所有亏损单的亏损之和。投资的收益盈亏比是3是指平均来讲赚3块钱,要付出1块的止损。或者说冒一块钱的风险的一项投资获利了3块。长期来看,投资盈亏比,才是直接反映投资者综合水平的的一个量化指标
  • 长期稳定赚大钱的成功者的系统,都是高盈亏比的系统。只有高盈亏比系统,才能成为成功者,才能算稳定盈利
  • 举例说明:平均每次盈利30%,平均每次亏损10%,盈亏比就是3倍
  1. 阿尔法(alpha、α值)
  • 投资者获得与市场波动无关的回报,也叫超额收益。 比如投资者获得了15%的回报,其基准获得了10%的回报,那么Alpha或者价值增值的部分就是5%
  1. 贝塔(beta、β值)
  • 反映了策略对大盘变化的敏感性。例如一个策略的Beta为1.5,则大盘涨1%的时候,策略可能涨1.5%,反之亦然。具体计算方法为:策略每日收益与参考标准每日收益的协方差/参考标准每日收益的方差。
  • Beta coefficient = Covariance(Re, Rm)/Variance(Rm)
    其中:Re为单一股票的回报, Rm为整体市场的回报,Covariance为股票收益相对整体市场收益的变化情况, Variance为市场数据远离平均值的幅度
  1. 夏普比率(sharpe ratio)
  • 夏普比率描述了资产收益对投资者所承担风险的补偿程度。当以一个相同基准来比较两种资产之时,夏普比率较高的资产在相同风险下收益更好;或者说,如果收益相同的话,夏普比率较高的资产风险较低。但是,像其他任何数学模型一样,它依赖于数据的正确性
  • sharpe ratio = (Rp - Rf)/$\sigma$p
    其中Rp为投资组合的收益,Rf为无风险资产的收益,sigmap为投资组合超额收益的标准方差
  1. 信息比例(information Ratio)
  • 信息比率与夏普比率相似,主要区别在于夏普比率使用无风险收益(比如美国国债)作为基准,而信息比率使用风险指数作为基准(如标准普尔500指数)
  • 具体计算方法为:(策略累积收益 - 基准累积收益)/策略与基准每日收益差值的标准差。【意义】:信息比率数值越大,业绩表现越好。它以马克维茨的均异模型为基础,可以衡量基金的均异特性,表示单位主动风险所带来的超额收益
  1. 索提比例(sortino ratio)
  • 与夏普比率类似,所不同的是它区分了波动的好坏,因此在计算波动率时它所采用的不是标准差,而是下行标准差。这其中的隐含条件是投资组合的上涨(正回报率)符合投资人的需求,不应计入风险调整。具体计算方法为:(策略收益-无风险利率)/策略下行波动率。【适用范围】:因为索提诺比率使用的是下行偏差来考虑风险,那么所有的下行偏差局限性也会出现在索提诺比率中。也就是必须要有足够多的“不良”观测,才能计算一个有效的索提诺比率。sortino 比率数值越大,业绩表现越好。
  1. 卡玛比率(calmar ratio)
  • 卡玛比率=超额收益/最大回撤(风险)
  • 卡玛比率和卡玛比率的唯一不同之处就是分母不同,夏普比率使用标准差作为风险,卡玛比率使用最大回撤作为风险,本质上都是衡量基金的风险-回报关系
  1. Omega比率(omega ratio)
  • omega比率实际上考虑了收益的整个分布信息,因此包括了所有高阶矩的信息。在临界收益率等于均值的时候,Omega比率等于1。在相同的临界收益率下,对于不同的投资选择,Omega比率越大越好。适用范围:在收益率不服从正态分布的时候,Omega是非常好的替代。【意义】:Omega比率值越高,投资绩效也就越好
  1. Tail 比率(tail ratio)
  • 日收益分布的95分位值/5分位值。【使用范围】:均值回归策略,这类型策略的最大风险在于左侧的尾部风险。单次的大额回撤需要很长的时间才能够恢复。因此 tail_ratio 很适合用来刻画这类策略面临的风险。【意义】:tail 比率越大越好,可以理解成衡量最好情况与最坏情况下的收益表现的指标。例如:tail_ratio = 0.25,5分位的亏损是95分位收益的四倍。 这样的策略在发生大额亏损的情况下很难在短时间内恢复
  1. Common sense比率(common sense ratio)
  • (日收益分布的95分位值/5分位值) *(总盈利/总亏损)。【使用范围】:均值回归策略,趋势追踪策略。【意义】:大于1时,策略盈利;小于1时,策略亏损
  1. skew值(Skewness)
  • 亦称歪度,在概率论和统计学中衡量实数随机变量概率分布的不对称性。偏度的值可以为正,可以为负或者甚至是无法定义。在数量上,偏度为负(负偏态;左偏)就意味着在概率密度函数左侧的尾部比右侧的长,绝大多数的值(不一定包括中位数在内)位于平均值的右侧。偏度为正(正偏态;右偏)就意味着在概率密度函数右侧的尾部比左侧的长,绝大多数的值(不一定包括中位数)位于平均值的左侧。偏度为零就表示数值相对均匀地分布在平均值的两侧,但不一定意味着其为对称分布
  1. 峰度(kurtosis)
  • 大于0表示收益的分布与正态分布相比较为陡峭
  1. 决定系数(coefficient of determination, R2)
  • 累计对数收益对时间t的回归的R^2。【意义】:R平方值是趋势线拟合程度的指标,它的数值大小可以反映趋势线的估计值与对应的实际数据之间的拟合程度,拟合程度越高,趋势线的可靠性就越高。R平方值是取值范围在0~1之间的数值,也称为决定系数,最常用于评价回归模型优劣程度的指标

交流

我发文章的几个地方,欢迎大家在朋友圈等地方分享,多多交流。

参考

Markdown 是一种轻量级标记语言,它允许人们使用易读易写的纯文本格式编写文档。Markdown 语言在 2004 由约翰·格鲁伯(英语:John Gruber)创建。Markdown 编写的文档可以导出 HTML 、Word、图像、PDF、Epub 等多种格式的文档。Markdown 编写的文档后缀为 .md, .markdown。

markdown语法

  • 使用 # 号可表示 1-6 级标题,一级标题对应一个 # 号,二级标题对应两个 # 号,以此类推
  • *斜体文本*,**粗体文本**, ***粗斜体文本***
  • 一行中用三个以上的星号、减号、底线来建立一个分隔线,行内不能有其他东西
  • 文字要添加删除线,只需要在文字的两端加上两个波浪线 ~~即可
  • 下划线可以通过 HTML 的 <u></u> 标签来实现
  • 换行: 使用html <br>标签
  • 脚注是对文本的补充说明说明文本[^要注明的文本] 在文末加上[^要注明的文本]: markdown说明
  • 无序列表使用星号(*)、加号(+)或是减号(-)作为列表标记,这些标记后面要加一个空格,然后再填写内容; 有序列表使用数字并加上 . 号来表示
  • 使用反斜杠转义特殊字符,如*号,可以使用\*来解决
  • 区块引用是在段落开头使用 > 符号 ,然后后面紧跟一个空格符号。区块是可以嵌套的,一个 > 符号是最外层,两个 > 符号是第一层嵌套,以此类推。如果要在列表项目内放进区块,那么就需要在 > 前添加四个空格的缩进
  • 函数或片段的代码可以用反引号`把它包起来,可以用 ``` 包裹一段代码,并指定一种语言
  • 链接:[链接名称](链接地址) or <链接地址>
  • 图片:![alt 属性文本](图片地址) or ![alt 属性文本](图片地址 "可选标题"),如果想指定图片宽度高度,需要使用html的<img>标签,如<img src="http://www.xxx.com/xxx.jpg" width="50%">
  • 表格:使用 | 来分隔不同的单元格,使用 - 来分隔表头和其他行。-: 设置内容和标题栏居右对齐,:- 设置内容和标题栏居左对齐, :-: 设置内容和标题栏居中对齐
    1
    2
    3
    4
    |  表头   | 表头  |
    | ---- | ---- |
    | 单元格 | 单元格 |
    | 单元格 | 单元格 |,
  • 任务列表:- [ ] foo, - [x] bar
  • 公式: 要显示α,在”\alpha” 前后分别加上$,$\alpha$,上标 $a^b$,下标$a_b$,分数$\frac{3+8a}{5b+6}$, 求和 $\sum{3x^n}$ 。其他写法参考Mathematics in R Markdown

markdown编辑软件

  • marktext – 从官网下载,或者使用brew install --cask mark-text安装, 具体见marktext中文说明
  • visual code插件之Markdown All in One: 包括快捷键、公式等功能
  • visual code插件之Markdown Preview Enhanced: 除了实时预览外,还包括了其他许多有用的功能,包括mermaid, PlantUML, pandoc, PDF导出等功能
  • typora – 从1.0.0开始收费

markdown文件导出为html、doc、epub、pdf格式

  1. 安装pandoc,brew install pandoc
  2. 将markdown转成html: pandoc -f markdown -t html ./test.md
  3. 将markdown转成doc:pandoc -f markdown -t html ./test.md | pandoc -f html -t docx -o test.docx
  4. 将markdown转成PDF,需要安装latex。只要安装basicTex就可以了,大概100M+,安装完后运行:pandoc -f markdown_github test.md -o test.pdf --latex-engine=xelatex -V mainfont="SimSun" 这个表明使用的是GitHub风格markdown语法
  5. 将markdown转成epub: pandoc -f markdown ./test.md -o test.epub

交流

我发文章的几个地方,欢迎大家在朋友圈等地方分享,多多交流。

参考

当所有代码均保持一致的风格时,阅读别人的代码沟通成本最低,特别是在理解大型代码库时效率提升很大。python使用的比较多的代码规范包括2种,分别如下:

pep8是python编码规范的事实标准,google python编码规范做了更多的说明,可以作为pep8的补充。这也意味着python社区开源贡献者基本都遵守pep8,但不一定遵守google的python编码规范。

pep8的一些规则

参考pep8的目录,摘取一些重要的规则,具体使用的时候可以通过工具来检测。

1.1 代码布局

  • 每个缩进级别使用4个空格;连续行使用垂直对齐或者使用悬挂式缩进(额外的4个空格缩进)
  • 空格是首选的缩进方法
  • 每行最多79个字符
  • 二元运算符前后换行都允许,只要代码保持一致就行。对于新代码建议在二元运算符前进行换行
  • 空白行:使用两个空白行分隔顶层函数和类定义;类方法定义使用一个空行分隔;使用额外的空白行来分隔相关逻辑功能
  • 文件应该使用UTF-8编码, 且不应该有编码声明
  • 导入多个库函数应该分开依次导入;导入总是放在文件的顶部,在任何模块注释和文档字符串之后,在模块全局变量和常量之前;导入应按以下顺序进行:标准库导入、有关的第三方库进口、本地应用程序/库特定的导入,每组导入直接用空行分隔;避免通配符导入(import *)

1.2 字符串

  • 单引号字符串和双引号字符串相同,代码保持一致即可
  • 对于三引号字符串,常用三个双引号作文档字符串,文档字符串常用在模块的开端用以说明模块的基本功能,或紧跟函数定义的后面用以说明函数的基本功能

1.3 空格

  • 避免使用无关的空格,包括空格内、逗号分号前面等
  • 避免在行末使用空格
  • 二元运算符在两侧使用一个空格
  • 当用于指示关键字参数或默认参数值时,不要在=符号周围使用空格

1.4 使用尾部逗号(trailing commas)

  • 尾部逗号通常可选,除了用来说明是只有一个元素的元组tuple时
  • 当参数、值等列表期望经常扩展时,通常是每个值一行,再加上一个尾部逗号

1.5 注释

  • 代码更改时,相应的注释也要随之高优更改
  • 注释应该是完整的语句,第一个单词应该大写,除非它是特定标识符
  • 块注释:缩进到与该代码相同的级别。块注释的每一行都以#和一个空格开始
  • 行注释:对某一语句行进行注释,注释应该与语句至少隔开两个空格,用#和一个空格开始
  • 对于公共的modules, functions, classes, and methods,需要写文档字符串
  • 注释应该是完整的语句,第一个单词应该大写,除非它是特定标识符

1.6 命名约定

  • python命名规范有点混乱,很难完全保存一致。对于新模块和包,应该遵守这些新的约定,已存在的库内部一致性更重要
  • 命名应该反应其用途而非实现
  • 不要将字符’l’(小写字母l),’O’(大写字母o)或’I’(大写字母I)作为单个字符变量名称
  • 模块名应该使用简短、全小写的名字
  • 类的命名采用驼峰命名法,即每个单词的首字母大写
  • 函数名称应该是小写的,为了提高可读性,必须使用由下划线分隔的单词

google python编码规范的一些规则

相比pep8,google编码规范对怎么写代码的细节要求更多。比如怎么使用异常,文档字符串怎么写,Todo注释的使用等。参考规范目录摘取一些重要的规则说明

2.1 背景

  • 可以使用yapf自动格式化工具来格式化代码

2.2 python语言规则

  • 使用google的pylintrc配置文件来允许pylint
  • 只对包和模块使用import语句,不对单个类或函数使用import
  • 使用绝对路径导入每个模块
  • 可以使用异常但必须非常小心。不要使用assert语句来验证api的参数值;最小化try/except代码块
  • 避免全局变量

2.3 python风格规则

  • 不使用分号作为行尾,不使用分号将2个语句放到同一行
  • 不要在return语句或条件语句使用括号,除非使用括号来表示连续行或元组
  • 每行最长80个字符,每个缩进级别使用4个空格,空行、空格跟pep8基本一致
  • main文件使用#!/usr/bin/env python3 或#!/usr/bin/python3开头,绝大部分文件不需要使用#!开头
  • 每个文件应该包含一个版权声明
  • 使用 f-string,%操作符或者format函数来格式化字符串
  • 使用TODO注释说明临时的、短期的解决方案

2.4 保持一致性

python编码规范检查工具

光有规范不行,需要有配套的检查工具,方便团队开发代码时统一遵守

比如我用pycharm来编写Python代码时,如果有出现不符合PEP 8规范的话,pycharm就会提示我,如图所示。
pycharm提示

更多工具如下:

  • pycodestyle – pycodestyle是一款简单的代码检查工具,之前名字叫pep8,为了减少混淆改名成pycodestyle
  • pylint – pylint是代码检查工具,不能自动修改代码,有对于的配置文件,可以参考google开源的pylintrc配置文件
  • PyFlakes – 一个简单的python错误检查工具,通过解析源代码而不是import来检测不同的错误,通常只能检查出一些逻辑错误
  • flake8 – 针对PEPE8进行代码规范提示,是对PyFlakes,pycodestyle的封装
  • autopep8 – autopep8是一款将python代码自动排版为PEP8风格的工具,它使用 pycodestyle来决定哪部分代码需要格式化
  • yapf–yapf是google开源的一个用于格式化Python代码的工具,可以一键美化代码,支持两种规范:PEP8和Google Style

交流

我发文章的几个地方,欢迎大家在朋友圈等地方分享,多多交流。

欢迎访问我的站点: https://rchardzhu.github.io/

一、在github上创建一个代码库

在github上创建一个代码库,名字为:xxx.github.io, xxx为你的github账号名

如我的代码库地址为:https://github.com/rchardzhu/rchardzhu.github.io

参考:Quickstart for GitHub Pages - GitHub Docs

二、安装nodejs和hexo

由于github只支持静态网页,需要使用hexo。hexo是基于nodejs打造的一个博客框架,用于快速创建项目、页面、编译、部署 Hexo 博客。

  • 先安装nodejs
  • npm install hexo, 然后把hexo的目录放到PATH目录下。或者使用-g 安装到全局目录,但需要管理员权限

三、运行hexo

  1. 创建blog项目,$hexo init blog
    blog目录文件夹下就会出现 Hexo 的初始化文件,包括 themes、scaffolds、source 等文件夹

  2. 进入blog目录,生成静态文件:$ cd blog && hexo generate
    可以看到输出结果里面包含了 js、css、font 等内容,并发现它们都在项目根目录下的 public 文件夹下面了

  3. 本地预览查看: $hexo serve
    可以看到一个默认的hello world页面。

  4. 部署到github: $ hexo deploy
    编辑_config.yml文件,编辑deploy部分,参考如下图片

在新创建的blog目录下安装hexo-deployer-git,命令如下: $npm install hexo-deployer-git --save

更多信息参考:部署

如果出现如下错误:”ERROR Deployer not found: git”,表明hexo-deployer-git安装的目录不对,记住需要在新创建的目录下npm install。

四、写博客

  1. 新建文章 : $ hexo new "about"
    创建的文章会出现在 source/_posts 文件夹下,是 MarkDown 格式。

更多信息参考:写作

然后正常使用markdown格式去写文章就好了。

  1. 生成静态文件并更新到github上即可
    1
    2
    3
    $hexo clean
    $hexo generate
    $ hexo deploy

更多内容

awesome-quant-cn

awesome quant中文版,最近会更新比较频繁,欢迎关注github以及加入qq群~

金融数据

  • tushare – 分为tushare和tushare pro。tushare pro数据覆盖范围广,接口调用简单,响应快速,但获取次数较多时有积分限制。老版api有下线风险
  • akshare – 基于 Python 的财经数据接口库, 目的是实现对股票、期货、期权、基金、外汇、债券、指数、加密货币等金融产品的基本面数据、实时和历史行情数据、衍生数据从数据采集、数据清洗到数据落地的一套工具
  • yfinace – yahoo财经
  • jqdatasdk – 聚宽提供的本地量化金融数据服务
  • tqsdk – TqSdk免费版本提供全部的期货、商品/金融期权和上证50、沪深300和中证500的实时行情,TqSdk专业版可提供A股股票的实时和历史行情
  • efinance – 个人打造的用于获取股票、基金、期货数据的免费开源 Python 库
  • easyquotation – 快速获取新浪/腾讯的全市场行情

回测引擎

  • zipline – Quantopian开源的本地量化回测平台,可以和pyfolio和alphalen无缝衔接
  • rqalpha – Ricequant开源的本地量化回测平台,在 API 设计上和 Quantopian 保持一致,但License完全排除商业用途
  • backtrader – 纯python实现的在线交易和回测平台
  • zvt – 包含可扩展的数据recorder,api,因子计算,选股,回测,交易,以及统一的可视化,抽象度较高
  • bt – 基于ffn打造的python回测框架, 目标是充分利用python生态,不重复造轮子

风险分析

  • pyfolio – Quantopian开发的用于金融投资组合性能和风险分析的Python库
  • empyrical – Quantopian开源的常见金融风险指标
  • quantstats – 更深层次的python量化分析和风险指标

实盘交易

  • vnpy – 基于Python的开源量化交易系统开发框架
  • Futu OpenAPI – 功能主要有两部分:行情和交易。支持香港、美国、A 股市场的行情数据,涉及的品类包括股票、指数、期权、期货等;支持香港、美国、A 股、新加坡、日本 5 个市场的交易能力,涉及的品类包括股票、期权、期货等
  • tigeropen – 老虎开放平台提供的直接管理交易、查看帐户信息、查询行情变动及交易支持功能

策略研究平台

  • 聚宽 – 量化平台,提供多种数据方便投资研究;提供多种的策略评价指标与评价维度;支持多种策略的编写、回测、模拟、实盘
  • 米筐 – 米筐科技专注于为用户提供快速便捷、功能强大的量化交易和分析工具。用户可以使用基于浏览器(网上回测平台)或本地化(RQAlpha 等项目)的米筐科技产品,随时、随地开发自己的交易策略,验证自己的投资思路
  • 优矿 – 量化平台,使用通联书记,支持回测功能

量化书籍

  • 海龟交易法则 – 豆瓣评分8.5分。原版海龟首次揭密适用于任何市场的交易策略

其他资源

交流

欢迎加入qq群交流,qq群号:835894006