一、阿隆指标(Aroon)简介阿隆指标(Aroon)是由图莎尔·钱德(Tushar Chande)1995 年发明的,它通过计算自价格达到近期最高值和最低值以来所经过的期间数,帮助投资者预测证券价格从趋势到区域、区域或反转的变化。在技术分析领域中,有一个说法,一个指标使用的人越多,其效力越低。这个技术指标还挺冷门的,我们一同来看看它的效果。 from CAL.PyCAL import *import numpy as npimport pandas as pdfrom pandas import DataFrame from heapq import nlargestfrom heapq import nsmallest 二、Aroon计算方法Aroon指标分为两个具体指标,分别
计算期天数通常取20天
三、Aroon指标的基本用法
start = '2009-08-01' # 回测起始时间end = '2015-08-31' # 回测结束时间benchmark = 'HS300' # 策略参考标准universe = set_universe('HS300') # 证券池,支持股票和基金capital_base = 100000 # 起始资金freq = 'd' # 策略类型,'d'表示日间策略使用日线回测,'m'表示日内策略使用分钟线回测refresh_rate = 10 # 调仓频率,表示执行handle_data的时间间隔,若freq = 'd'时间间隔的单位为交易日,若freq = 'm'时间间隔为分钟def initialize(account): # 初始化虚拟账户状态 passdef handle_data(account): # 每个交易日的买入卖出指令 eq_AroonUp = aroonUp(account,20) eq_AroonDown = aroonDown(account,20) buyList = [] for stk in account.valid_secpos: order_to(stk, 0) for stk in account.universe: if eq_AroonUp[stk] - eq_AroonDown[stk] > 50: buyList.append(stk) for stk in buyList[:]: if stk not in account.universe or account.referencePrice[stk] == 0 or np.isnan(account.referencePrice[stk]): buyList.remove(stk) for stk in buyList: order(stk, account.referencePortfolioValue/account.referencePrice[stk]/len(buyList)) 可以看出,策略在股市处于震荡市和牛市中,表现很好;而在熊市和暴跌中,表现的非常差,最大回撤很大。这从阿隆指标的构造中,就可以理解,阿隆指标是一个跟踪趋势的指标,在震荡市和牛市中,都能精选出股票,超越指数;然而在暴跌中,处于上升趋势的股票可能跌的更惨,倾巢之下,焉有完卵。。。 四、运用Aroon指标来择时前文说到阿隆指标是一个跟踪趋势的指标,既然如此,我们为什么不把它用来择时呢?
当 start = '2009-08-01' # 回测起始时间end = '2015-08-31' # 回测结束时间benchmark = 'HS300' # 策略参考标准universe = set_universe('HS300') # 证券池,支持股票和基金capital_base = 100000 # 起始资金freq = 'd' # 策略类型,'d'表示日间策略使用日线回测,'m'表示日内策略使用分钟线回测refresh_rate = 10 # 调仓频率,表示执行handle_data的时间间隔,若freq = 'd'时间间隔的单位为交易日,若freq = 'm'时间间隔为分钟def initialize(account): # 初始化虚拟账户状态 passdef handle_data(account): # 每个交易日的买入卖出指令 eq_AroonUp = aroonUp(account,20) eq_AroonDown = aroonDown(account,20) index_osc = aroonIndex(account,20) buyList = [] for stk in account.valid_secpos: order_to(stk, 0) if index_osc > 0: for stk in account.universe: if eq_AroonUp[stk] - eq_AroonDown[stk] > 50: buyList.append(stk) for stk in buyList[:]: if stk not in account.universe or account.referencePrice[stk] == 0 or np.isnan(account.referencePrice[stk]): buyList.remove(stk) for stk in buyList: order(stk, account.referencePortfolioValue/account.referencePrice[stk]/len(buyList)) 可以看出运用阿隆指标来择时的效果还是不错的,震荡市能跑赢指数,牛市的收益基本可以吃到,暴跌也几乎完美的规避了!缺点就是最大回测还是偏大,可以考虑让条件更严格,让
将择时条件设置更严格后,最大回撤果然有所下降,但年化收益率也有大幅下降。从回测图形中,也可以明显看到,指标具有很强的滞后性,往往是指数开始涨了一段时间,策略才开始开仓买入。将 |
|