Barra CNE5 模型 解析和教程例子

好的,我们来对 Barra CNE5 模型进行更深入的解析,并提供一个概念性的 Python 策略代码示例。

请务必注意:

  1. 商业机密与数据: Barra CNE5 是 MSCI 的商业产品,其详细的因子定义、计算方法、因子协方差矩阵和特异性风险数据都是商业机密,需要昂贵的授权才能获取和使用。
  2. 代码示例的性质: 因此,下面的 Python 代码不是一个可以直接运行产生真实投资结果的策略。它是一个教学性质的示例,旨在模拟使用类似 Barra CNE5 的风险模型数据进行投资组合优化(构建策略)的工作流程和核心逻辑。其中使用的数据是完全随机生成或假设的绝不代表真实的 CNE5 模型输出或中国市场情况
  3. 重点: 理解代码的目的、结构和计算过程,而不是其产生的具体数值。

目录

  1. Barra CNE5 模型深度解析
    • 1.1 模型定位与目标
    • 1.2 核心组成要素
    • 1.3 针对中国市场的特点
    • 1.4 主要应用场景
  2. Python 策略示例:目标与假设
    • 2.1 策略目标
    • 2.2 核心假设 (数据模拟)
  3. Python 策略示例代码
    • 3.1 第零步:导入库与模拟 CNE5 模型数据
    • 3.2 第一步:定义投资组合目标与约束
    • 3.3 第二步:加载模拟数据与设置优化参数
    • 3.4 第三步:使用 CVXPY 进行投资组合优化
    • 3.5 第四步:结果分析与输出
  4. 重要提示与局限性

1. Barra CNE5 模型深度解析

1.1 模型定位与目标
  • 定位: Barra CNE5 (China Equity Model, Version 5) 是 MSCI Barra 专门为中国 A 股市场设计的多因子风险模型
  • 目标:
    • 风险解释与预测: 识别和量化中国 A 股个股及投资组合的风险来源(市场、行业、风格因子暴露)和整体风险水平(如预测波动率、跟踪误差)。
    • 风险管理: 帮助投资者监控和管理投资组合对各类风险因子的暴露。
    • 投资组合构建: 作为优化器的输入,构建满足特定风险收益目标和约束条件的投资组合。
    • 绩效归因: 将投资组合的历史收益分解,判断收益是来源于因子暴露(承担了哪些风险)还是个股选择能力(Alpha)。
1.2 核心组成要素

与 Barra 全球模型类似,CNE5 通常包含:

  1. 国家/市场因子 (Country/Market Factor): 代表整体中国 A 股市场的系统性风险(Beta)。
  2. 行业因子 (Industry Factors): 基于 GICS 或调整后的行业分类,捕捉特定行业的风险。对于 A 股,消费、金融、科技、制造等行业的区分尤为重要。
  3. 风格因子 (Style Factors / Risk Indices): 捕捉驱动 A 股风险和收益的共同特征,其定义和计算会考虑中国市场特性:
    • 规模 (Size): 大盘股 vs. 小盘股。在中国市场,小盘股效应可能更显著或表现不同。
    • 价值 (Value): 如市净率 (B/P)、市盈率 (E/P)、股息率 (Dividend Yield) 等。会计准则和市场结构可能影响计算。
    • 动量 (Momentum): 近期价格表现强势 vs. 弱势。A 股的动量效应可能受到交易限制(涨跌停板)和散户行为影响。
    • 波动率 (Volatility): 如 Beta、残差波动率 (Residual Volatility)。A 股整体波动性较高,因子建模需要考虑。
    • 成长性 (Growth): 盈利增长、销售增长预期。
    • 盈利收益率 (Earnings Yield): 盈利能力相对价格。
    • 杠杆 (Leverage): 公司财务杠杆水平。
    • 流动性 (Liquidity): 股票的交易活跃度。A 股的流动性分层可能比较明显。
    • (可能) 其他特定因子: 早期或特定版本可能包含如区分国企/民企、特定主题(如科创板)相关的探索性因子。
  4. 因子协方差矩阵 (Factor Covariance Matrix): 描述上述所有因子之间的预期相关性和各自的预期波动性。这是风险计算的核心。
  5. 特异性风险 (Specific Risk): 对每个 A 股,模型预测的、不能被共同因子解释的 idiosyncratic 风险。
