如何将syminfo.ticker字符串转换为变量以实现ADR的CEDEAR比率计算
解决Pine Script中字符串转对应变量值的问题
我明白你的痛点——你想用syminfo.ticker拿到的股票代码字符串(比如"MELI"),去匹配你预先定义好的对应比率变量,但Pine Script不支持直接通过字符串动态引用变量名,这就得换个更靠谱的方式来处理。
问题根源
你之前把每个股票的比率做成了独立变量(比如GOOGL = 58、MELI = 60),但syminfo.ticker返回的是字符串类型的代码,Pine Script没有办法把字符串直接转换成变量名来读取对应的值,所以才会出现无法计算的问题。
解决方案:用字典(映射对象)替代独立变量
我们可以把所有股票代码和对应的比率整理成一个字典(键值对对象),用股票代码字符串作为"键",对应的比率作为"值",这样就能通过字符串直接取出对应的值了。
修改后的完整代码
// 第一步:创建股票代码到比率的映射字典 cedearRatios = { "GOOGL": 58, "MELI": 60, "GGAL": 10, // 示例:可以继续添加其他股票的比率 // 这里补充你所有需要的股票比率 } // 获取当前标的的代码字符串(比如查看MELI时,这里就是"MELI") stockTicker = syminfo.ticker // 从字典中取出对应比率,没找到的话设默认值(这里用1,你可以根据需求调整) currentRatio = na(cedearRatios[stockTicker]) ? 1 : cedearRatios[stockTicker] // 你的原有计算逻辑 ggalc = request.security('BCBA:GGAL', '1D', close) ggals = request.security('NASDAQ:GGAL', '1D', close) ccl = ggalc * 10 / ggals stockPrice = request.security(syminfo.tickerid, timeframe.period, close) // 现在用字典取出的比率计算CEDEAR CEDEAR = ccl * stockPrice / currentRatio plot(CEDEAR)
关键细节说明
- 字典键的一致性:确保字典里的键和
syminfo.ticker返回的字符串完全匹配(Pine Script中syminfo.ticker返回的是大写字符串,所以字典里的键也要用大写,比如"MELI"而不是"meli") - 异常处理:用
na(cedearRatios[stockTicker]) ? 1 : ...的判断,防止遇到没有定义的股票代码时脚本报错,你也可以把默认值改成你需要的数值,或者添加alert()来提示未定义的代码 - 可维护性:把所有比率集中放在字典里,后续新增或修改比率都会非常方便,不用到处找独立变量
内容的提问来源于stack exchange,提问作者Grinns
相关产品推荐
相关产品推荐

