如何在Pine Script v5中获取历史K线及EMA的过往数值?
获取历史K线与EMA数值及均线交叉判断(Pine Script)
一、获取历史K线的数值
在Pine Script里,直接用**索引[]**就能调取历史K线的开盘/收盘/最高/最低数值:
close[1]= 前1根已确认K线的收盘价open[2]= 前2根已确认K线的开盘价- 以此类推,索引
n代表往前数第n根已完成的K线,n=0是当前正在形成的未确认K线
示例代码:
// 提取前1根K线的核心数值 prev_close = close[1] prev_open = open[1] prev_high = high[1] prev_low = low[1]
二、获取历史EMA数值
EMA本身是序列型数据,每一根K线都对应一个计算结果,同样用索引调取:
先计算EMA,再用[n]取历史值即可。
示例代码:
// 计算两条不同周期的EMA ema_short = ta.ema(close, 12) ema_long = ta.ema(close, 26) // 提取前1根K线的EMA数值 prev_ema_short = ema_short[1] prev_ema_long = ema_long[1] // 提取前3根K线的EMA数值 prev3_ema_short = ema_short[3]
三、判断上穿/下穿均线
有两种常用方式,按需选择:
方法1:用内置交叉函数
Pine Script提供了ta.crossover()和ta.crossunder(),自动检测当前与前一根K线的数值交叉:
// 收盘价上穿短期EMA price_cross_above_ema = ta.crossover(close, ema_short) // 收盘价下穿短期EMA price_cross_below_ema = ta.crossunder(close, ema_short) // 短期EMA上穿长期EMA(金叉) ema_golden_cross = ta.crossover(ema_short, ema_long) // 短期EMA下穿长期EMA(死叉) ema_dead_cross = ta.crossunder(ema_short, ema_long)
方法2:手动对比历史数值
如果需要自定义交叉逻辑,直接对比当前和前一根的数值即可:
// 手动判断收盘价上穿EMA:前一根收盘价低于EMA,当前收盘价高于EMA price_cross_above_ema_manual = close > ema_short and close[1] < ema_short[1] // 手动判断EMA金叉:前一根短期EMA低于长期EMA,当前短期EMA高于长期EMA ema_golden_cross_manual = ema_short > ema_long and ema_short[1] < ema_long[1]
四、barstate.islastconfirmedhistory的正确用法
这个变量的作用是标记最后一根完全确认的历史K线(也就是当前正在形成的K线的前一根),它是布尔值,仅在这一根K线上返回true。
你之前用它没成功,大概率是用错了场景:它不是用来获取历史数值的,而是用来限定代码仅在最后一根已确认的K线上执行(避免当前未完成K线的干扰)。
示例代码:
if barstate.islastconfirmedhistory // 仅在最后一根已确认K线上标注EMA数值 label.new(bar_index, high, "最后确认EMA12: " + str.tostring(ema_short))
内容的提问来源于stack exchange,提问作者Butter the better
相关产品推荐
相关产品推荐

