任务背景:某交易员需要评估三种不同类型资产的流动性特征,选取以下标的:
数据准备:
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']
分析要求:
提示公式:
流动性比率 = 年度平均成交量 / (年度最高价 - 年度最低价)
代码框架:
# 计算年度日均成交量
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.0 | 5,000股 |
450.1 | 15,000股 |
450.2 | 30,000股 |
450.3 | 60,000股 |
任务要求:
输入数据:
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%}")
进阶挑战:扩展函数支持价格跳跃情况(当订单量超过市场深度时,剩余部分以最后价格成交)
通过这两个练习,可以深入理解市场微观结构对实际交易的影响。建议在实际交易系统中加入类似的市场冲击模型进行预演。