在 Pine-Script 中,console.log 的等价物是什么?

51

pinescript 中,是否可以使用 console.log 打印变量或函数调用的结果? 我想将一个 pinescript 脚本转换为 JavaScript,并验证我正在移动到 JavaScript 中的 pinescript 变量在 pinescript 脚本和 JavaScript 版本中具有相同的值。 如果不存在此功能,则欢迎任何解决方法。 谢谢!


您可以使用 plot(...) 函数来显示变量的值,例如 plot(strategy.position_avg_price, 'Position Avg Price')。变量将显示在屏幕右侧的 Data Window 中。 - Maksim Shamihulau
6个回答

77

注意事项

  1. 尽管此答案的内容未被弃用,但Pine用户手册现在包含一个关于调试技术的页面,解释了这个答案的许多内容,以及更多内容。
  2. RicardoSantos有一个非常好的DebugConsole库,v5用户可以访问。

对于Pine开发者实际上有类似控制台的东西,它就是Data Window。我们不断地使用它进行调试。使用plotchar()的思路如下:

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

在此输入图片描述

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


我们使用一个AutoHotkey宏,它从先前复制到剪贴板的变量或表达式创建所需的plotchar()语句。以下是AHK宏:

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

数据窗口也是一个很好的选项,用于脚本需要显示许多值的显示面板,例如我们的回测和交易引擎,它广泛使用了它: enter image description here


29

在 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

在文档中找不到,但是有这个链接 - galki
刚刚发现在编辑器中使用Ctrl+单击函数可以获取最新的文档。 - galki
我们如何在控制台或其他地方(画布之外)获取文本?我无法选择结果并复制粘贴,目前我必须输入每个字符。 @galki - paran
@paran 在 Pine 中没有控制台,所以它必须在画布中。我使用 qwertzguy 的答案。 - galki

14

如果你只想打印单个数值(而不是每根条形图都打印),你可以这样做:

if (barstate.islast)
    label.new(bar_index, 0, "Your value here, ex: " + syminfo.tickerid)

9

此答案已过时。请参考其他更多新近的答案。


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

您还可以使用各种技巧,在图表窗口的极其有限的指标字段(在左上角)中显示值。 或将线条和图形移出图表的可见区域,但仍然能看到轴高亮。

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


5
那么,你不能通过plot来记录变量吗?如果不能在控制台中记录日志,你怎么调试脚本呢? - zero_cool
Pine-Script解释器非常基础,编辑器会告诉您是否有代码错误,但不会告诉您逻辑是否有误。有成千上万的Pine-Script脚本由人们制作,其中许多使用各种技巧显示值(作为指标-左上角),并将线条移出视线,以便仅突出显示轴编号。请联系T.V.进行改进。正如您已经知道的那样,SO是用于编程特定问题的地方,人们已经有一些需要修复的脚本。祝你好运。 - not2qubit
7
感谢回复,但我认为电视并不擅长回应改进建议。有个人三年前在他们的论坛上问了同样的问题,但没有得到回答,哈哈。 如果有人知道答案,在这里的SO社区里就会找到。 - zero_cool
现在有更好的答案。 - JohnAllen

6

我的做法是,使用表格来展示我想要展示的值。在重播栏中这种方法就像魔法一样有效。以下是一个例子:

//@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)

以下是结果: 输入图片描述


4

如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!")

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接