🚀 AI 一键生成 joinquant 策略代码
立即体验

如何在 joinquant 中调用 jqlib.technical_analysis 模块计算 GDX 济安线?

joinquant | 发布时间: 2026/7/25
以下内容由 EasyQuant 生成。

问题描述

请根据以下 SEO 主题生成完整页面内容:

Title: joinquant 技术分析指标库:GDX 济安线与压力支撑线策略实现

Question: 如何在 joinquant 中调用 jqlib.technical_analysis 模块计算 GDX 济安线?

解决方案

在 JoinQuant 中使用 jqlib.technical_analysis 计算 GDX 济安线

GDX (济安线) 是一种结合了动态移动平均线 (DMA) 的技术分析指标,通常包含济安线主线、压力线和支撑线。JoinQuant 的 jqlib.technical_analysis 模块内置了该指标,可方便地进行多标的技术指标计算。


1. GDX 指标计算公式

  • AA: ABS((2*CLOSE + HIGH + LOW)/4 - MA(CLOSE, N)) / MA(CLOSE, N)
  • JAX (济安线): DMA(CLOSE, AA) (以 AA 为权重的动态移动平均)
  • 压力线: (1 + M/100) * JAX
  • 支撑线: (1 - M/100) * JAX

2. API 调用方式

通过导入 jqlib.technical_analysis 库中的 GDX 函数即可获取数据:

from jqlib.technical_analysis import GDX

# 参数说明:
# security_list: 股票代码或股票代码列表
# check_date: 查询日期 (如 '2023-01-04')
# N: 统计周期,默认 30
# M: 压力支撑系数,默认 9

gdx_jax, gdx_ylx, gdx_zcx = GDX(security_list, check_date='2023-01-04', N=30, M=9)

返回值说明:
返回三个 dict 字典,键为股票代码,值为对应的数值:

  • gdx_jax: 济安线数值
  • gdx_ylx: 压力线数值
  • gdx_zcx: 支撑线数值

3. 完整 JoinQuant 策略示例

以下策略展示了如何在每日开盘时计算股票池的 GDX 济安线,并在突破支撑线时买入,突破压力线时卖出。

# 导入聚宽函数库与技术分析模块
import jqdata
from jqlib.technical_analysis import GDX

def initialize(context):
    # 设定基准
    set_benchmark('000300.XSHG')
    # 开启动态复权模式(真实价格)
    set_option('use_real_price', True)
    
    # 设定股票池
    g.stocks = ['000001.XSHE', '600000.XSHG']
    
    # 定时运行
    run_daily(market_open, time='9:30')

def market_open(context):
    today_str = context.current_dt.strftime('%Y-%m-%d')
    
    # 获取 GDX 指标
    gdx_jax, gdx_ylx, gdx_zcx = GDX(g.stocks, check_date=today_str, N=30, M=9)
    
    for stock in g.stocks:
        current_price = get_bars(stock, count=1, unit='1m', fields=['close'])[0]['close']
        jax = gdx_jax[stock]
        ylx = gdx_ylx[stock]
        zcx = gdx_zcx[stock]
        
        cash = context.portfolio.available_cash
        position = context.portfolio.positions[stock].closeable_amount
        
        # 策略逻辑:价格高于压力线时卖出,低于支撑线时买入
        if current_price > ylx and position > 0:
            order_target(stock, 0)
            log.info("突破压力线,卖出股票 %s" % stock)
        elif current_price < zcx and cash > 0:
            order_value(stock, cash / len(g.stocks))
            log.info("跌破支撑线,买入股票 %s" % stock)