帮我写一个关于600893.SH的股票2016年到2018年的历史交易数据(只知道开盘价,最高价,最低价,收盘价,交易量的情况下)的趋势跟踪策略的关于如何计算出买入卖出的python代码
时间: 2024-03-16 20:46:56 浏览: 93
python基于机器学习和技术指标的涨跌趋势预测(考虑交易费)
对于股票的趋势跟踪策略,一般采用移动平均线的方法来进行分析。下面是基于600893.SH的股票历史交易数据的趋势跟踪策略的Python代码实现,其中采用了简单移动平均线和指数移动平均线两种方法。
``` python
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
# 读取股票历史交易数据
data = pd.read_csv('600893.SH.csv', index_col=0, parse_dates=True)
# 计算简单移动平均线
data['SMA5'] = data['close'].rolling(window=5).mean()
data['SMA10'] = data['close'].rolling(window=10).mean()
# 计算指数移动平均线
data['EMA5'] = data['close'].ewm(span=5, adjust=False).mean()
data['EMA10'] = data['close'].ewm(span=10, adjust=False).mean()
# 绘制股票收盘价及移动平均线的趋势图
plt.figure(figsize=(12,6))
plt.plot(data['close'], label='Close Price')
plt.plot(data['SMA5'], label='SMA5')
plt.plot(data['SMA10'], label='SMA10')
plt.plot(data['EMA5'], label='EMA5')
plt.plot(data['EMA10'], label='EMA10')
plt.title('Trend Following Strategy for Stock 600893.SH')
plt.xlabel('Year')
plt.ylabel('Price')
plt.legend(loc='upper left')
plt.show()
# 采用简单移动平均线策略进行买入卖出
data['position'] = np.where(data['SMA5'] > data['SMA10'], 1, -1)
data['position'] = data['position'].shift()
# 采用指数移动平均线策略进行买入卖出
# data['position'] = np.where(data['EMA5'] > data['EMA10'], 1, -1)
# data['position'] = data['position'].shift()
# 计算每日收益率
data['returns'] = np.log(data['close'] / data['close'].shift())
# 计算策略收益率
data['strategy'] = data['position'] * data['returns']
# 计算累计收益率
data['cumulative returns'] = data['strategy'].cumsum()
# 绘制策略收益率及累计收益率的曲线图
plt.figure(figsize=(12,6))
plt.plot(data['strategy'], label='Strategy Returns')
plt.plot(data['cumulative returns'], label='Cumulative Returns')
plt.title('Trend Following Strategy Returns for Stock 600893.SH')
plt.xlabel('Year')
plt.ylabel('Returns')
plt.legend(loc='upper left')
plt.show()
```
在上述代码中,我们首先读取了股票历史交易数据,并计算了简单移动平均线和指数移动平均线。然后,我们绘制了股票收盘价及移动平均线的趋势图,以便直观地观察股票的趋势。接着,我们采用了简单移动平均线和指数移动平均线两种方法进行买入卖出的判断,并计算了每日收益率、策略收益率和累计收益率。最后,我们绘制了策略收益率及累计收益率的曲线图,以便评估该趋势跟踪策略的表现。
阅读全文