打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
ASI指标预测交易——用easytrader库轻松实现高利润股票交易策略
userphoto

2023.05.23 湖北

关注

ASI指标是一种技术分析工具,全名为“Accumulation Swing Index”,即“积累横摆指标”,由J. Welles Wilder Jr.于1976年提出,其主要用途是用来判断趋势的强度和方向。ASI综合了价格变化和成交量关系的变化,通过体现成交量的分布特性,有效地消除了成交量的噪音干扰。

下面我们将基于easytrader库,编写一个ASI指标的交易策略。首先,导入easytrader库和Pandas库。

import easytrader as etimport pandas as pd

其次,定义一个函数来计算ASI指标。ASI指标的计算方法比较复杂,具体计算方法如下:

  • ASI初始值为前一期收市价。
  • 当当期最高价加当期最低价加前一期收市价之和减上一期收市价的差≥当期最高价减当期最低价时,当前加速因子(AF)=上一期加速因子+AF增量(可以为固定值也可以是自定义的变化值),否则当前加速因子AF仍为前一期的AG。
  • ASI(i)=ASI(i-1)+AF*SI。

其中,AF增量通常为0.01,但当某一条件满足时,AF增量可以逐渐增大,以反映市场的真实情况。

def calculate_asi(df, af=0.01):    asi = [df.Close[0]]    si = [0]    af_list = []    for i in range(1, len(df)):        curr_high, curr_low, prev_close = df.High[i], df.Low[i], df.Close[i-1]        curr_close, prev_asi, prev_si = df.Close[i], asi[-1], si[-1]        a = curr_high - prev_close        b = curr_low - prev_close        c = curr_high - curr_low        if a > b and a > 0:            today_si = a        elif b > a and b > 0:            today_si = b        else:            today_si = c        if today_si != prev_si:            af_list.append(af)        else:            af_list.append(0)        if len(af_list) > 1 and af_list[-1] != af_list[-2]:            af_list[-1] = min(af_list[-1], af_list[-2]+af)        af = af_list[-1]        si.append(today_si)        asi.append(prev_asi + af*today_si)    return asi

再次,获取股票数据并计算ASI指标。这里我们以“万科A”(000002.SZ)为例。

user = et.use('yh_client')user.prepare('config.json')df = user.get_k_data('000002', start='2021-01-01', end='2022-12-31', index=False, ktype='D')df['ASI'] = calculate_asi(df)

最后,定义交易逻辑。当ASI指标值上穿MA5时,我们认为市场处于上涨趋势,此时应该买入;当ASI指标值下穿MA5时,我们认为市场处于下跌趋势,此时应该卖出。

balance = user.balance[0]['asset_balance']for i in range(1, len(df)):    ma5 = df.Close[i-4:i+1].mean()    if df.ASI[i-1] < ma5 and df.ASI[i] >= ma5:        user.buy('000002', price=df.Close[i], amount=100)        balance = user.balance[0]['asset_balance']    elif df.ASI[i-1] > ma5 and df.ASI[i] <= ma5:        user.sell('000002', price=df.Close[i], amount=100)        balance = user.balance[0]['asset_balance']

运行上述代码即可实现基于ASI指标的交易策略。需要注意的是,该策略仅作为参考,并不能保证盈利。

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
ASI指标
如何建立量化交易模型
如何用asi指标验证股票实际价格?
圆二
ASI指标详解及用法
ASI指标应该如何应用
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服