Loading ...

AROON阿隆指标策略

Author: Hukybo, Date: 2019-11-05 15:01:21
Tags:

摘要

在技术分析中阿隆(Aroon)是一个很独特的技术指标,“Aroon”一词来自梵文,寓意为“黎明曙光”。它不像MA、MACD、KDJ那样广为人所熟悉,它推出的时间更晚,直到1995年才被图莎尔·钱德(Tushar Chande)发明出来,作者还发明了钱德动量摆动指标(CMO)和日内动量指数(IMI)。如果说一个技术指标知道的人越多,使用的人也越多,那么其赚钱能力也越低,那么相对新颖的阿隆指标则恰恰相反,站在这个角度看这是一个不错的选择。

点击阅读更多内容


'''backtest
start: 2015-02-22 00:00:00
end: 2019-10-29 00:00:00
period: 1d
exchanges: [{"eid":"Futures_CTP","currency":"FUTURES"}]
'''


import talib
import numpy as np


# 外部参数
# cycle_length = 100


# 定义全局变量
mp = 0  # 用于控制虚拟持仓


# 把K线数组转换成最高价和最低价数组,用于转换为numpy.array类型数据
def get_data(bars):
    arr = [[], []]
    for i in bars:
        arr[0].append(i['High'])
        arr[1].append(i['Low'])
    return arr


# 策略主函数
def onTick():
    exchange.SetContractType("ZC000")  # 订阅期货品种
    bars = exchange.GetRecords()  # 获取K线数组
    if len(bars) < cycle_length + 1:  # 如果K线数组的长度太小,所以直接返回
        return
    np_arr = np.array(get_data(bars)) # 把列表转换为numpy.array类型数据,用于计算AROON的值
    aroon = talib.AROON(np_arr[0], np_arr[1], 20);  # 计算阿隆指标
    aroon_up = aroon[1][len(aroon[1]) - 2];  # 阿隆指标上线倒数第2根数据
    aroon_down = aroon[0][len(aroon[0]) - 2];  # 阿隆指标下线倒数第2根数据
    close0 = bars[len(bars) - 1].Close;  # 获取当根K线收盘价
    global mp  # 全局变量,用于控制虚拟仓位
    if mp == 0 and  aroon_up > aroon_down and aroon_up > 50:  # 如果当前空仓,并且阿隆上线大于下线,并且阿隆上线大于50
        exchange.SetDirection("buy")  # 设置交易方向和类型
        exchange.Buy(close0, 1)  # 开多单
        mp = 1  # 设置虚拟持仓的值,即有多单
        
    if mp == 0 and aroon_down > aroon_up and aroon_down > 50:  # 如果当前空仓,并且阿隆下线大于上线,并且阿隆下线小于50
        exchange.SetDirection("sell")  # 设置交易方向和类型
        exchange.Sell(close0 - 1, 1)  # 开空单
        mp = -1  # 设置虚拟持仓的值,即有空单
        
    if mp > 0 and  (aroon_up < aroon_down or aroon_up < 50):  # 如果当前持有多单,并且阿隆上线小于下线或者阿隆上线小于50
        exchange.SetDirection("closebuy")  # 设置交易方向和类型
        exchange.Sell(close0 - 1, 1)  # 平多单
        mp = 0  # 设置虚拟持仓的值,即空仓
        
    if mp < 0 and (aroon_down < aroon_up or aroon_down < 50):  # 如果当前持有空单,并且阿隆下线小于上线或者阿隆下线小于50
        exchange.SetDirection("closesell")  # 设置交易方向和类型
        exchange.Buy(close0, 1)  # 平空单
        mp = 0  # 设置虚拟持仓的值,即空仓
    

# 程序入口
def main():
    while True:  # 进入无限循环模式
        onTick()  # 执行策略主函数
        Sleep(1000)  # 休眠1秒


More