[关闭]
@Channelchan 2018-11-29T22:31:52.000000Z 字数 2243 阅读 64827

移动平均线

用Python量化你的技术分析

目录

均线是什么?

均线理论是当今应用最普遍的技术指标之一,它帮助交易者确认现有趋势、判断将出现的趋势、发现过度延生即将反转的趋势。另外均线与趋势是西蒙斯被TED采访时提到的关键词,因此做量化你必须懂,而且是深入地懂这两个词的真正意义。

不同均线是怎么计算的?


1. Simple Moving Average 平滑价格

MA1.png-2.1kB


2. Weighted Moving Average 用权重方法突出前段

MA2.png-4.8kB


3. Triangular Moving Average 突出中间,用于周期分析

MA3.png-3.1kB


4. Exponential Moving Average 用指数方法突出前段

MA4.png-12.2kB


5. Double Exponential Moving Average 突出EMA,减少滞后。

MA5.png-4.3kB


6. Kaufman Adaptive Moving Average 自适应自适应市场变化与波动

MA6.png-40.4kB

均线如何用图表显示?

  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. warnings.filterwarnings('ignore')
  7. data = pd.read_excel('three.xlsx', sheetname='BTCUSDT.binance', index_col='datetime').iloc[-300:]
  1. from talib import abstract
  2. #直接读取DataFrame,默认读取cloumns名为close的数据。
  3. data['close'] = data.close
  4. data['SMA'] = abstract.MA(data, 20)
  5. data['WMA'] = abstract.WMA(data, 20)
  6. data['TRIMA'] = abstract.TRIMA(data, 20)
  7. data['EMA'] = abstract.EMA(data, 20)
  8. data['DEMA'] = abstract.DEMA(data, 20)
  9. data['KAMA'] = abstract.KAMA(data, 20)
  1. fig = plt.figure(figsize=(15, 7))
  2. plt.plot(data['close'])
  3. plt.plot(data['SMA'], alpha=0.5)
  4. plt.plot(data['WMA'], alpha=0.5)
  5. plt.plot(data['TRIMA'], alpha=0.5)
  6. plt.plot(data['EMA'], alpha=0.5)
  7. plt.plot(data['DEMA'], alpha=0.5)
  8. plt.plot(data['KAMA'], alpha=0.5)
  9. plt.legend(loc='lower right')
  10. plt.show()

output_7_0.png-71kB

如何用均线构建策略?

两条均线的三种交易方法
1. 当均线金叉(短期大于长期均线)时候买进,死叉(短期小于长期)时卖出。
2. 当价格上穿两条均线时买入,但价格下穿其中一条均线时卖出。
3. 当两条均线都处于向上方向时买入,当两条均线都处于下跌方向时卖出。

  1. # 策略参数
  2. fastWindow = 20 # 快速均线参数
  3. slowWindow = 55 # 慢速均线参数
  4. # 指标计算
  5. fastMa = ta.SMA(am60.close, self.fastWindow)
  6. slowMa = ta.SMA(am60.close, self.slowWindow)
  7. # 现象条件
  8. crossOver = (fastMa[-1] > slowMa[-1]) and (fastMa[-2] <= slowMa[-2])
  9. crossBelow = (fastMa[-1] < slowMa[-1]) and (fastMa[-2] >= slowMa[-2])
  10. # 需要避免同时持有多空头寸
  11. # 金叉, 多头无头寸,准备买入进场
  12. if (crossOver) and (self.posDict[symbol + "_LONG"] == 0):
  13. # 检查空头头寸,为0直接买入进场
  14. if self.posDict[symbol + "_SHORT"] == 0:
  15. self.buy(symbol, bar.close*1.02, self.lots)
  16. # 空头有持仓,先买平再买入进出
  17. elif self.posDict[symbol + "_SHORT"] > 0:
  18. self.cover(symbol, bar.close*1.02, self.posDict[symbol + "_SHORT"])
  19. self.buy(symbol, bar.close*1.02, self.lots)
  20. # 死叉, 空头无头寸,准备卖空进场
  21. elif (crossBelow) and (self.posDict[symbol + "_SHORT"] == 0):
  22. # 检查多头头寸,为0直接卖出进场
  23. if self.posDict[symbol + "_LONG"] == 0:
  24. self.short(symbol, bar.close*0.98, self.lots)
  25. # 多头有持仓,先卖平,再卖出进场
  26. elif self.posDict[symbol + "_LONG"] > 0:
  27. self.sell(symbol, bar.close*0.98, self.posDict[symbol + "_LONG"])
  28. self.short(symbol, bar.close*0.98, self.lots)

作业:

更换标的与均线类型回测策略。

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