1.3 针对中国市场的特点

CNE5 的关键在于其对中国 A 股市场独特性的适应:

  • 数据适应: 会计准则(如 CAS vs. IFRS)、数据披露质量和频率可能需要特殊处理。
  • 因子定义的微调: 因子计算中使用的描述符 (descriptors) 和标准化方法可能根据 A 股实证研究进行调整,以更好地捕捉风险。
  • 市场结构: 散户占比较高、政策影响显著、涨跌停板制度、IPO 节奏等都可能间接或直接影响因子表现和风险模型的参数估计。
  • 行业特征: 国有企业占比较大、特定行业的政策扶持或监管可能需要模型有所体现(可能通过行业因子或特定风格暴露反映)。
1.4 主要应用场景
  • 公募/私募基金: 进行 A 股投资的风险预算、组合构建(如指数增强、Smart Beta、因子中性策略)、风险监控、业绩归因。
  • 券商自营/资管: 同上。
  • 保险/银行理财子: 进行大规模 A 股组合的风险管理。
  • QFII/RQFII 等海外机构: 理解和管理其在中国 A 股的投资风险。

2. Python 策略示例:目标与假设

2.1 策略目标

本示例将模拟一个主动量化策略的投资组合构建过程:

  • 目标: 在控制相对于某个基准(例如沪深 300 指数)的主动风险 (Tracking Error) 和满足其他约束(如个股权重、因子暴露限制)的前提下,最大化投资组合的预期超额收益 (Alpha)
  • 优化方法: 使用均值-方差优化框架,结合模拟的 CNE5 风险模型数据和模拟的 Alpha 信号。
2.2 核心假设 (数据模拟)
  • 风险模型: 我们将随机生成与 CNE5 结构类似的因子暴露、因子协方差矩阵和特异性风险数据。这部分数据是完全虚构的。
  • Alpha 信号: 我们将随机生成一个代表个股预期超额收益的 Alpha 因子(分数)。在真实策略中,Alpha 信号本身是另一个复杂的量化模型(如基本面因子、量价因子、事件驱动、机器学习模型等)的输出。
  • 基准: 模拟一个沪深 300 指数的成分股权重。
  • 股票池: 假设一个包含若干 A 股的股票池。

3. Python 策略示例代码

# -------------------------------------
# --- 第零步:导入库与模拟 CNE5 模型数据 ---
# -------------------------------------
import pandas as pd
import numpy as np
import cvxpy as cp # 用于凸优化

print(">>> 正在初始化和模拟数据...")

# --- 0.1 定义模拟参数 ---
n_assets = 50  # 假设股票池有 50 只 A 股
# 模拟 CNE5 风格的因子列表 (高度简化且虚构)
factors = [
    'Market_CN', 'Size_CN', 'Value_CN', 'Momentum_CN', 'Volatility_CN',
    'Leverage_CN', 'Liquidity_CN', 'Industry_Fin_CN', 'Industry_Cons_CN', 'Industry_Tech_CN'
]
n_factors = len(factors)
tickers = [f'A_Stock_{i:03d}' for i in range(n_assets)] # 模拟股票代码

# --- 0.2 模拟因子暴露矩阵 (Exposures) ---
# 每一行代表一只股票,每一列代表一个因子
# 数值表示该股票在因子上的标准化暴露程度 (均值为0,标准差为1)
# np.random.seed(42) # for reproducibility
simulated_exposures = pd.DataFrame(
    np.random.randn(n_assets, n_factors),
    index=tickers,
    columns=factors
)
# 增加市场因子暴露(通常接近1,但有差异)
simulated_exposures['Market_CN'] = 1.0 + np.random.normal(0, 0.2, n_assets)
print("模拟因子暴露矩阵 (部分):")
print(simulated_exposures.head())
print("-" * 30)

