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

Pine Script转Python后遇float与NoneType类型不兼容错误求助

问题:Pine Script转Python的Z-score计算报错

我将Pine Script中的Z-score计算代码转换为Python代码,使用pandas与pandas_ta库实现,但运行时出现错误。

Python代码(原错误版本)

import pandas as pd
import pandas_ta as ta

close = pd.read_csv('close-MATIC.csv')

def Z_4(src, length, smooth):
    mean = ta.sma(src, length)
    vlo = src - mean
    std = ta.stdev(vlo, length)
    value = (src - mean) / std
    Wema = ta.ema(ta.ema(value, smooth), smooth)
    return [Wema, value]

R4 = Z_4(close, 8, 5)

print(R4)

样本close-MATIC.csv数据

1.1154
1.1133
1.114
1.1131666666666669
1.1158444444444446
1.1207629629629632
1.1231753086419756
1.1252835390946503
1.1277223593964336
1.1305149062642892
1.1350099375095262
1.1363399583396843
1.1352933055597896
1.1354622037065263
1.132108135804351
1.1314387572029008
1.1310258381352671
1.1331172254235113
1.1350114836156744
1.135007655743783

原Pine Script代码

f_zscore(_src, _length, _smooth)=>
    _mean = sma(_src, _length)
    _std = stdev(_src-_mean, _length)
    _value = (_src - _mean) / _std
    _dema = ema(ema(_value, _smooth), _smooth)
    [_value, _dema]

smooth = input(3)
[z0, d0] = f_zscore(close, input(6), smooth)

报错信息

Traceback (most recent call last):
  File "c:/Users/MO/OneDrive/Desktop/New folder (21)/TOP4.py", line 14, in <module>
    R4= Z_4(close,8,5)
  File "C:\Users\MO\OneDrive\Desktop/New folder (21)/TOP4.py", line 8, in Z_4
    vlo=(src-mean)
  File "C:\Users\MO\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\ops\common.py", line 65, in new_method     
    return method(self, other)
  File "C:\Users\MO\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\arraylike.py", line 97, in __sub__
    return self._arith_method(other, operator.sub)
  File "C:\Users\MO\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\frame.py", line 5982, in _arith_method
    new_data = self._dispatch_frame_op(other, op, axis=axis)
  File "C:\Users\MO\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\frame.py", line 6008, in _dispatch_frame_op    bm = self._mgr.apply(array_op, right=right)
  File "C:\Users\MO\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\internals\managers.py", line 425, in apply 
    applied = b.apply(f, **kwargs)
  File "C:\Users\MO\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\internals\blocks.py", line 378, in apply   
    result = func(self.values, **kwargs)
  File "C:\Users\MO\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\ops\array_ops.py", line 189, in arithmetic_op
    res_values = _na_arithmetic_op(lvalues, rvalues, op)
  File "C:\Users\MO\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\ops\array_ops.py", line 149, in _na_arithmetic_op
    result = _masked_arith_op(left, right, op)
  File "C:\Users\MO\AppData\Local\Programs\Python\Python38\lib\site-packages\pandas\core\ops\array_ops.py", line 111, in _masked_arith_op
    result[mask] = op(xrav[mask], y)
TypeError: unsupported operand type(s) for -: 'float' and 'NoneType'

解决方案

错误根源有两个:

  1. CSV读取方式错误:你的CSV没有表头,pd.read_csv会默认把第一行数据作为列名,导致close是DataFrame而非Series,pandas_ta的函数需要传入Series才能正确计算。
  2. 返回顺序不符原逻辑:原Pine Script返回顺序是[_value, _dema],原Python代码返回顺序相反,虽不影响报错,但会导致结果对应关系错误。

修正后的代码:

import pandas as pd
import pandas_ta as ta

# 读取CSV时指定无表头,并转为Series
close = pd.read_csv('close-MATIC.csv', header=None, squeeze=True)

def Z_4(src, length, smooth):
    mean = ta.sma(src, length)
    vlo = src - mean
    std = ta.stdev(vlo, length)
    value = (src - mean) / std
    # 对应原Pine Script的两次EMA计算
    dema = ta.ema(ta.ema(value, smooth), smooth)
    # 按原Pine的返回顺序:先value,再dema
    return [value, dema]

R4 = Z_4(close, 8, 5)

# 打印结果,可选择去除NaN的行
print("Z-score值:\n", R4[0].dropna())
print("\n双EMA平滑后的Z-score:\n", R4[1].dropna())

说明:

  • header=None告诉pandas文件没有表头,squeeze=True将单列DataFrame转为Series,符合pandas_ta的参数要求。
  • 调整返回顺序与原Pine Script一致,保证结果逻辑匹配。
  • 打印时用dropna()可以过滤掉前几个因滑动窗口产生的NaN值,更易查看有效结果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 13:25:16