跳到主内容
研究主线市场摩擦与证券池设计 · 第27–29讲2/3 · 配套练习模块导览 →
练习

第28讲:市场冲击模型 (Market Impact Models) · 练习

使用订单规模和流动性参数估算执行成本,比较多项流动性指标,并检查拆单速度对冲击的影响。

← 返回本讲讲义
完成状态保存在当前浏览器,可随时取消。

机构订单成本估算#

某对冲基金计划交易微软(MSFT)股票,已知参数:

  • 当前股价:$320

  • 年化波动率:28%

  • 日均成交量(ADV):8,000,000股

  • 订单规模:250,000股

  • 目标执行时间:4小时

请基于Almgren-Chriss模型完成:

  1. 计算订单占ADV的比例

  2. 估算市场冲击成本(单位:bps)

  3. 转换为美元成本金额

code
import numpy as np

def almgren_impact(order_pct_adv, annual_vol, days=1):
    gamma = 0.314
    eta = 0.142
    permanent = gamma * annual_vol * np.sqrt(order_pct_adv)
    temporary = eta * annual_vol * (order_pct_adv/days)**0.6
    return (permanent + temporary) * 10000

# 参数设置
order_size = 250000
adv = 8e6
price = 320
annual_vol = 0.28
hours = 4

# 请在此处补充计算代码

多维度流动性分析#

获取阿里巴巴(BABA)过去60个交易日的分钟级数据:

code
import yfinance as yf
import matplotlib.pyplot as plt

baba = yf.download('BABA', period='60d', interval='60m')
  1. 绘制成交量日内分布曲线(纽约时间)

  2. 计算每小时平均价格波动范围:OpenHigh−Low​

    High−LowOpen\frac{High - Low}{Open}

  3. 使用订单执行时间公式,估算不同参与率下的执行时长:

    • 订单量:500,000股

    • 参与率梯度:[5%, 10%, 15%, 20%]

    • 展示结果采用折线图形式

code
# 成交量分析代码框架
baba['hour'] = baba.index.hour
hourly_vol = baba.groupby('hour')['Volume'].mean()

# 波动范围计算代码框架
baba['price_range'] = (baba['High'] - baba['Low']) / baba['Open']

# 执行时间计算函数
def execution_time(order_size, participation_rates, adv):
    daily_volume = adv
    return [order_size / (p_rate * daily_volume) * 6.5 for p_rate in participation_rates]

# 请在此处补充可视化代码

完成练习后,自评一次

建议先独立作答,再展开参考答案进行核对。