[关闭]
@Channelchan 2017-12-13T07:43:49.000000Z 字数 2917 阅读 26771

TA_Lib 趋势均线篇

均线类型 双均线策略


均线与趋势是西蒙斯被TED采访时提到的关键词,做量化你必须懂,而且是深入地懂这两个词的真正意义。均线理论是当今应用最普遍的技术指标之一,它帮助交易者确认现有趋势、判断将出现的趋势、发现过度延生即将反转的趋势。接下来我们会从公式、代码、图表与策略来深入了解均线。


平滑价格


用权重方法突出前段



突出中间用于周期分析


用指数方法突出前段



为平滑指数,一般取作


突出减少滞后。


自适应自适应市场变化与波动






  1. import talib as ta
  2. import tushare as ts
  3. import pandas as pd
  4. import numpy as np
  5. 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')
  3. dc = np.array(data['close'])
  1. data['SMA'] = ta.MA(dc, 20)
  2. data['WMA'] = ta.WMA(dc, 20)
  3. data['TRIMA'] = ta.TRIMA(dc, 20)
  4. data['EMA'] = ta.EMA(dc, 20)
  5. data['DEMA'] = ta.DEMA(dc, 20)
  6. data['KAMA'] = ta.KAMA(dc, 20)
  1. plt.plot(data['close'])
  2. plt.plot(data['SMA'], alpha=0.3)
  3. plt.plot(data['WMA'], alpha=0.3)
  4. plt.plot(data['TRIMA'], alpha=0.3)
  5. plt.plot(data['EMA'], alpha=0.3)
  6. plt.plot(data['DEMA'], alpha=0.3)
  7. plt.plot(data['KAMA'], alpha=0.3)
  8. plt.legend(loc='lower right')
  9. plt.show()

MA_1


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

  1. data['EMA'] = ta.EMA(dc, 20)
  2. data['EMA60'] = ta.EMA(dc, 60)
  3. x1=[]
  4. y1=[]
  5. x0=[]
  6. y0=[]
  7. data = data.dropna()
  8. it = data.iterrows()
  9. t0, d0 = next(it)
  10. pos = 0

第一种进出场策略:
对数据进行遍历,获取所需要的值存入x,y列表。

  1. for t1, d1 in it:
  2. if d1.EMA > d1.EMA60 and d0.EMA < d0.EMA60:
  3. x1.append(t1)
  4. y1.append(d1.EMA)
  5. elif d1.EMA < d1.EMA60 and d0.EMA > d0.EMA60:
  6. x0.append(t1)
  7. y0.append(d1.EMA)
  8. t0, d0 = t1, d1

策略一的图表:
2


第二种进出场策略:
需要添加目前是否有持仓的判断。

  1. for t1, d1 in it:
  2. if pos == 0 and d1.close > d1.EMA and d1.close > d1.EMA60 and (d0.close < d0.EMA60 or d0.close < d0.EMA):
  3. x1.append(t1)
  4. y1.append(d1.close)
  5. pos = 1
  6. elif pos == 1 and (d1.close < d1.EMA or d1.close < d1.EMA60) :
  7. x0.append(t1)
  8. y0.append(d1.close)
  9. pos = 0
  10. t0, d0 = t1, d1

策略二的图片:
此处输入图片的描述


第三种进出场策略

  1. for t1, d1 in it:
  2. if pos == 0 and d1.EMA > d0.EMA and d1.EMA60 > d0.EMA60:
  3. x1.append(t1)
  4. y1.append(d1.close)
  5. pos = 1
  6. elif pos == 1 and d1.EMA < d0.EMA and d1.EMA60 < d0.EMA60 :
  7. x0.append(t1)
  8. y0.append(d1.close)
  9. pos = 0
  10. t0, d0 = t1, d1

策略三的图片:
此处输入图片的描述


显示图片需要添加的可视化代码:

  1. import matplotlib as mpl
  2. mpl.rc('xtick', labelsize=8)
  3. plt.plot(data['close'])
  4. plt.plot(data['EMA'], alpha=0.3)
  5. plt.plot(data['EMA60'], alpha=0.3)
  6. plt.scatter(x1, y1, c='r', marker='^', linewidths=3)
  7. plt.scatter(x0, y0, c='g', marker='v', linewidths=3)
  8. plt.show()
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注