TradingView [PINE]:我可以通过设置动态更改研究覆盖吗?

TradingView [PINE]: Can I change study overlay dynamically via the settings?

定义 TradingView study 时,我们有以下支持的设置

study(title, shorttitle, overlay, format, precision, scale, max_bars_back, max_lines_count, max_labels_count, resolution, resolution_gaps, max_boxes_count) → void

我感兴趣的地方 overlay 属性

overlay (const bool) - default is false.
- if true, the study will be added as an overlay for the main series. 
- if false, it would be added on a separate chart pane. 

我感兴趣的是,这个属性可以动态设置吗?

例如,在指标设置中,我可以添加一个输入字段,用户可以从中选择要在主系列叠加层中显示的当前指标,或者在单独的图表窗格中显示.

study_overlay = input(defval = "true", title = "Study Overlay", options = ["true", "false"])

当用户要在此处更改所选选项时,指示器应根据所选选项更改正在使用的窗格。

这可行吗?我试过类似

study_overlay_string = input(defval = "true", title = "Study Overlay", options = ["true", "false"])
study_overlay_bool = true
if study_overlay_string == "false"
    study_overlay_bool = false
study("My Script", overlay = study_overlay_bool)

可以将此研究添加到图表中,但是更改设置时没有任何反应!

不,overlay 参数属于 const bool 类型,因此您不能使用输入向其传递值。所有基于输入的变量都具有 input 类型形式;输入比 const 更窄,无法转换为 const.

您的脚本之所以有效,是因为您在 if 块中使用 = 而不是 :=。您不是为全局范围 study_overlay_bool 变量赋值,而是创建一个单独的同名局部范围变量(注意应该出现在控制台中的编译器警告)。如果你在那里使用 :=,你会得到预期的类型错误。