【问题标题】:Pinescript - Decimal Input OptionPinescript - 十进制输入选项
【发布时间】:2021-05-31 19:22:11
【问题描述】:

我想在设置中输入标签上当前价格显示多少小数的选项,但无法使用 label.new 使其工作

所以对于输入选项,它会是这样的

DecOption = input(title="Decimal Option", options=["No Decimal", "One Decimal", "Two Decimal"],
     defval="No Decimal")

使用“#.##”静态十进制输出不是问题......但是在设置中选择它作为输入对我来说更难,有什么建议吗?

//@version=4
study("Current Price", overlay=true)

symbolName = input(title="Type Symbol Or Leave Blank", defval="BTC")
    
sizeOption = input(title="Label Size", type=input.string,options=["Auto", "Huge", "Large", "Normal", "Small", "Tiny"],defval="Large")
     
labelSize = (sizeOption == "Huge") ? size.huge :
     (sizeOption == "Large") ? size.large :
     (sizeOption == "Small") ? size.small :
     (sizeOption == "Tiny") ? size.tiny :
     (sizeOption == "Auto") ? size.auto :
         size.normal

l = label.new(bar_index, na, text= symbolName +tostring( close, " $ #"), 
  color=close >= open ? color.green : color.red, 
  textcolor=color.white,
  style=label.style_labeldown, yloc=yloc.abovebar, size=labelSize)

label.delete(l[1])

【问题讨论】:

    标签: pine-script


    【解决方案1】:

    tostring() 函数的参考手册中解释了格式字符串。
    格式字符串。可选参数,默认值为'#.##########'。
    要显示尾随零,请使用 0 而不是“#”符号。例如,“#.000”。

    4 位小数的示例:

    //@version=4
    study("Current Price", overlay=true)
    
    symbolName = input(title="Type Symbol Or Leave Blank", defval="BTC")
        
    sizeOption = input(title="Label Size", type=input.string,options=["Auto", "Huge", "Large", "Normal", "Small", "Tiny"],defval="Large")
         
    labelSize = (sizeOption == "Huge") ? size.huge :
         (sizeOption == "Large") ? size.large :
         (sizeOption == "Small") ? size.small :
         (sizeOption == "Tiny") ? size.tiny :
         (sizeOption == "Auto") ? size.auto :
             size.normal
    
    l = label.new(bar_index, na, text= symbolName +tostring( close, " $ #.0000"), 
      color=close >= open ? color.green : color.red, 
      textcolor=color.white,
      style=label.style_labeldown, yloc=yloc.abovebar, size=labelSize)
    
    label.delete(l[1])
    

    编辑1:回复this comment
    此示例为您提供了以整数形式输入小数位数的选项。
    它还可以通过Min tick value for the current symbol限制小数位数。
    您还可以决定是否为小数显示尾随零。
    当您将符号输入留空时,它将默认为图表符号名称。

    //@version=4
    study("Current Price", "CP", overlay=true)
    
    LS0 = "Auto", LS1 = "Huge", LS2 = "Large", LS3 = "Normal", LS4 = "Small", LS5 = "Tiny"
    
    var string  i_symbolName    = input("BTC",  "Type Symbol Or Leave Blank",   type=input.string)
    var int     i_decimals      = input(4,      "Decimal option",               type=input.integer, minval=0, maxval=10)
    var bool    i_limit_mintick = input(false,  "Decimals limited by mintick",  type=input.bool)
    var bool    i_trailing_zero = input(true,   "Show decimal trailing zero's", type=input.bool)
    var string  i_sizeOption    = input(LS2,    "Label Size",                   type=input.string,  options=[LS0, LS1, LS2, LS3, LS4, LS5])
    
    var string  labelText       = na
    var color   labelColor      = na
    var string  labelSize       =  (i_sizeOption == LS0) ? size.auto   :
                                   (i_sizeOption == LS1) ? size.huge   :
                                   (i_sizeOption == LS2) ? size.large  :
                                   (i_sizeOption == LS3) ? size.normal :
                                   (i_sizeOption == LS4) ? size.small  :
                                   (i_sizeOption == LS5) ? size.tiny   :
                                   size.normal
    
    var label   l               = label.new(na, na, na, yloc=yloc.abovebar, style=label.style_label_down, textcolor=color.white, size=labelSize)
    var string  strFormatBase   = " $ #"
    var string  strFormat       = na
    var string  symbolName      = i_symbolName == "" ? syminfo.ticker : i_symbolName
    
    if barstate.islast
        strFormat := strFormatBase + (i_decimals ? "." : "")
    
        for i = 1 to i_limit_mintick ? str.length(tostring(syminfo.mintick))-2 : i_decimals
            strFormat := strFormat + (i_trailing_zero ? "0" : "#")
        
        labelText  := symbolName + tostring(close, strFormat)
        labelColor := close >= open ? color.green : color.red
    
        label.set_x(l, bar_index)
        label.set_text(l, labelText)
        label.set_color(l, labelColor)
    

    【讨论】:

    • 谢谢 Bjorn,但这不是我想要的,我已经知道我可以使用 #.# 等将小数设为静态.....我正在寻找的是有一个输入选项不同的十进制数量,因此用户可以在设置中输入他们希望在标签上显示的不同符号/代码的小数位数,如下所示 .. DecOption = input(title="Decimal Option", options=["No Decimal ", "一个小数", "两个小数"], defval="无小数")
    • 更新了我的答案。请参阅“编辑 1”部分。
    • 哇,太棒了,非常感谢。我只是相信,为了让它显示当前价格,我必须在 1 秒图表上运行它,因为我们正在使用收盘价。我认为没有任何其他方式可以显示当前价格数据,无论您处于什么时间范围内?
    • 无需在 1 秒图表上运行它。它适用于任何时间范围。在任何实时图表上,close 仅表示最新(当前)价格。每次实时close 价格发生变化时,都会执行并重新计算脚本。所以它总是会在标签中显示当前的实时价格。
    • 很抱歉现在才回复你,我错过了你的回复,我现在才回到这个想法。好的,所以是的,你是对的,可以看到它适用于任何 TF,但它很有趣,当价格上涨时,标签会打印出 priec 的变化,平滑且跟上。但是由于某种原因,每当价格下跌和下跌时,价格都会挂在最后的最高价上,并且似乎在价格下跌时很长一段时间都没有赶上。有什么理由吗? ...它会这样做是没有意义的,但它是
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-15
    • 1970-01-01
    • 1970-01-01
    • 2020-10-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-28
    相关资源
    最近更新 更多