如何在Pine Script中编辑Williams Fractal指标以显示3条形分形?

时间:2019-09-06 20:07:49

标签: pine-script

Williams Fractal通过发现5巴的高/低,滞后2巴来绘制分形。

我想建立一个指标,以找到3个柱线的低/高。

我已经检查了TradingView的内置Williams Fractal,其中显示了以下代码:

//@version=4
study("Williams Fractal", shorttitle="Fractal", format=format.price, precision=0, overlay=true)
// Define "n" as the number of periods and keep a minimum value of 2 for error handling.
n = input(title="Periods", defval=2, minval=2, type=input.integer)

我的第一个问题是关于defval:为什么默认值2?这是指滞后吗?另外,我认为设置input允许用户在TradingView上操作此数字以了解指标的偏好(例如设置MA的回溯期),但是我看不到内置的Williams Fractal的输入。

然后我们获得以下参数:

upFractal = (                                                                                                          (high[n+2]  < high[n]) and (high[n+1]  < high[n]) and (high[n-1] < high[n]) and (high[n-2] < high[n]))
         or (                                                                               (high[n+3]  < high[n]) and (high[n+2]  < high[n]) and (high[n+1] == high[n]) and (high[n-1] < high[n]) and (high[n-2] < high[n]))
         or (                                                    (high[n+4]  < high[n]) and (high[n+3]  < high[n]) and (high[n+2] == high[n]) and (high[n+1] <= high[n]) and (high[n-1] < high[n]) and (high[n-2] < high[n]))
         or (                          (high[n+5] < high[n]) and (high[n+4]  < high[n]) and (high[n+3] == high[n]) and (high[n+2] == high[n]) and (high[n+1] <= high[n]) and (high[n-1] < high[n]) and (high[n-2] < high[n]))
         or ((high[n+6] < high[n]) and (high[n+5] < high[n]) and (high[n+4] == high[n]) and (high[n+3] <= high[n]) and (high[n+2] == high[n]) and (high[n+1] <= high[n]) and (high[n-1] < high[n]) and (high[n-2] < high[n]))

dnFractal = (                                                                                                  (low[n+2]  > low[n]) and (low[n+1]  > low[n]) and (low[n-1] > low[n]) and (low[n-2] > low[n]))
         or (                                                                         (low[n+3]  > low[n]) and (low[n+2]  > low[n]) and (low[n+1] == low[n]) and (low[n-1] > low[n]) and (low[n-2] > low[n]))
         or (                                                (low[n+4]  > low[n]) and (low[n+3]  > low[n]) and (low[n+2] == low[n]) and (low[n+1] >= low[n]) and (low[n-1] > low[n]) and (low[n-2] > low[n]))
         or (                        (low[n+5] > low[n]) and (low[n+4]  > low[n]) and (low[n+3] == low[n]) and (low[n+2] == low[n]) and (low[n+1] >= low[n]) and (low[n-1] > low[n]) and (low[n-2] > low[n]))
         or ((low[n+6] > low[n]) and (low[n+5] > low[n]) and (low[n+4] == low[n]) and (low[n+3] >= low[n]) and (low[n+2] == low[n]) and (low[n+1] >= low[n]) and (low[n-1] > low[n]) and (low[n-2] > low[n]))

我能够确定highlow是当前的高价和低价,并且括号中的值可以访问以前的高/低值。但是,high[n+3](举个例子)是否意味着高价3支蜡烛,而high[n-1]意味着高1支蜡烛?

无论如何,我都很难遵循代码的逻辑。我得到upFractal是将在屏幕上绘制的变量,但让我尝试将以下行输入单词:

upFractal = (                                                                                                          (high[n+2]  < high[n]) and (high[n+1]  < high[n]) and (high[n-1] < high[n]) and (high[n-2] < high[n]))

这就是我的意思:

“如果前两根柱的高点小于当前柱的当前高点,并且前一根柱的高点小于当前柱的高点,则绘制upFractal后面的一根柱的高点小于当前柱的高点,后面两个柱的柱的高点小于当前柱的高点。”

我说对了吗?我可以简单地遵循这种逻辑来制作3条线吗?

谢谢。

1 个答案:

答案 0 :(得分:0)

在Pine中使用在时间序列上引用[]运算符的历史记录时,行为与您的理解相反;过去的索引更大,零(或没有运算符的变量名)引用当前柱。

只要您还同时阅读文档,那么从一开始就开始玩代码无疑是学习的一种好方法,而Stack Overflow并不能替代这些文档。开始学习松树的两个好地方是: https://www.tradingview.com/pine-script-docs/en/v4/Quickstart_guide.htmlhttp://www.pinecoders.com/learning_pine_roadmap/