从Pine脚本到Python的递归函数

从Pine脚本到Python的递归函数,python,recursion,pine-script,moving-average,Python,Recursion,Pine Script,Moving Average,我正在尝试将以下Pine函数(alpha=1/长度的指数加权移动平均)转换为Python,以应用于dataframe df(下面Pine代码中的src)的Pandas列。“sma”指简单移动平均线,sma[1]指前一点的sma: pine_rma(src, length) => alpha = 1/length sum = 0.0 sum := na(sum[1]) ? sma(src, length) : alpha * src + (1 - alpha) * nz(sum[1]) 我

我正在尝试将以下Pine函数(alpha=1/长度的指数加权移动平均)转换为Python,以应用于dataframe df(下面Pine代码中的src)的Pandas列。“sma”指简单移动平均线,sma[1]指前一点的sma:

pine_rma(src, length) =>
alpha = 1/length
sum = 0.0
sum := na(sum[1]) ? sma(src, length) : alpha * src + (1 - alpha) * nz(sum[1])
我已经编写了以下Python代码,但是启动递归的最佳方式是什么(行r=[0])


请从下一页重复和。“演示如何解决此编码问题?”与堆栈溢出无关。您必须诚实地尝试解决方案,然后询问有关实现的具体问题。堆栈溢出不用于替换现有教程和文档。另请检查。因为您没有分析您所拥有的和您想要的之间的差异,也没有做出任何明显的努力来改进您的“发现”代码,所以您还没有堆栈溢出问题;更确切地说,您似乎想将此用作编码或教程服务。抱歉,我将进行另一次查看。请重复并从。“演示如何解决此编码问题?”与堆栈溢出无关。您必须诚实地尝试解决方案,然后询问有关实现的具体问题。堆栈溢出不用于替换现有教程和文档。另请检查。因为您没有分析您所拥有的和您想要的之间的差异,也没有做出任何明显的努力来改进您的“发现”代码,所以您还没有堆栈溢出问题;更确切地说,您似乎想将其用作编码或教程服务。抱歉,我会再看一眼
def rolling_apply(group, length):
    alpha = 1/length
    r = [0]
    for x in group.x[:-1]:
        r.append(alpha * r + (1-alpha)*r[-1])
    group.r = r
    return group
    
df.r = df.groupby(df.index).apply(rolling_apply).r