@Channelchan
2017-12-13T07:43:49.000000Z
字数 2917
阅读 26471
均线类型 双均线策略
均线与趋势是西蒙斯被TED采访时提到的关键词,做量化你必须懂,而且是深入地懂这两个词的真正意义。均线理论是当今应用最普遍的技术指标之一,它帮助交易者确认现有趋势、判断将出现的趋势、发现过度延生即将反转的趋势。接下来我们会从公式、代码、图表与策略来深入了解均线。
import talib as taimport tushare as tsimport pandas as pdimport numpy as npimport matplotlib.pyplot as plt
data = ts.get_k_data('000001', start='2016-01-01', end='2016-12-31', ktype='D',autype='qfq')data.index = pd.to_datetime(data['date'],format='%Y-%m-%d')dc = np.array(data['close'])
data['SMA'] = ta.MA(dc, 20)data['WMA'] = ta.WMA(dc, 20)data['TRIMA'] = ta.TRIMA(dc, 20)data['EMA'] = ta.EMA(dc, 20)data['DEMA'] = ta.DEMA(dc, 20)data['KAMA'] = ta.KAMA(dc, 20)
plt.plot(data['close'])plt.plot(data['SMA'], alpha=0.3)plt.plot(data['WMA'], alpha=0.3)plt.plot(data['TRIMA'], alpha=0.3)plt.plot(data['EMA'], alpha=0.3)plt.plot(data['DEMA'], alpha=0.3)plt.plot(data['KAMA'], alpha=0.3)plt.legend(loc='lower right')plt.show()

两条均线的三种交易方法
1. 当均线金叉(短期大于长期均线)时候买进,死叉(短期小于长期)时卖出。
2. 当价格上穿两条均线时买入,但价格下穿其中一条均线时卖出。
3. 当两条均线都处于向上方向时买入,当两条均线都处于下跌方向时卖出。
data['EMA'] = ta.EMA(dc, 20)data['EMA60'] = ta.EMA(dc, 60)x1=[]y1=[]x0=[]y0=[]data = data.dropna()it = data.iterrows()t0, d0 = next(it)pos = 0
第一种进出场策略:
对数据进行遍历,获取所需要的值存入x,y列表。
for t1, d1 in it:if d1.EMA > d1.EMA60 and d0.EMA < d0.EMA60:x1.append(t1)y1.append(d1.EMA)elif d1.EMA < d1.EMA60 and d0.EMA > d0.EMA60:x0.append(t1)y0.append(d1.EMA)t0, d0 = t1, d1
策略一的图表:

第二种进出场策略:
需要添加目前是否有持仓的判断。
for t1, d1 in it:if pos == 0 and d1.close > d1.EMA and d1.close > d1.EMA60 and (d0.close < d0.EMA60 or d0.close < d0.EMA):x1.append(t1)y1.append(d1.close)pos = 1elif pos == 1 and (d1.close < d1.EMA or d1.close < d1.EMA60) :x0.append(t1)y0.append(d1.close)pos = 0t0, d0 = t1, d1
策略二的图片:

第三种进出场策略
for t1, d1 in it:if pos == 0 and d1.EMA > d0.EMA and d1.EMA60 > d0.EMA60:x1.append(t1)y1.append(d1.close)pos = 1elif pos == 1 and d1.EMA < d0.EMA and d1.EMA60 < d0.EMA60 :x0.append(t1)y0.append(d1.close)pos = 0t0, d0 = t1, d1
策略三的图片:

显示图片需要添加的可视化代码:
import matplotlib as mplmpl.rc('xtick', labelsize=8)plt.plot(data['close'])plt.plot(data['EMA'], alpha=0.3)plt.plot(data['EMA60'], alpha=0.3)plt.scatter(x1, y1, c='r', marker='^', linewidths=3)plt.scatter(x0, y0, c='g', marker='v', linewidths=3)plt.show()
