PineScript添加开关控制图表绘制及内嵌指标的实现问题咨询
PineScript 开关控制与内嵌指标冲突解决方案
一、现有信号框开关关联方法
你已经定义好的布尔开关xyz = input(title="XYZ", type=input.bool, defval=false)只需和信号框的完整生成逻辑绑定即可,操作步骤如下:
- 找到你贴出的
labelText定义行之后的信号框创建代码(一般是label.new()调用及后续的样式设置逻辑) - 给整个信号框相关代码套上条件判断,所有代码缩进一层放在
if xyz块内,示例如下:
if xyz labelText = (doubleTop? "Double Top" : "Double Bottom") + (DisplayRiskPerReward ? " RR - "+tostring(riskPerReward) : "") // 原有创建label、设置label坐标、颜色、样式的所有代码都放在此处,缩进一层
如果信号框本身已有触发条件(比如if doubleTop or doubleBottom),可以直接把开关条件追加到原有判断中,无需额外套层:
// 原有判断加and xyz即可 if (doubleTop or doubleBottom) and xyz labelText = (doubleTop? "Double Top" : "Double Bottom") + (DisplayRiskPerReward ? " RR - "+tostring(riskPerReward) : "") // 原有label生成代码
二、内嵌指标全局一键启停实现方法
可以为整个内嵌指标设置全局开关,操作方法如下:
- 首先添加全局开关定义:
showABC = input.bool(title="显示ABC内嵌指标", defval=true) - 将你粘贴进来的所有ABC指标的逻辑代码(包含计算、绘图、信号生成全部内容),整体缩进一层放在
if showABC的代码块中即可。开关关闭时ABC的所有代码都不会执行,完全避免和主策略XYZ的变量、绘图冲突。
注意:如果ABC指标的计算结果需要给主策略XYZ调用,不要把变量定义放在
if showABC块内,需提前在块外声明变量默认值,示例如下:// 块外先声明变量 var float abcBuySignal = na var float abcSellSignal = na if showABC // 此处放ABC所有计算逻辑 abcBuySignal = 你原有ABC的买点计算代码 abcSellSignal = 你原有ABC的卖点计算代码 // 此处放ABC所有绘图逻辑
内容的提问来源于stack exchange,提问作者Trader_M
相关产品推荐
相关产品推荐

