本文介绍金融市场中的量化交易策略之移动平均线MA策略。
一、概念
移动平均线,Moving Average,简称MA,MA是用统计分析的方法,将一定时期内的证券价格(指数)加以平均,并把不同时间的平均值连接起来,形成一根MA,用以观察证券价格变动趋势的一种技术指标。
移动平均线是由著名的美国投资专家Joseph E.Granville(葛兰碧,又译为格兰威尔)于20世纪中期提出来的。均线理论是当今应用最普遍的技术指标之一,它帮助交易者确认现有趋势、判断将出现的趋势、发现过度延生即将反转的趋势。其图如下:
均线最主要目的是用来判断趋势通常是预期市场现在跟未来可能的走势。
二、计算方法
移动平均线代表的是一种算术平均线,把一段时间周期内的价格相加,除以周期频率。
移动平均线=将N天的收盘价加总后再除以N,即得到第N天的算术平均线数值。
N天:只计算交易日(有开盘的日子、没开盘不算)
时间单位:要注意的是,有时候不用日资料,也会使用周资料、小时、分钟为时间切分单位,这些也都能够画出均线。简单来说,均线就是把价格取平均这样而已。
不同投资交易周期的使用者,会使用不同周期的时间(分钟收盘价[分K线]、小时收盘价[小时K线]、日收盘价[日K线]、周收盘价[周K线])。
三、使用方法
当两个长短不同的移动平均线(MA)在图表中交叉,有个专有名词叫做 死亡交叉、黄金交叉:
移动平均线(Moving Average)的黄金交叉:短均线向上突破长均线
一般来说,当移动平均线5MA向上突破10MA的时候,被称为是黄金交叉,表示短期内可能会上涨、有波段涨幅,适合多单进场或是空单出场。
移动平均线(Moving Average)的死亡交叉:短均线向下突破长均线
当移动平均线5MA跌破10MA的时候,被视为死亡交叉,表示短期内可能会下跌、有波段跌幅,适合空单进场或是多单出场。
四、Python3程序实现
1、获取K线数据
exchange = Exchange("binance") #
symbol = "BTC_USDT"
kline = exchange.kline(symbol = symbol, interval = '1day', limit = 120)
stamp, open, high, low, close, volume = kline
2、使用TA-Lib计算
MA5 = talib.MA(close, 5)
MA10 = talib.MA(close, 10)
3、判断趋势
DIRECTION = ""
if (MA5[-2] < MA10[-2] and MA5[-1] > MA10[-1]): # MA5-MA10金叉DIRECTION = "BUY"
if (MA5[-2] > MA10[-2] and MA5[-1] < MA10[-1]): # MA5-MA10死叉DIRECTION = "SELL"
4、执行交易
ticker = exchange.ticker(symbol)
if DIRECTION == "BUY":info = exchange.order(symbol, "BUY", "LIMIT", quantity=0.01, price=ticker["last"])print(info)
elif DIRECTION == "SELL":info = exchange.order(symbol, "SELL", "LIMIT", quantity=0.01, price=ticker["last"])print(info)
完整代码如下
exchange = Exchange("binance") #
symbol = "BTC_USDT"
kline = exchange.kline(symbol = symbol, interval = '1day', limit = 120)
stamp, open, high, low, close, volume = klineMA5 = talib.MA(close, 5)
MA10 = talib.MA(close, 10) DIRECTION = ""
if (MA5[-2] < MA10[-2] and MA5[-1] > MA10[-1]): # MA5-MA10金叉DIRECTION = "BUY"
if (MA5[-2] > MA10[-2] and MA5[-1] < MA10[-1]): # MA5-MA10死叉DIRECTION = "SELL"ticker = exchange.ticker(symbol)
if DIRECTION == "BUY":info = exchange.order(symbol, "BUY", "LIMIT", quantity=0.01, price=ticker["last"])print(info)
elif DIRECTION == "SELL":info = exchange.order(symbol, "SELL", "LIMIT", quantity=0.01, price=ticker["last"])print(info)
五、注意事项
1、除了MA指标之外,还有指数移动平均线(EMA)和加权移动平均线(WMA)两种均线指标,计算方法大同小异。
2、当市场行情正处于震荡期时,移动平均线的卖出买入信号会频繁出现,而这时往往不是适合的时机,要根据其他指标综合判断。
3.移动平均线的变化较为缓慢,有一定的滞后性。
六、相关链接
本文中的相关信息可以参考本博客上的其他专栏
1、TA-Lib安装使用
2、常用交易所SDK