我试图找到一个快速的实现,在那里我可以确定一种方法,找到出口点给定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)
我的实现似乎只计算连续关闭。我需要找到一种方法来计算非连续盈利的收盘价。有什么想法吗
下面的解决方案给出了所需关闭的值,如果一个信号的关闭次数少于2次,则返回0:
输出:
如果我们想要结束的索引(行号):
给予
另一个测试用例:
提供:
以及
相关问题 更多 >
编程相关推荐