# --- 0.3 模拟因子协方差矩阵 (Factor Covariance Matrix) ---
# 描述因子之间的相关性及各自的波动性 (年化 %^2)
# 这是一个非常关键但难以模拟的输入!我们生成一个简化版本。
# 确保它是半正定的 (PSD) 很重要,这里用简单方法模拟
factor_vols = np.random.uniform(5, 20, n_factors) # 假设因子年化波动率 %
factor_corr = np.identity(n_factors) # 简化:假设因子间初始不相关
# 增加一些相关性 (例如市场因子与其他因子)
factor_corr[0, 1:] = np.random.uniform(-0.3, 0.3, n_factors - 1)
factor_corr[1:, 0] = factor_corr[0, 1:]
# 使相关矩阵对称
factor_corr = (factor_corr + factor_corr.T) / 2
np.fill_diagonal(factor_corr, 1)
# 转换为协方差矩阵: Cov = D * Corr * D, D是标准差对角阵
factor_stdevs = np.diag(factor_vols)
simulated_factor_cov = factor_stdevs @ factor_corr @ factor_stdevs
# 尝试确保 PSD (如果非 PSD 优化会失败) - 简单方法:加一个小扰动到对角线
# simulated_factor_cov += np.identity(n_factors) * 1e-6 # 可能需要,视生成情况而定
simulated_factor_cov_df = pd.DataFrame(simulated_factor_cov, index=factors, columns=factors)
print("模拟因子协方差矩阵 (部分):")
print(simulated_factor_cov_df.iloc[:5, :5])
print("-" * 30)

# --- 0.4 模拟特异性风险 (Specific Risk) ---
# 每只股票的年化特异性风险 (%)
simulated_specific_risks = pd.Series(
    np.random.uniform(10, 40, n_assets), # 假设范围 10% 到 40%
    index=tickers,
    name='SpecificRisk_Ann_Pct'
)
print("模拟特异性风险 (部分):")
print(simulated_specific_risks.head())
print("-" * 30)

# --- 0.5 模拟 Alpha 信号 ---
# 代表对每只股票未来超额收益的预期 (分数越高越好)
# 真实策略中这是独立模型的输出
simulated_alpha_signal = pd.Series(
    np.random.randn(n_assets), # 标准正态分布模拟
    index=tickers,
    name='Alpha_Score'
)
# 可以做一些处理,比如去极值、标准化、中性化 (这里省略)
print("模拟 Alpha 信号 (部分):")
print(simulated_alpha_signal.head())
print("-" * 30)

# --- 0.6 模拟基准权重 (Benchmark Weights) ---
# 假设是沪深 300 的权重 (简化为随机生成并归一化)
benchmark_raw_weights = np.random.uniform(0.1, 1.0, n_assets)
simulated_benchmark_weights = pd.Series(
    benchmark_raw_weights / benchmark_raw_weights.sum(),
    index=tickers,
    name='Benchmark_Weight'
)
print("模拟基准权重 (部分):")
print(simulated_benchmark_weights.head())
print("-" * 30)
print(">>> 数据模拟完成。")
print("\n" + "=" * 50 + "\n")


# -----------------------------------------
# --- 第一步:定义投资组合目标与约束 ---
# -----------------------------------------
print(">>> 正在定义策略目标与约束...")
# 目标:最大化预期 Alpha,同时控制主动风险和满足约束
# 约束条件:
# 1.  总权重 = 1 (完全投资)
# 2.  个股权重下限 >= 0 (通常不允许做空 A 股)
# 3.  个股权重上限 <= 某个值 (例如 5%)
# 4.  主动权重限制:相对于基准的偏离幅度限制 (例如 +/- 3%)
# 5.  主动风险限制:总的跟踪误差 (Tracking Error) 不超过某个阈值 (例如 4%)
# 6.  因子暴露限制:控制组合在某些因子上的主动暴露 (例如,市场 Beta 接近 1,风格因子暴露中性或在一定范围内)
# 7.  (可选) 行业暴露限制:控制组合在各行业上的主动暴露

print("策略目标:最大化预期 Alpha (基于模拟 Alpha 分数)")
print("主要约束:")
print("  - 完全投资,禁止做空")
print("  - 个股权重上限: 5%")
print("  - 个股主动权重偏离: +/- 3%")
print("  - 预测年化主动风险 (跟踪误差) 上限: 4%")
print("  - 市场 Beta 主动暴露: +/- 0.05")
print("  - 规模因子主动暴露: +/- 0.1")
print("  - 价值因子主动暴露: +/- 0.1")
print(">>> 定义完成。")
print("\n" + "=" * 50 + "\n")

# -----------------------------------------
# --- 第二步:加载模拟数据与设置优化参数 ---
# -----------------------------------------
print(">>> 正在加载数据并设置优化参数...")

