找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
首页论坛EAHub 外汇论坛
查看: 12|回复: 0

JavaScript版本SuperTrend策略

[复制链接]

4万

主题

54

回帖

4万

积分

管理员

积分
45954
发表于 2026-8-22 07:25:00 | 显示全部楼层 |阅读模式
// VIA: https://github.com/freqtrade/freqtrade-strategies/issues/30

function SuperTrend(r, period, multiplier) {
    // atr
    var atr = talib.ATR(r, period)

    // baseUp , baseDown
    var baseUp = []
    var baseDown = []
    for (var i = 0; i < r.length; i++) {
        if (isNaN(atr)) {
            baseUp.push(NaN)
            baseDown.push(NaN)
            continue
        }
        baseUp.push((r.High + r.Low) / 2 + multiplier * atr)
        baseDown.push((r.High + r.Low) / 2 - multiplier * atr)
    }

    // fiUp , fiDown
    var fiUp = []
    var fiDown = []
    var prevFiUp = 0
    var prevFiDown = 0
    for (var i = 0; i < r.length; i++) {
        if (isNaN(baseUp)) {
            fiUp.push(NaN)
        } else {
            fiUp.push(baseUp < prevFiUp || r[i - 1].Close > prevFiUp ? baseUp : prevFiUp)
            prevFiUp = fiUp
        }

        if (isNaN(baseDown)) {
            fiDown.push(NaN)
        } else {
            fiDown.push(baseDown > prevFiDown || r[i - 1].Close < prevFiDown ? baseDown : prevFiDown)
            prevFiDown = fiDown
        }
    }

    var st = []
    var prevSt = NaN
    for (var i = 0; i < r.length; i++) {
        if (i < period) {
            st.push(NaN)
            continue
        }

        var nowSt = 0
        if (((isNaN(prevSt) && isNaN(fiUp[i - 1])) || prevSt == fiUp[i - 1]) && r.Close <= fiUp) {
            nowSt = fiUp
        } else if (((isNaN(prevSt) && isNaN(fiUp[i - 1])) || prevSt == fiUp[i - 1]) && r.Close > fiUp) {
            nowSt = fiDown
        } else if (((isNaN(prevSt) && isNaN(fiDown[i - 1])) || prevSt == fiDown[i - 1]) && r.Close >= fiDown) {
            nowSt = fiDown
        } else if (((isNaN(prevSt) && isNaN(fiDown[i - 1])) || prevSt == fiDown[i - 1]) && r.Close < fiDown) {
            nowSt = fiUp
        }

        st.push(nowSt)
        prevSt = st
    }

    var up = []
    var down = []
    for (var i = 0; i < r.length; i++) {
        if (isNaN(st)) {
            up.push(st)
            down.push(st)
        }

        if (r.Close < st) {
            down.push(st)
            up.push(NaN)
        } else {
            down.push(NaN)
            up.push(st)
        }
    }

    return [up, down]
}

// 测试指标用的main函数,并非交易策略
function main() {
    while (1) {
        var r = _C(exchange.GetRecords)
        var st = SuperTrend(r, 10, 3)

        $.PlotRecords(r, "K")
        $.PlotLine("L", st[0][st[0].length - 2], r[r.length - 2].Time)
        $.PlotLine("S", st[1][st[1].length - 2], r[r.length - 2].Time)

        Sleep(2000)
    }
}复制代码
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|EAHub外汇论坛

GMT+8, 2026-10-12 00:05 , Processed in 0.260806 second(s), 18 queries .

Powered by Discuz! X3.5

© 2001-2026 Discuz! Team.

快速回复 返回顶部 返回列表