2

FOREX, 1H 图表, //version=3 pinescript

我还是 Pinescript 的新手,但我注意到使用closeopen返回的数据不是当前收盘价或开盘价。即使使用close[1]返回的金额也与前一根蜡烛的收盘价完全不同。

为什么是这样?我是否错误地解释了这些数据?

在我所做的研究中,我遇到了这篇文章:https ://www.tradingcode.net/tradingview/operators/history-referencing-operator/ :

从技术上讲,历史引用运算符不会返回单个值,而是返回具有一定偏移量的一系列值,即使我们通常认为历史引用运算符访问的是第 n 个元素。

这意味着,例如,close[5] 不返回单个 收盘价,而是返回等于 5 根柱线之前收盘价的一系列收盘价。

上面那个大胆的声明—— “一系列收盘价”;这是否意味着它close[5]本身不是第 5 根蜡烛的收盘价?

在此处输入图像描述

如果是这种情况,那么我将如何显示该蜡烛的当前收盘价,例如:

strategy.entry("SHORT", strategy.short, comment=tostring(close[1]) )

4

2 回答 2

5

我还是 Pinescript 的新手,但我注意到使用收盘价或开盘价返回的数据不是当前收盘价或开盘价。即使使用close[1]返回的金额也与前一根蜡烛的收盘价完全不同。

(...)

strategy.entry("SHORT", strategy.short, comment=tostring(close[1]) )

不幸的是,这是 TradingView 的限制。当您将tostring()函数用于comment参数时(如您的代码片段中所示),TradingView 只会为发生回测的第一个柱生成该字符串。

但是该文本在整个回测中保持不变,这就解释了为什么您会看到“策略测试器”中出现的价格与您根据您的理解等所期望的价格大不相同close[1]

我们可以使用以下代码轻松地自己测试:

//@version=3
strategy(overlay=true, title="Example strategy")

longCondition = crossover(sma(close, 14), sma(close, 28))
shortCondition = crossunder(sma(close, 14), sma(close, 28))

if (longCondition)
    strategy.entry("My Long Entry Id", long=strategy.long, 
         comment=tostring(dayofmonth) + "-" + 
         tostring(month) + "-" + tostring(year))

if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)

在这里,我们生成带有当前柱的日、月和年的订单注释。或者至少,它应该是这样工作的。

对于“策略测试器”中的第一笔交易,它正确显示:

在此处输入图像描述

然后对于回测中更晚的交易,TradingView 仍然使用旧的缓存订单注释:

在此处输入图像描述

总结一下:您遇到的奇怪行为是由于 TradingView 对tostring()功能和订单评论的限制。

于 2018-06-11T15:09:41.093 回答
2

此问题已在 Pine v3 和 v4 中得到修复。发布的代码现在在图表上显示了这一点。日期是订单执行前柱的日期,对应于订单发出的时间: 在此处输入图像描述

于 2020-02-19T05:15:38.077 回答