在 pinescript
中,是否可以使用 console.log
打印变量或函数调用的结果?
我想将一个 pinescript
脚本转换为 JavaScript
,并验证我正在移动到 JavaScript
中的 pinescript
变量在 pinescript
脚本和 JavaScript
版本中具有相同的值。
如果不存在此功能,则欢迎任何解决方法。
谢谢!
在 pinescript
中,是否可以使用 console.log
打印变量或函数调用的结果?
我想将一个 pinescript
脚本转换为 JavaScript
,并验证我正在移动到 JavaScript
中的 pinescript
变量在 pinescript
脚本和 JavaScript
版本中具有相同的值。
如果不存在此功能,则欢迎任何解决方法。
谢谢!
注意事项
- 尽管此答案的内容未被弃用,但Pine用户手册现在包含一个关于调试技术的页面,解释了这个答案的许多内容,以及更多内容。
- 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}
数据窗口也是一个很好的选项,用于脚本需要显示许多值的显示面板,例如我们的回测和交易引擎,它广泛使用了它:
在 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
如果你只想打印单个数值(而不是每根条形图都打印),你可以这样做:
if (barstate.islast)
label.new(bar_index, 0, "Your value here, ex: " + syminfo.tickerid)
此答案已过时。请参考其他更多新近的答案。
无法在 Pine Script 中打印文本或变量到任何形式的“控制台”中。 但是,您可以使用 plot 在每个刻度线上方或下方打印非常短的文本。然而,该文本是静态的,不能使用变量来更改它。
您还可以使用各种技巧,在图表窗口的极其有限的指标字段(在左上角)中显示值。 或将线条和图形移出图表的可见区域,但仍然能看到轴高亮。
请查阅他们的 Wiki 并参考其他用户的 1000 多个脚本,了解如何执行此操作的详细信息。
我的做法是,使用表格来展示我想要展示的值。在重播栏中这种方法就像魔法一样有效。以下是一个例子:
//@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)
如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!")
plot(...)
函数来显示变量的值,例如plot(strategy.position_avg_price, 'Position Avg Price')
。变量将显示在屏幕右侧的Data Window
中。 - Maksim Shamihulau