请求修正5分钟K线平均蜡烛长度绘制的PineScript代码
修正后的Pine Script代码及问题分析
核心问题诊断
原代码存在4个关键错误:
- 使用
timenow(实时时间)而非time(当前K线的开盘时间)计算时间差,导致K线时间匹配混乱 minute()函数仅返回当前小时内的分钟数(0-59),无法计算跨时段的总时间差分钟数x的计算逻辑错误,无法实现9:15K线对应x=1、15:15K线对应x=72的需求- 手动循环累加效率极低,不符合Pine Script的向量运算特性
修正后的代码
indicator("5分钟K线平均蜡烛长度", overlay=false) // 计算单根蜡烛的长度 candle_length = math.abs(high - low) // 定义交易日起始基准时间(GMT+5:30) start_time = timestamp("GMT+0530", year, month, dayofmonth, 9, 05) // 首根目标K线时间(9:15,即基准时间后10分钟) first_candle_time = start_time + 60000 * 10 // 计算当前K线的序号x:9:15对应x=1,15:15对应x=72 x = barssince(time >= first_candle_time) + 1 // 非交易日或未到9:15时,将x设为0 x := na(x) ? 0 : x // 计算平均蜡烛长度 average_length = 0.0 if x > 0 // 用内置函数高效累加前x根K线的长度 sum_length = ta.sum(candle_length, x) average_length := sum_length / x else // 初始时段(未到9:15)固定显示1.0 average_length := 1.0 plot(average_length, title="Average Length", color=color.red, linewidth=2)
关键修正点说明
时间逻辑修复
- 用
time替代timenow,确保基于当前K线的开盘时间计算序号,而非实时流动的时间 - 明确
first_candle_time为9:15,通过barssince()精准生成K线序号,避免时间差计算的误差
- 用
性能优化
- 替换手动for循环为
ta.sum()内置函数,既提升运算效率,又避免Pine Script的回溯问题
- 替换手动for循环为
初始时段逻辑修正
- 通过
na(x) ? 0 : x处理非交易日或未到9:15的场景,确保此时x=0,触发else分支显示设定的1.0
- 通过
内容的提问来源于stack exchange,提问作者Shreyans jain
相关产品推荐
相关产品推荐

