我想根据特定条件提取正确的行。
数据帧包含带有条目信号的列条目。 仅在市场上没有订单时有效的输入。因此,在两个连续信号中只有第一个信号有效 有效的出口是进入后5小节。
这是我的代码和数据框
import pandas as pd
df = pd.DataFrame({'entry':[0,1,0,1,0,0,0,1,0,0,0,0,0,0]})
df['exit'] = df['entry'].shift(5)
df['state'] = np.select([df['entry'] == 1, df['exit'] == 1], [1, 0], default=np.nan)
df['state'].ffill(inplace=True)
df['state'].fillna(value=0, inplace=True)
df['change'] = df['state'].diff()
print(df)
entrysig = df[df['change'].eq(1)]
exitsig = df[df['change'].eq(-1)]
tradelist = pd.DataFrame({'entry': entrysig.index, 'exit': exitsig.index})
tradelist['wantedexit'] = [6, 12]
print(tradelist)
输出类似于:
entry exit state change
0 0 NaN 0.0 NaN
1 1 NaN 1.0 1.0
2 0 NaN 1.0 0.0
3 1 NaN 1.0 0.0
4 0 NaN 1.0 0.0
5 0 0.0 1.0 0.0
6 0 1.0 0.0 -1.0
7 1 0.0 1.0 1.0
8 0 1.0 0.0 -1.0
9 0 0.0 0.0 0.0
10 0 0.0 0.0 0.0
11 0 0.0 0.0 0.0
12 0 1.0 0.0 0.0
13 0 0.0 0.0 0.0
entry exit wantedexit
0 1 6 6
1 7 8 12
在此示例中,第一个在第1条出口处输入的交易在6点是正确的,它在第1条处输入并在5个第6条之后退出。
第3条上的条目被忽略,因为当前市场上有第1条上输入的订单。
在第7条和第8条上输入的第二笔交易不正确,因为该交易仅持续1条,而我的条件是在5条之后退出。
第8条的出口在那里,因为在第3条存在无效信号。
“ wantedexit”列应该是正确的出口栏索引。