为什么'close`和`open`与图表上的价格不匹配?

时间:2018-05-18 12:45:10

标签: tradingview-api pine-script

FOREX,1H Chart,// version = 3 pinescript

我还不熟悉Pinescript,但我注意到使用closeopen会返回不是当前收盘价或开盘价的数据。即使使用close[1],也会返回与前一个蜡烛的结束完全不同的数量。

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

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

  

从技术上讲,历史引用运算符不会返回单个运算符   value但返回一系列具有特定偏移量的值,甚至   虽然我们一般认为历史引用运算符   访问第n个元素。

     

这意味着,例如,close[5] 不会返回单个   收盘价但是一系列收盘价等于   收盘价5个月前。

上面那个大胆的陈述 - "一系列收盘价" ;这是否意味着close[5]本身不是第五支蜡烛的收盘价?

enter image description here

如果是这种情况,那么我该如何用以下方式显示该蜡烛的当前收盘价:

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

2 个答案:

答案 0 :(得分:4)

  

我还是Pinescript的新手,但我注意到使用close或open返回的数据不是当前的收盘价或开盘价。即使使用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)

在这里,我们生成一个订单评论,其中包含当前柱的日,月和年。或者至少,应该如何工作。

对于策略测试员的第一次交易'它显示正确:

enter image description here

然后,对于后期测试中的交易,TradingView仍然使用旧的缓存订单评论:

enter image description here

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

答案 1 :(得分:2)

Pine v3和v4中已解决此问题。现在,已发布的代码将其显示在图表上。日期是订单执行前的柱形日期,对应于发出订单的日期: enter image description here