python移动均线SMA及双均线策略

import pandas as pd
import numpy as np
import tushare as ts
import seaborn
import matplotlib.pyplot as plot
import matplotlib as mpl
mpl.rcParams['font.sans-serif'] = ['SimHei']  # 设置matplotlib可以显示汉语
mpl.rcParams['axes.unicode_minus'] = False

#pd.set_option()就是pycharm输出控制显示的设置
pd.set_option('expand_frame_repr', False)#True就是可以换行显示。设置成False的时候不允许换行
pd.set_option('display.max_columns', None)# 显示所有列
#pd.set_option('display.max_rows', None)# 显示所有行
pd.set_option('colheader_justify', 'centre')# 显示居中

pro = ts.pro_api('tushare的TOKEN')

data = pro.daily(ts_code='000001.SZ', start_date='20180101', end_date='20190101')
#print(data.head())
data.set_index('trade_date',inplace=True)  #设置索引覆盖原来的数据
print(data.head())
data['SMA_20'] = data['close'].rolling(20).mean()  #简单移动平均线计算
data['SMA_60'] = data['close'].rolling(60).mean()
data[['close', 'SMA_20', 'SMA_60']].plot(figsize=(10, 6))  #画图
plot.show()

#计算股票收益,有两种计算收益率方法:1.离散收益率  2.连续收益率
data['position'] = np.where(data['SMA_20'] > data['SMA_60'], 1, -1)  #当20日均线大于60日均线时记录1,反之记录-1
data['returns'] = np.log(data['close']/data['close'].shift(1))  #连续收益率计算
#data['returns_dis'] = data['close']/data['close'].shift(1) - 1  #离散收益率计算
data['strategy'] = data['position'].shift(1)*data['returns']
data['returns'].cumsum().apply(np.exp).plot(figsize=(10, 6))  #计算累计收益并输出图,np.exp方法返回x的指数
plot.show()

data['returns'].hist(bins=50)  #绘制直方图
plot.show()
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
当然可以!下面是一个用Python编写的简单均线策略: ```python import pandas as pd import numpy as np # 读取数据 data = pd.read_csv('data.csv') # 假设数据存在data.csv文件中 # 计算短期和长期均线 data['SMA_short'] = data['Close'].rolling(window=10).mean() data['SMA_long'] = data['Close'].rolling(window=30).mean() # 生成交易信号 data['Signal'] = np.where(data['SMA_short'] > data['SMA_long'], 1, -1) # 计算持仓状态 data['Position'] = data['Signal'].diff() # 回测策略 data['Return'] = np.log(data['Close'] / data['Close'].shift(1)) data['StrategyReturn'] = data['Position'].shift() * data['Return'] # 计算累计收益率 data['CumulativeReturn'] = (1 + data['StrategyReturn']).cumprod() # 输出结果 print(data[['Close', 'Signal', 'Position', 'Return', 'StrategyReturn', 'CumulativeReturn']]) ``` 在上面的代码中,我们首先通过`pd.read_csv()`函数读取股票数据,然后使用`rolling()`函数计算短期均线和长期均线。接着,我们根据短期均线和长期均线的关系生成交易信号,当短期均线上穿长期均线时产生买入信号,当短期均线下穿长期均线时产生卖出信号。然后,我们计算持仓状态,并根据持仓状态和每日收益率计算策略收益率。最后,我们计算累计收益率并输出结果。 请注意,这只是一个简单的示例,实际的均线策略可能需要更复杂的规则和参数。另外,代码中使用的是股票数据,你可以根据自己的需求修改数据来源和计算方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Wilburzzz

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值