29期第十三周笔记

Week 13

本周学习主要内容包括Python爬虫、文本相关操作、金融量化交易、Pandas时间序列(基础)

量化交易

流程

量化交易的步骤和数据分析联系:

  1. 目标(确定目标):要交易的金融产品
  • 股票:A股、港股、美股(交易商:IB盈透,老虎证券)
  • 期货:国内商品期货、外盘期货、贵金属
  • 外汇
  • 期权:股票期权、商品期权、外汇期权
  • 其他:债券、CFD(差价合约)
  1. 数据(数据搜集和规整):搜集和规整金融产品相关数据
  • 实时行情:新浪、百度等各大门户都有股票期货数据接口可直接抓取
  • 历史数据:tushare
  • 在线量化平台:优矿、聚宽、掘金、米筐、Bigquant,真格、万矿、镭矿、量化云、点宽 等等
  1. 分析(策略研发):最重要
  • 通过各种途径方式获得灵感思路,想出交易策略
  • 编程复现策略,回测验证
  • 反复迭代,直到策略达到标准
  1. 应用(实盘交易)
  • 半自动量化:编程自动化分析,手动下单。可以降低难度和交易风险。中低频策略可用
  • 全自动量化:量化交易所有步骤都编程全自动执行
    • API接口调用:需交易商提供接口,这是开户机构允许的正规自动化交易方法
      • 一般都是Web API接口,通过JSON交互数据
      • 技术方案:Python:requests
      • 国内股票不开放接口,期货有CTP
    • 其他方式:下面的方法都是没API情况下的取巧方法,官方并不支持所以有风险。使用技术基本为Python爬虫和自动化测试技术
      • 桌面客户端模拟:要求有桌面客户端
        • 技术方案1(常用):软件:autoit,按键精灵
        • 技术方案2:Python:pyautogui。操纵鼠标、键盘、截图等,类似外挂
      • Web界面模拟:要求有Web交易页面,编程操纵交易商的Web交易页面完成自动交易
        • 技术方案:Python:selenium
      • 移动端模拟:要求有移动端APP
        • 技术方案:Python:Appium(移动端UI自动化测试)

策略性能

验证:

衡量交易策略的性能好坏有很多指标,最重要的是最大回撤和夏普比率,二者主要关注的都是风险,而不是收益

  • 年化收益率
  • 最大回撤
  • 夏普比率
普遍指标

一般业内规矩,一个交易账户如果:

本金最低5万美元(或50万人民币),
实盘交易3年(最低1年),
5%最大回撤,20%以上年化收益率(最少15%)

无论去什么地方,找什么机构(个人)要资金、合作、代客理财,都没有任何问题了。

实际指标达不到上述指标,也不意味着不能找钱,就是说服力差些
例如:本金只有三五万人民币,实盘只有几个月甚至只有回测记录,回撤大但收益大等等情况,具体情况具体看待

注意:国际上特别注重最大回撤,别的还可以商量,如果最大回撤太大了,基本账户就废了只能重写开始再来一个

年化收益率

年化收益:(平均收益率,累计收益图,时间段一般都是年)

  • 平均一年盈利百分之多少
  • 年化收益率看起来重要,但只是相对外行而言,因为它没有考虑策略的波动性风险(不看你挣多少,看你赔多少)
  • 大部分银行卖的基金3.x%年利率,大额存单4%年利率(百万级),大的信托8%年利率(千万级),这些投资标的风险都非常小,所以你的策略起码得超过他们,而且风险不能太大

年化收益率公式:

年化收益率 = ((策略最终价值 - 本金) / 本金) / 你交易的天数 * 正规交易天数 × 100%
或:
年化收益率 = (策略最终价值 / 本金 - 1) / 你交易的天数 * 正规交易天数 × 100%
注:正规交易天数一般为250天,365天除去周末和节假日等的大概天数,具体根据自己情况而定

最大回撤

最大回撤:(单位时间最大亏损)在特定时间段(通常是每年)内帐户净值曲线中最大的峰谷下降特征,通常以百分比形式引用

最大回撤公式:

最大回撤率 = (策略单位时间历史最高价值 - 策略单位时间最低价值) / 策略单位时间历史最高价值 * 100%
或:
最大回撤率 = max(1 - 策略当日价值 / 策略单位时间历史最高价值),注:每天的结果取最大值

夏普比率

夏普比率(Sharpe Ratio):收益风险比,是超额收益的均值和超额收益标准差的比

夏普比率公式:

(策略年化收益率 - 回测起始交易日的无风险利率) / 策略收益波动率
注:

策略收益波动率:用来测量资产的风险性,计算方式为:策略每日收益的年化标准差

无风险利率(超额收益):指的是无风险投资的回报率(本金的成本,默认3%),具体指的是某国固定利率国债收益率曲线上 10年期国债的年化到期收益率(或其他锚定对比的指标如标准普尔指数)。

中国 2.783:https://cn.investing.com/rates-bonds/china-10-year-bond-yield
美国 0.707:https://cn.investing.com/rates-bonds/u.s.-10-year-bond-yield
世界:https://cn.investing.com/rates-bonds/government-bond-spreads

