我有一个pandas的开盘/高/低/收盘股价数据框,我正在写一个函数,将抛物线SAR添加到我的数据框。现在,PSAR的数量增长得惊人的巨大,我似乎从来没有在牛市和熊市之间来回切换。任何有助于理解为什么我的PSAR变得如此疯狂将是伟大的。我试过几种不同的代码,但都没有用。在
对于不熟悉PSAR的人:
加速度系数乘以极值点与上期SAR之差。然后将其添加到上期的SAR中。但是请注意,SAR永远不会高于前两个时期的低点。如果SAR高于其中一个低点,则使用两个最低的SAR。在
Current SAR = Prior SAR + Prior AF(Prior EP - Prior SAR)
例如:2010年4月13日:SAR=48.28=48.13+.14(49.20-48.13)
加速度系数乘以前期SAR与极值点之间的差值。然后从前期的SAR中减去。但是请注意,SAR永远不会低于前两个时期的高点。SAR应该是两个最高点中的一个。在
Current SAR = Prior SAR - Prior AF(Prior EP - Prior SAR)
例如:2010年2月9日:SAR=43.56=43.84-.16(43.84-42.07)
在反转过程中,PSAR成为先前的极值点EP,而新的EP是先前的高点或低点,这取决于反转的方向。AF重置为0.02。在
我的职能:
def addSAR(df):
df.loc[0, 'AF'] =0.02
df.loc[0, 'PSAR'] = df.loc[0, 'low']
df.loc[0, 'EP'] = df.loc[0, 'high']
df.loc[0, 'PSARdir'] = "bull"
for a in range(1, len(df)):
if df.loc[a-1, 'PSARdir'] == 'bull':
df.loc[a, 'PSAR'] = df.loc[a-1, 'PSAR'] + (df.loc[a-1, 'AF']*(df.loc[a-1, 'EP']-df.loc[a-1, 'PSAR']))
df.loc[a, 'PSARdir'] = "bull"
if df.loc[a, 'low'] < df.loc[a-1, 'PSAR']:
df.loc[a, 'PSARdir'] = "bear"
df.loc[a, 'PSAR'] = df.loc[a-1, 'EP']
df.loc[a, 'EP'] = df.loc[a-1, 'low']
df.loc[a, 'AF'] = .02
else:
if df.loc[a, 'high'] > df.loc[a-1, 'EP']:
df.loc[a, 'EP'] = df.loc[a, 'high']
if df.loc[a-1, 'AF'] <= 0.18:
df.loc[a, 'AF'] =df.loc[a-1, 'AF'] + 0.02
else:
df.loc[a, 'AF'] = df.loc[a-1, 'AF']
elif df.loc[a, 'high'] <= df.loc[a-1, 'EP']:
df.loc[a, 'AF'] = df.loc[a-1, 'AF']
df.loc[a, 'EP'] = df.loc[a-1, 'EP']
elif df.loc[a-1, 'PSARdir'] == 'bear':
df.loc[a, 'PSAR'] = df.loc[a-1, 'PSAR'] - (df.loc[a-1, 'AF']*(df.loc[a-1, 'EP']-df.loc[a-1, 'PSAR']))
df.loc[a, 'PSARdir'] = "bear"
if df.loc[a, 'high'] > df.loc[a-1, 'PSAR']:
df.loc[a, 'PSARdir'] = "bull"
df.loc[a, 'PSAR'] = df.loc[a-1, 'EP']
df.loc[a, 'EP'] = df.loc[a-1, 'high']
df.loc[a, 'AF'] = .02
else:
if df.loc[a, 'low'] < df.loc[a-1, 'EP']:
df.loc[a, 'EP'] = df.loc[a, 'low']
if df.loc[a-1, 'AF'] <= 0.18:
df.loc[a, 'AF'] = df.loc[a-1, 'AF'] + 0.02
else:
df.loc[a, 'AF'] = df.loc[a-1, 'AF']
elif df.loc[a, 'low'] >= df.loc[a-1, 'EP']:
df.loc[a, 'AF'] = df.loc[a-1, 'AF']
df.loc[a, 'EP'] = df.loc[a-1, 'EP']
return df
找到了Facepalm
应该是
df.loc[a, 'PSAR'] = df.loc[a-1, 'PSAR'] + (df.loc[a-1, 'AF']*(df.loc[a-1, 'PSAR']-df.loc[a-1, 'EP']))
最后两个变量换位了!多痛苦啊。。。在
现在我可以清理函数并使其更好。。在
希望这能帮助其他人避免做一些愚蠢的事情,并坚持2天
相关问题 更多 >
编程相关推荐