Я делаю проект для своего класса, и у меня есть некоторые проблемы с логикой в условиях нового столбца данных.
Это моя проблема:
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, когда он отрицательный.
После этого я устанавливаю новую задержку столбца с принимаемым значением 1, если значение фильтра изменяется, и 0, если оно такое же, как ранее (сдвиг).
И, наконец, я получаю столбец, умножая фильтр и задержку.
Экран: df
Моя проблема в том, что я хочу более точно фильтровать свои сигналы, вы можете видеть, что в 13:55 мой сигнал очень близок к 0, поэтому я хочу, чтобы мой сигнал находился в диапазоне от -0,1 до 0,1, чтобы сохранить свою последнюю позицию и иметь 0 в моем столбце strat.
Я уже пробовал это:
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.
Подводя итог, я хочу, чтобы уровень столбца был равен 1, если сигнал> 0,1, только если ранее мой уровень не был равен 1, и аналогично, -1, если сигнал <-0,1, только если ранее мой уровень не был ' т -1 И если мой сигнал находится в диапазоне от -0,1 до 0,1, то сохраняйте последнюю позицию .. </p>
Надеюсь, все ясно, спасибо за помощь