何谓均线?
例如,前5日收盘价分别为10,10.5,12,15,14,那么5日均线:

如下图所示,蓝色线是BTC/USDT每分钟收盘价,红色线是5日均线。从图上可以看出来5日均线比收盘价变化更加平滑。
双均线两条周期不同的均线,例如下图中红色和黄色分别表示5日均线和10日均线。

红色快速均线向上穿过黄色慢速均线时形成金叉,红色快速均线向下穿过黄色慢速均线时形成死叉。看了上图,是不是萌发出一种想法:如果我们在金叉信号出现的时候买入,在死叉信号出现的时候卖出,不就可以获取正的收益了吗?
下面进行第一个双均线策略(金叉时买入,死叉时卖出)。回测交易币对BTC/USDT,回测平台是币宽(可以在官网www.nextfintech.io下载)。以下默认您已经初步学会如何使用币宽平台了。
策略相关说明:
- 回测时间:2018-01-01至2018-07-01
- K线频率:3600s
- 初始资金:10000 USDT
- 交易手续费率:0.2%
- 均线参数:快速10日均线,慢速30日均线
- 回测交易所和币对:BINANCE的BTC/USDT
- # coding=utf-8
- from __future__ import print_function, absolute_import
- from nf.api import *
- import pandas as pd
- import talib as ta
- def init():
- global trade
- global exchange
- global front
- global base
- global symbol
- global freq
- global data
- global fast
- global slow
- trade=False
- exchange='BINANCE'
- front='btc'
- base='usdt'
- symbol=get_symbol(exchange,front,base)
- freq='3600s'
- fast=10
- slow=30
- subscribe(symbol,freq,slow+1)
- print('init__')
- def on_bar(bars):
- global trade
- global exchange
- global front
- global base
- global symbol
- global freq
- global fast
- global slow
- records=context.data(symbol,freq,slow+1)
- ma_fast=ta.MA(records['close'],fast)
- ma_slow=ta.MA(records['close'],slow)
- if trade==False and ma_fast.iloc[-2]<ma_slow.iloc[-2] and ma_fast.iloc[-1]>ma_slow.iloc[-1]:
- if get_positions(exchange,base)[0]['available']>records['close'].iloc[-1]:
- print('买入')
- buy_vol=get_positions(exchange,base)[0]['available']/records['close'].iloc[-1] *0.7
- order_buy=order_volume(symbol,buy_vol,side=1,position_effect=1,order_type=1,price=records['close'].iloc[-1])
- print('买单详情:',order_buy)
- trade=True
- if trade==True and ma_fast.iloc[-2]>ma_slow.iloc[-2] and ma_fast.iloc[-1]<ma_slow.iloc[-1]:
- if len(get_positions(exchange,front))!=0:
- print('卖出')
- sell_vol=get_positions(exchange,front)[0]['available']
- order_sell=order_volume(symbol,sell_vol,side=1,position_effect=1,order_type=1,price=records['close'].iloc[-1])
- print('卖单详情:',order_sell)
- trade=False
- print('on_bar处理结束')
- def on_execution_report(execrpt):
- print('成交回报:',execrpt)
- def on_error(code,info):
- print('错误代码:',code,'错误代码说明',info)
- def on_backtest_finished(indicator):
- print('绩效对象打印:',indicator)
- if __name__ == '__main__':
- run(strategy_id='2bb52f11-8730-11e8-ab81-00ffa9185dbb',
- filename='main.py',
- mode=2,
- token='6778ebc60a3b004bcc7286a5566a28df')
回测结果如下(所有结果按每日公允汇率币/USD结算):
累计收益率:-24.33%
年化收益率:-38.62%
基准收益率:-79.03%
最大回撤:36.47%
Alpha:-0.04
Beta:0.46
从回测结果可以看出,双均线策略实现了超额收益,但是总体收益不佳。下图是BTC/USDT的行情走势图,2月份至3月份和4月份至5月份明显处于上升趋势,1月至2月份市场处于下跌趋势,3月份至4月份和5月份至7月份市场处于震荡下跌趋势。
双均线优化均线策略属于趋势策略,在趋势市场中表现较好,但是在震荡市场中会持续出现回撤,且存在一定的滞后性,均线周期越大滞后性越明显。基于此,我们可以认为价格在120日均线之上时处于多头趋势市场,因此开仓条件调整为:当价格在120日均线之上,且快速均线上穿慢速均线时,开仓买入。
回测结果:
累计收益率:-14.36%
年化收益率:-25.02%
基准收益率:-79.03%
最大回撤:37.82%
Alpha:0.06
Beta:0.41
从回测结果看,在增加了价格处于120日均线之上时,累计收益率和年化收益率都有了明显提升。
小结:均线策略适合于趋势市场,具有右侧交易性质,且周期越长的均线滞后性越明显,需要和其他趋势判断指标和仓位控制进行优化。本片作为第一篇量化策略比较简单,读者有兴趣的话可以自己回测以下其他的均线指标(例如指数加权平均线和简单易懂平均线),用python的talib库可以快速计算这些指标。声明:本文主要用于共同探讨和学习,请勿直接用于实盘交易。
后续将推出更多系列的量化策略,欢迎大家关注,共同交流。
未经本人允许,禁止转载。币宽


雷达卡


京公网安备 11010802022788号







