[关闭]
@Channelchan 2017-03-04T11:34:11.000000Z 字数 2565 阅读 26107

TA_Lib 趋势通道

均线百分比通道 布林带 平均波幅率通道 高低价通道


通道

通道突破是技术分析中一个判断趋势的重要方法,其观念在于市场价格穿透了之前的价格压力或支撑,继而形成一股新的趋势,而交易策略的目标即是在突破发生时能够确认并建立仓位以获取趋势的利润。


import 模块

  1. import talib as ta
  2. import tushare as ts
  3. import pandas as pd
  4. import matplotlib.pyplot as plt

导入数据

  1. data = ts.get_k_data('000001', start='2016-01-01', end='2016-12-31', ktype='D',autype='qfq')
  2. data.index = pd.to_datetime(data['date'],format='%Y-%m-%d')

均线百分比通道

  1. middleband = ta.abstract.MA(data, timeperiod=20)
  2. upperband = middleband*1.03
  3. lowerband = middleband*0.97
  4. data_B = pd.concat([middleband, upperband , lowerband], axis=1)
  5. data_B.columns = ['middleband','upperband','lowerband']

1


布林带通道线

  1. data_B= ta.abstract.BBANDS(data, timeperiod=20)

2


平均波幅率通道线

  1. atr = ta.abstract.ATR(data, 20)
  2. middleband = ta.abstract.MA(data,20)
  3. upperband = middleband + atr
  4. lowerband = middleband - atr
  5. data_B = pd.concat([middleband, upperband, lowerband], axis=1)
  6. data_B.columns = ['middleband', 'upperband', 'lowerband']

3


高低价通道

  1. upperband = ta.abstract.MAX(data, 20, price='high')
  2. lowerband = ta.abstract.MIN(data, 20, price='low')
  3. middleband = (upperband+lowerband)/2
  4. data_B = pd.concat([middleband, upperband, lowerband], axis=1)
  5. data_B.columns = ['middleband', 'upperband', 'lowerband']

4


全部图的展示代码:

  1. plt.plot(data['close'])
  2. plt.plot(data_B['middleband'], 'r', alpha=0.3)
  3. plt.plot(data_B['upperband'], 'g', alpha=0.3)
  4. plt.plot(data_B['lowerband'], 'g', alpha=0.3)
  5. plt.show()

Donchian’s 5 and 20 day MA and Breakout system

Buy:

Exit:

  1. import talib as ta
  2. import tushare as ts
  3. import pandas as pd
  4. import matplotlib.pyplot as plt
  5. data = ts.get_k_data('000001', start='2016-01-01', end='2016-12-31', ktype='D',autype='qfq')
  6. data.index = pd.to_datetime(data['date'],format='%Y-%m-%d')
  7. atr = ta.abstract.ATR(data, 20)
  8. data['SMA20'] = ta.abstract.MA(data, 20)
  9. data['SMA5'] = ta.abstract.MA(data, 5)
  10. data['upperband20'] = data['SMA20'] + atr
  11. data['lowerband20'] = data['SMA20'] - atr
  12. data['upperband5'] = data['SMA5'] + atr
  13. data['lowerband5'] = data['SMA5'] - atr
  14. x_b=[]
  15. y_b=[]
  16. x_e=[]
  17. y_e=[]
  18. data = data.dropna()
  19. it = data.iterrows()
  20. t0, d0 = next(it)
  21. pos = 0
  22. for t1, d1 in it:
  23. if pos == 0 and d1.close > d0.upperband5 and d1.close > d0.upperband20:
  24. x_b.append(t1)
  25. y_b.append(d1.close)
  26. pos = 1
  27. elif pos == 1 and (d1.close < d0.lowerband5 or d1.close < d0.lowerband20):
  28. x_e.append(t1)
  29. y_e.append(d1.close)
  30. pos = 0
  31. t0, d0 = t1, d1
  32. plt.plot(data['close'])
  33. plt.plot(data['upperband20'], alpha=0.3)
  34. plt.plot(data['lowerband20'], alpha=0.3)
  35. plt.plot(data['upperband5'], alpha=0.3,c='r')
  36. plt.plot(data['lowerband5'], alpha=0.3,c='r')
  37. plt.scatter(x_b, y_b, c='r', marker='^', linewidths=3)
  38. plt.scatter(x_e, y_e, c='g', marker='v', linewidths=3)
  39. plt.show()

5

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