【发布时间】:2022-11-18 18:58:49
【问题描述】:
我正在使用 kline 数据框。我正在向我的 df 添加 Swing_High 和 Swing_Low 列。
我发现了一个错误,在低波动期间我的 Close == Swing_Low 价格。这让我在另一个函数中出现了 inf 错误,我在 close / Swing_Low 中有一个函数。
要解决此问题,我需要根据是否为 Close == Swing_Low 来计算最大/最小值。滚动周期默认为 10,但如果上述情况成立,则将滚动周期增加到 15。
下面是我如何计算 Swing_High 和 Swing_Low 直至遇到 Inf 错误。
import pandas as pd
df = pd.read_csv('Data/bybit_BTCUSD_15m.csv')
df["Date"] = df["Date"].astype('datetime64[ns]')
# Calculate the swing high and low for a given length
df['Swing_High'] = df['High'].rolling(10).agg('max')
df['Swing_Low'] = df['Low'].rolling(10).agg('min')
我尝试了下面的函数,但它给了我一个 ValueError: The truth value of a Series is ambiguous
def swing_high(close, high, period1, period2):
a = high.rolling(period1).agg('max')
b = high.rolling(period2).agg('max')
if a != close:
return a
else:
return b
df['Swing_High'] = swing_high(df['Close'], df['High'], 10, 15)
我该如何解决这个问题,或者有更好的方法来实现我想要的结果吗?
【问题讨论】:
标签: pandas user-defined-functions valueerror