一、振动升降指标ASI简介
-
真实范围(TR):真实范围是当前交易日的最高价、最低价与前一交易日收盘价之间的最大价差。 -
动量(M):动量是当前周期的收盘价与上一个周期的ASI值之间的差值。 -
动量因子(MF):动量因子是动量与真实范围的比值。 -
短期简单移动平均(SMA):对动量因子进行短期简单移动平均处理。
ASI指标的计算公式拆解

二、交易信号的生成
-
买入信号:当ASI指标上升突破其短期移动平均线时,视为买入信号。 -
卖出信号:当ASI指标下降跌破其短期移动平均线时,视为卖出信号。
import pandas as pd
import numpy as np
def calculate_tr(df):
df['TR'] = np.maximum(df['High'] - df['Low'],
np.maximum(df['High'] - df['Close'].shift(1),
df['Low'] - df['Close'].shift(1)))
def calculate_m(df, asii):
df['M'] = df['Close'] - asii
def calculate_mf(df):
df['MF'] = df['M'] / df['TR']
def calculate_asi(df, period=14):
calculate_tr(df)
df['SMA_MF'] = df['MF'].rolling(window=period).mean()
df['ASI'] = df['Close'] # 初始化ASI
for i in range(1, len(df)):
df['ASI'].iloc[i] = df['ASI'].iloc[i-1] + (df['MF'].iloc[i] * df['TR'].iloc[i] * 26 / period)
return df['ASI']
# 假设df是包含股票最高价、最低价和收盘价的DataFrame
df['ASI'] = calculate_asi(df)
# 生成交易信号
df['Signal'] = 0
df['Signal'][df['ASI'] > df['ASI'].shift(1)] = 1 # 买入信号
df['Signal'][df['ASI'] < df['ASI'].shift(1)] = -1 # 卖出信号
# 绘制ASI指标和交易信号
import matplotlib.pyplot as plt
plt.figure(figsize=(14, 7))
plt.plot(df['Close'], label='Close Price', alpha=0.5)
plt.plot(df['ASI'], label='ASI', linestyle='--')
plt.plot(df[df['Signal'] == 1].index, df['Close'][df['Signal'] == 1], '^', markersize=10, color='green', label='Buy Signal')
plt.plot(df[df['Signal'] == -1].index, df['Close'][df['Signal'] == -1], 'v', markersize=10, color='red', label='Sell Signal')
plt.legend()
plt.show()
-
策略回测
四、结语
发布者:股市刺客,转载请注明出处:https://www.95sca.cn/archives/106019
站内所有文章皆来自网络转载或读者投稿,请勿用于商业用途。如有侵权、不妥之处,请联系站长并出示版权证明以便删除。敬请谅解!