完整版)Python量化代码
import numpy as np
import pandas as pd
import ___
定义函数获取股票数据
def get_stock_data(stock_code。index_code。start_date。end_date):
param stock_code: 股票代码,例如‘sz’
param index_code: 指数代码,例如‘sh’
param start_date: 回测开始日期,例如‘1991-1-30'
param end_date: 回测结束日期,例如‘2015-12-31’
return: 函数返回其他函数的各参数序列
读取本地csv文件
stock_ad_csv(r'G:\财通实\历史日线数据_样本%xxxxxxxx14年数据%292\all_trading____'。parse_dates=['date'])
____csv(r'G:\财通实\历史日线数据_样本%xxxxxxxx14年数据%292\all_trading_data\index data\sh.csv'。parse_dates=['date'])
生成日期序列
date = pd.date_range('2016-01-01','2016-03-15')
选取在日期范围内的股票数据序列并按日期排序
stock_data = stock_data.ix[stock_data['date'].isin(date)。['date'。'change'。'adjust_price']]
选取在日期范围内的指数数据序列并按日期排序
date_list = list(stock_data['date'])
首先,我们需要筛选出回测期间内的基准数据,并将其按日期排序和设置日期为索引。代码如下:
___[benchmark['date'].isin(date_list)。['date'。'change'。'close']]
benchmark.sort_values(by='date'。inplace=True)
benchmark.set_index('date'。inplace=True)
接下来,我们需要将回测用到的各个数据序列转换成list格式,并分别存储日期序列、账户价值序列、收益率序列、指数变化率序列和指数序列。代码如下:
date_line = list(benchmark.index.strftime('%Y-%m-%d')) # 日期序列
capital_line = list(stock_data['adjust_price']) # 账户价值序列
return_line = list(stock_data['change']) # 收益率序列
indexreturn_line = list(benchmark['change']) # 指数的变化率序列
index_line = list(benchmark['close']) # 指数序列
接下来,我们定义一个计算年化收益率的函数。该函数需要传入日期序列和账户价值序列,然后输出回测期间的年化收益率。代码如下:
def annual_return(date_line。capital_line):
param date_line: 日期序列
param capital_line: 账户价值序列
return: 输出在回测期间的年化收益率
将数据序列合并成dataframe并按日期排序
df = pd.DataFrame({'date': date_line。'capital': capital_line})
df.sort_values(by='date'。inplace=True)
df.reset_index(drop=True。inplace=True)
rng = d_range(df['date'].iloc[0]。df['date'].iloc[-1]。freq='D')
计算年化收益率
最大单周期涨幅为:%f,最大单周期跌幅为:%f。这是计算收益波动率的函数。
python代码转换收益波动率函数需要输入日期序列和账户日收益率序列,并输出回测期间的收益波动率。我们使用pandas库中的DataFrame来处理数据,并使用math库中的sqrt函数计算波动率。
计算beta值需要输入日期序列、账户日收益率序列和指数的收益率序列,并输出beta值。我们使用pandas库中的DataFrame来处理数据,并计算账户收益和基准收益的协方差除以基准收益的方差来得到beta值。
计算alpha值需要输入日期序列、账户价值序列、指数序列、账户日收益率序列和指数的收益率序列,并输出alpha值。我们将数据序列合并成DataFrame并按日期排序。
df = pd.DataFrame({'date': date_line。'capital': capital_line。'benchmark': index_line。'rtn':return_line。
benchmark_rtn': indexreturn_line})
df.sort_values(by='date'。inplace=True)
df.reset_index(drop=True。inplace=True)
生成日期序列
rng = d_range(df['date'].iloc[0]。df['date'].iloc[-1]。freq='D')
无风险利率取10年期国债的到期年化收益率
rf = 0.0284
计算账户年化收益和基准年化收益
annual____(df.iloc[-1]['capital'] / df.iloc[0]['capital']。250 / len(rng)) - 1
annual_index = pow(df.iloc[-1]['benchmark'] / df.iloc[0]['benchmark']。250 / len(rng)) - 1
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论