Pine2指标升级Pine3报错:未声明标识符问题求助
Pine2 转 Pine3:未声明标识符报错修复方案
以下是针对你提供的代码片段的修复版本,同时说明报错原因:
修复后的完整代码片段
// 修复函数FFF中的bb未声明问题 FFF(xx, xxur, wwur) => var int bb = 0 // 初始化变量,保留跨bar状态 bb := (xx < xxur) ? 1 : (xx > wwur) ? 2 : (xx > 50) ? 0 : bb[1] bb // 修复rrmin未声明及历史引用问题 var float rrmin = 100 rrmin := (ttrr == 2) ? 100 : (rsrs[0] < rrmin[0] ? rsrs[0] : rrmin[1]) // 修复ddmin未声明及历史引用问题 var float ddmin = 100 ddmin := (ddtt == 2) ? 100 : (dmark[0] < ddmin[0] ? dmark[0] : ddmin[1]) // 修复ssmin未声明及历史引用问题 var float ssmin = 100 ssmin := (sstt == 2) ? 100 : (kk[0] < ssmin[0] ? kk[0] : ssmin[1]) // 修复rrmax未声明及历史引用问题 var float rrmax = 0 rrmax := (ttrr == 1) ? 0 : (rsrs[0] > rrmax[0] ? rsrs[0] : rrmax[1]) // 修复ddmax未声明及历史引用问题 var float ddmax = 0 ddmax := (ddtt == 1) ? 0 : (dmark[0] > ddmax[0] ? dmark[0] : ddmax[1]) // 修复ssmax未声明及历史引用问题 var float ssmax = 0 ssmax := (sstt == 1) ? 0 : (kk[0] > ssmax[0] ? kk[0] : ssmax[1])
报错原因及修复逻辑
未声明标识符问题
Pine3强制要求所有变量必须显式声明,而Pine2允许隐式声明变量(直接赋值使用)。因此所有报错的变量都需要先声明。跨bar状态保留问题
你的代码中所有报错变量都引用了自身的历史值(如bb[1]、rrmin[1]),这类需要在每根bar中保留状态的变量,必须用var关键字初始化——var会让变量仅在第一根bar创建并初始化,后续bar中保留之前的值,否则每根bar都会重新创建变量,无法访问历史值。赋值运算符变化
Pine3中,变量赋值必须使用:=,而=仅用于变量声明(结合var或直接声明)。
内容的提问来源于stack exchange,提问作者Виктор Счастливый
相关产品推荐
相关产品推荐

