移动平均策略(MA)

2019-07-30  本文已影响0人  跨界师

第一种:
1. 当上升并且交叉穿过X天的移动平均线时买入
2. 当下降并且交叉穿过X天的移动平均线时卖出

第二种:
1. 当x天的移动平均线上升并交叉穿过y天移动平均线时买入;
2. 当x天的移动平均线下降并交叉穿过y天移动平均线时卖出;

代码:

# 语言环境: python3

import tushare as ts
import matplotlib.pyplot as plt
import seaborn
import matplotlib as mpl
mpl.rcParams['font.family'] = 'serif'   # 解决中文乱码问题

import numpy as np
import pandas as pd

# 获取代码为600030的股票
data = ts.get_k_data('600030',start='2010-01-01',end='2017-06-30')
data.head()

# 显示的结果
date        open    close   high    low volume  code
0   2010-01-04  17.016  16.639  17.176  16.612  1106207.58  600030
1   2010-01-05  16.777  17.452  17.601  16.383  2093915.41  600030
2   2010-01-06  17.548  17.250  17.628  17.229  1437889.30  600030
3   2010-01-07  17.239  16.830  17.484  16.697  1235592.34  600030
4   2010-01-08  16.718  17.154  17.208  16.644  1040929.92  600030

# 将时间列作为索引列
data.set_index('date',inplace=True)
data.head()

            open    close   high    low volume  code
date                        
2010-01-04  17.016  16.639  17.176  16.612  1106207.58  600030
2010-01-05  16.777  17.452  17.601  16.383  2093915.41  600030
2010-01-06  17.548  17.250  17.628  17.229  1437889.30  600030
2010-01-07  17.239  16.830  17.484  16.697  1235592.34  600030
2010-01-08  16.718  17.154  17.208  16.644  1040929.92  600030

# 平移数据
# 移动平均
data['SMA_20'] = data['close'].rolling(20).mean()
data['SMA_60'] = data['close'].rolling(60).mean()
data.head()

# 画出收盘价、移动20天周期的平均线和移动60天周期的平均线
data[['close','SMA_20','SMA_60']].plot(figsize=(10,6))
20天周期和60天周期
上图可以看出20天和60天的区别,另外下图是将上图中的三条曲线分开得到的;
三条曲线分开展示
# 下面需要计算收益率和策略
data['returns'] = np.log(data['close']/data['close'].shift(1))
data['position'] = np.where(data['SMA_20']>data['SMA_60'],1,-1)
data['returns_dis2'] = data['close']/data['close'].shift(1) - 1
data['returns_dis'] = data['close'].pct_change()
data.head()

open    close   high    low volume  code    SMA1    SMA2    SMA_20  SMA_60  return  yes_close   position    returns returns_dis2    returns_dis
date                                                                
2010-01-04  17.016  16.639  17.176  16.612  1106207.58  600030  NaN NaN NaN NaN NaN NaN -1  NaN NaN NaN
2010-01-05  16.777  17.452  17.601  16.383  2093915.41  600030  NaN NaN NaN NaN 0.047705    16.639  -1  0.047705    0.048861    0.048861
2010-01-06  17.548  17.250  17.628  17.229  1437889.30  600030  NaN NaN NaN NaN -0.011642   17.452  -1  -0.011642   -0.011575   -0.011575
2010-01-07  17.239  16.830  17.484  16.697  1235592.34  600030  NaN NaN NaN NaN -0.024649   17.250  -1  -0.024649   -0.024348   -0.024348
2010-01-08  16.718  17.154  17.208  16.644  1040929.92  600030  NaN NaN NaN NaN 0.019068    16.830  -1  0.019068    0.019251    0.019251

# 计算累计收益率
data['returns'].cumsum().apply(np.exp).plot(figsize=(10,6))  # 累计收益
累计收益率
上一篇下一篇

猜你喜欢

热点阅读