Pine Script®的新功能:平均K线图上的真实回测、访问商品信息的内置函数等

Jun 30, 2023

随着我们不断将您要求的改进添加到我们的编程语言中,跟上我们的脚本可能是一个挑战。这篇文章介绍了我们最近添加的最重要的内容,这样您就不会错过它们。

平均K线图(Heikin Ashi)上更真实的回测

在平均K线图上运行的回测通常会产生不可靠的回测结果,因为经纪商模拟器总是使用图表的价格来填写订单,而在HA图表的情况下,价格是合成的。名为“使用标准OHLC执行订单”的新功能缓解了这个问题。使用时,在HA图表上运行的策略将以实际市场价格填写订单,这更接近地模拟您的策略的实时行为。

策略用户可以在策略的“属性”标签页中启用该功能。该功能默认关闭。

请注意,这只会改变在HA图表上运行的策略的行为。在其他合成图表类型(例如砖形图)上,回测将继续以合成图表价格执行订单,无论该功能的设置如何。

input.*()函数的新display参数

新的display参数使您可以更好地控制脚本名称旁边输入值的显示。可以使用四个参数:display.status_linedisplay.data_windowdisplay.alldisplay.none。允许使用加号或减号的参数组合,并且无论使用什么参数,输入值将始终继续出现在脚本设置的“输入”标签页中。

新参数允许您隐藏状态行中通常出现的输入值,或者显示通常隐藏的输入值,即布尔值、颜色或日期输入。使用新参数,您还可以在数据窗口中的脚本名称旁边显示输入。不使用该参数时,输入的默认值显示不变。

//@version=5

indicator("RSI")

rsiLengthInput = input.int(14, minval=1, title="RSI Length", display=display.data_window+display.status_line)

rsiSourceInput = input.source(close, "Source", display=display.data_window)

rsi = ta.rsi(rsiSourceInput, rsiLengthInput)

plot(rsi, "RSI")

用于访问商品信息的新内置函数

我们向syminfo命名空间添加了三个内置函数:syminfo.sectorsyminfo.industrysyminfo.country。它们返回字符串,为您提供有关当前商品的更多信息。国家/地区信息以ISO 3166-1 alpha-2格式提供。

禁用策略中已执行订单的警报

您现在可以在用于创建这些订单的函数中使用disable_alert = true,禁用策略中单个订单的通知。例如:

//@version=5
strategy("My strategy", overlay=true)
longCondition = ta.crossover(ta.sma(close, 14), ta.sma(close, 28))
if (longCondition)
    strategy.entry("Long", strategy.long, alert_message = "Go Long!")
    strategy.exit("Exit", "Long", profit = 300, loss = 100, disable_alert = true)

当您使用alert()函数,在策略执行期间生成通知或Webhook的自定义消息时,这对于过滤掉特定订单非常有用。

策略中最大回撤和回升的计算变化

最大回撤和最大回升的计算已得到改进,以考虑交易中可能实现的潜在资本。以前,仅考虑入场点和出场点的资本价值,这可能导致最大回撤和回升值与其最大潜在值不相符。帮助中心文章中对新方法进行了解释,以实现最大回撤最大回升

持用户定义类型中的varip修饰符

varip修饰符允许变量在同一根K线上每次执行脚本之间保留值,现在可以应用于用户定义类型的字段。请注意,未使用varip定义的字段将在每根K线上回滚,因此在同一根K线上多次执行期间分配给它们的值将不会被保留,即使包含它们的对象是使用varip创建的。

例如:

//@version=5
indicator("`varip` field")

type TypeWithVaripField
    varip int varipCounter = 0
    int counter = 0

varip TypeWithVaripField myCounter = TypeWithVaripField.new(0)
// This field preserves values between script executions.
myCounter.varipCounter := myCounter.varipCounter + 1
// This field does not because it wasn't declared using `varip`.
myCounter.counter := myCounter.counter + 1

plot(myCounter.varipCounter, "myCounter.varipCounter")
plot(myCounter.counter, "myCounter.counter")

货币兑换率请求

我们引入了一个新的request.currency_rate()函数,允许您检索从一种货币到另一种货币的兑换率。此函数需要两个参数:fromto,每个参数都是符合ISO 4217的三字母字符串代码。

如何使用它将金融商品的价格转换为英镑(GBP)的示例如下:

//@version=5
indicator("Close in British Pounds")
rate = request.currency_rate(syminfo.currency, "GBP")
plot(close * rate)

array命名空间中的新函数

为数组添加了四个新函数:

  • array.first() — 返回数组的第一个元素。
  • array.last() — 返回数组的最后一个元素。
  • array.every() — 如果数组的每个元素都为true,则返回true;否则,返回false
  • array.some() — 如果数组中至少有一个元素为true,则返回true;否则,返回false。

要了解最新的Pine Script®功能,请关注用户手册的发行说明PineCoders帐户还通过Telegram上的Squawk BoxTwitter帐户,以及TradingView上的Pine Script® Q&A公共聊天广播更新。

我们相信您会发现这些备受期待的功能很有用,请继续向我们发送您的反馈和建议,让我们成为最好的平台。我们为您打造TradingView,始终渴望听到您的想法。

TradingView团队

 


 

还没有关注我们的中文微信公众号?快来扫二维码吧!

 

 

Look first Then leap

TradingView专门为您而打造,请确保您充分利用我们出色的功能
开启图表