python 5日均线 上传 60日均线 回测
时间: 2023-07-21 15:32:13 浏览: 122
实现一个 Python 的 5日均线和60日均线的回测策略,可以分为以下几个步骤:
1. 数据准备:从数据源获取股票的历史价格数据,并计算出5日均线和60日均线。
```python
import pandas as pd
import numpy as np
import talib
# 从数据源获取股票的历史价格数据
df = pd.read_csv('stock_data.csv', index_col='date')
df.index = pd.to_datetime(df.index)
# 计算5日均线和60日均线
df['ma5'] = talib.SMA(df['close'], timeperiod=5)
df['ma60'] = talib.SMA(df['close'], timeperiod=60)
```
2. 策略设计:定义一个简单的交易策略,当5日均线上穿60日均线时,买入;当5日均线下穿60日均线时,卖出。
```python
# 定义交易策略
def trading_strategy(df):
df['position'] = np.where(df['ma5'] > df['ma60'], 1, 0)
df['position'] = np.where(df['ma5'] < df['ma60'], -1, df['position'])
df['position'] = df['position'].fillna(method='ffill')
return df
```
3. 回测模拟:模拟策略的执行过程,并计算出交易收益和回测指标。
```python
# 模拟交易过程
df = trading_strategy(df)
df['pct_change'] = df['close'].pct_change()
df['strategy_return'] = df['pct_change'] * df['position'].shift(1)
# 计算回测指标
total_return = df['strategy_return'].cumsum()[-1]
annualized_return = (1 + total_return) ** (252 / len(df)) - 1
max_drawdown = (df['strategy_return'].cumsum().rolling(window=len(df), min_periods=1).max() - df['strategy_return'].cumsum()).max()
sharpe_ratio = df['strategy_return'].mean() / df['strategy_return'].std() * np.sqrt(252)
# 打印回测指标
print('总收益率:{:.2%}'.format(total_return))
print('年化收益率:{:.2%}'.format(annualized_return))
print('最大回撤:{:.2%}'.format(max_drawdown))
print('夏普比率:{:.2f}'.format(sharpe_ratio))
```
以上代码中,使用 talib 库计算出5日均线和60日均线。定义一个名为 trading_strategy 的函数,实现交易策略的逻辑。在模拟交易过程中,先调用 trading_strategy 函数计算出交易信号,然后根据信号计算出交易收益,并计算出回测指标。最后打印出总收益率、年化收益率、最大回撤和夏普比率等回测指标。
需要注意的是,以上代码仅为示例,实际回测策略需要根据具体需求进行调整和优化,同时需要注意风险管理和交易成本等问题。
阅读全文