You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于市值为Pine Script输入字段设置默认值?

问题原因

Pine Script 中input.float()的默认参数要求是常量值,你代码里的acc是随K线周期变化的序列变量。输入框的默认值在脚本初始化阶段就会被确定,只会取acc的第一个历史值,后续acc的变化不会同步到输入框默认值里,这就是你遇到的序列问题。

正确实现方式

根据需求,有两种常见的实现思路:

思路1:根据首次加载的市值设置输入框初始默认值

如果只需要在脚本第一次加载时,根据当前标的市值设置输入框的初始默认值,之后用户可以手动修改输入值,可使用var变量配合barstate.islastconfirmedhistory来仅计算一次初始值:

//@version=5
indicator("Factor", overlay=true, timeframe="", timeframe_gaps=true)

// 计算市值
_Outstanding = request.financial(syminfo.tickerid, "TOTAL_SHARES_OUTSTANDING", "FQ")
_mv = _Outstanding * close

// 仅在脚本首次加载时计算初始默认值
var float default_acc = na
if barstate.islastconfirmedhistory
    if _mv >= 1.0
        default_acc := 10.0
    else
        default_acc := 2.0

// 使用计算好的初始默认值创建输入框
atrfactor = input.float(default_acc, "factor", minval = 1.0, step = 0.1)

plotchar(_mv, "MV", "", location = location.top)
plot(atrfactor, "ATR Factor", color=color.blue)

思路2:动态使用市值对应的因子,同时保留手动修改权限

如果希望用户未修改输入框时,自动根据当前市值动态调整因子;用户修改后则使用手动输入的值,可通过判断输入框是否被修改来实现:

//@version=5
indicator("Factor", overlay=true, timeframe="", timeframe_gaps=true)

// 计算市值
_Outstanding = request.financial(syminfo.tickerid, "TOTAL_SHARES_OUTSTANDING", "FQ")
_mv = _Outstanding * close

// 定义输入框,初始默认值设为基础值
atrfactor_input = input.float(5.0, "factor", minval = 1.0, step = 0.1)

// 动态计算市值对应的因子
dynamic_acc = _mv >= 1.0 ? 10.0 : 2.0

// 最终使用的因子:用户修改过输入框则用输入值,否则用动态计算值
final_atrfactor = input.getuserinput(atrfactor_input) ? atrfactor_input : dynamic_acc

plotchar(_mv, "MV", "", location = location.top)
plot(final_atrfactor, "Final ATR Factor", color=color.red)

关键说明

  • var变量用于存储仅初始化一次的值,避免每次K线都重新计算。
  • barstate.islastconfirmedhistory确保只在最后一根已确认的K线上计算初始值,避免回测过程中反复修改默认值。
  • input.getuserinput()用于判断用户是否手动修改过输入框的值,以此决定最终使用的值。

内容的提问来源于stack exchange,提问作者AndiAna

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 08:22:26