如何用Pine Script计算随机指标金叉/死叉所需的收盘价?
计算Stochastic金叉/死叉所需的目标收盘价(Pine Script v5)
可以通过反向推导Stochastic指标的公式,计算出当前K线需要收盘的目标价格,从而触发金叉或死叉。以下是修改后的完整代码及关键逻辑说明:
关键逻辑推导
Stochastic %K的核心公式为:
%K = 100 * (Close - 周期内最低低) / (周期内最高高 - 周期内最低低)
变形后可解出目标收盘价:
目标Close = (%K目标值 * (周期最高高 - 周期最低低)) / 100 + 周期最低低
而金叉/死叉的临界点是新的%K等于新的%D(%D为%K的SMA),据此推导出%K的目标值:
%K目标值 = 前periodD-1个%K的总和 / (periodD - 1)
修改后的完整代码
//@version=5 indicator("Stochastic 交叉目标价格", overlay=false) periodK = input.int(14, title="%K周期", minval=1) periodD = input.int(3, title="%D周期", minval=1) smoothK = input.int(3, title="%K平滑周期", minval=1) // 计算Stochastic %K和%D k = ta.stoch(close, high, low, periodK, smoothK) d = ta.sma(k, periodD) // 绘制指标线和区间 plot(k, title = "%K", color = color.blue) plot(d, title = "%D", color = color.orange) h0 = hline(80, "上轨", color = color.white) h1 = hline(20, "下轨", color = color.white) fill(h0, h1, color=color.rgb(33,150,243,90), title = "背景填充") // 计算目标收盘价的核心逻辑 var float target_close = na if periodD > 1 // 计算前periodD-1个%K的总和 sum_k_prev = ta.sum(k[1], periodD - 1) // 计算交叉临界点的%K目标值 target_k = sum_k_prev / (periodD - 1) // 获取periodK周期内的最高高和最低低 highest_h = ta.highest(high, periodK) lowest_l = ta.lowest(low, periodK) // 避免除以0的情况(区间无波动) if highest_h != lowest_l target_close := (target_k * (highest_h - lowest_l)) / 100 + lowest_l else target_close := close // 判断潜在交叉情况 potential_golden = k < d and periodD > 1 potential_death = k > d and periodD > 1 // 绘制目标价格标签 var label cross_label = na if barstate.islast // 清除旧标签 label.delete(cross_label) // 金叉目标价格 if potential_golden cross_label := label.new(bar_index, 50, "金叉目标价:\n" + str.tostring(target_close, "#.####"), style=label.style_label_center, textcolor=color.white, color=color.green, size=size.small) // 死叉目标价格 else if potential_death cross_label := label.new(bar_index, 50, "死叉目标价:\n" + str.tostring(target_close, "#.####"), style=label.style_label_center, textcolor=color.white, color=color.red, size=size.small)
代码说明
- 修正了原代码中未使用
smoothK参数的问题,将其整合到ta.stoch函数中用于平滑%K - 处理了
periodD=1的边界情况(此时%D等于%K,无交叉可能) - 避免了区间无波动时的除以0错误
- 仅在当前K线有潜在金叉/死叉机会时,显示对应的目标收盘价标签
- 标签会自动更新到最后一根K线,且仅保留最新标签
内容的提问来源于stack exchange,提问作者John554
相关产品推荐
相关产品推荐

