量化交易
投资笔记
11
帖子
1
发布者
30
浏览
-
L1算法交易基础和金融市场
算法交易介绍
什么是算法交易
- 算法交易也被叫做机器人交易,量化交易或者程序交易
- 使用数学模型和计算机算法/程序来生成交易信号,自动化交易流程
- 目标: 最大化利润,控制执行成本,对冲和管理投资风险
市场趋势
- 增长速度: 亚洲>北美欧洲>第三世界
- 成熟度/规模: 北美欧洲>亚洲>第三世界
- 交易量占比: 60%美国权益类市场,40%欧洲权益类市场,25%外汇交易,20%美国期权交易
算法交易分类
智能交易 智能投顾 自动 自动化 半自动化 输出 交易信号执行 资产建议,市场概览,风险预警 效果对比
人工交易 智能投顾 智能交易 工作时间 9*5 9*5 24*7 执行速度 慢 中等 快速 数据输入 限制 几乎不限制 几乎不限制 交易频率 低频 中低频 低频-高频 品种 工作压力限制品种范围 中等 多 精准度/纪律 方差大,可能输惨 一致性好 很好 自定义 高度自定义 中等自定义 低 用户控制 全部 部分 最小 风险管理 主观 算法 算法 实现一个算法交易系统
算法是载体,数据是燃料!
基础设置搭建
金融数据
• 数据收集——数据采集和数据清洗耗时耗力
• 数据存储——大量非结构化数据(数值、文本、图像、音频、视频)
• 数据管理——由于文件和数据格式不一致,难以通过传统数据库进行保护和管理
• 数据处理——可行性和效率
其他基础设施- 速度: 实时数据传输(获取数据+订单发送低延迟)
- 安全: 网络安全,数据库安全,量化脚本保密
交易的类别
交易原理分类:
基础交易 技术交易 算法交易 选股,ratio(pe,pb,roe)分析,板块分析,公司治理和高管文化 K线形态,趋势分析 基于规则,计量经济学预测,统计套利,自然语言处理/情感分析,机器学习 交易时长分类:
- 长线几个月到几年,中线几个星期到几个月,短线几天到几个星期
- 日内:几秒到几小时,高频: 秒级
交易的原理:
- 价格越高,愿意卖出的人就越多,供给变多
- 价格越低,愿意买入的人就越多,需求变多
- 成交价: 供给和需求平衡的某个点(如果供给更多价格就会下降,需求更多价格就会上升直到达到某种平衡)
交易术语
• Long and short position
• Short-selling
• Order book(Bid price, ask price)
• Market spread
• Order types
• Slippage
• Mark-to-market
• Trading system多头和空头头寸(Long and short position)
- 多头头寸(Long Position): 买入一类资产(认为会上涨),低价买入高价卖出赚取利润
- 空头头寸(Short Position): 卖出一类资产(认为价格会下跌),高价卖出低价买入赚取利润
- 借入股票(原持有人继续承担价格风险,额外承担信用风险;你支付信用溢价)
- 卖出借入的股票,在当前的市场价格
- 买回股票,在新的市场价格
- 交还股票: 把股票还给券商
- 做空的风险:
- 无限损失风险: 如果资产价格突然飙升
- 追加保证金: 如果交易结果开始大笔浮亏,需要追加保证金
- 监管风险: 做空面临监管限制
订单簿(Order Book)
订单簿是一个实时更新的某个特定资产的买卖订单列表,按照价格排序
- Ask Book: 卖方订单列表/队列(价格更高)
- Bid Book: 买方订单列表/队列(价格更低)
- Price: 投资者愿意交易的价格点
- Size: 交易者愿意买入或者卖出的股票/合约手数
展示Order Book的三种形式
- 订单簿(Order Ledger): 类似券商软件那种(买5-买1,卖1-卖5). Order Ledger越长,表明市场流动性越好(market depth)
- Top of the Book: 分为bid-book和ask-book分别在top位置记录最优的成交报价(把订单簿中的bid和ask拆开分别看,bid降序ask升序)
- Cumulative Order Book: 从top of the book到当前价位累积的所有size大小,画图显示
Bid Price&Ask Price
- Bid Price是买方愿意支付的最高价格,Bid Size是买方愿意在Bid Price(最高价格)上面购买多少数量
- Ask Price是卖方愿意卖出的最低价格,Ask Size是卖方愿意在Ask Price(最低价格)上面卖出多少数量
市场价差(Market Spread)
- 买入价和卖出价之间的差额称为买卖价差(bid-ask spread)
- 买卖价差是衡量资产或证券流动性的关键指标。
- 价差越小,表明市场流动性越好;价差越大,表明市场流动性越差。
- 百分比价差(Percentage Spread): bid-ask spread 除以 mid(ask-bid除以2)
订单类型(Order Types)
- 市价单(Market Order):
- 市价单是指以当前市场最优价格买入或卖出。
- 也就是说,使用市价单开立买入/卖出仓位时,系统会尝试以最优卖价/买价执行交易。
- 市价单通常可以确保成交,但并不保证成交价格。如果您希望立即成交,使用市价单
- 适合单边行情或者波动比较小的时候,流动性比较差或者顺趋势的时候(比如上涨趋势大家都想买进去)
- 限价单(Limit Order)
- 限价单是指设定最高支付价格或最低接收价格(“限价”)的买入或卖出条件。
- 如果订单成交,成交价格将不超过指定的限价。但是,限价单并不能保证一定成交。
- 当您认为可以以低于当前市场报价的价格买入(或以高于当前市场报价的价格卖出)时,限价单可能是一个合适的选择。
- 适合日内波动比较大且没有方向性的时候,适合逆向交易(比如上涨行情用限价单卖出很好卖)
- 止损单(Stop Order):
- 止损单是指当股价达到或突破指定价格(“止损价”)时,以市价买入或卖出。
- 如果股价达到止损价,止损单将变为市价单,并以下一个可用的市价成交。如果股价未达到止损价,止损单将不会执行。
- 在以下情况下,止损单可能适用:
- 您希望在股价突破某个水平时买入,并且相信股价将继续上涨趋势。
- 您持有的股票价格已经大幅上涨,您希望在股价开始下跌时锁定收益。
- 滑点(Slippage):
- 滑点是指预期成交价格与实际成交价格之间的差额。
- 滑点通常发生在:
- 市场波动较大且使用市价单时;
- 市场深度不足以维持预期成交价格时,执行大额订单时。
计算盈亏PnL(profit and loss)
- 浮动盈亏(unrealized PnL):
- 做多PnL = 数量*(price_bid-price_entry)
- 做空PnL = -数量*(price_ask-price_entry)
- 注意: 股票软件上显示的股价都是bid_price,计算净资产用的也是bid_price
- 单笔盈亏(realized PnL): side*数量*(price_exit-price_entry)
订单管理系统(OMS)
- 基于订单的系统(Order Based System)
- 交易以整单方式管理
- 不支持部分平仓
- MetaTrader、TradingView、MetaStock 等
- 基于仓位的系统(Position Based System)
- 交易彼此独立,互不关联(允许部分平仓)
- 大多数银行(例如汇丰银行、中国银行、中国银行等)还有Interactive Brokers、币安等
全部额外费用
印花税+券商佣金+买卖价差+滑点+资本利得税+分红税(预期在卖1买入,但是资金太多推升价格在卖2-卖3买入了,或者在产生买入信号后价格突然飙升超过卖1)
-
L2数据抓取和数据库管理
数据抓取(Data Scraping)
什么是数据/网络抓取?
- 从网站自动提取数据的过程
- 算法交易中的常见应用场景:
- 实时数据收集(例如经济指标、股票价格等)
- 市场情绪分析(例如新闻、论坛和博客、社交媒体)
- 公司分析(例如产品公告、年度报告、董事变动等)
- 另类数据(例如天气、网络流量等)
基础网页结构
- HTML+CSS+JS
- HTML
- 用途:定义网页的结构和内容。
- 元素:使用标签创建标题、段落、链接、图像、表格等元素。
- 标记语言:不是编程语言;它是一种用于组织内容的标记语言。
- CSS
- 用途:控制网页的视觉呈现和布局
- 样式:定义 HTML 元素的样式,例如颜色、字体、间距和定位。
- 层叠规则:可以对一个元素应用多个样式,并设置样式优先级规则。
- JavaScript
- 用途:为网页添加交互性和动态行为。
- 编程语言:一种脚本语言,可在浏览器(客户端)和/或服务器端(使用 Node.js 进行服务器端开发)运行。
- 操作:可以操作 HTML 和 CSS 来动态更改内容和样式。
- 事件处理:响应用户操作,例如点击、表单提交和键盘输入。
BeautifulSoup库使用
soup = BeautifulSoup(text, 'html.parser') print(soup.prettify()) #以美观的格式打印网站元素 print(soup.get_text()) #提取网站中的所有文本 data=soup.find('p');print(data.text) #提取第一个<p>元素 data=soup.find_all('p');for p in data: print(p.text) #提取所有<p>元素 #筛选元素 table = soup.find('table', id="constituents") #筛选特定id的元素进行提取 table = soup.find_all('table', class_='wikitable sortable') #CSS搜索 table = soup.find_all("table", attrs={"class": "wikitable sortable"}) #tag属性搜索 #CSS选择器 table = soup.select('table') table = soup.select('table[class="wikitable sortable"]') table = soup.select('.wikitable') table = soup.select('.wikitable.sortable')XPATH
- XPath 是一种用于在 XML 文档中导航元素和属性的查询语言。
- 主要特性:
- 节点选择:XPath 允许您在 XML 文档中选择节点或元素。例如,按标签名、属性或位置选择元素。
- 路径表达式:提供了一种使用路径表达式在 XML 文档中导航元素和属性的方法。
- 语法:使用简洁的非 XML 语法,使其更易于编写和阅读。
- 常用 XPath 语法
- 基本路径:/root/child: 选择根元素的子元素。
- 相对路径://child: 选择文档中的所有子元素。
- 属性://element[@attribute='value']: 选择具有特定属性值的元素。
- 函数://element[position()=1]: 选择第一个元素。//li[2]选择第二个li元素
Selenium
- Selenium 是一款 Web 自动化工具,可用于模拟用户交互、执行网页抓取以及对Web应用程序运行自动化测试。
- selenium模式:
- 无头模式:在后台打开浏览器(headless)
- 添加模拟模式:模拟在不同设备上打开浏览器(add_emulation)
数据抓取的局限性
- 数据质量:网站数据可能不完整且未及时更新
- 资源密集型:
- 抓取大量数据时会消耗大量带宽和存储空间
- 完全加载网站内容以提取数据需要耗费大量时间
- 技术挑战:
- 网站结构可能频繁更改
- 许多网站可能实施反机器人措施(例如 IP 封锁和速率限制)
数据库管理
为什么使用数据库?
- 高效存储和检索大量历史数据,用于策略回测
- 将数据保存在本地磁盘以供未来分析,无需重复进行网络抓取
- 数据完整性和一致性
- 高级查询功能
数据库设计
复权数据存储
-
L3搭建回测框架和规则交易系统
回测
什么是回测?
- 定义:使用历史数据模拟交易策略
- 目的:在实盘交易前验证交易策略的有效性
- 主要步骤: 1. 数据收集 2. 数据清洗 3. 策略实施 4. 评估指标 5. 可视化与评估
- 量化策略生命周期: 1. 策略研发 2. 回测 3. 模拟交易 4. 实盘交易 5. 监控实盘交易
为什么要进行数据清洗?
- 清除数据录入错误或数据提供商的系统漏洞
- 提高数据质量和一致性
- 更便于数据管理
- 生成更准确的统计模型
- 有助于做出更明智的交易决策
- 潜在的数据问题:
- 缺失值:
- 找到缺失值
- 寻找其他数据源/根据相邻值(平均,中位数等)填补缺失值/删除行
- 重复记录:
- 定义主键并找到主键出现的次数,若大于1说明重复
- 如果重复记录相同,保留其中一个
- 如果不同: 寻找其他数据源确定哪个正确/取平均值/删除所有冲突数据行
- 数据包含错误的逻辑: 寻找其他数据源/删除行/对数据进行处理(比如用HIGH和LOW为上下限对CLOSE和OPEN处理)
- 缺失值:
蜡烛线(K线)形态
MA移动平均线
定义&分类
- 定义:移动平均线 (MA) 是一种统计计算方法,通过对完整数据集的不同子集进行一系列平均来分析数据点。
- 用途:平滑短期波动,突出数据中的长期趋势。
- 类型:
- 简单移动平均线 (SMA): 平均值 eg: 10, 12, 14, 16, 18 -> MA(5)=14
- 指数移动平均线 (EMA): 近期的数值给予更大的权重
MA金叉策略
- 定义
- 快速移动平均线:7日移动平均线
- 慢速移动平均线:14日移动平均线
- 基于滑动窗口方法,收集前14个收盘价
- 计算快速移动平均线和慢速移动平均线的值
- 开仓条件:
- 黄金交叉:买入,如果快速移动平均线(t-1) < 慢速移动平均线(t-1) 且快速移动平均线(t) > 慢速移动平均线(t)
- 死亡交叉:卖出,如果快速移动平均线(t-1) > 慢速移动平均线(t-1) 且快速移动平均线(t) < 慢速移动平均线(t)
- 平仓条件:
- 如果前一次买入,现在出现死亡交叉
- 如果前一次卖出,现在出现黄金交叉
- 重复上述过程,直到回测期结束
- 费用: 考虑bid-ask spread+印花税+佣金+滑点(不好计算)
回测中常见的陷阱
过拟合(Overfitting)
- 定义:策略过于依赖历史数据,导致其在新数据上的表现不佳。
- 症状:过去表现异常出色,但缺乏合理的解释。
- 避免方法:使用样本外测试和交叉验证。
未来函数(Look-ahead bias)
- 定义:使用在交易决策时无法获得的未来数据。
- 症状:利润过高,不切实际。
- 避免方法:确保所有用于决策的数据在模拟的时间点之前均可获得。
幸存者偏差(Survivorship Bias)
- 定义:仅考虑存续至期末的资产,忽略已失败的资产。
- 症状:高估策略绩效。
- 规避方法:将退市或破产公司纳入数据集。
数据窥探偏差(Data-Snooping Bias)
- 定义:在同一数据集上反复测试多种策略,直到找到一种有效的策略为止,而这可能只是偶然现象。
- 症状:误报率高。
- 避免方法:在不同的数据集或时间段内验证策略。
忽略假设(Ignore Assumptions)
- 示例:
- 未考虑佣金、滑点、融资成本和税费等成本
- 某些股票的卖空在真实市场中无法进行
- 极高的杠杆在实践中不可行
- 信号计算和执行之间可能存在延迟,例如在市场休市期间,使用复杂的交易模型
- 避免方法:
- 在回测中纳入对交易成本的合理估计。
- 进行一些市场调研,以检验您的假设是否能在真实市场中实施。
最佳实践
- 稳健验证:采用样本外测试和前瞻性分析。
- 合理的假设:纳入交易成本和市场影响。
- 持续监控:定期更新和审查策略。
-
L4不同市场的时间序列统计
市场分类
金融市场通常可以分为以下几类:
- 趋势型(动量型)
- 均值回归型
- 随机游走型
趋势(动量)交易
- 买入呈上升趋势的证券,并在其价格似乎达到峰值时卖出
- 做空呈下降趋势的证券,并在其价格似乎触底时平仓。
均值回归
- 均值回归表明,资产价格和历史收益率最终会回归到其长期均值或平均水平。
- 统计基础:基于极端价格波动是暂时的,最终会回归均值这一理念。
- 趋势和均值回归可以一起发生(例如2015年牛市先趋势做多,后极端高估做空)。
随机漫步
- 这意味着价格变动是随机的,不遵循任何模式或趋势。
- 有效市场假说(Efficient Market Hypothesis):该假说认为所有已知信息都已反映在股票价格中,因此不可能持续获得高于市场平均收益的回报。
- 独立性:每次价格变动都独立于之前的价格变动。
- 不可预测性:未来的价格走势无法根据过去的价格走势进行预测。
- 如果市场是随机的,你能想到一种可以盈利的交易策略吗?(不能)
时间序列分析
时间序列分析简介
- 时间序列分析是指分析在特定时间间隔内收集或记录的数据点。
- 它旨在识别数据中的模式、趋势和其他特征。
- 例如:股票价格随时间的变化、月度失业率、每日气温读数、季度GDP增长率
简单线性回归模型
- 线性回归是一种统计方法,用于模拟因变量和自变量之间的线性关系。
- 关键概念:
- 因变量 (Y):我们试图预测或解释的变量。
- 自变量 (X):我们用于进行预测的变量。
- 线性方程:
Y=b0+b1X+e(b0:intercept截距,b1:slope斜率,e误差值) - 为什么使用线性回归?
- 简单易懂:易于理解和实现。
- 可解释性强:系数能够揭示变量之间的关系。
- 高效:对于中小型数据集,计算效率高。
- 基础性强:是构建更复杂模型的基础。

