35

一个 console.logvariables或函数的结果如何pine-script?我想将一个pine-script脚本转换为javascript,并且我想验证我正在转换的脚本是否与原始脚本相同。如果此功能不存在,欢迎任何变通方法。谢谢!

4

6 回答 6

63

笔记

  1. 虽然未弃用此答案的内容,但 Pine 用户手册现在包含一个关于调试技术的页面,解释了此答案的大部分内容等等。
  2. RicardoSantos 有一个非常好的DebugConsole库,v5 用户可以访问它。

对于 Pine 开发人员来说,实际上有一些类似于控制台的东西;这是数据窗口。我们经常使用它来调试。这个想法是这样使用plotchar()的:

plotchar(bar_index, "Bar Index", "", location = location.top)

在此处输入图像描述

这不会破坏指标的刻度,也不会在其中打印任何内容,但它会在数据窗口中显示一个值,正如PineCoders 常见问题解答部分关于调试的第二个问题中所解释的那样。当您将鼠标移到图表条上时,变量/表达式的相应值将显示在数据窗口中。常见问题解答解释了可用于在图表上进行调试的其他有用技术,因为这有时更有效。


我们使用AutoHotkeyplotchar()宏从先前复制到剪贴板的变量或表达式创建所需的语句。这是 AHK 宏:

^+C:: SendInput plotchar(^v, "^v", "", location.top){Return}

对于需要显示许多值的脚本,数据窗口也是一个很好的显示面板,例如我们的回测和交易引擎,它广泛使用了它: 在此处输入图像描述

于 2020-02-16T01:50:41.650 回答
27

pine v.4 提供了一种打印文本的新方法。您可以为此使用标签:

//@version=4
study("Print text values", overlay=true)
x = bar_index
y = close
txt = tostring(close)
label.new(x, y, txt) // print value of close
于 2019-12-02T09:31:57.353 回答
13

如果您只想打印一个值(不是在每个条形图上),您可以执行以下操作:

if (barstate.islast)
    label.new(bar_index, 0, "Your value here, ex: " + syminfo.tickerid)
于 2020-06-21T22:14:02.747 回答
9

This answer is now outdated. Please consult other more recent answers.


无法将 pine-script 中的文本或变量打印到任何形式的“控制台”。但是您可以使用 plot 打印每个刻度上方或下方的非常短的文本。但是,文本是静态的,您不能使用变量来更改它。

您还可以使用各种技巧在图表窗口的非常有限的指标字段(左上角)中显示值。或者将线条和绘图移出图表的可见范围,但仍能看到轴突出显示。

请查看他们的 Wiki 并查阅 1000 多个其他用户的脚本,以了解有关如何执行此操作的详细信息。

于 2018-02-14T14:14:06.973 回答
4

我所做的是,我使用表格来显示我想要显示的值。这在回放栏中就像魔术一样。这是一个例子:

//@version=4
study("My Script", overlay=true)

sma20 = sma(close, 20)
text = "sma 20: " + tostring(sma20)

tableColumn = 1
tableRow = 1
var table panel = table.new(position.top_right, tableColumn, tableRow)
if barstate.islast
    table.cell(panel, 0, 0, text, bgcolor=color.black, text_color=color.white)

结果如下: 在此处输入图像描述

于 2021-09-30T19:33:50.123 回答
1

正如 not2qubit 所提到的,从技术上讲,没有办法将东西打印到 TradingView 的控制台左右。

但是我们可以创建标签来“打印”东西,这就是我写这个小函数的原因。

它将“打印”您在最新的 bar_index 上提供的文本。如果您打印多件东西,标签将堆叠在一起。

仅在 PineScript 版本 5 上测试

var global_print_counter = array.new_int()
array.push(global_print_counter, 0)
print(string txt = "") => 
    if txt != "" and barstate.islast
        int print_counter = array.get(global_print_counter, 0)
        printLabel = label.new(x=bar_index, y=high + (print_counter * 75), textcolor=color.white, color=color.black, text=txt)
        array.set(global_print_counter, 0, print_counter + 1)

例子:

print("Hello World!")
print("Hello World, again!")
于 2022-02-23T03:56:20.613 回答