# 使用上面模拟的数据
exposures_matrix = simulated_exposures.values
factor_cov_matrix = simulated_factor_cov_df.values
# 特异性风险需要转换为方差 (Annualized %^2)
specific_variances = (simulated_specific_risks / 100.0)**2 # 注意单位转换
alpha_scores = simulated_alpha_signal.values
benchmark_weights = simulated_benchmark_weights.values

# 优化参数设置
max_stock_weight = 0.05
max_active_stock_weight = 0.03
min_active_stock_weight = -0.03
max_tracking_error_pct = 4.0 # 年化百分比
max_tracking_error_var = (max_tracking_error_pct / 100.0)**2 # 方差形式
market_factor_index = factors.index('Market_CN')
size_factor_index = factors.index('Size_CN')
value_factor_index = factors.index('Value_CN')
max_market_beta_active_exposure = 0.05
max_size_active_exposure = 0.1
max_value_active_exposure = 0.1

# 计算基准的因子暴露
benchmark_exposures = exposures_matrix.T @ benchmark_weights

print("数据加载完成。")
print(f"股票数量: {n_assets}")
print(f"因子数量: {n_factors}")
print(f"最大个股权重: {max_stock_weight:.1%}")
print(f"最大个股主动偏离: {max_active_stock_weight:.1%}")
print(f"最大跟踪误差 (年化): {max_tracking_error_pct:.1f}%")
print(f"基准市场 Beta 暴露 (模拟): {benchmark_exposures[market_factor_index]:.2f}")
print(">>> 设置完成。")
print("\n" + "=" * 50 + "\n")


# -----------------------------------------
# --- 第三步:使用 CVXPY 进行投资组合优化 ---
# -----------------------------------------
print(">>> 正在构建并求解优化问题...")

# 定义优化变量:投资组合权重
w = cp.Variable(n_assets, name='portfolio_weights')

# 定义主动权重
w_active = w - benchmark_weights

# 定义目标函数:最大化预期 Alpha
# 注意:这里的 alpha_scores 是分数,不是预期收益率。
# 在实际中,需要将 alpha 分数转换为预期超额收益率,这本身有多种方法。
# 这里我们直接最大化 alpha 分数的加权和作为代理目标。
objective = cp.Maximize(alpha_scores @ w)

# 定义约束条件
constraints = []

# 1. 总权重约束
constraints.append(cp.sum(w) == 1)

# 2. 个股权重下限 (禁止做空)
constraints.append(w >= 0)

# 3. 个股权重上限
constraints.append(w <= max_stock_weight)

# 4. 个股主动权重限制
constraints.append(w_active <= max_active_stock_weight)
constraints.append(w_active >= min_active_stock_weight)

# 5. 主动风险 (跟踪误差) 约束
#   主动风险^2 = 主动系统风险^2 + 主动特异性风险^2
#   主动系统风险^2 = w_active' * Exposure' * FactorCov * Exposure * w_active (错误,看下面)
#   正确: 主动系统风险^2 = active_exposure' * FactorCov * active_exposure
#        active_exposure = Exposure * w_active
portfolio_exposures = exposures_matrix.T @ w
active_exposures = portfolio_exposures - benchmark_exposures
systematic_active_variance = cp.quad_form(active_exposures, factor_cov_matrix)
specific_active_variance = cp.sum_squares(cp.multiply(np.sqrt(specific_variances), w_active))
total_active_variance = systematic_active_variance + specific_active_variance
constraints.append(total_active_variance <= max_tracking_error_var)

# 6. 因子暴露约束 (以主动暴露为例)
# 市场 Beta 主动暴露
constraints.append(active_exposures[market_factor_index] <= max_market_beta_active_exposure)
constraints.append(active_exposures[market_factor_index] >= -max_market_beta_active_exposure)
# 规模因子主动暴露
constraints.append(active_exposures[size_factor_index] <= max_size_active_exposure)
constraints.append(active_exposures[size_factor_index] >= -max_size_active_exposure)
# 价值因子主动暴露
constraints.append(active_exposures[value_factor_index] <= max_value_active_exposure)
constraints.append(active_exposures[value_factor_index] >= -max_value_active_exposure)

# 定义优化问题
problem = cp.Problem(objective, constraints)

