[关闭]
@Channelchan 2018-11-29T22:48:29.000000Z 字数 2794 阅读 65179

动能指标策略

用动能指标交易

目录

什么是动能指标?

动能指标对价格的计算与物理学中对速度的计算相似,需要知道价格移动的距离、时间、移动的速度与加速度,这些变化都反映着市场价格在不同维度上的变化。动能指标的类型主要有两种,一种是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. import pandas as pd
  2. import warnings
  3. import numpy as np
  4. from datetime import datetime
  5. import matplotlib.pyplot as plt
  6. import talib as ta
  7. from talib import abstract
  8. warnings.filterwarnings('ignore')
  9. data = pd.Panel({s: pd.read_excel('three.xlsx', sheetname=s, index_col='datetime')
  10. for s in ['BTCUSDT.binance', 'EOSUSDT.binance', 'ETHUSDT.binance']})
  1. ROCR100 = pd.DataFrame({item: ta.ROCR100(value.values, 60) for item, value in data.minor_xs('close').iteritems()},
  2. index = data.minor_xs('close').index)
  1. fig = plt.figure(figsize=(15, 7))
  2. plt.hlines(100,ROCR100.index[0],ROCR100.index[-1] , linestyles='dashed', alpha=0.5)
  3. plt.plot(ROCR100)
  4. plt.show()

output_7_0.png-76.7kB

  1. dataBtc = data['BTCUSDT.binance'].iloc[-200:]
  1. #MACD
  2. macd = abstract.MACD(dataBtc,price='close')
  3. # macd
  4. fig, (ax, ax1) = plt.subplots(2, 1, sharex=True, figsize=(15,7))
  5. ax.plot(dataBtc['close'])
  6. ax1.plot( macd['macd'])
  7. ax1.plot(macd['macdsignal'])
  8. ax1.bar(macd.index, macd['macdhist'], width=0.03, color='g')
  9. plt.show()

output_9_0.png-46.2kB

  1. #RSI
  2. RSI = abstract.RSI(dataBtc, 20, price='close')
  3. fig, (ax, ax1) = plt.subplots(2, 1, sharex=True, figsize=(15,7))
  4. ax.plot(dataBtc['close'])
  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_10_0.png-42.2kB

  1. #Stochastic
  2. KDJ = abstract.STOCH(dataBtc)
  3. fig, (ax, ax1) = plt.subplots(2, 1, sharex=True, figsize=(15,7))
  4. ax.plot(dataBtc['close'])
  5. ax1.plot(KDJ['slowk'], label='slowK')
  6. ax1.plot(KDJ['slowd'],'y', label='fastK')
  7. ax1.axhline(70,alpha=0.3)
  8. ax1.axhline(30,alpha=0.3)
  9. plt.legend(loc='upper left')
  10. plt.show()

output_11_0.png-79.9kB

如何用动能指标做策略?

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. # 策略参数
  2. RSIPeriod = 20
  3. lot = 1
  4. # 计算信号
  5. rsi = ta.RSI(am3.close, self.RSIPeriod)
  6. # 现象条件
  7. overBought = rsi[-1] > 70
  8. overSold = rsi[-1] < 30
  9. # 进出场条件
  10. if overSold and (self.posDict[symbol + "_LONG"]==0):
  11. if self.posDict[symbol + "_SHORT"] == 0:
  12. self.buy(symbol, bar.close * 1.01, self.lot)
  13. elif self.posDict[symbol + "_SHORT"] > 0:
  14. self.cover(symbol, bar.close * 1.02, self.posDict[symbol + "_SHORT"])
  15. self.buy(symbol, bar.close * 1.01, self.lot)
  16. elif overBought and (self.posDict[symbol + "_SHORT"] == 0):
  17. if self.posDict[symbol + "_LONG"] == 0:
  18. self.short(symbol, bar.close * 0.99, self.lot)
  19. elif self.posDict[symbol + "_LONG"] > 0:
  20. self.sell(symbol, bar.close * 0.99, self.posDict[symbol + "_LONG"])
  21. self.short(symbol, bar.close *0.99, self.lot)

作业

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

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