3 分钟快速生成代码
输入想法,AI 即刻生成可运行代码
在 ptrade 量化交易平台中,计算 MACD(异同移动平均线)和 KDJ(随机指标)等技术指标通常分为两个步骤:通过 API 获取历史行情数据,然后调用 ptrade 内置的技术指标计算函数或自行编写 NumPy/Pandas 算法进行手动计算。
在 ptrade 中,推荐使用 get_history 函数获取用于指标计算的历史行情数据(如收盘价、最高价、最低价)。
# 获取目标股票过去 100 天的 日线 close、high、low 数据
history_df = get_history(100, frequency='1d', field=['close', 'high', 'low'], security_list=['600570.SS'])
注意:进行技术指标计算时,需将 DataFrame/Series 转换为 NumPy 数组(.values),以匹配计算函数的入参要求。
ptrade 框架提供了现成的技术指标计算 API,可直接传入数据数组进行高效计算。
get_MACD(close, short=12, long=26, m=9)close 为收盘价的 numpy.ndarraydif_data, dea_data, macd_data 序列get_KDJ(high, low, close, n=9, m1=3, m2=3)k_data, d_data, j_data 序列以下示例展示了如何在 handle_data 盘中事件中获取数据并计算 MACD 和 KDJ 的最新值:
def initialize(context):
g.security = '600570.SS' # 恒生电子
set_universe(g.security)
def handle_data(context, data):
# 1. 获取过去 100 根 K 线的行情数据
h = get_history(100, '1d', ['close', 'high', 'low'], security_list=g.security)
# 2. 提取 numpy 数组
close_data = h['close'].values
high_data = h['high'].values
low_data = h['low'].values
# 3. 计算 MACD 指标
macdDIF, macdDEA, macdHIST = get_MACD(close_data, short=12, long=26, m=9)
current_dif = macdDIF[-1]
current_dea = macdDEA[-1]
current_macd = macdHIST[-1]
# 4. 计算 KDJ 指标
k_data, d_data, j_data = get_KDJ(high_data, low_data, close_data, n=9, m1=3, m2=3)
current_k = k_data[-1]
current_d = d_data[-1]
current_j = j_data[-1]
# 5. 打印最新指标结果
log.info("股票: %s | MACD(DIF: %.3f, DEA: %.3f, MACD: %.3f) | KDJ(K: %.2f, D: %.2f, J: %.2f)" %
(g.security, current_dif, current_dea, current_macd, current_k, current_d, current_j))
# 6. 编写基于指标的交易逻辑(示例:KDJ金叉买入)
if k_data[-2] < d_data[-2] and current_k > current_d:
cash = context.portfolio.cash
if cash > 0:
order_value(g.security, cash)
log.info("KDJ金叉,买入标的 %s" % g.security)
count)建议尽量长(如 100 根或以上),避免因为样本量过短导致计算出的 DIF/DEA 与同花顺、通达信等软件存在微小偏差。get_MACD 和 get_KDJ 的入参必须是 numpy.ndarray 类型,若直接传入 Pandas DataFrame/Series 会导致报错。run_daily 或 run_interval 定时任务中,请勿与 handle_data 同时调用 get_history,以防产生高并发竞争导致取数为空。