对股票数据计算一种交易指标并对历史数据进行回测的python代码
时间: 2024-02-06 14:04:07 浏览: 28
好的,我可以为您提供一个简单的示例代码来计算RSI指标并对历史数据进行回测。以下是代码:
```python
import pandas as pd
import numpy as np
# 读取历史股票数据
df = pd.read_csv('stock_data.csv')
# 计算RSI指标
n = 14
delta = df['Close'].diff()
delta = delta[1:]
gain = delta.copy()
loss = delta.copy()
gain[gain < 0] = 0
loss[loss > 0] = 0
avg_gain = gain.rolling(window=n).mean()
avg_loss = abs(loss.rolling(window=n).mean())
rs = avg_gain / avg_loss
rsi = 100.0 - (100.0 / (1.0 + rs))
# 回测策略
df['RSI'] = rsi
df['Buy'] = np.where(df['RSI'] < 30, 1, 0)
df['Sell'] = np.where(df['RSI'] > 70, -1, 0)
df['Position'] = df['Buy'] + df['Sell']
df['Position'].fillna(method='ffill', inplace=True)
df['Returns'] = df['Close'].pct_change() * df['Position'].shift(1)
df['Cumulative_Returns'] = (1 + df['Returns']).cumprod()
# 输出回测结果
print(df.tail(10))
```
注:这里的RSI指标采用的是传统的14日RSI计算方法。您也可以根据需要更改该指标的计算方法和参数。
此代码假设您的历史股票数据以CSV格式存储在名为“stock_data.csv”的文件中,并且包含以下列:Open、High、Low、Close。您可以根据需要更改这些列名。回测策略简单地将RSI指标低于30的点视为买入信号,并将RSI指标高于70的点视为卖出信号。然后,它将根据这些信号计算每日的持仓仓位,并计算每日的收益率和累计收益率。最后,它输出最后10个数据点的结果,您可以根据需要更改此输出方式。