# 求解优化问题
# 使用不同的求解器可能结果略有差异或速度不同,OSQP 和 SCS 是常用的开源求解器
try:
    problem.solve(solver=cp.OSQP, verbose=False) # 可以 verbose=True 查看过程
except cp.SolverError:
    print("OSQP 求解失败,尝试使用 SCS...")
    try:
        problem.solve(solver=cp.SCS, verbose=False)
    except cp.SolverError:
        print("SCS 求解也失败!请检查模型或数据。")
        problem = None # 标记失败

# 检查求解状态
if problem is not None and problem.status in [cp.OPTIMAL, cp.OPTIMAL_INACCURATE]:
    print(f"优化求解成功!状态: {problem.status}")
    optimal_weights = w.value
    # 对接近零的权重进行处理
    optimal_weights[np.abs(optimal_weights) < 1e-6] = 0
    optimal_weights = optimal_weights / optimal_weights.sum() # 重新归一化确保总和为1
else:
    print(f"优化求解失败!状态: {problem.status if problem else 'Setup Error'}")
    optimal_weights = None

print(">>> 优化完成。")
print("\n" + "=" * 50 + "\n")


# -----------------------------------------
# --- 第四步:结果分析与输出 ---
# -----------------------------------------
print(">>> 正在分析优化结果...")

if optimal_weights is not None:
    optimal_weights_series = pd.Series(optimal_weights, index=tickers, name='Optimal_Weight')

    # --- 4.1 权重对比 ---
    comparison_df = pd.DataFrame({
        '基准权重': simulated_benchmark_weights,
        '优化权重': optimal_weights_series,
        '主动权重': optimal_weights_series - simulated_benchmark_weights
    })
    comparison_df['优化权重(%)'] = comparison_df['优化权重'] * 100
    comparison_df['主动权重(%)'] = comparison_df['主动权重'] * 100

    print("--- 权重对比 (部分) ---")
    print(comparison_df.head().to_string(float_format="%.4f"))
    print("\n持仓数量 (权重 > 0):", (comparison_df['优化权重'] > 1e-6).sum())
    print("-" * 30)

    # --- 4.2 风险与收益预期 ---
    # 预期 Alpha (基于分数)
    expected_portfolio_alpha_score = (optimal_weights * alpha_scores).sum()
    print(f"优化组合预期 Alpha 分数: {expected_portfolio_alpha_score:.4f}")

    # 预测主动风险 (年化跟踪误差 %)
    final_active_weights = optimal_weights - benchmark_weights
    final_active_exposures = exposures_matrix.T @ final_active_weights
    final_sys_active_var = final_active_exposures.T @ factor_cov_matrix @ final_active_exposures
    final_spec_active_var = np.sum((final_active_weights**2) * specific_variances)
    final_total_active_var = final_sys_active_var + final_spec_active_var
    predicted_tracking_error_ann_pct = np.sqrt(final_total_active_var) * 100
    print(f"预测年化主动风险 (跟踪误差): {predicted_tracking_error_ann_pct:.2f}%")
    print(f"  - 其中系统性主动风险贡献 (方差): {final_sys_active_var:.6f}")
    print(f"  - 其中特异性主动风险贡献 (方差): {final_spec_active_var:.6f}")

    # 信息比率 (Information Ratio) - 概念性,因为 Alpha 是分数
    # IR = Expected Active Return / Active Risk
    # 假设 Alpha 分数 与预期年化超额收益成正比 (需要标度转换)
    # 这里仅作示意,不计算真实 IR
    print(f"信息比率 (概念性): 预期 Alpha / 主动风险 (单位需统一)")
    print("-" * 30)

    # --- 4.3 因子暴露分析 ---
    final_portfolio_exposures = exposures_matrix.T @ optimal_weights
    factor_exposure_df = pd.DataFrame({
        '基准暴露': benchmark_exposures,
        '组合暴露': final_portfolio_exposures,
        '主动暴露': final_active_exposures
    }, index=factors)
    print("--- 因子暴露对比 ---")
    print(factor_exposure_df.to_string(float_format="%.3f"))
    print("\n检查关键因子主动暴露是否在约束内:")
    print(f"  市场 Beta 主动暴露: {factor_exposure_df.loc['Market_CN', '主动暴露']:.3f} (约束: +/- {max_market_beta_active_exposure:.3f})")
    print(f"  规模因子 主动暴露: {factor_exposure_df.loc['Size_CN', '主动暴露']:.3f} (约束: +/- {max_size_active_exposure:.3f})")
    print(f"  价值因子 主动暴露: {factor_exposure_df.loc['Value_CN', '主动暴露']:.3f} (约束: +/- {max_value_active_exposure:.3f})")
    print("-" * 30)

