变量与基础类型#
变量定义#
-
给定当前日期为"2023-08-15",请创建三个变量分别存储:
-
标普500指数当日收报价(4578.43)
-
10年期美债收益率(4.25%需转换为小数形式)
-
当日是否发布非农就业数据(False)
-
数字类型#
-
某股票交易数据包含以下信息:
-
开盘价:153.8972美元
-
收盘价:155.03美元
-
交易量:12,345,000股 请将开盘价保留两位小数,交易量转换为以百万为单位的浮点数,计算当日收益率((收盘-开盘)/开盘)
-
数据结构#
列表操作#
-
给定以下股票列表:
请完成操作:
code
portfolio = ['AAPL', 'MSFT', 'GOOG', 'TSLA', 'AMZN']-
替换表现最差的TSLA为NVDA
-
在科技股板块新增META
-
获取排名前3的股票
字典实战#
-
给定股票数据字典:
编写代码实现:
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美元的股票列表
流程控制#
条件判断#
-
编写投资评级函数:
测试案例:
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%) → 平衡型
循环处理#
-
给定两个列表:
生成字典推导式创建{股票: 市值}字典(假设总股本分别为16B, 7.5B, 2.8B)
code
tickers = ['AAPL', 'MSFT', 'GOOG']
closes = [189.76, 340.65, 2750.80]函数与模块#
数据获取#
-
使用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, ...]
}综合练习#
动量策略#
-
改进现有动量策略函数:
要求处理数据长度不足的情况,当可用数据天数不足lookback时跳过该标的
code
def enhanced_momentum(tickers, lookback=20, hold_days=5):
'''
计算过去lookback天收益率
考虑持有hold_d天的交易成本(每次0.1%)
返回经成本调整后的Top3标的
'''
# 需要调用yfinance获取足够历史数据
# 数据示例:yf.download(['AAPL','MSFT'], period='60d')波动率分析#
-
编写波动率计算函数:
处理数据不足情况,返回格式:(平均日收益率, 年化波动率)
code
def calculate_volatility(ticker, days=30):
'''
计算指定股票最近days个交易日的年化波动率
公式:日收益率标准差 * sqrt(252)
'''
# 数据获取示例:
data = yf.download(ticker, period=f'{days+10}d')['Close']组合分析#
-
给定投资组合:
编写函数计算:
code
portfolio = {
'AAPL': {'shares': 100, 'cost': 150.25},
'MSFT': {'shares': 50, 'cost': 300.80}
}-
当前总市值
-
每只个股盈亏金额
-
组合总收益率
code
def portfolio_analysis(holdings):
# 需要实时获取最新股价
# 使用yfinance批量查询
raise NotImplementedError