[关闭]
@Channelchan 2018-11-14T13:59:58.000000Z 字数 3556 阅读 1067

动能指标策略

用动能指标交易

目录

什么是动能指标?

动能指标对价格的计算与物理学中对速度的计算相似,需要知道价格移动的距离、时间、移动的速度与加速度,这些变化都反映着市场价格在不同维度上的变化。动能指标的类型主要有两种,一种是Momentum 指标,它有中间轴,可以是0或100,上下没有界限;另一种是Oscillator 振荡器,它的取值在0至100之间。

MOM/MACD/RSI/Stochastic是怎么计算的?


1. Momentum

M1.png-4.5kB


2. MACD

MACD=12'day'EMA-26'day'EMA

MACD'signal=9'day'EMA(MACD)

Hist=MACD-MACD'signal


3. RSI

M3.png-10.4kB


4. Stochastic

M4.png-8.5kB

如何用图像展示动能指标?

  1. from jaqs.data import DataView
  2. from jaqs.data import RemoteDataService
  3. import os
  4. import numpy as np
  5. import talib as ta
  6. import pandas as pd
  7. from datetime import datetime
  8. import matplotlib.pyplot as plt
  9. import warnings
  10. warnings.filterwarnings("ignore")
  11. dataview_folder = 'JAQS_Data/hs300'
  12. dv = DataView()
  13. dv.load_dataview(dataview_folder)
Dataview loaded successfully.
  1. def change_index(df):
  2. df.index = pd.Index(map(lambda x: datetime.strptime(str(x),"%Y%m%d") , df.index))
  3. return df
  4. data = change_index(dv.get_ts('close_adj').loc[20170105:])
  1. symbol= ['000001.SZ','600036.SH','600050.SH','000008.SZ','000009.SZ']
  1. price_dict = {name: data[name] for name in symbol}
  1. data_mom = pd.DataFrame({item: ta.ROCR100(value.values,20) for item,value in price_dict.items()},index=data.index).dropna()
  1. fig = plt.figure(figsize=(15, 7))
  2. plt.plot(data_mom)
  3. plt.hlines(100,data_mom.index[0],data_mom.index[-1] , linestyles='dashed', alpha=0.5)
  4. plt.legend(data_mom.columns, loc='upper left')
  5. plt.show()

output_10_0.png-110.1kB

  1. #MACD
  2. macd = ta.abstract.MACD(data, price='600036.SH')
  3. # macd
  4. fig, (ax, ax1) = plt.subplots(2, 1, sharex=True, figsize=(15,7))
  5. ax.plot(macd.index, data['600036.SH'])
  6. ax1.plot(macd.index, macd['macd'])
  7. ax1.plot(macd.index, macd['macdsignal'])
  8. ax1.bar(macd.index, macd['macdhist'])
  9. plt.show()

output_12_0.png-54.2kB

  1. #RSI
  2. RSI = ta.abstract.RSI(data,20, price='600036.SH')
  3. fig, (ax, ax1) = plt.subplots(2, 1, sharex=True, figsize=(15,7))
  4. ax.plot(data['600036.SH'])
  5. ax1.plot(RSI,'r', label='RSI')
  6. ax1.axhline(70,alpha=0.3)
  7. ax1.axhline(30,alpha=0.3)
  8. plt.legend()
  9. plt.show()

output_13_0.png-47.5kB

  1. high = change_index(dv.get_ts('high_adj').loc[20170105:])['600036.SH'].values
  2. low = change_index(dv.get_ts('low_adj').loc[20170105:])['600036.SH'].values
  3. close = change_index(dv.get_ts('close_adj').loc[20170105:])['600036.SH'].values
  1. #Stochastic
  2. k,d = ta.STOCH(high, low, close, fastk_period=5, slowk_period=3, slowk_matype=0, slowd_period=3, slowd_matype=0)
  3. KDJ = pd.concat([pd.Series(k,index=data.index), pd.Series(d,index=data.index)], axis=1, keys=['slowk','slowd'])
  4. fig, (ax, ax1) = plt.subplots(2, 1, sharex=True, figsize=(15,7))
  5. ax.plot(data['600036.SH'])
  6. ax1.plot(KDJ['slowk'], label='slowK')
  7. ax1.plot(KDJ['slowd'],'y', label='fastK')
  8. ax1.axhline(70,alpha=0.3)
  9. ax1.axhline(30,alpha=0.3)
  10. plt.legend(loc='upper left')
  11. plt.show()

output_15_0.png-85.5kB

如何用动能指标做策略?

1. 图表的领先形态(Charting Patterns-Leading ahead):
可以通过观察指标对价格做领先的形态或走势判断。

2. 交叉信号(Cross Signals):
快线高于慢线金叉,看涨;快线低于慢线死叉,看跌。

3. 柱的斜率(The slope of MACD-Histogram):
当前的柱比前一根高,看涨;当前的柱比前一根低,看跌。

4. 超买超卖(Overbought/OverSold):
当振荡器高于上方的值如RSI(70)为超买,低于下方的值如RSI(30)为超卖,超卖买入,超买卖出。

5. 背离(Divergence):
价格创新高,而指标没有创新高,顶背离,看跌。
价格创新低,而指标没有创新低,底背离,看涨。

RSI判断超买超卖方法:

底背离买入:
RSI< 30

顶背离卖出:
RSI>70

  1. # Bollinger Band
  2. import rqalpha
  3. from rqalpha.api import *
  4. import talib
  5. def init(context):
  6. context.s1 = "000001.XSHE"
  7. context.PERIOD = 20
  8. def handle_bar(context, bar_dict):
  9. price = history_bars(context.s1, context.PERIOD*2+1, '1d', 'close')
  10. RSI = talib.RSI(price, 20)
  11. cur_position = context.portfolio.positions[context.s1].quantity
  12. shares = context.portfolio.cash/bar_dict[context.s1].close
  13. if RSI[-1]>70:
  14. order_target_value(context.s1, 0)
  15. if RSI[-1]<30:
  16. order_shares(context.s1, shares)
  17. config = {
  18. "base": {
  19. "start_date": "2015-06-01",
  20. "end_date": "2017-12-30",
  21. "accounts": {'stock':1000000},
  22. "benchmark": "000001.XSHE"
  23. },
  24. "extra": {
  25. "log_level": "error",
  26. },
  27. "mod": {
  28. "sys_analyser": {
  29. "enabled": True,
  30. "plot": True
  31. }
  32. }
  33. }
  34. rqalpha.run_func(init=init, handle_bar=handle_bar, config=config)

output_18_0.png-61kB

作业

根据RSI背离策略例子,写出其他的动能策略

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注