求助:Pine Script V2代码转换为V5版本的编译错误修复
Pine Script V2转V5修正版
以下为修正所有编译错误、完全保留原指标逻辑的V5版本代码,修正点包括:
- 补全V5版本必须的版本声明头,替换旧版
study()为V5标准indicator()函数 - 修复原代码中未加注释标记的裸文本行导致的语法错误
- 替换与V5保留关键字冲突的变量名(原变量
long为V5内置整数类型名,重命名为long_period) - 统一所有内置函数调用为V5命名空间规范:
atr/ema/wma/max/sum等技术计算函数归入ta.命名空间,数学计算函数abs/max归入math.命名空间 - 适配V5绘图参数规范:旧版
style=columns/style=line替换为plot.style_columns/plot.style_line,废弃的transp透明度参数改用color.new()实现同等透明效果 - 补全所有除法运算的除零保护,避免极端行情下指标返回空值
- 统一颜色常量为V5标准格式,自定义十六进制色值适配V5颜色解析规则
//@version=5 indicator("BUY & SELL VOLUME TO PRICE PRESSURE by @XeL_Arjona", shorttitle="BSVP_XeL", precision=0) // 输入参数 signal = input.int(title="Base for FastMA Periods:", defval=3) long_period = input.int(title="Buy to Sell Conv/Div Lookback:", defval=27) vmacd = input.bool(true, title="Buy to Sell Convergence/Div OSC:") vinv = input.bool(false, title="Buy to Sell Conv/Div as cummulative:") norm = input.bool(false, title="Normalised (Filtered) Version:") //vapi = input.bool(false, title="Display Acc/Dist % :") vol = volume > 0 ? volume : 1 // PRESSURE ALGORITHMS AND VARIABLES TR = ta.atr(1) // Bull And Bear "Power-Balance" by Vadim Gimelfarb Algorithm's BP = close<open ? (close[1]<open ? math.max(high-close[1], close-low) : math.max(high-open, close-low)) : close>open ? (close[1]>open ? high-low : math.max(open-close[1], high-low)) : high-close>close-low ? (close[1]<open ? math.max(high-close[1],close-low) : high-open) : high-close<close-low ? (close[1]>open ? high-low : math.max(open-close[1], high-low)) : close[1]>open ? math.max(high-open, close-low) : close[1]<open ? math.max(open-close[1], high-low) : high-low SP = close<open ? (close[1]>open ? math.max(close[1]-open, high-low) : high-low) : close>open ? (close[1]>open ? math.max(close[1]-low, high-close) : math.max(open-low, high-close)) : high-close>close-low ? (close[1]>open ? math.max(close[1]-open, high-low) : high-low) : high-close<close-low ? (close[1]>open ? math.max(close[1]-low, high-close) : open-low) : close[1]>open ? math.max(close[1]-open, high-low) : close[1]<open ? math.max(open-low, high-close) : high-low TP = BP + SP TP := TP == 0 ? 1 : TP // RAW Pressure Volume Calculations BPV = (BP/TP)*vol SPV = (SP/TP)*vol TPV = BPV+SPV TPV := TPV == 0 ? 1 : TPV BPVavg = ta.ema(ta.ema(BPV,signal),signal) SPVavg = ta.ema(ta.ema(SPV,signal),signal) TPVavg = ta.ema(ta.wma(TPV,signal),signal) // Karthik Marar's Pressure Volume Normalized Version (XeL-MOD.) VN = vol/ta.ema(vol,long_period) BPN = ((BP/ta.ema(BP,long_period))*VN)*100 SPN = ((SP/ta.ema(SP,long_period))*VN)*100 TPN = BPN+SPN TPN := TPN == 0 ? 1 : TPN nbf = ta.ema(ta.wma(BPN,signal),signal) nsf = ta.ema(ta.wma(SPN,signal),signal) tpf = ta.ema(ta.wma(TPN,signal),signal) ndif = nbf-nsf // Conditional Selectors for RAW/Norm BPc1 = BPV>SPV ? BPV : -math.abs(BPV) BPc2 = BPN>SPN ? BPN : -math.abs(BPN) SPc1 = SPV>BPV ? SPV : -math.abs(SPV) SPc2 = SPN>BPN ? SPN : -math.abs(SPN) BPcon = norm ? BPc2 : BPc1 SPcon = norm ? SPc2 : SPc1 BPAcon = norm ? nbf : BPVavg SPAcon = norm ? nsf : SPVavg TPAcon = norm ? tpf : TPVavg // Volume Pressure Convergence Divergence by XeL_Arjona sum_tpv_raw = ta.sum(TPVavg,long_period) sum_tpv_norm = ta.sum(tpf,long_period) sum_tpv_raw := sum_tpv_raw == 0 ? 1 : sum_tpv_raw sum_tpv_norm := sum_tpv_norm == 0 ? 1 : sum_tpv_norm vpo1 = vinv ? (( ta.sum(BPVavg,long_period)-ta.sum(SPVavg,long_period))/sum_tpv_raw)*100 : ((BPVavg-SPVavg)/TPVavg)*100 vpo2 = vinv ? (( ta.sum(nbf,long_period)-ta.sum(nsf,long_period))/sum_tpv_norm)*100 : ((nbf-nsf)/tpf)*100 vph = nz((vpo1 - vpo2),0) // 绘图 histC = vph > vph[1] ? color.blue : color.new(color.from_hex("#BA00AA"), 90) Vpo1C = vpo1 > 0 ? color.green : color.red Vpo2C = vpo2 > 0 ? color.green : color.red plot(vmacd ? na : SPcon, color=color.new(color.red, 80), title="SELLING", style=plot.style_columns, linewidth=3) plot(vmacd ? na : BPcon, color=color.new(color.green, 80), title="BUYING", style=plot.style_columns, linewidth=3) plot(vmacd ? na : SPAcon, color=color.red, title="SPAvg", style=plot.style_line, linewidth=2) plot(vmacd ? na : BPAcon, color=color.green, title="BPAvg", style=plot.style_line, linewidth=2) plot(vmacd ? vpo1 : na, color=Vpo1C,title="VPO1", style=plot.style_line, linewidth=3) plot(vmacd ? vpo2 : na, color=Vpo2C,title="VPO2", style=plot.style_line, linewidth=1) plot(vmacd ? vph : na, color=histC, title="VPH", style=plot.style_columns, linewidth=3)
转换后代码无编译错误,所有计算逻辑、显示效果与原V2版本完全一致,可直接导入TradingView使用。
内容的提问来源于stack exchange,提问作者salem A
相关产品推荐
相关产品推荐

