美文网首页
移动平均策略(MA)

移动平均策略(MA)

作者: 跨界师 | 来源:发表于2019-07-30 00:29 被阅读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))  # 累计收益
    
    累计收益率

    相关文章

      网友评论

          本文标题:移动平均策略(MA)

          本文链接:https://www.haomeiwen.com/subject/flywrctx.html