熊猫DataFrame逻辑 - 蟒蛇

问题描述:

试图回溯测试交易逻辑的乐趣,但我似乎理解如何利用numpy做出决定。例如,我想根据数据是低于还是高于上下行来设置df ['position'] = 1或-1。如果数据< =下行我想设置位置= 1,并保持它在1,直到数据它是> =上线。一旦数据> =上线我想设置位置= -1并保持在-1然后重复。熊猫DataFrame逻辑 - 蟒蛇

import pandas as pd 
import numpy as np 
import matplotlib.pyplot as plt 

data = np.random.standard_normal((5, 100)).flatten() 
data = data.cumsum() 

df = pd.DataFrame({'Data': data}) 
df['std'] = df['Data'].rolling(50).std() 
df['SMA'] = df['Data'].rolling(50).mean() 
df['upper'] = df['SMA'] + (2 * df['std']) 
df['lower'] = df['SMA'] - (2 * df['std']) 

df[['Data', 'SMA', 'upper', 'lower']].plot(figsize=(10, 6)) 

df['position'] = 0 
plt.show() 

enter image description here

在这里,我试图做到这一点,但失败了,因为我不知道如何正确地做到这一点。

df['islower'] = np.where(df['Data'] < df['lower'], 1, 0) 
df['isupper'] = np.where(df['Data'] > df['upper'], 1, 0) 
df['position'] = np.where(df['isupper']==1, -1, 0) | np.where(df['islower']==1, 1, 0) 
+0

你什么意思,你失败了呢?你得到的错误是什么?或者你想显示出来的数据? – splinter

+0

如果df ['Data'] 我不知道如何设置df ['position'] = 1 DF [ '上']。我可以用没有熊猫的状态逻辑来做到这一点,但目标是用数据框做到这一点。 – BillyRay

+0

不是你要找的东西的答案吗?如果没有,我建议你展示你想得到的输出与你实际得到的输出 – splinter

我想你想要做的是:

df['islower'] = df['islower'].where(df['Data'] < df['lower'], 1, 0)  
df['isupper'] = df['isupper'].where(df['Data'] < df['upper'], 1, 0)  
+0

是的,这表明如何正确判断数据是低于还是高于线条,但如果我们触摸底部/顶部线条,如何设置位置= 1或-1? – BillyRay

+0

是不是你在找什么? – splinter

+0

我想弄清楚如何设置df ['position'] = np.where(df ['isupper'] == 1,-1,0)| np.where(df ['islower'] == 1,1,0)如果你使用df [['position']]。plot(figsize =(10,6)),我使用的代码是不正确的,结果 – BillyRay