随着我们不断将您要求的改进添加到我们的编程语言中,跟上我们的脚本可能是一个挑战。这篇文章介绍了我们最近添加的最重要的内容,这样您就不会错过它们。
平均K线图(Heikin Ashi)上更真实的回测
在平均K线图上运行的回测通常会产生不可靠的回测结果,因为经纪商模拟器总是使用图表的价格来填写订单,而在HA图表的情况下,价格是合成的。名为“使用标准OHLC执行订单”的新功能缓解了这个问题。使用时,在HA图表上运行的策略将以实际市场价格填写订单,这更接近地模拟您的策略的实时行为。
策略用户可以在策略的“属性”标签页中启用该功能。该功能默认关闭。
请注意,这只会改变在HA图表上运行的策略的行为。在其他合成图表类型(例如砖形图)上,回测将继续以合成图表价格执行订单,无论该功能的设置如何。
input.*()函数的新display参数
新的display参数使您可以更好地控制脚本名称旁边输入值的显示。可以使用四个参数:display.status_line、display.data_window、display.all和display.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.sector、syminfo.industry和syminfo.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()函数,允许您检索从一种货币到另一种货币的兑换率。此函数需要两个参数:from和to,每个参数都是符合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 Box、Twitter帐户,以及TradingView上的Pine Script® Q&A公共聊天广播更新。
我们相信您会发现这些备受期待的功能很有用,请继续向我们发送您的反馈和建议,让我们成为最好的平台。我们为您打造TradingView,始终渴望听到您的想法。
TradingView团队
还没有关注我们的中文微信公众号?快来扫二维码吧!