[关闭]
@Channelchan 2018-11-29T22:40:17.000000Z 字数 3109 阅读 65040

通道策略

用Python量化你的技术分析

目录

通道是什么?

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

不同通道是怎么计算的?


1. 均线百分比通道

Channel1.png-3.2kB


2. 布林带通道

Channel2.png-2.7kB


3. 平均波幅通道

Channel3.png-3kB


4. 高低价通道

Channel4.png-3.9kB

通道如何用图表显示?

  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.read_excel('three.xlsx', sheetname='BTCUSDT.binance', index_col='datetime').iloc[-300:]
  1. #均线百分比通道
  2. middleband = abstract.MA(data, timeperiod=20)
  3. upperband = middleband*1.03
  4. lowerband = middleband*0.97
  5. data_B = pd.concat([middleband, upperband , lowerband], axis=1)
  6. data_B.columns = ['middleband','upperband','lowerband']
  7. plt.figure(figsize=(15,7))
  8. plt.plot(data['close'])
  9. plt.plot(data_B['middleband'], 'r', alpha=0.3)
  10. plt.plot(data_B['upperband'], 'g', alpha=0.3)
  11. plt.plot(data_B['lowerband'], 'g', alpha=0.3)
  12. plt.show()

output_6_0.png-54.9kB

  1. #布林带
  2. data_B= abstract.BBANDS(data, timeperiod=20)
  3. plt.figure(figsize=(15,7))
  4. plt.plot(data['close'])
  5. plt.plot(data_B['middleband'], 'r', alpha=0.3)
  6. plt.plot(data_B['upperband'], 'g', alpha=0.3)
  7. plt.plot(data_B['lowerband'], 'g', alpha=0.3)
  8. plt.show()

output_7_0.png-54.8kB

  1. #平均波幅率通道线
  2. atr = abstract.ATR(data, 20)
  3. middleband = abstract.MA(data, 20)
  4. upperband = middleband + atr
  5. lowerband = middleband - atr
  6. data_B = pd.concat([middleband, upperband, lowerband], axis=1)
  7. data_B.columns = ['middleband', 'upperband', 'lowerband']
  8. plt.figure(figsize=(15,7))
  9. plt.plot(data['close'])
  10. plt.plot(data_B['middleband'], 'r', alpha=0.3)
  11. plt.plot(data_B['upperband'], 'g', alpha=0.3)
  12. plt.plot(data_B['lowerband'], 'g', alpha=0.3)
  13. plt.show()

output_8_0.png-58.2kB

  1. #高低价通道
  2. upperband = abstract.MAX(data, 20, price='high')
  3. lowerband = abstract.MIN(data, 20, price='low')
  4. middleband = (upperband+lowerband)/2
  5. data_B = pd.concat([middleband, upperband, lowerband], axis=1)
  6. data_B.columns = ['middleband', 'upperband', 'lowerband']
  7. plt.figure(figsize=(15,7))
  8. plt.plot(data['close'])
  9. plt.plot(data_B['middleband'], 'r', alpha=0.3)
  10. plt.plot(data_B['upperband'], 'g', alpha=0.3)
  11. plt.plot(data_B['lowerband'], 'g', alpha=0.3)
  12. plt.show()

![output_9_0.png-47.8kB][8]

如何用通道构建策略?

1. Bollinger Band

Buy: 价格突破UpperBand 和 Sigma<0.005

Sell: b%>0.05

  1. # 参数设置
  2. lowVolThrehold = 0.005; highVolThrehold = 0.05
  3. BBandPeriod = 20
  4. lot = 1
  5. # 指标计算
  6. up, mid, low = ta.BBANDS(am.close, self.BBandPeriod)
  7. sigma = (up - mid) / (2 * mid)
  8. # 现象条件
  9. breakUp = (am.close[-2] <= up[-2]) and (am.close[-1] > up[-2])
  10. breakDn = (am.close[-2] <= low[-2]) and (am.close[-1] > low[-2])
  11. # 进出场条件
  12. if breakUp and (sigma < self.lowVolThrehold) and (self.posDict[symbol + "_LONG"]==0):
  13. if self.posDict[symbol + "_SHORT"] == 0:
  14. self.buy(symbol, bar.close * 1.01, self.lot)
  15. elif self.posDict[symbol + "_SHORT"] > 0:
  16. self.cover(symbol, bar.close * 1.02, self.posDict[symbol + "_SHORT"])
  17. self.buy(symbol, bar.close * 1.01, self.lot)
  18. elif breakDn and (sigma < self.lowVolThrehold) and (self.posDict[symbol + "_SHORT"]==0):
  19. if self.posDict[symbol + "_LONG"] == 0:
  20. self.short(symbol, bar.close * 0.99, self.lot)
  21. elif self.posDict[symbol + "_LONG"] > 0:
  22. self.sell(symbol, bar.close * 0.99, self.posDict[symbol + "_LONG"])
  23. self.short(symbol, bar.close *0.99, self.lot)
  24. if sigma>highVolThrehold:
  25. if self.posDict[symbol + "_LONG"] > 0:
  26. self.sell(symbol, bar.close * 0.98, self.posDict[symbol + "_LONG"])
  27. elif self.posDict[symbol + "_SHORT"] > 0:
  28. self.cover(symbol, bar.close * 1.02, self.posDict[symbol + "_SHORT"])

作业:

写一个高低价通道突破策略

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