首页 > 解决方案 > 如何用 syminfo.tickerid 实现 JMA,但是没有 JMA 功能

问题描述

我有这个sma函数的代码,但是我想实现JMA但是没有JMA的函数。

study(title="Moving AVG Levels", overlay=true)

sma1 = input(title="sma 7-W", type=input.bool, defval=true)

out_sma1 = security(syminfo.tickerid, "60", sma(close, 1200))

sma_plot_1 = plot(out_sma1, color=color.new(color.fuchsia, 70), linewidth=4,  title=" 7-W ") 

这是我用于 JMA 指标的代码

study(title="SMA veliki frejmovi", shorttitle="JMA LOLA", overlay=true)
length1 = input(title="Length JMA 1", type=input.integer, defval=21)
phase1 = input(title="Phase JMA 1", type=input.integer, defval=50)
power1 = input(title="Power JMA 1", type=input.integer, defval=1)
src1 = input(title="Source JMA 1", type=input.source, defval=ohlc4)
highlightMovements1 = input(title="Highlight Movements JMA 1 ?", type=input.bool, defval=true)

phaseRatio1 = phase1 < -100 ? 0.5 : phase1 > 100 ? 2.5 : phase1 / 100 + 1.5
beta1 = 0.45 * (length1 - 1) / (0.45 * (length1 - 1) + 2)
alpha1 = pow(beta1, power1)
jma1 = 0.0
e01 = 0.0
e01 := (1 - alpha1) * src1 + alpha1 * nz(e01[1])
e11 = 0.0
e11 := (src1 - e01) * (1 - beta1) + beta1 * nz(e11[1])
e21 = 0.0
e21 := (e01 + phaseRatio1 * e11 - nz(jma1[1])) * pow(1 - alpha1, 2) + 


pow(alpha1, 2) * nz(e21[1])

jma1 := e21 + nz(jma1[1])

jmaColor1 = highlightMovements1 ? jma1 > jma1[1] ? color.green : color.red : #6d1e7f
jmaStr1 = highlightMovements1 ? jma1 > jma1[1] ? 1 : -1 : 0

plot(jma1, title="JMA 1", linewidth=2, color=jmaColor1, transp=0)

谢谢

标签: pine-script

解决方案


您将 JMA 计算包装在自定义函数中,然后您可以将其传递给安全调用。

length1 = input(title="Length JMA 1", type=input.integer, defval=21)
phase1 = input(title="Phase JMA 1", type=input.integer, defval=50)
power1 = input(title="Power JMA 1", type=input.integer, defval=1)
src1 = input(title="Source JMA 1", type=input.source, defval=ohlc4)

res = input("", type = input.resolution)

f_jma(_src, _length, _phase, _power) =>
    _phaseRatio = _phase < -100 ? 0.5 : _phase > 100 ? 2.5 : _phase / 100 + 1.5
    _beta = 0.45 * (_length - 1) / (0.45 * (_length - 1) + 2)
    _alpha = pow(_beta, _power)
    _jma = 0.0
    _e01 = 0.0
    _e01 := (1 - _alpha) * _src + _alpha * nz(_e01[1])
    _e11 = 0.0
    _e11 := (_src - _e01) * (1 - _beta) + _beta * nz(_e11[1])
    _e21 = 0.0
    _e21 := (_e01 + _phaseRatio * _e11 - nz(_jma[1])) * pow(1 - _alpha, 2) + pow(_alpha, 2) * nz(_e21[1])
    _jma := _e21 + nz(_jma[1])


mtf_jma = security(syminfo.tickerid, res, f_jma(src1, length1, phase1, power1))

plot(mtf_jma)

推荐阅读