【发布时间】:2020-03-02 23:17:55
【问题描述】:
我在空闲时间学习了一些PineScript,我发现使用它真的很困难。我基本上是在尝试重新创建我在 C# 中编写的复杂指标,而我正在为简单的事情而苦苦挣扎。
省略复杂的东西,假设我想在 MACD 的行为如下图时绘制箭头:
这是我目前的尝试,它基本上应该检查我们是否处于峰值,找到高直方图,找到低于零列,然后高于零列并检查它们是否包含比当前更高的直方图值:
[macdLine, signalLine, hist] = macd(close, 12, 26, 9)
float ind = na
if hist[2] > 0 and hist[1] < hist[2] and hist < hist[1] and hist[3] < hist[2]
bool maxHistFound = false
bool lowerFound = false
bool upperFound = false
bool candidateFound = false
float maxHist = hist[2]
for i = 1 to 1000
if not maxHistFound
if hist[i] < 0
maxHistFound := true
else
if hist[i] > maxHist
maxHist := hist[i]
if not lowerFound
if hist[i] < 0
lowerFound := true
if not upperFound
if hist[i] > 0
upperFound := true
if maxHistFound and lowerFound and upperFound
if hist[i] > 0 and hist[i + 1] <= hist[i] and hist[i - 1] <= hist[i]
if hist[i] > maxHist // and macdLine[i] > 0 and signalLine[i] > 0 and hist[i] > 0.10
candidateFound := true
maxHist := hist[i]
if hist[i] < 0
if candidateFound
ind := -1
break
alertcondition(ind == -1, title='Short', message='Short')
plotarrow(ind, colorup=#008000, colordown=#FF3030, transp=0, minheight=50, maxheight=50)
即使信号之前没有我描述的,它也会显示信号。
主要问题是我可能自己修复它,但我不知道如何用这种语言正确调试,我尝试通过绘制所有内容来做到这一点,但绘制调试事情是可笑的,不幸的是,在我的无知中我可以找不到更好的解决方案。如果我知道如何在PineScript 的断点处停止,我可能很容易找出发生了什么。
【问题讨论】:
-
能否在出现错误
invalid series length的地方添加符号+分辨率? -
感谢您对我的问题表现出兴趣。这个问题不够清晰,所以我改进了描述。实际上,为什么我收到错误并不重要,重要的是如何确保我可以验证每段代码以查看为什么它没有按预期工作。目前我不知道该怎么做。请考虑当前的示例。为了您的信息,我也很乐意接受一个答案,它将告诉我如何有效地调试这个东西。
-
实际上,绘制一个值是调试脚本的主要方式。 pinecoders.com/faq_and_code/#debugging 这是一篇关于在 pine-script 中调试的短文。它显示了更多方法来澄清脚本中发生的事情。确实,这不是调试代码最方便的方法,但目前没有比这更好的方法了。
-
它基本上都显示了如何绘制“部分”让我们称之为复合指标,你有 5 个 ema,rsi 和 2nd ema 不符合条件 - 你都准备好了。我需要迭代历史,所以如果我必须这样做,我需要为每个“当前时间点”绘制许多历史值,而且它只会比我发布的简单示例更棘手。我在电视上看到了一些相当复杂的东西,很难相信他们必须一个一个地绘制所有的东西才能让它发挥作用。好的,请告诉我你将如何处理这个特定的例子。你将如何检查什么不工作?
-
没有 pine 调试器,我们可以在其中放置断点,然后研究变量并跟踪脚本。只有铁杆,只有
print/plot()。我同意,这很麻烦,但是没有其他调试方法,并且直到最近还没有任何功能可以调试字符串值。所以脚本复杂的人有难以置信的耐心,我认为他们已经找到了禅,这对他们编程很有帮助。
标签: pine-script