模型假设:
- 线性关系:因变量与自变量之间存在线性关系。这种线性关系可以通过散点图直观地检查,散点图应显示直线关系而非曲线关系。
- 多元正态性:假设残差服从正态分布。可以通过检查残差的直方图或Q-Q图,或通过诸如Kolmogorov-Smirnov检验等统计检验来评估此假设。
- 独立性:每个观测值与其他观测值相互独立。
- 无多重共线性:自变量{X1, X2, …}之间不存在高度相关性。这可以通过相关矩阵进行检查。
- 同方差性:误差项(残差)的方差在所有自变量水平上应保持一致。残差与预测值的散点图不应显示任何可辨别的模式,例如锥形分布,这表明存在异方差性

线性回归交易策略
- 收集前 N 个观测值并拟合线性回归模型
- 策略 1:
- 将线性回归模型的预测值作为公允/参考市场价格。
- 如果当前市场价格远低于公允价格,则建立多头头寸。
- 如果当前市场价格远高于公允价格,则建立空头头寸。
- 策略 2:
- 使用线性回归模型预测未来价格。
- 如果预测的未来价格高于当前价格,则建立多头头寸。
- 如果预测的未来价格低于当前价格,则建立空头头寸。
多元线性回归模型
它是简单线性回归模型的扩展。
- 因变量 (Y):我们试图预测的结果(例如,股票价格)。
- 自变量 (𝑿𝟏, 𝑿𝟐, … , 𝑿𝒑):影响Y的预测因子或特征(例如,经济指标、技术指标)。
- 公式:
- Y=b0+b1X1+b2X2+...+bpXp+e
- Y=Xb(矩阵)
- e = Y-Y预测 = Y-Xb
选择因子的指导原则(确定哪些因子作为变量)
- 确保因子与您想要预测的结果之间存在逻辑联系。
- 使用统计检验(例如 p 值)评估每个因子的显著性。
- 避免多重共线性: 如果某些自变量 Xi, Xj 高度相关,则X将不是满秩的,因此XTX不可逆。
- 数据可用性
- 许多经济因子(例如 GDP)每季度/每年才发布。
- 数据发布存在时间滞后。
- 可能不适用于短期交易。
- 简洁性和可解释性
- 选择数量适中的因子以避免过拟合。
- 优先选择易于解释的因子以获得更深入的洞察。
- 经验法则:估计参数至少需要 30 个观测值。
- 必要时进行数据转换
- Y 和 X 之间不存在线性关系。该系数在假设检验中可能不显著。
- 然而,经过对数变换后,Y 和 log(X) 可以呈现出很强的线性关系。
-
L5统计套利和配对交易
统计套利(Statistical arbitrage)
简介
- 统计套利基于历史数据发现统计上的定价偏差.是一种均值回归策略,根据资产价格的趋同来获利
- 涉及配对交易,篮子交易和市场中性策略
- 由于采用市场中性策略,可以降低投资组合的整体市场风险敞口
配对交易
- 配对交易简介
- 一种市场中性交易策略,涉及交易两种相关性较高的资产。
- 利用两种资产之间的相对价格波动。
- 例如:如果两种资产的价格差偏离历史均值,则买入一只股票并同时卖出另一只股票
- 配对失效潜在原因
- 基本面变化:
- 公司业绩:可口可乐 (KO) 或百事可乐 (PEP) 的运营业绩、财务状况或战略方向的变化都可能导致其股价出现分歧。
- 市场定位:如果一家公司获得更多市场份额或对其产品战略进行重大调整(例如,专注于健康产品),则可能会影响其相对于另一家公司的股价。
- 经济因素:经济衰退或通货膨胀会影响消费者的支出模式,根据可口可乐和百事可乐的产品供应和市场战略,对它们的影响可能有所不同。
- 投资者行为:投资者对任何一家公司的情绪变化(例如,由于负面新闻、盈利报告或分析师下调评级)都可能导致价格走势与历史模式不符。
- 基本面变化:
配对交易实施步骤
- 确定一对相关性较高的资产。
- 检验资产间的协整关系。
- 计算价差,并确定历史均值和标准差。
- 当价差偏离均值达到一定阈值时,生成交易信号。
- 执行交易:做多被低估的资产,做空被高估的资产。
- 当价差回归均值时,平仓。
关键组成部分
- 协整:一种统计特性,表明两个时间序列之间存在长期均衡关系。
- 价差:两种交易资产之间的价格差异。
- 均值回归:价差将回归其历史平均值的假设。
协整Cointegration
- 大多数金融时间序列既不平稳也不均值回归。(例如薯条和番茄酱价格一直上涨)
- 然而,我们可以构建一个由多个价格序列组成的投资组合,使得该投资组合的市场价值(或价格)序列是平稳的。(资产组合:做多1薯条做空0.1番茄酱,价格变动几乎为0)
- 如果我们能够找到几个非平稳价格序列的平稳线性组合,那么这些价格序列就被称为协整的。
- 定义和公式
- 如果存在常数 β,使得 𝑍𝑡 = 𝑋𝑡 − β𝑌𝑡 平稳,则称两个时间序列 𝑋𝑡 和 𝑌𝑡 是协整的。
- 其中 β 表示协整系数(或者对冲基金的对冲比率)
- 协整增广迪基-富勒检验 (CADF):
- 首先,通过对两个价格序列进行线性回归,确定最优对冲比率。
- 使用该对冲比率构建投资组合。
- 然后对该投资组合价格序列 {𝑍𝑡 = 𝑋𝑡 − β𝑌𝑡} 进行 ADF 检验。
- 如果拒绝原假设,则可以得出结论:𝑍𝑡 是平稳的,因此 {𝑌, 𝑋} 是协整的。
- 多变量协整增广迪基-富勒检验 (CADF):
- 线性回归计算出b0,b1,...bk,使用该对冲比率构建投资组合。
- 然后对该投资组合价格序列 {𝑍𝑡 = 𝑌𝑡 − 𝛽0 − 𝛽1𝑋1𝑡 − ⋯ − 𝛽𝑘𝑋𝑘𝑡} 进行 ADF 检验。
- 如果没有被拒绝,可以得出结论𝑍𝑡稳定,所以{𝑌, 𝑋1, … , 𝑋𝑘}是协整的
- 缺点:
- 如果没有通过ADF检验,只能说明{𝑌, 𝑋1, … , 𝑋𝑘}不协整,但是不能说明{Y,X1,X2}不协整
- 它仅假设股票之间存在多元线性关系,而忽略了其他有用的变量(例如经济因素、技术指标等)。
-
L6资本和风险管理
风险管理
什么是风险?
- 风险简单来说就是不确定性(uncertainty)。
- 在金融领域,风险指的是投资回报的不确定性。
- 上行风险:盈利的可能性。
- 下行风险:亏损的可能性。
- 风险管理周期(Risk Management Cycle)
- 风险识别
- 风险评估/测量
- 风险应对
- 风险监控
风险识别(Risk Identification)
- 市场风险: 由于市场价格波动而导致的潜在财务损失,它会影响股票、债券、货币和大宗商品等资产。例如:假设您持有某科技公司的股票。如果股市出现下跌,即使该公司业绩良好,您的股票价值也可能下降,这是由于整体市场情绪所致。这种风险存在于所有投资中,并可能受到经济变化、政治事件和自然灾害等因素的影响。
- 利率风险:由于利率波动而导致投资损失的可能性。它主要影响债券和其他固定收益证券的价值。当利率上升时,债券价格通常会下跌,反之亦然。例如:假设您持有一张固定利率为 3% 的债券。如果市场利率上升到 4%,新发行的债券将提供更高的收益,从而使您的债券吸引力下降。因此,您的债券市场价值会降低。对于管理对利率变化敏感的投资组合的投资者和金融机构而言,这种风险至关重要。
- 信用风险:借款人未能偿还贷款或履行合同义务而导致损失的可能性。它会影响贷款人和债券或贷款投资者。例如:如果银行向一家企业贷款,而该企业违约,银行就面临信用风险。由于未偿还的贷款金额,这种风险可能导致银行遭受财务损失。信用风险是贷款和投资中的关键考虑因素,它会影响利率和贷款条款。
- 流动性风险:实体可能无法在不造成重大价值损失的情况下快速将资产变现的风险。它会影响个人、企业和金融机构。例如:假设一家公司拥有大量房地产。如果它突然需要现金来支付费用,快速出售这些房产可能会迫使它接受较低的价格,从而导致财务损失。流动性风险对于管理现金流和确保按时履行债务至关重要。
- 操作风险
- 法律风险
- 声誉风险
- 战略风险
风险评估(Risk Measurement)-波动性分析
历史估计:使用历史上过去一段时间(例如过去250个交易日)价格变动的标准差来衡量未来的波动率。缺点:假设未来和历史一样,且对所有历史数据一视同仁
- 由于 n 是固定的,并且使用了最近 n 个观测值,因此我们也称之为移动平均 (MA)估计
- n 的常用值:30 天、60 天、120 天等。
- 如果认为长期波动率是恒定的,则应使用较大的 n 值。能够消除短期噪声,扩大样本数量更加准确
- 如果想要更多地反映当前波动率,则应考虑使用较小的 n 值。
- 缺点:极端观测值可能会在较长时间内影响估计值(幽灵特征)。较小的 n 值会产生更明显的幽灵特征,但持续时间较短。
-
L7投资组合优化和表现衡量
投资组合
- 市场上有许多不同类型的资产(例如股票、商品、外汇、债券等)。我们可以选择各种资产进行投资,构建投资组合。
- 投资组合优化是指选择最佳的资产配置方案,以在最大化收益的同时最小化风险。
- 投资主要包括:资产选择+资产配置
- 在本节中,我们将讨论马科维茨投资组合理论(或现代投资组合理论),该理论于1990年荣获诺贝尔经济学奖。
投资组合期望回报和风险计算
统计公式
𝐸(𝑎 + 𝑋) = 𝑎 + 𝐸(𝑋) 𝐸(𝑎 × 𝑋) = 𝑎 × 𝐸(𝑋) 𝐸(𝑋 + 𝑌) = 𝐸(𝑋) + 𝐸(𝑌) 𝑉𝑎𝑟(𝑎 + 𝑋) = 𝑉𝑎𝑟(𝑋) 𝑉𝑎𝑟(𝑎 × 𝑋) = 𝑎^2 × 𝑉𝑎𝑟(𝑋) 𝑉𝑎𝑟(𝑋 + 𝑌) = 𝑉𝑎𝑟(𝑋) + 𝑉𝑎𝑟(𝑌) + 2 × 𝐶𝑜𝑣(𝑋, 𝑌) 𝐶𝑜𝑣(𝑎, 𝑋) = 0 𝐶𝑜𝑣(𝑎 × 𝑋, 𝑏 × 𝑌) = 𝑎 × 𝑏 × 𝐶𝑜𝑣(𝑋, 𝑌)假设投资组合有n项资产
- 投资组合期望回报: 每种资产求和:仓位*期望回报
- 投资组合方差: 仓位^2*单一资产方差^2+任意两种资产的协方差*资产1仓位*资产2仓位

