我第一次尝试使用递归函数,并且收到错误消息“调用Python对象时超出了最大递归深度”。
我最初是尝试对Ahrens移动平均线进行编码。我在另一个平台上找到了此代码,并尝试用Python编写。
这是另一个脚本语言中的原始代码:
IF BarIndex < Period2 THEN
AFRV2 = Seriesv2
ELSE
AFRV2 = AFRV2[1] + ((Seriesv2 - ((AFRV2[1] + AFRV2[Period2]) / 2)) / Period2)
# where [1] is the previous element
这是我的尝试:
def AhrensAverage(TimeSeries, period):
for index, rows in TimeSeries.iterrows():
if index < period:
AFRV2 = rows
else:
AFRV2 = AFRV2 + ((rows.iloc[-1] - ((AFRV2 + AhrensAverage(TimeSeries, period)) / 2)) / period)
当使用由一列组成的DataFrame调用此函数时,出现上述错误消息。您可能会说,我仍在使用Python学习过程中,我的问题是我是否“正确”使用了函数递归,还是由于代码的其他部分导致了错误?
谢谢您的帮助!
这是DataFrame的前30个元素。
0 114.4050
1 114.9425
2 115.7075
3 114.5175
4 113.4825
5 114.3150
6 115.5950
7 116.0200
8 119.1650
9 129.3700
10 131.8000
11 131.7325
12 130.6075
13 131.0800
14 131.0575
15 131.2150
16 130.4275
17 129.8875
18 130.5400
19 131.1250
20 130.9675
21 130.2025
22 129.8875
23 129.8425
24 129.1225
25 126.4025
26 127.3000
27 128.3350
28 128.2225
29 128.7625
如果其他人正在寻找阿伦斯移动平均线,这是我的代码:
def AhrensMovingAverage(source, period):
afr = []
for index, rows in source.iterrows():
if index < Period:
afr.append(rows)
else:
afr.append(afr[-1] + ((rows.iloc[-1] - ((afr[-1]+ afr[-Period]) / 2)) / Period))
return afr