3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
江恩高低点指标(Gann Hi-Lo Activator)是一种趋势跟踪指标,由罗伯特·克劳斯(Robert Krausz)在《斐波那契与江恩的新前沿》一书中介绍。它主要用于确定市场的短期趋势,并产生买卖信号。
该指标由两条简单的移动平均线(SMA)组成:
交易逻辑:
以下是一个完整的、可直接在聚宽回测环境中运行的策略代码。该策略默认在日线级别运行,选取单只股票(如平安银行)进行演示。
# -*- coding: utf-8 -*-
import jqdata
def initialize(context):
"""
初始化函数,设定基准、手续费、滑点及策略参数
"""
# 设定沪深300作为基准
set_benchmark('000300.XSHG')
# 开启动态复权模式(真实价格)
set_option('use_real_price', True)
# 过滤掉order系列API产生的比error级别低的log
log.set_level('order', 'error')
# 设定股票类每笔交易时的手续费
set_order_cost(OrderCost(close_tax=0.001, open_commission=0.0003, close_commission=0.0003, min_commission=5), type='stock')
# 定义要操作的股票,这里以平安银行为例
g.security = '000001.XSHE'
# 江恩高低点参数:周期 N,通常为 3
g.n_period = 3
# 每天收盘前运行策略 (比如 14:50)
run_daily(trade_logic, time='14:50')
def trade_logic(context):
"""
交易逻辑函数
"""
security = g.security
# 获取过去 N 天的最高价和最低价数据 (不包含今天,用于计算昨天的指标值作为参考,或者包含今天用于实时计算)
# 这里我们获取过去 N 天的数据(不含当前未收盘的bar),加上当前最新价格进行判断
# 注意:为了稳健,我们通常使用截止到昨天的 N 天均线与今天的价格进行比较
# 获取过去 g.n_period 天的数据(不包含今天)
hist_data = attribute_history(security, g.n_period, '1d', ['high', 'low'], skip_paused=True)
# 如果数据不足(例如停牌或刚上市),则跳过
if len(hist_data) < g.n_period:
return
# 计算高点均线 (SMA of Highs)
high_ma = hist_data['high'].mean()
# 计算低点均线 (SMA of Lows)
low_ma = hist_data['low'].mean()
# 获取当前最新价格
current_data = get_current_data()
current_price = current_data[security].last_price
# 获取当前持仓
position = context.portfolio.positions[security]
# --- 交易信号判断 ---
# 1. 买入信号:当前价格高于过去N天的高点均线
# 且当前无持仓
if current_price > high_ma and position.closeable_amount == 0:
# 全仓买入
order_value(security, context.portfolio.available_cash)
log.info("买入信号触发:价格(%.2f) > 高点均线(%.2f)" % (current_price, high_ma))
# 2. 卖出信号:当前价格低于过去N天的低点均线
# 且当前有持仓
elif current_price < low_ma and position.closeable_amount > 0:
# 清仓卖出
order_target(security, 0)
log.info("卖出信号触发:价格(%.2f) < 低点均线(%.2f)" % (current_price, low_ma))
# 记录指标值以便在回测图表中查看
record(Price=current_price, High_MA=high_ma, Low_MA=low_ma)
参数设置 (initialize):
g.n_period = 3: 定义了江恩高低点的核心参数。run_daily(trade_logic, time='14:50'): 选择在收盘前进行判断,这样既能利用当天的价格信息,又能确保当天成交。数据获取 (trade_logic):
attribute_history 获取过去 3 天(不含今天)的最高价和最低价。high_ma (阻力线/做空止损线) 和 low_ma (支撑线/做多止损线)。信号逻辑:
current_price > high_ma 时,意味着价格突破了阻力区间,趋势向上。current_price < low_ma 时,意味着价格跌破了支撑区间,趋势向下。Q1: 这个策略适合什么频率?
A: 江恩高低点策略最初是为日线设计的,但在分钟级别(如 30分钟、60分钟)上也有应用。如果要在分钟级别回测,需要将 attribute_history 的单位改为 'xm' (如 '60m'),并将 run_daily 改为 handle_data 或分钟级的定时运行。
Q2: 如何优化这个策略?
A:
Q3: 为什么使用 14:50 下单而不是收盘后?
A: 在 A 股市场,T+1 制度下,如果在收盘后(15:00)产生信号,只能第二天开盘交易,这会产生隔夜跳空风险。在 14:50 下单可以近似代表以收盘价成交,减少滑点和隔夜风险。
Q4: 如何在图表中看到这两条线?
A: 代码中最后一行使用了 record(Price=current_price, High_MA=high_ma, Low_MA=low_ma)。回测结束后,在回测详情页面的收益图下方,会显示这三个变量的曲线图,方便复盘分析。