You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将Pine Script二阶极点SSF代码转Python并匹配结果?

二阶极点SSF滤波器Pine Script转Python的结果匹配问题

问题背景

需将实现二阶极点SSF(二阶超级平滑滤波器)的Pine Script代码转换为Python,但自行编写的代码运行结果与原Pine Script输出完全不符,需修正实现逻辑以匹配原结果。

原Pine Script代码

get2PoleSSF(src, length) =>
PI = 2 * asin(1)
arg = sqrt(2) * PI / length
a1 = exp(-arg)
b1 = 2 * a1 * cos(arg)
c2 = b1
c3 = -pow(a1, 2)
c1 = 1 - c2 - c3

ssf = 0.0
ssf := c1 * src + c2 * nz(ssf[1]) + c3 * nz(ssf[2])

自行编写的Python代码

def get2PoleSSD(src,length):
    PI = 2* np.arcsin(1)
    arg = np.sqrt(2)* PI / length
    a1 = np.exp(-arg)
    b1 = 2 * a1 *np. cos(arg)
    c2 = b1
    c3 = -pow(a1, 2)
    c1 = 1 - c2 - c3
    df['ssf']  = 0.0
    df['ssf'] = c1* src
    df['ssf_1p'] = df['ssf'].shift(1)
    df['ssf_2p'] = df['ssf'].shift(2)
    df['ssf_n'] = c1 * src + c2 * df['ssf_1p'] + c3 * df['ssf_2p']

错误核心原因

原Pine Script中的ssf :=是递归迭代赋值,每一步的计算结果都依赖前两次的ssf输出;而你编写的Python代码仅用初始的c1*src做移位计算,完全没有实现递归迭代的核心逻辑,这是结果不符的关键。此外还存在全局依赖df、未处理NaN值等问题。

正确Python实现

import numpy as np

def get2PoleSSF(src, length):
    PI = 2 * np.arcsin(1)
    arg = np.sqrt(2) * PI / length
    a1 = np.exp(-arg)
    b1 = 2 * a1 * np.cos(arg)
    c2 = b1
    c3 = -a1 ** 2
    c1 = 1 - c2 - c3

    # 初始化结果数组,兼容NumPy数组和Pandas Series
    src_arr = np.asarray(src)
    ssf = np.zeros_like(src_arr)
    
    # 处理前两个元素,对应Pine Script中nz(ssf[1])=0、nz(ssf[2])=0的初始规则
    ssf[0] = c1 * src_arr[0]
    if len(src_arr) >= 2:
        ssf[1] = c1 * src_arr[1] + c2 * ssf[0]
    
    # 从第三个元素开始递归计算,处理NaN值对应nz函数
    for i in range(2, len(src_arr)):
        prev1 = ssf[i-1] if not np.isnan(ssf[i-1]) else 0
        prev2 = ssf[i-2] if not np.isnan(ssf[i-2]) else 0
        ssf[i] = c1 * src_arr[i] + c2 * prev1 + c3 * prev2
    
    # 保持输入类型一致,若原输入是Series则返回Series
    if isinstance(src, pd.Series):
        return pd.Series(ssf, index=src.index)
    return ssf

使用示例

import pandas as pd

# 示例数据
df = pd.DataFrame({'close': [10,11,12,13,14,15,16,17,18,19]})
# 计算SSF并赋值到DataFrame
df['ssf'] = get2PoleSSF(df['close'], length=5)

内容的提问来源于stack exchange,提问作者mtfr8 me

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 10:15:44