关于#python#的问题:已有代码计算出了2018年—至今的5000+支A股的每日对数收益率,需要设计一种指标进行交易,分析年化收益和夏普比率


import os
import sys
import time
import random
import math
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
from itertools import accumulate

os.chdir('C:/Users\Administrator\.spyder-py3\Daily')
time0=time.time()
files=os.listdir()
#剔除无效文件
files=[x for x in files if len(x)==11 and x.endswith('csv')]
print('股票数量: ',len(files))

#根据数据长度确定完整的交易日,随机选择100个文件以最长行数为基准
maxlength=max([len(pd.read_csv(file)) for file in random.sample(files,100)])
#print('交易周期: ',maxlength)

#print('运行时间: ',time.time()-time0)

data=pd.read_csv('000001D.csv').iloc[:,[0,2]]
for file in files[1:]:
    stock=pd.read_csv(file).iloc[:,[0,2]]
    if len(stock)==maxlength:
        data=pd.merge(data,stock,how='inner',on='datetime')

data.to_csv('data.csv')      

data=pd.read_csv('data.csv')
#print('占用内存: ',sys.getsizeof(data))

p1=data.iloc[1:,2:].values
p2=data.iloc[:-1,2:].values

#计算每日的对数收益率,若价格中含有0则将收益值设置为1
diff=np.log(np.divide(p1,p2,out=np.ones(p1.shape),where=(p1*p2!=0))) 
net=list(accumulate([np.mean(np.random.choice(diff[i],size=10)) for i in range(len(diff))]))      
#计算每只股票的总收益率
#sum_diff=np.sum(diff,axis=0)

#对每日的收益率自小到大排序,类似每日的涨跌排行榜
rank=np.argsort(diff,axis=1)
#根据上一日的收益排行序列,筛选作为下一交易日的交易对象
index=[np.mean(diff[i-5,rank[i-5,100:200]]) for i in range(len(rank))]
strategy=[np.mean(diff[i,rank[i-5,100:200]]) for i in range(len(rank))]

#计算所有日的收益累计净值
net=list(accumulate(strategy))

import numpy as np

# 计算总收益率
total_returns = net[-1] - 1

# 计算年化收益率
total_trading_days = len(net)
annual_returns = (total_returns + 1) ** (250 / total_trading_days) - 1

# 计算年化收益率的标准差
daily_returns = np.diff(net) / net[:-1]
std_dev = np.std(daily_returns) * np.sqrt(250)

# 假设无风险利率为0.05(可根据实际情况调整)
risk_free_rate = 0.05

# 计算夏普比率
sharpe_ratio = (annual_returns - risk_free_rate) / std_dev

print("年化收益率:", annual_returns)
print("夏普比率:", sharpe_ratio)


python股票收益率计算_股票分析之——收益率(附完整代码和讲解)

可以借鉴下
https://blog.csdn.net/weixin_39886547/article/details/110780424

C:/Users\Administrator.spyder-py3\Daily
害,文件都没有