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

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()
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注