Я пытаюсь найти быструю реализацию, где я могу определить способ найти точки выхода, если N прибыльных закрытий после исходного триггерного сигнала.
Итак, чтобы четко определить прибыльное закрытие, представьте, что мы получили длинный сигнал, говорящий нам покупать сейчас по цене 100. Стратегия выхода такова, что мы закроем существующую длинную позицию, если будет N = 2 закрытия (не не должно быть последовательным), когда цена больше, чем наша цена входа 100.
signal = pd.DataFrame([0,0,1,0,0,0,0,0,0,0,0,0,0,0,0,0,0], columns=["signal"])
price = pd.DataFrame([100,99,100,99,98,101,99,99,98,90,102,90,103,20,110,120,130], columns=["price"])
data = pd.concat([signal,price],axis=1)
Итак, в приведенном выше примере приведены некоторые данные. Правильный ответ - выход по индексу строки 10
.
То, как я (неправильно) делаю это сейчас:
long_short = 1 # 1 equal going only only, -1 is going short
profit_n_exit = 2
sig_diffed = signal .diff().fillna(0.0).replace(-long_short,0)
sig_entry_px = (sig_diffed.replace(0,np.nan) * price ).fillna(method='pad')
# Profitable Closes Given Direction
exit_sig1 = ((np.sign(price - sig_entry_px).fillna(0) == long_short) * 1)#.replace(0,np.nan)
# Cumulative Count of Profitable Closes
profit_close = (exit_sig1.groupby((exit_sig1 != exit_sig1.shift()).cumsum()).cumcount() + 1) * exit_sig1
profit_close = SignalFill(sig_diffed, sig_diffed.shift(profit_n_exit - 1)).replace(1,np.nan).replace(0,1) * profit_close
profit_close = ((profit_close >= profit_n_exit) * 1)
Моя реализация, похоже, рассчитывает только последовательные прибыльные последовательные закрытия. Мне также нужно найти способ подсчета непоследовательных прибыльных закрытий. есть идеи?