3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
KDJ(随机指标)是量化交易中常用的动量指标,由 K 线、D 线和 J 线三条曲线组成。
get_KDJ API 介绍ptrade 提供了内置的内置计算函数 get_KDJ,用于快速获取随机指标的计算结果:
get_KDJ(high, low, close, n=9, m1=3, m2=3)
high:最高价的时间序列数据,numpy.ndarray 类型。low:最低价的时间序列数据,numpy.ndarray 类型。close:收盘价的时间序列数据,numpy.ndarray 类型。n:计算 RSV 的周期,整数,默认为 9。m1:K 值的平滑周期,整数,默认为 3。m2:D 值的平滑周期,整数,默认为 3。k_data:K 值时间序列(numpy.ndarray)。d_data:D 值时间序列(numpy.ndarray)。j_data:J 值时间序列(numpy.ndarray)。以下是基于 ptrade 平台的完整 KDJ 金叉买入、死叉卖出策略代码:
def initialize(context):
# 设置标的股票(以恒生电子为例)
g.security = '600570.SS'
set_universe(g.security)
def handle_data(context, data):
security = g.security
# 1. 获取过去 100 天的历史最高价、最低价和收盘价
df = get_history(100, frequency='1d', field=['high', 'low', 'close'], security_list=security)
if df is None or len(df) < 20:
return
high_data = df['high'].values
low_data = df['low'].values
close_data = df['close'].values
# 2. 调用 ptrade 内置 get_KDJ 接口计算 KDJ 指标
k_data, d_data, j_data = get_KDJ(high_data, low_data, close_data, n=9, m1=3, m2=3)
# 获取前一周期与当前周期的 K 值和 D 值
k_prev, k_curr = k_data[-2], k_data[-1]
d_prev, d_curr = d_data[-2], d_data[-1]
# 获取当前持仓与可用资金
pos = get_position(security)
cash = context.portfolio.cash
# 3. 金叉判断:前一周期 K <= D 且 当前周期 K > D
if k_prev <= d_prev and k_curr > d_curr:
if pos.amount == 0 and cash > 0:
# 全仓买入
order_value(security, cash)
log.info(f"【KDJ金叉买入】标的: {security}, 前期K: {k_prev:.2f}, D: {d_prev:.2f} | 当前K: {k_curr:.2f}, D: {d_curr:.2f}")
# 4. 死叉判断:前一周期 K >= D 且 当前周期 K < D
elif k_prev >= d_prev and k_curr < d_curr:
if pos.amount > 0:
# 清仓卖出
order_target(security, 0)
log.info(f"【KDJ死叉卖出】标的: {security}, 前期K: {k_prev:.2f}, D: {d_prev:.2f} | 当前K: {k_curr:.2f}, D: {d_curr:.2f}")
get_history 获取的数据长度应大于 KDJ 的计算周期(建议至少 30 根 K 线以上),以确保指标计算的准确性。