我如何在 Javascript/Typescript 中复制 TradingView 指标相对移动平均线 (RMA)

问题描述 投票:0回答:1

我正在尝试从交易视图“克隆”技术指标 ta.RMA。

但是经过一段时间的尝试,我还没有成功将其转换为工作代码。

这是 pine 语言中的等效内容:

alpha = 1/length
sum = 0.0
sum := na(sum[1]) ? ta.sma(src, length) : alpha * src + (1 - alpha) * nz(sum[1])

这是迄今为止我的打字稿代码:

function simpleMovingAverage(data: number[], period: number) {
    if (data.length < period) return null

    let sum = 0
    for (let i = 0; i < period; i++) {
        sum += data[i]
    }

    const smaValues = [sum / period];

    for (let i = period; i < data.length; i++) {
        sum = sum - data[i - period] + data[i];
        smaValues.push(sum / period);
    }

    return smaValues
}

function relativeMovingAverage(data: number[], period: number) {
    // Missing
}

const t = [
    39.69999999999709, 77.19999999999709,
    69.79999999998836, 48.90000000000873,
    28.40000000000873, 25.19999999999709,
                 16.5,                10,
    59.89999999999418, 52.90000000000873,
    22.80000000000291,              97.5,
   103.39999999999418,              63.5,
    79.69999999999709, 97.60000000000582,
    57.29999999998836, 23.69999999999709,
    89.79999999998836, 33.60000000000582
]

javascript typescript math pine-script technical-indicator
1个回答
0
投票

这是我的解决方案

function averageTrueRange(candles: Candle[], length: number) {
    if (candles.length < length) return null

    const lows = candles.map((candle) => +candle.low)
    const highs = candles.map((candle) => +candle.high)
    const closes = candles.map((candle) => +candle.close)
    
    const TRResults: number[] = []
    for (let x = 1; x < candles.length; x++) TRResults.push(Math.max(highs[x] - lows[x], Math.abs(highs[x] - closes[x - 1]), Math.abs(lows[x] - closes[x - 1])))
 
    const RMAResults = [TRResults[0]]
    const alpha = 1 / length
    
    for (let x = 1; x < TRResults.length; x++) RMAResults.push((alpha * TRResults[x]) + ((1 - alpha) * RMAResults[RMAResults.length - 1]))
    return RMAResults[RMAResults.length - 1]
}
© www.soinside.com 2019 - 2024. All rights reserved.