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

Python实现TradingView中Laguerre PPO函数遇KeyError报错求助

问题分析与解决方案

错误原因

你的Python代码无法正确模拟Pine Script中lag函数的递归逻辑:

  • Pine Script的nz(L0[1])是取上一根K线的L0值,属于逐行递归计算;
  • 你用向量式的shift()操作无法实现这种依赖前序结果的递归,且初始空DataFrame的shift操作会导致计算结果异常,最终lagfunction返回的无效数据无法成功写入dataframe['lmas'],触发KeyError。

修改后的代码

import pandas as pd

Short = 0.1
Long = 0.3

def lagfunction(g, p: pd.Series) -> pd.Series:
    # 初始化递归变量,对应Pine Script的nz(...)默认填充0
    prev_L0 = 0.0
    prev_L1 = 0.0
    prev_L2 = 0.0
    prev_L3 = 0.0
    
    result = []
    for val in p:
        # 完全匹配Pine Script的逐bar计算逻辑
        curr_L0 = (1 - g) * val + g * prev_L0
        curr_L1 = -g * curr_L0 + prev_L0 + g * prev_L1
        curr_L2 = -g * curr_L1 + prev_L1 + g * prev_L2
        curr_L3 = -g * curr_L2 + prev_L2 + g * prev_L3
        
        f = (curr_L0 + 2 * curr_L1 + 2 * curr_L2 + curr_L3) / 6
        result.append(f)
        
        # 更新前序值,供下一根bar计算使用
        prev_L0, prev_L1, prev_L2, prev_L3 = curr_L0, curr_L1, curr_L2, curr_L3
    
    return pd.Series(result, index=p.index)

# 假设dataframe已包含high、low列
dataframe['hl2'] = (dataframe['high'] + dataframe['low']) / 2
dataframe['lmas'] = lagfunction(Short, dataframe['hl2'])
dataframe['lmal'] = lagfunction(Long, dataframe['hl2'])
dataframe['ppoT'] = (dataframe['lmas'] - dataframe['lmal']) / dataframe['lmal'] * 100

关键修改点

  • 将输入参数p的类型从DataFrame改为Series(hl2是单列数据,用Series更合理);
  • 用逐行迭代模拟Pine Script的递归逻辑,每一步计算都依赖上一行的L0-L3值;
  • 初始化递归的前序值为0,对应Pine Script中nz()函数的默认填充行为;
  • 返回带索引的Series,确保能与原dataframe的索引匹配,成功写入新列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 12:30:42