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

练习

变量与基础类型

变量定义

  1. 给定当前日期为"2023-08-15",请创建三个变量分别存储:
    • 标普500指数当日收报价(4578.43)
    • 10年期美债收益率(4.25%需转换为小数形式)
    • 当日是否发布非农就业数据(False)

数字类型

  1. 某股票交易数据包含以下信息:
    • 开盘价:153.8972美元
    • 收盘价:155.03美元
    • 交易量:12,345,000股
      请将开盘价保留两位小数,交易量转换为以百万为单位的浮点数,计算当日收益率((收盘-开盘)/开盘)

数据结构

列表操作

  1. 给定以下股票列表:

    请完成操作:
    portfolio = ['AAPL', 'MSFT', 'GOOG', 'TSLA', 'AMZN']
    
    • 替换表现最差的TSLA为NVDA
    • 在科技股板块新增META
    • 获取排名前3的股票

字典实战

  1. 给定股票数据字典:

    编写代码实现:
    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. 编写投资评级函数:

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

循环处理

  1. 给定两个列表:

    生成字典推导式创建{股票: 市值}字典(假设总股本分别为16B, 7.5B, 2.8B)
    tickers = ['AAPL', 'MSFT', 'GOOG']
    closes = [189.76, 340.65, 2750.80]
    

函数与模块

数据获取

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

    编写函数获取三只股票(AAPL, MSFT, GOOG)的收盘价数据,返回形如:
    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')
    
    {
        'AAPL': [182.34, 183.56, ...],  # 每日收盘价列表
        'MSFT': [335.67, 337.89, ...],
        'GOOG': [2745.80, 2752.30, ...]
    }
    

综合练习

动量策略

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

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

波动率分析

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

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

组合分析

  1. 给定投资组合:

    编写函数计算:
    portfolio = {
        'AAPL': {'shares': 100, 'cost': 150.25},
        'MSFT': {'shares': 50, 'cost': 300.80}
    }
    
    • 当前总市值
    • 每只个股盈亏金额
    • 组合总收益率
    def portfolio_analysis(holdings):
        # 需要实时获取最新股价
        # 使用yfinance批量查询