@Channelchan
2017-12-13T15:43:49.000000Z
字数 2917
阅读 26300
均线类型
双均线策略
均线与趋势是西蒙斯被TED采访时提到的关键词,做量化你必须懂,而且是深入地懂这两个词的真正意义。均线理论是当今应用最普遍的技术指标之一,它帮助交易者确认现有趋势、判断将出现的趋势、发现过度延生即将反转的趋势。接下来我们会从公式、代码、图表与策略来深入了解均线。
import talib as ta
import tushare as ts
import pandas as pd
import numpy as np
import 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 = 1
elif pos == 1 and (d1.close < d1.EMA or d1.close < d1.EMA60) :
x0.append(t1)
y0.append(d1.close)
pos = 0
t0, 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 = 1
elif pos == 1 and d1.EMA < d0.EMA and d1.EMA60 < d0.EMA60 :
x0.append(t1)
y0.append(d1.close)
pos = 0
t0, d0 = t1, d1
策略三的图片:
显示图片需要添加的可视化代码:
import matplotlib as mpl
mpl.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()