我正在为我的班级做一个项目,在新的dataframe列条件下,我的逻辑存在一些问题。
这是我的问题:
df["filter"] = np.where(df["Signal"]>= 0, 1, -1)
df["lag"] = np.where(df["filter"] != df["filter"].shift(1), 1, 0 )
df["strat"] = df["filter"]*df["lag"]
df1 = df["strat"]
df1 = pd.DataFrame(df1)
我已经提取了信号,将它们放在df中,之后,我希望对这些信号进行过滤,并设置一个新的“过滤器”列,当我的信号为正时其值为1,当其为负时为-1。
此后,如果filter的值发生更改,我将设置一个新的列滞后值,取值为1,如果与以前相同(移位),则取0。
最后,我通过将filter和lag相乘来获得列策略。 屏幕的df
我的问题是,我想更具体地过滤我的信号,你可以看到在13:55我的信号非常接近0,所以我希望当我的信号在-0.1和0.1之间时保持我的最后位置并在我的strat栏中输入0。
我已经尝试过了:
col= 'Signal'
conditions=[ df[col] >= 0.1, (df[col] < 0.1) & (df[col]> -0.1), df[col] <= -0.1 ]
choices= [1,0,-1]
df["filter"] = np.select(conditions, choices, default=np.nan)
df["lag"] = np.where(df["filter"] != df["filter"].shift(1), 1, 0 )
df["strat"] = df["filter"]*df["lag"]
df1 = df["strat"]
df1 = pd.DataFrame(df1)
我使用的是那些能够专门过滤我的信号的线路,但是还有另一个问题:df
就像您看到的一样,strat列中有两次不是我想要的1,如果采取位置(1或-1),那么如果我们继续该位置,则应该为0而不是1。
总而言之,我希望仅当以前我的strat不是1时,如果signal>> 0.1时,才能有一个列strat;同样,如果以前我的strat不是'-0.1,则我想让-1的列strat'。 t -1。如果我的信号在-0.1到0.1之间,则保持最后一个位置。
我希望它很清楚,谢谢您的帮助