【问题标题】:How to plot the actual price at which a moving average crosses如何绘制移动平均线交叉的实际价格
【发布时间】:2020-08-21 08:59:23
【问题描述】:

我希望能够在移动平均线交叉时捕获实际价格。 我知道 MA 交叉价格总是与交叉时的实际价格不同,因为 MA 是滞后指标。 我知道收盘价、最高价、最低价等有内置变量,但实际报价是否有内置变量? 或者有没有办法得到这个价格? 一个可能的解决方案是从较短的时间范围内收盘。例如,如果在每日均线交叉处工作,那么您如何编写从较低时间范围内收盘的代码? 任何建议或帮助将不胜感激。谢谢

这是我迄今为止尝试过的:

// 我正在制作日线图

cond1 = 交叉(sma(close, 7), sma(close, 21))

CurrentPrice = security(ticker, "1", close)

plot((cond1 ? CurrentPrice: na),style=circles, color=green, transp=transp)

不幸的是,这并没有在日线图上的 1 分钟收盘价处绘制绿色圆圈。而是以我不知道如何计算的其他价格。

【问题讨论】:

  • 到目前为止你有什么尝试?

标签: pine-script


【解决方案1】:

这是你想要的吗?

MA_7 = sma(close, 7)

MA_21 = sma(close, 21)

MA_Cross = (MA_7[1] < MA_21[1]) and (MA_7 > MA_21)

plot(MA_Cross and (not MA_Cross[1]),style=circles, color=green, transp=transp)

【讨论】:

    【解决方案2】:

    因此,在对此进行了大量研究之后,我意识到这可能是不可能的。

    澄清我想要得到的是:

    "在第一次满足每日 MA 交叉条件时的价格在日线图上绘制一个点符号,而不是当前日线柱内的任何后续时间"

    不幸的是,这很可能是不可能的,因为交叉条件可能会在每个当前的每日柱形图上发生多次,到目前为止,我还没有找到任何方法来捕获每个柱形图满足的条件的第一个实例(或者它是也称为“每小节一次”)。

    我与几个经验丰富的松木编码员交谈过,他们还说他们以前从未见过这样的事情......

    【讨论】:

      【解决方案3】:
      //@version=4
      study(title = "Alert: 7x21 Daily Time Frame", overlay=true)
      
      MA_7   = sma(close,7)
      MA_21   = sma(close,21)
      
      //  Time frame change to Daily
      MA_7_Daily  = security(syminfo.tickerid,'D', MA_7, lookahead = barmerge.lookahead_on)
      MA_21_Daily = security(syminfo.tickerid,'D', MA_21,lookahead = barmerge.lookahead_on)
      
      //  (I like to visually verify my code.  plots are not necessary for the alerts)
      plot(MA_7_Daily, color = color.lime)
      plot(MA_21_Daily, color = color.red)
      
      alertcondition(MA_7_Daily[1] <= MA_21_Daily[1] and MA_7_Daily >= MA_21_Daily, message = "Daily Moving Ave 7 x 21 Long")
      alertcondition(MA_7_Daily[1] >= MA_21_Daily[1] and MA_7_Daily <= MA_21_Daily, message = "Daily Moving Ave 7 x 21 Short")
      

      【讨论】:

      • ...您还可以获取代码和每日信息,并在 valuewhen 中使用它,以在 1 分钟图表上创建标签,如果您想要价格的视觉效果...。
      • 澄清我想要得到的是:“在第一次满足每日 MA 交叉条件时的价格在日线图上绘制一个点符号,而不是当前每日的任何后续时间酒吧” 。所以在分钟图上绘制价格并不是我想要的。恰恰相反,我希望将分钟图上的价格绘制在每日图表上,并且只绘制在当前每日柱形图/蜡烛图的第一次出现时。
      • 感谢您的尝试,但我认为这可能是一个失败的原因。请参阅我发布的答案。
      【解决方案4】:

      我是 pinescript 的新手,但我想我有一些可能会有所帮助的东西。研究“value when”函数。在下面的例子中,当 MA_9 下穿 MA_12 时,柱的低点将在条件发生时打印。条件在 valuewhen 函数的开头定义,您要打印的内容(高/低/收盘或其他指标甚至)在 valuewhen 函数的末尾附近指定。在以下情况下,当条件发生时,将绘制低值。您可能希望将值末尾的“低点”更改为“收盘价”,因为大多数人会在收盘时绘制移动平均线。请记住,一旦您创建了 valuewhen,它仍然需要被绘制/打印为标签等。 希望这会有所帮助。

      //@版本=4 study("ValueWhen")

      MA_9 = sma(关闭, 9)

      MA_12 = sma(关闭,12)

      MA_Cross = valuewhen(crossunder(MA_9, MA_12), low, 0)

      绘图(MA_Cross)

      【讨论】:

      • 不不幸的是,这不起作用,因为 valuewhen 函数返回当前时间范围的“关闭”或“低”。因此,如果您在日线图上,并且发生交叉,它将显示每日蜡烛的收盘价,而不是交叉发生时的实际价格。我已经找到了解决这个问题的方法,但它不是很优雅。这里: CurrentPrice = security(ticker, "1", ohlc4) 因此,如果您正在处理日线图,这将为您提供当前 1 分钟 ohlc4 柱的值。
      • 您能否说明图表绘制在哪个时间范围内,以及您希望在哪个时间范围内捕获 MA 交叉?一种选择是从“非标绘”时间框架创建一个新的证券,并在我的建议中使用该证券的收盘价代替收盘价。另一种选择是将 MA 综合到您正在使用的时间范围内。我在这方面取得了成功,它避免了创建附加证券(Pine 限制为 40)。有关详细信息,请参阅第 2 篇文章...
      • 要合成一个 MA,您只需将绘制的时间范围的分钟数除以您要合成的时间范围的分钟数,然后将该数字乘以您的周期嘛。例如,假设您想从 15 分钟图表上的小时图表合成 50 周期 MA。 60/15 = 4. 4 x 50 周期 MA 为您提供 200 个周期。因此,15 分钟图表上的 sma(close,200) = 小时图表上的 sma(close,50)。 '不知道这在更小的时间范围内会有多好。 '只是一个想法。抱歉,我帮不上忙。
      • 我正在制作一个日线图,我在这个日线图上有两个 MA。现在,当日线图上两条 MA 交叉时,我想知道当时的股票价格是多少。我知道我可以看到 MA 交叉的价格,但由于 MA 滞后,交叉时的实际股票价格是不同的,这就是我想知道的。例如。当 MA 交叉出现在日线图上时,如果可能的话,我想知道那一分钟的股票价格。我已经尝试了安全功能,但它没有给出准确的读数。请问还有什么建议吗?
      • 嗯,希望我能更流利地使用 pinescript,以便我能提供更多帮助。那么图表的绘图与绘制移动平均线的时间范围相同吗?我相信警报会打印内部条形图(在条形图关闭之前)。如果您可以接受警报,则对 MA 交叉进行简单的警报可能会起作用。在警报消息正文中,您可以让它打印最后一个值。也可以为初始交叉值创建一个标签(如果他们打印 intrabar,我对此不确定)。时间可以精确到毫秒。考虑时间可能允许使用最近的 x 打印警报。
      猜你喜欢
      • 1970-01-01
      • 2020-10-03
      • 1970-01-01
      • 1970-01-01
      • 2021-12-26
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多