Pine Script v4转v5:指定起始K线前一根启动MIDAS指标
Pine Script v4转v5 MIDAS指标适配方案
问题原因
原v4脚本中标注的问题行start = (n==startBar-1)无法在v5运行,核心原因是v4内置变量n(代表当前K线到图表最右侧最新K线的偏移量,最新K线n=0,向左逐根K线数值+1)在v5版本中已被移除。另外v4版本的study()声明、无命名空间的颜色值在v5中也不符合语法规范。
适配逻辑
- 用v5内置的
bar_index(K线从最左侧开始从0计数的全局索引)和last_bar_index(最新K线的全局索引)计算得到和原v4n完全等价的偏移值:barOffsetFromLast = last_bar_index - bar_index,完全保留原有「用户输入N号启动K线,自动从N-1号K线触发计算」的逻辑 - 将v4的
study()替换为v5强制要求的indicator()声明 - 将原数值类型输入
input替换为v5规范的input.int,原颜色值补充color.命名空间前缀,其余计算逻辑完全保留无需修改
可直接运行的v5完整代码
//@version=5 indicator("Midas", overlay=true, shorttitle="MIDAS") startBar = input.int(title="Starting Bar Number", minval=1, maxval=100000, defval=20) priceType = input.int(title="calculate using 1:hl2 2:high 3:low 4:hlc3", minval=1, maxval=4, defval=1) // 等价原v4的n判断,从用户指定启动K线的前一根开始触发计算 barOffsetFromLast = last_bar_index - bar_index start = barOffsetFromLast == startBar - 1 p = iff (priceType==1, hl2, iff(priceType==2, high, iff(priceType==3, low, hlc3) ) ) v = na(volume) ? 1 : volume cumV = cum(v) CumPV = cum(p*v) startV = valuewhen(start, cumV, 0) StartPV = valuewhen(start, CumPV, 0) midas = (CumPV - StartPV)/(cumV - startV) plot(midas, color=color.navy, linewidth=2)
补充说明
如果你需要的是「从图表最左侧第一根K线开始从1计数的绝对K线编号」作为启动参考(而非原脚本默认的从右往左数的偏移计数),只需要把start相关的两行替换为以下代码即可:
// 绝对K线编号模式:输入1000则从第999根K线启动计算 start = bar_index == startBar - 2
内容的提问来源于stack exchange,提问作者Kakashi Hatake
相关产品推荐
相关产品推荐

