金融工程--基础概念

背景

1、自学金融可能遇到的问题。
2、搭建量化所需的框架探索。
3、策略探索。

框架对比

AspectFirst ScriptSecond ScriptThird Script
Data SourceAkShare APIAkShare APIAkShare API
Models UsedSVCLogistic Regression, GaussianNB, SVC, Random Forest, MLPLogistic Regression, GaussianNB, SVC, Random Forest, MLP
Feature EngineeringLagged returns, direction as featuresLagged returns, direction as featuresLagged returns, direction as features
Evaluation MetricsAccuracy Score, Classification Report, Confusion MatrixTotal Returns, Annual Volatility, Accuracy ScoreTotal Returns, Annual Volatility, Accuracy Score
Backtesting StrategyUses predictions to decide full buy/sell strategy, no shortingUses multiple models for predictions, reports on highest accuracyUses best-performing model (SVM) for backtest strategy
Performance VisualizationPerformance comparison with benchmark using PyfolioUses Pyfolio for detailed strategy evaluation and plottingDetailed plotting using Pyfolio for various metrics
Code OrganizationFunctions for data download, feature creation, train/test splitMore modular with functions for models and evaluationHighly modular, structured with dedicated functions
Key LibrariesAkShare, sklearn, backtrader, pyfolioAkShare, sklearn, backtrader, pyfolioAkShare, sklearn, backtrader, pyfolio
Handling of NaN ValuesDropped NaNs before feature creationFilled NaNs with 0 before conversion to intFilled NaNs with 0 before conversion to int

基础概念

股票价格进行前复权和后复权的计算。在量化分析中,后复权数据由于其连续性,更适合用来计算股票的真实收益率和进行长期投资分析。前复权数据虽然方便观察当前价格与历史价格的关系,但可能因分红送股等事件导致历史价格出现负值,因此在量化策略中使用较少。

import pandas as pd

# 假设我们有以下DataFrame,包含日期、原始收盘价、每股分红和每股转送股数
data = {
    'date': ['2024-08-01', '2024-08-02', '2024-08-03'],
    'close_price': [100, 90, 95],  # 原始收盘价
    'dividend_per_share': [0, 2, 0],  # 每股分红
    'share_transfer_per_share': [0, 0, 0.5]  # 每股转送股数
}
df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date'])

# 计算前复权因子
df['adjust_factor'] = (1 + df['share_transfer_per_share']) * (1 - df['dividend_per_share'] / df['close_price'])

# 计算前复权价格
df['forward_adjusted_price'] = df['close_price'] / df['adjust_factor'].shift(1).fillna(1)

# 计算后复权价格
df['backward_adjusted_price'] = df['close_price'] * df['adjust_factor'].cumprod()

# 显示结果
print(df)
import akshare as ak
import pandas as pd

# 获取上证指数的历史数据,指定后复权
stock_zh_a_hist_df = ak.stock_zh_a_hist(symbol='000001.SH', 
                                       start_date='20200101', 
                                       end_date='20240829', 
                                       adjust='hfq')

# 将数据转换为DataFrame,并设置日期列为索引
df = pd.DataFrame(stock_zh_a_hist_df['日K线'])
df.index = pd.to_datetime(df['日期'])
df.drop('日期', axis=1, inplace=True)

# 显示数据
print(df.head())

# 如果需要前复权数据,只需将adjust参数改为'qfq'
# stock_zh_a_hist_df = ak.stock_zh_a_hist(symbol='000001.SH', adjust='qfq')

参考资料

https://akshare.akfamily.xyz/introduction.html
https://github.com/akfamily/akshare

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值