计算公式
AR = [N天所有(High-Open)的和/ N天所有(Open—Low)的和] * 100
其中:High=当日最高价;Low=当日最低价;Open=当日开市价N为公式中的设定参数,一般设定为26日。
气指标的基本应用法则
(1)AR值以100为中心地带,其±20之间,即AR值在80-120之间波动时,属盘整行情,市价走势比较平稳,不会出现剧烈波动。
(2)AR值走高时表示行情活跃,人气旺盛,过高则表示市价进入高价,应选择时机退出,AR值的高度没有具体标准,一般情况下,AR值上升至150以上时,市价随时可能回档下跌。
(3)AR值走低时表示人气衰退,需要充实,过低则暗示市价可能跌入低谷,可考虑伺机介入,一般AR值跌至70以下时,市价有可能随时反弹上升。
(4)从AR曲线可以看出一段时期的买卖气势,并具有先于市价到达峰或跌入谷底的功能,此策略配合MA一同使用。
MA指标简介MA:在上升行情进入稳定期,短周期、中周期、长周期移动平均线从上而下依次顺序排列,向右上方移动。
在下跌行情中,短周期、中周期、长周期移动平均线自下而上依次顺序排列,向右下方移动,称为空头 排列,预示市价将大幅下跌。
策略逻辑
根据市价慢涨快跌的特点,我们在经典的AR-MA上作一些调整:
- 如果AR值 > 120,当MA(5)>MA(10)>MA(30),做多 。
- 当MA(5)<MA(10)<MA(30),做空 ,并且此条件下,如果AR值 < 75,代表这波下跌动能趋于耗尽,这时候平掉空头。
- 如果110 >= AR值 >= 90 ,代表市价走势比较平稳,不会出现剧烈波动,这时候保持空仓。
- 首先,我们选择要交易的标的,这里选择的是'RU1809.SHF',把标的本身的市场情况作为参考标准。
- 然后,编写策略初始化部分,initialize函数只会运行一次,在第一个日期运行,因此可以把策略一些参数放在该函数定义。 在这里我们设置AR的上下阈值,以及短、中、长均线的窗口,分别为5、10、30天。
- handle_data函数会每个周期(日/分)运行一次,可以把行情数据理解成K线,然后handle_data函数会在每个K线上依次运行,每天都进行均线值和AR值的计算。
- 最后启动回测,编写策略回测接口。
- # 1. 策略基本参数
- def prepare(context):
- # 策略比较参考标准
- benchmark = 'RU1809.SHF'
- def initialize(context):
- # 设置是否是结算模式
- context.set_need_settle(False)
- # 设置最大杠杆
- context.set_max_leverage(1, 'fill_amap')
- #设置参数
- context.ar_period=26
- #设置AR阈值、MA窗口
- context.ar_upr=140
- context.ar_dwn=75
- context.short_period=5
- context.mid_period=10
- context.long_period=30
-
- def handle_data(context, data):
-
- if context.trading_day_index < context.long_period: # 在生成长期均线以后才开始真正运行
- return
-
- today = data.current_dt.strftime('%Y-%m-%d') # 当前交易日期
- instrument = context.future_symbol(context.instruments[0]) # 交易标的
- curr_po=context.portfolio.positions[instrument] # 组合持仓
- curr_position = curr_po.amount # 持仓数量
-
- #均线计算
- ma_short = data.history(instrument, 'close', context.short_period, '1d').mean()
- ma_medium = data.history(instrument, 'close', context.mid_period, '1d').mean()
- ma_long = data.history(instrument, 'close', context.long_period, '1d').mean()
-
- #计算AR值
- open_prices = data.history(instrument, 'open', context.ar_period, '1d')
- high_prices = data.history(instrument, 'high', context.ar_period, '1d')
- low_prices = data.history(instrument, 'low', context.ar_period, '1d')
- ar_value = sum(high_prices - open_prices) / sum(open_prices - low_prices) * 100
- # 交易逻辑
- if ar_value > context.ar_upr and ma_short > ma_medium > ma_long and data.can_trade(instrument): # 开多
- order(instrument, 40)
- print(today,'long')
-
- elif ma_short < ma_medium < ma_long and data.can_trade(instrument):# 开空
- if ar_value < context.ar_dwn and curr_position<0 and data.can_trade:
- order_target(instrument, 0)
- print(today,'close_sp')
- else:
- order(instrument, -40)
- print(today,'short')
- elif 110 >= ar_value >= 90 and curr_position!=0 and data.can_trade(instrument):
- order_target(instrument, 0)
- print(today,'close_out')
- # 3. 启动回测
- # 策略回测接口: https://bigquant.com/docs/module_trade.html
- m = M.trade.v3(
- instruments= ['RU1809.SHF'],
- start_date='2017-11-01',
- end_date='2018-05-01',
- prepare=prepare,
- initialize=initialize,
- handle_data=handle_data,
- # 买入订单以开盘价成交
- order_price_field_buy='open',
- # 卖出订单以开盘价成交
- order_price_field_sell='open',
- capital_base=1000000,
- benchmark='RU1809.SHF',
- m_deps=np.random.rand()
- )


雷达卡




京公网安备 11010802022788号