- 计算方法2: 直接模拟投资组合收益回测,然后判断预期收益率和方差
-
L9
策略优化
什么是策略优化(Strategy Optimization)
- 策略优化是指对交易算法进行微调,以最大化收益率、夏普比率等绩效指标。
- 有助于根据历史数据改进交易策略,从而在实盘交易中做出更明智的决策。
策略优化流程
- 定义优化目标: 比如最大年化收益率/最大夏普比率/最小最大回撤等;或者自定义一个评估指标函数用于优化
- 优化参数: 信号生成参数(eg:MA天数),风险控制参数(eg:止损比例,仓位),交易执行天数(market/limit order等);参数越少过拟合风险越小
- 定义优化方法: 暴力搜索/梯度下降/遗传算法,平衡准确性和计算时间,由于违反假设,某些方法可能不适用
- 迭代回测并找到实现最优结果的参数集
策略优化方法比较
暴力搜索: 最简单,最耗时
梯度下降(Gradient Descent):
- 梯度下降结果受: 初始值+学习率影响
- 假设优化函数连续且可求导
- 不能确定获取到全局最优解
基因算法(Genetic Algorithm)步骤:
- 初始化:随机生成一个初始种群,其中包含潜在解。
- 适应度评估:定义一个适应度函数来评估每个解的优劣。
- 选择:根据个体的适应度从当前种群中选择个体。适应度越高的个体被选中的概率越大。
- 交叉:将选定的个体(父代)两两组合,产生子代。这通过混合遗传信息引入新的解。
- 变异:对部分个体进行随机变异,以维持遗传多样性。这有助于防止过早收敛到次优解。
- 替换:用新种群替换旧种群,通常使用精英策略等方法来保留最优解。
- 终止:重复上述过程,直到满足终止条件(例如,达到令人满意的适应度水平或达到最大迭代次数)。
基因算法(Genetic Algorithm)备注
- 无法保证全局最优
- 影响收敛的因素:
- 种群规模
- 选择压力
- 交叉率和变异率
- 适应度地形的性质(例如,是否存在局部最优解)
- 探索与利用
- 遗传算法平衡了探索(搜索解空间)和利用(改进现有解)
- 如果探索过于有限,算法可能会过早收敛到局部最优解。
最优化VS稳健
选择稳健!!!最优:特定时候非常好(可能过拟合),稳健:常态化很好
寻找稳健策略的指南(举例)- 假设您有 5 年的数据,将其分成 5 个子集,每个子集包含 1 年的数据。
- 在 5 个数据子集上运行策略,使用不同的参数组合
- 选择在 5 个数据子集中性能适中的参数组合。
-
L10机器学习在算法交易中的应用案例
- 机器学习简介
- 机器学习算法的主要类别: 监督/无监督/强化学习
- 智能投资系统的未来
机器学习简介
什么是机器学习?
- 机器学习是人工智能 (AI) 的一个子集,它使系统能够从数据中学习、识别模式,并在极少人工干预的情况下做出决策。
- 主要特征:数据驱动+自适应学习
监督学习
- 涉及在已知结果的标记数据集上训练模型。
- 两大类算法
- 分类: 预测类别目标变量(支持向量机 (SVM)、逻辑回归、决策树、卷积神经网络 (CNN) 等)
- 回归: 预测连续目标变量(线性回归、决策树、随机森林等)
无监督学习
- 无需标注即可发现数据中的模式和关系
- 两大类算法
- 聚类: 根据数据点的相似性将其分组到不同的簇中;例如:K均值聚类、主成分分析 (PCA) 等
- 关联分析: 识别规则,表明一个项的存在暗示另一个项的存在; 例如:Apriori 算法、Eclat 算法等