量化交易 实战第九课 多因子相关性分析

概述

相关性 (Correlation) 在统计中是与独立性 (Independence) 对立的概念. 泛指两随机变量之间存在的一切关系.

在这里插入图片描述

研报分析结果

下图是某大类因子下的一些因子 IC 值变化图. 我们能从中看出大概相关性.
在这里插入图片描述
比如说 OPM 和 OPM_TTM 相关性较强, 变化趋势类似.

某研报最终相关性最终结果:
在这里插入图片描述

代码实现

导包

# 使用alphalens计算因子的IC分析
# 分析的区间2020-01-01到2021-01-01
import numpy as np
import pandas as pd
import datetime
from alphalens import performance
from alphalens import plotting
from alphalens import tears
from alphalens import utils

总资产回报率 IC

factor = "return_on_asset_net_profit"

# ----------------1. 准备因子数据----------------

# 1.1 获取因子数据


# 获取这一年的交易日期
date_data = get_trading_dates(start_date="2020-01-01", end_date="2021-01-01")

# 定义df数据集
all_data = pd.DataFrame()

for date in date_data:
    # 获取当天因子数据
    q = query(
        fundamentals.financial_indicator.return_on_asset_net_profit
    )
    
    # 获取截面数据
    fund = get_fundamentals(q, entry_date=date).iloc[:, 0, :]
    
    # 创建日期列
    fund["date"] = date
    
    # 拼接
    all_data = pd.concat([all_data, fund])
    
    
    
# 设置双重索引, 变成一个MultiIndex DataFrame
multiindex_df = all_data.set_index(["date", all_data.index])

# 1.2 处理因子数据 (去极值, 标准化)

def mad(factor):
    """3倍中位数去极值"""
    
    # 求出因子值的中位数
    median = np.median(factor)
    
    # 求出因子值与中位数的差值, 进行绝对值
    mad = np.median(abs(factor - median))
    
    # 定义几倍的中位数上下限
    high = median + (3 * 1.4826 * mad)
    low = median - (3 * 1.4826 * mad)
    
    # 替换上下限
    factor = np.where(factor > high, high, factor)
    factor = np.where(factor < low, low, factor)
    return factor

def stand(factor):
    """数据标准化"""
    mean = factor.mean()
    std = factor.std()
    return (factor - mean) / std

multiindex_df[factor] = mad(multiindex_df[factor]) 
multiindex_df[factor] = stand(multiindex_df[factor])


# ----------------2. 准备收盘价数据----------------

# 转换为Series
singlefactor_series = multiindex_df[factor]

# 获取所有股票基础信息
stocks = all_instruments("CS")

# 得到合约代码
stocks_list = stocks["order_book_id"]

# 获取收盘价
price = get_price(stocks_list ,start_date="2020-01-01", end_date="2021-01-01", fields="close")


# ----------------3. 生成通用Alphalens数据----------------

factor_return = utils.get_clean_factor_and_forward_returns(singlefactor_series.astype(float), price.astype(float))


# ----------------4. 生成通用Alphalens数据----------------


# IC 值, 默认每天的IC结构
return_on_asset_net_profit_IC = performance.factor_information_coefficient(factor_return)

资本回报率 IC

factor = "return_on_invested_capital"

# ----------------1. 准备因子数据----------------

# 1.1 获取因子数据


# 获取这一年的交易日期
date_data = get_trading_dates(start_date="2020-01-01", end_date="2021-01-01")

# 定义df数据集
all_data = pd.DataFrame()

for date in date_data:
    # 获取当天因子数据
    q = query(
        fundamentals.financial_indicator.return_on_invested_capital
    )
    
    # 获取截面数据
    fund = get_fundamentals(q, entry_date=date).iloc[:, 0, :]
    
    # 创建日期列
    fund["date"] = date
    
    # 拼接
    all_data = pd.concat([all_data, fund])
    
    
    
# 设置双重索引, 变成一个MultiIndex DataFrame
multiindex_df = all_data.set_index(["date", all_data.index])

# 1.2 处理因子数据 (去极值, 标准化)

def mad(factor):
    """3倍中位数去极值"""
    
    # 求出因子值的中位数
    median = np.median(factor)
    
    # 求出因子值与中位数的差值, 进行绝对值
    mad = np.median(abs(factor - median))
    
    # 定义几倍的中位数上下限
    high = median + (3 * 1.4826 * mad)
    low = median - (3 * 1.4826 * mad)
    
    # 替换上下限
    factor = np.where(factor > high, high, factor)
    factor = np.where(factor < low, low, factor)
    return factor

def stand(factor):
    """数据标准化"""
    mean = factor.mean()
    std = factor.std()
    return (factor - mean) / std

multiindex_df[factor] = mad(multiindex_df[factor]) 
multiindex_df[factor] = stand(multiindex_df[factor])


# ----------------2. 准备收盘价数据----------------

# 转换为Series
singlefactor_series = multiindex_df[factor]

# 获取所有股票基础信息
stocks = all_instruments("CS")

# 得到合约代码
stocks_list = stocks["order_book_id"]

# 获取收盘价
price = get_price(stocks_list ,start_date="2020-01-01", end_date="2021-01-01", fields="close")


# ----------------3. 生成通用Alphalens数据----------------

factor_return = utils.get_clean_factor_and_forward_returns(singlefactor_series.astype(float), price.astype(float))


# ----------------4. 生成通用Alphalens数据----------------


# IC 值, 默认每天的IC结构
return_invested_capital_IC = performance.factor_information_coefficient(factor_return)

计算相关性

from scipy import stats as st

# 斯皮尔曼相关系数
st.spearmanr(return_on_asset_net_profit_IC.iloc[:, 0], return_invested_capital_IC.iloc[:, 0])

输出结果:

SpearmanrResult(correlation=0.977877642558714, pvalue=5.866171447988381e-159)
  • 29
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 46
    评论
Python金融分析与量化交易实战视频教程是一套专门针对金融行业的学习资源。Python作为一种高级编程语言,在金融领域中具有广泛的应用。这套视频教程的目的是帮助学习者从零开始掌握Python编程技巧,并将其应用于金融数据分析和量化交易中。以下是关于这套教程的一些重要内容: 1. Python基础知识:视频教程从Python语言基础开始,逐步介绍Python的语法和常用模块,帮助学习者熟悉Python编程环境。 2. 金融数据分析:教程将详细介绍如何使用Python进行金融数据的获取、清洗、处理和可视化。学习者可以了解如何使用Python库(如pandas)来进行数据处理和分析,以及如何使用matplotlib等库进行数据可视化。 3. 量化交易策略开发:视频教程将介绍不同的量化交易策略,并讲述如何使用Python来开发、回测和优化这些策略。学习者可以了解如何使用Python库(如quandl和zipline)来获取历史市场数据,并使用技术指标和机器学习算法来构建交易策略。 4. 实际案例分析:视频教程中还包括一些实际的金融数据分析和量化交易案例。学习者可以通过这些案例来了解不同金融市场的特点,并学习如何应用Python进行实际的交易决策。 总之,这套Python金融分析与量化交易实战视频教程是一种适合金融从业人员、学生和对量化交易感兴趣的人的学习资源。通过学习这套教程,学习者可以系统地学习如何使用Python进行金融数据分析和量化交易,并将理论知识应用于实际案例中。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 46
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值