KD 指标量化模型,转写成 QMT 可运行策略源码
发布时间:8小时前阅读:35
KD 指标(随机指标)是一种常用的技术分析工具,用于衡量股价波动的相对强弱和超买超卖情况。以下将 KD 指标量化模型转写成 QMT 可运行的策略源码,并对关键部分进行解释。
python
运行
# -*- coding: gbk -*-
from qmt.api import *
import pandas as pd
def initialize(context):
# 设置交易标的,这里以浦发银行股票为例
context.stock = '600000.SH'
# 设置KD指标计算周期
context.n = 9
# 设置K的平滑周期
context.m1 = 3
# 设置D的平滑周期
context.m2 = 3
def handle_data(context, data):
prices = data[context.stock].close
if len(prices) < context.n:
return
low_list = []
high_list = []
for i in range(len(prices)):
if i < context.n:
low_list.append(min(prices[:i + 1]))
high_list.append(max(prices[:i + 1]))
else:
low_list.append(min(prices[i - context.n + 1:i + 1]))
high_list.append(max(prices[i - context.n + 1:i + 1]))
rsv = [(prices[i] - low_list[i]) / (high_list[i] - low_list[i]) * 100 for i in range(len(prices))]
k_values = [0] * context.m1 + [0]
d_values = [0] * context.m2 + [0]
for i in range(context.m1, len(rsv)):
k_values.append((2 * k_values[-1] + rsv[i]) / 3)
for i in range(context.m2, len(k_values)):
d_values.append((2 * d_values[-1] + k_values[i]) / 3)
k = k_values[-1]
d = d_values[-1]
position = context.portfolio.positions[context.stock]
if k < 20 and d < 20 and position.closeable_amount == 0:
order_target_percent(context.stock, 1)
elif k > 80 and d > 80 and position.closeable_amount > 0:
order_target_percent(context.stock, 0)
代码说明
- 初始化部分 (initialize 函数): 设置交易标的:通过 context.stock 设置要交易的股票代码,这里以浦发银行(600000.SH)为例,实际使用时可替换为感兴趣的股票。 设置 KD 指标参数: context.n 设定了 KD 指标计算周期,通常设为 9。 context.m1 是 K 值的平滑周期,一般设为 3。 context.m2 是 D 值的平滑周期,同样设为 3。这些参数可根据策略优化需求进行调整。
- 数据处理与策略逻辑部分 (handle_data 函数): 数据准备:获取股票的收盘价 prices,如果数据长度小于计算 KD 指标所需的周期 context.n,则不进行操作,直接返回。 计算最低价和最高价:通过循环,计算每个时间点前 n 个周期内的最低价 low_list 和最高价 high_list。 计算 RSV:RSV(未成熟随机值)是 KD 指标计算的基础,通过公式 (当前收盘价 - n周期内最低价) / (n周期内最高价 - n周期内最低价) * 100 计算得出。 计算 K 和 D 值: 初始化 k_values 和 d_values 列表,前几个值设为 0。 通过平滑计算得到 K 值和 D 值,K 值的计算公式为 (2 * 前一个K值 + 当前RSV值) / 3,D 值的计算公式为 (2 * 前一个D值 + 当前K值) / 3。 交易决策: 获取当前股票持仓情况 position。 当 K < 20 且 D < 20,表示市场处于超卖状态,若当前无持仓,则全仓买入股票(order_target_percent(context.stock, 1))。 当 K > 80 且 D > 80,表示市场处于超买状态,若当前有持仓,则全部卖出股票(order_target_percent(context.stock, 0))。
- 此策略基于 KD 指标的经典超买超卖逻辑构建,但在实际应用中,可进一步优化和完善,例如添加止损止盈机制、结合其他技术指标等,以适应复杂多变的市场环境。
股票/量化开户找我!股票佣金万0.854(满足条件)!无门槛国债逆回购一折 (百万分之一)!ETF佣金万0.5!优惠多多!免费量化使用量化软件QMT+miniQMT+ptrade!
温馨提示:投资有风险,选择需谨慎。
-
一家坚守19年的财商教育平台,如何重塑投资服务的“靠谱”底色
2026-06-29 13:08
-
REITs打新:⌈华泰三峡新能源REIT⌋ 和 ⌈创金合信北京国资公司REIT⌋ 本周发售!
2026-06-29 13:08
-
券商客户经理是做什么的?为什么建议你理财投资前找一位?
2026-06-29 13:08


问一问

+微信
分享该文章