else:
    print("优化失败,无法进行结果分析。")

print(">>> 分析完成。")
print("\n" + "=" * 50 + "\n")


# -----------------------------------------
# --- 重要提示与局限性 ---
# -----------------------------------------
print(">>> 重要提示与局限性 <<<")
print("1. **数据虚构:** 本示例使用的所有 Barra CNE5 相关数据(因子暴露、协方差矩阵、特异性风险)和 Alpha 信号、基准权重都是随机模拟的,不代表真实市场情况或模型输出。")
print("2. **概念演示:** 代码旨在演示结合风险模型进行投资组合优化的流程,而非提供一个可盈利的策略。")
print("3. **模型简化:** 真实的 CNE5 模型因子体系更复杂,计算更精细。Alpha 模型的构建是量化策略的核心难点,这里仅用随机数代替。")
print("4. **依赖商业数据:** 实际应用 Barra CNE5 需要向 MSCI 购买授权,获取其模型数据和软件工具(如 Barra Portfolio Manager 或 Barra Optimizer)。")
print("5. **优化器选择:** CVXPY 是一个强大的工具,但实际中大型机构可能使用商业优化器,并考虑交易成本、流动性约束、整数约束等更复杂的问题。")
print("6. **结果不可直接使用:** 请勿将此代码的输出直接用于任何实际投资决策。")
print("=" * 50)


4. 重要提示与局限性

  • 核心在于理解流程: 这个示例的关键在于理解如何将风险模型的输出(因子暴露、协方差、特异性风险)与 Alpha 信号结合,通过优化器构建满足特定风险和约束条件的投资组合。
  • 数据质量是前提: 实际策略的成败极度依赖于风险模型数据的准确性和 Alpha 信号的有效性。使用模拟数据无法评估策略的真实表现。
  • Barra 的价值: Barra 模型的真正价值在于其经过严谨研究和实证检验的因子体系、风险估计方法以及持续更新的数据,这些是公开渠道难以复制的。
  • 进一步研究: 如果你想深入研究,可以:
    • 学习 Fama-French 三因子/五因子模型等公开的多因子模型理论。
    • 尝试使用公开的因子数据(如国泰安 CSMAR、Wind 金融终端,或一些学术网站提供的 Fama-French 因子数据)构建简化的多因子模型。
    • 学习投资组合优化理论和不同的优化算法。
    • 研究 Alpha 因子挖掘的方法。

希望这个深度解析和概念性示例能帮助你更好地理解 Barra CNE5 模型及其在量化投资策略中的应用方式。

Barra CNE5是一种基于数据的投资研究工具,它通过分析实证数据提供投资决策的支持。首先,Barra CNE5收集整理各类金融数据,包括股票价格、公司财务数据、市场指数等,形成一个庞大的数据集。然后,它使用统计模型计算方法对这些数据进行分析建模,从而揭示出股票市场的一些规律趋势。 Barra CNE5的实证笔记(empirical notes)是这个工具生成的结论见解的摘要。这些实证笔记详细介绍了Barra CNE5所使用的数据源、分析方法得出的结论。它们通常包含对过去一段时间的某个市场的回顾性分析,可以帮助投资者更好地了解市场的演变股票表现。 实证笔记的内容通常包括以下几个方面:首先,它会列出所研究的股票市场指数的名称代码,以及分析的时间段。其次,它会介绍所采用的分析方法模型,比如常用的风险模型、收益模型等。然后,实证笔记会总结具体股票或市场的各项指标的表现,包括相关系数、贝塔系数、夏普比率等。 通过阅读实证笔记,投资者可以得到一些关于股票市场未来表现的启示建议。他们可以借鉴Barra CNE5的分析方法,并结合自己对市场的判断,制定出更科学有效的投资策略。 总之,Barra CNE5实证笔记是一个重要的投资研究工具,它通过分析实证数据提供投资决策的支持。投资者可以通过阅读实证笔记了解市场的演变股票的表现,从而制定更科学有效的投资策略。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值