🔴
入学要求
💯
能力测试
🛣️
课程安排
🕹️
研究资源

练习

资产流动性对比分析

任务背景:某交易员需要评估三种不同类型资产的流动性特征,选取以下标的:

数据准备

import yfinance as yf
import pandas as pd

symbols = ['AAPL', 'TLT', 'GLD']
data = yf.download(symbols,
                 start='2021-01-01',
                 end='2023-12-31',
                 progress=False)['Volume']

分析要求

  1. 计算各资产年度日均成交量(排除零成交量日)
  1. 绘制成交量月度箱线图对比流动性稳定性
  1. 计算各资产流动性比率(日均成交量/价格波动范围)

提示公式

流动性比率 = 年度平均成交量 / (年度最高价 - 年度最低价)

代码框架

# 计算年度日均成交量
annual_avg = data.groupby(pd.Grouper(freq='Y')).mean()

# 生成月度箱线图
monthly_data = data.resample('M').mean()
# 补充可视化代码

# 计算价格波动范围
price_ranges = yf.download(symbols, start='2021-01-01', end='2023-12-31')['High'] - \
              yf.download(symbols, start='2021-01-01', end='2023-12-31')['Low']
# 补充流动性比率计算

订单滑点模拟实验

问题场景:某市价订单试图买入10万股SPY,当前市场深度如下:

价格档位累计卖单量
450.05,000股
450.115,000股
450.230,000股
450.360,000股

任务要求

  1. 计算完全执行该订单的成交量加权平均价(VWAP)
  1. 计算相对于第一档价格的滑点率
  1. 编写通用函数处理任意订单量

输入数据

import numpy as np

price_levels = np.array([450.0, 450.1, 450.2, 450.3])
cumulative_volume = np.array([5000, 15000, 30000, 60000])
order_size = 100000

代码框架

def calculate_slippage(order_qty, prices, volumes):
    """
    输入:订单量,价格数组,累计量数组
    输出:(执行均价, 滑点率)
    """
    executed_shares = 0
    total_value = 0

    # 补充订单执行逻辑

    vwap = total_value / order_qty
    slippage = (vwap - prices[0])/prices[0]
    return vwap, slippage

# 测试案例
test_vwap, test_slippage = calculate_slippage(100000, price_levels, cumulative_volume)
print(f"执行均价:{test_vwap:.2f} 滑点率:{test_slippage:.2%}")

进阶挑战:扩展函数支持价格跳跃情况(当订单量超过市场深度时,剩余部分以最后价格成交)

通过这两个练习,可以深入理解市场微观结构对实际交易的影响。建议在实际交易系统中加入类似的市场冲击模型进行预演。