跳到主内容
研究工具量化研究工具与数据基础 · 第1–5讲2/5 · 配套练习模块导览 →
练习

第2讲:Python入门 (Introduction to Python) · 练习

操作列表和字典并编写条件函数,获取价格数据计算动量与波动,再汇总组合持仓和风险指标。

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

变量与基础类型#

变量定义#

  1. 给定当前日期为"2023-08-15",请创建三个变量分别存储:

    • 标普500指数当日收报价(4578.43)

    • 10年期美债收益率(4.25%需转换为小数形式)

    • 当日是否发布非农就业数据(False)

数字类型#

  1. 某股票交易数据包含以下信息:

    • 开盘价:153.8972美元

    • 收盘价:155.03美元

    • 交易量:12,345,000股 请将开盘价保留两位小数,交易量转换为以百万为单位的浮点数,计算当日收益率((收盘-开盘)/开盘)

数据结构#

列表操作#

  1. 给定以下股票列表:

    请完成操作:

code
portfolio = ['AAPL', 'MSFT', 'GOOG', 'TSLA', 'AMZN']
  • 替换表现最差的TSLA为NVDA

  • 在科技股板块新增META

  • 获取排名前3的股票

字典实战#

  1. 给定股票数据字典:

    编写代码实现:

code
stock_info = {
    'AAPL': {'price': 185.25, 'volume': 45000000},
    'MSFT': {'price': 330.45, 'volume': 35000000},
    'GOOG': {'price': 2750.80, 'volume': 1200000}
}
  • 更新AAPL价格至189.76美元

  • 计算所有股票平均交易量

  • 找出价格高于300美元的股票列表

流程控制#

条件判断#

  1. 编写投资评级函数:

    测试案例:

code
def get_rating(pe_ratio, dividend_yield):
    # 根据PE比率和股息率判断:
    # PE<15且股息率>3% -> "价值股"
    # PE>25且股息率<1% -> "成长股"
    # 其他情况为"平衡型"
    raise NotImplementedError
  • (12, 3.5%) → 价值股

  • (30, 0.8%) → 成长股

  • (20, 2.0%) → 平衡型

循环处理#

  1. 给定两个列表:

    生成字典推导式创建{股票: 市值}字典(假设总股本分别为16B, 7.5B, 2.8B)

code
tickers = ['AAPL', 'MSFT', 'GOOG']
closes = [189.76, 340.65, 2750.80]

函数与模块#

数据获取#

  1. 使用yfinance获取最近30天数据:

    编写函数获取三只股票(AAPL, MSFT, GOOG)的收盘价数据,返回形如:

code
import yfinance as yf
from datetime import datetime, timedelta

end_date = datetime.today().strftime('%Y-%m-%d')
start_date = (datetime.today() - timedelta(days=30)).strftime('%Y-%m-%d')
code
{
    'AAPL': [182.34, 183.56, ...],  # 每日收盘价列表
    'MSFT': [335.67, 337.89, ...],
    'GOOG': [2745.80, 2752.30, ...]
}

综合练习#

动量策略#

  1. 改进现有动量策略函数:

    要求处理数据长度不足的情况,当可用数据天数不足lookback时跳过该标的

code
def enhanced_momentum(tickers, lookback=20, hold_days=5):
    '''
    计算过去lookback天收益率
    考虑持有hold_d天的交易成本(每次0.1%)
    返回经成本调整后的Top3标的
    '''
    # 需要调用yfinance获取足够历史数据
    # 数据示例:yf.download(['AAPL','MSFT'], period='60d')

波动率分析#

  1. 编写波动率计算函数:

    处理数据不足情况,返回格式:(平均日收益率, 年化波动率)

code
def calculate_volatility(ticker, days=30):
    '''
    计算指定股票最近days个交易日的年化波动率
    公式:日收益率标准差 * sqrt(252)
    '''
    # 数据获取示例:
    data = yf.download(ticker, period=f'{days+10}d')['Close']

组合分析#

  1. 给定投资组合:

    编写函数计算:

code
portfolio = {
    'AAPL': {'shares': 100, 'cost': 150.25},
    'MSFT': {'shares': 50, 'cost': 300.80}
}
  • 当前总市值

  • 每只个股盈亏金额

  • 组合总收益率

code
def portfolio_analysis(holdings):
    # 需要实时获取最新股价
    # 使用yfinance批量查询
    raise NotImplementedError

完成练习后,自评一次

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