用spyder在2018-至今的国内A股市场进行回测 n融合5000+支股票的数据,并进行数据清洗 ■计算每日各股收益率 n根据历史信息, 设计一种指标,进行交易 ■计算交易随机过程的结果,分析年化收益,夏普率|
时间: 2024-02-19 12:02:37 浏览: 170
以下是一个简单的示例代码,用于计算每日各股票的收益率并进行简单的均线策略回测:
```python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 读取数据
data = pd.read_csv('stock_data.csv', index_col=0)
# 数据清洗和处理
data = data.dropna() # 删除缺失值
returns = data.pct_change() # 计算每日收益率
# 均线策略回测
MA1 = 10 # 短期均线
MA2 = 60 # 长期均线
data['MA1'] = data['Close'].rolling(MA1).mean()
data['MA2'] = data['Close'].rolling(MA2).mean()
data = data.dropna() # 删除缺失值
data['Signal'] = np.where(data['MA1'] > data['MA2'], 1, 0)
data['Returns'] = data['Close'].pct_change() * data['Signal'].shift(1)
data['Cumulative Returns'] = (1 + data['Returns']).cumprod()
# 计算年化收益率和夏普率
annual_returns = (data['Cumulative Returns'][-1] ** (252 / len(data))) - 1
sharpe_ratio = np.sqrt(252) * data['Returns'].mean() / data['Returns'].std()
# 绘制回测结果
plt.plot(data.index, data['Cumulative Returns'])
plt.xlabel('Date')
plt.ylabel('Cumulative Returns')
plt.title('Simple Moving Average Strategy Backtesting')
plt.show()
print('Annualized Returns: {:.2f}%'.format(annual_returns * 100))
print('Sharpe Ratio: {:.2f}'.format(sharpe_ratio))
```
这里使用了一个简单的均线策略,当短期均线(MA1)上穿长期均线(MA2)时,买入股票;当短期均线下穿长期均线时,卖出股票。这里使用的是10日和60日的均线。
回测结果可以通过绘制累积收益曲线来可视化,同时计算年化收益率和夏普率来评估策略的有效性和可行性。
阅读全文