无风险利率(超额收益)表示的意思有:
* 你资金的成本,某些情况下如果你的钱是自己的(不是借的没有利息)也不在乎机会成本,可以不减
* 你的年化收益率减去基本投资回报,剩下的才是你策略的超额回报(就像你用资金赚的钱得减去银行存钱的利息剩下才是你真赚的),必须减

  • 夏普比率解释:

    许多统计量被用来度量 调整风险收益,通常都是设法度量获得收益的成本(风险角度)。最典型的是 夏普比率

      - 你的投资每承受1单位风险,会产生多少单位超额回报
      	- 例如夏普值为2的策略指每承担1个单位的风险,将会获得2个单位的高于无风险利率的收益率
    

让策略的夏普率增高的方法:收益要高,收益的波动要低

注意:
用调整交易时间频率的方法也可以算出高夏普率,但实际上是错误的,不要这么做
如计算 策略每日收益的年化标准差 时,作为时间频度的除数变大(如由250天/次变为高频的一百万次),夏普比率就会变大。所以高频策略的高夏普率是错算的。

不同时间频度的夏普比率不能直接比较,一般只看年化夏普率(以天为时间频度,一般250天),
如比较月收益和年收益的夏普比率,月度标准差需要乘以根号12(因为标准差随着时间的平方根等比例增长),而且这种算法只在特定情况下才有效,避免使用

  • 当年化夏普率为 3 时,净值曲线(在对数坐标下)基本上是一条直线了;
  • 当年化夏普率为 2 时,它的净值曲线也仅在局部有一些小的波动;
  • 当年化夏普率为 1 时,它的净值曲线在全局范围内呈现出更大的波动;
    • 即便如此它也是个靠谱的赚钱策略

私募基金市场上:如果夏普率小于1,这基金产品基本卖不出去

如果夏普率大于2,很多人会选择自己干
(很多对冲基金的要求,回测年化夏普率要高于2,甚至要求大于3(极少))
因此,绝大多数还行的发行产品夏普率都是1-2之间

文本挖掘

  • 文本挖掘(Text Mining),又名文本分析、非格式化数据分析、非结构化数据分析
格式化数据:数据经过人为整理,提高了维度
  • 0维,标量:a = 123
  • 1维,向量:a = [1,2,3]
  • 2维, 矩阵:a = [[1,2,3], [4,5,6]]
  • 3维或以上,张量:a = [[[1,2,3],[4,5,6]],[[1,2,3],[4,5,6]]]
日常见到的格式化数据类型:
  • 0维:单值变量
  • 2维:Excel,CSV,MySQL数据表
  • 3维或以上:彩色图像,JSON,MongoDB,HTML
非格式化数据:未经过整理的低维(0维)原始数据
  • 除了少数格式化数据,绝大多数数据都是非格式化(一大坨文本数据)

从非结构化(非格式化)文本数据中抽取事先未知的、可理解的、最终可用的知识的过程,同时运用这些知识更好地组织信息

- 现实世界中,可获取的信息绝大多数是以非结构化0维文本形式存储的,如新闻、论文、书籍、电子邮件和Web网页
- 这些数据都存在不同程度的非结构化问题,维度有低有高
- 结构化程度低的例如一篇纯文本文章,结构化程度高的例如一个精心设计的WEB网页,内含格式化的标题、标签、摘要、作者等等

中文文本挖掘信息的精确度、正确率是世界性难题,为保证信息最大限度的精确可用,实际工作中应以人工设置信息格式为主,文本挖掘技术手段为辅:

- 挖掘再牛,不如用户手动打标签
- 分析再牛,不如用户手动评分
文本分析常用库:
  • 爬虫-requests,lxml,JSON
  • 中文分词-Jieba
  • 词云-WordCloud
  • 中文情感分析-SnowNLP
  • 语义结构分析-Gensim

Python爬虫入门

  1. 抓取:爬虫抓取网页图片和文本(绕过反扒措施)
  2. 解析:解析抓取数据
  3. 保存:保存和载入抓取数据

使用Python完成:

  • 抓取:requests库,发送网络请求,返回响应数据
  • 解析:lxml库,解析HTML文档标签,返回指定内容
  • 保存:JSON库,(Python自带)转换Python列表或字典数据为字符串,保存至JSON文本,或读取JSON文本转为Python列表或字典数据

抓取:爬虫抓取网页图片和文本

  • 二进制文件
  • 文本文件

爬虫是实用程序自动化发送请求/获取响应的程序,主要用来抓取网页数据

抓取网页图片等二进制资源

img = 'https://www.baidu.com/img/PCtm_d9c8750bed0b3c7d089fa7d55720d6cf.png'

requests.get(img) #返回http状态码

r = requests.get(img).content #返回抓取数据 - 二进制
r #注释输出,自己解除注释

#二进制数据保存为图片(二进制)文件
with open('baidu/baidu.png','wb') as f:
    f.write(r)

抓取网页文本数据

抓取网页源代码


                
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值