900字范文,内容丰富有趣,生活中的好帮手!
900字范文 > a股量化交易接口策略——阿隆指标

a股量化交易接口策略——阿隆指标

时间:2022-04-26 15:34:43

相关推荐

a股量化交易接口策略——阿隆指标

1995年,图莎尔·钱德(Tushar Chande)发明了阿隆指标(Aroon),目前还是一个比较冷门的指标。

它通过计算自价格达到近期最高值和最低值以来所经过的期间数,可以帮助预测价格趋势到区域,或趋势区域到趋势的变化。

该指标由三部分组成:

其中:N=确定的时间段,HH=在此期间出现最高价后的天数,LL=在此期间出现最低价后的天数。

1.阿隆向上(Aroon-Up): [(N – HH)/ N]×100% ] ;

2.阿隆向下(Aroon-Down): [(N – LL)/ N]×100% ] ;

3.阿隆震荡线(Aroon Oscillator):阿隆Up – 阿隆Down 。

观察三种状态来分析Aroon指标:

1.Up线:达到100时,表示市场处于多头强势,跌破50表示向上的趋势正在失去动力,达到0时,表示多头处于极弱势;

Down线:达到100时,市场正处于空头强势,跌破50时表示向下的趋势正在失去动力,达到0时,表示空头处于极弱势;

两条线如果同处于底部,股票则处于盘整阶段,无趋势。

2.两条线平行运动时,表明市场原有趋势仍在继续,直到由极值水平或交叉穿行而改变市场方向为止。

3.当下行线上穿上行线时,表明原有趋势逐渐减弱,预计趋势将开始反转,反之亦然。

阿隆指标可以说是一个跟踪趋势的指标,如果把它用来择时会有什么效果呢?

def aroonIndex(account,timeLength=20):

#构建指数阿隆指标

indexSeries = pd.Series(account.get_symbol_history(‘benchmark’, timeLength)[‘closeIndex’])

indexAronUp = (nlargest(1,range(len(indexSeries)),key=indexSeries.get)[0]+1)*100/timeLength

indexAronDown = (nsmallest(1,range(len(indexSeries)),key=indexSeries.get)[0]+1)*100/timeLength

indexOsc = indexAronUp – indexAronDown

return indexOsc

当indexOsc 大于 0时,可以考虑开仓

start = ‘-08-01’ # 回测起始时间

end = ‘-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):# 初始化虚拟账户状态

pass

def 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))

如果让indexOsc > 50呢:

start = ‘-08-01’ # 回测起始时间

end = ‘-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):# 初始化虚拟账户状态

pass

def 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 > 50:

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))

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。