Python股票购买指标//一次只持有一个头寸

2024-10-01 07:51:25 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个具有以下值的数据框

df['Signal'] = [No, No, No, Sell, Buy, Buy, Buy, Sell]

如何创建新的数据框列,其中

如果df['Signal'].iloc[i] = "No",则df['Position'].iloc[i]将显示0

如果df['Signal'].iloc[i] = "Sell",则df['Position'].iloc[i]将显示0

如果df['Signal'].iloc[i] = "Buy",则df['Position'].iloc[i]仅当它是"Sell"之后的第一次出现时才会显示1。意思如果"Buy", "Buy", "Buy"出现三次,只有第一个"Buy"将在df['Position']中显示1,在任何"Sell"出现之前"Buy"的其余部分将是"0"

非常感谢你


Tags: 数据nodfsignalpositionbuyilocsell
1条回答
网友
1楼 · 发布于 2024-10-01 07:51:25

我们需要跟踪两个事件,一个是卖出信号的出现,另一个是卖出后的第一次买入。这似乎是我们真正需要做迭代的少数情况之一(这在熊猫身上不是自然的事情)

下面的代码对行进行迭代,维护一个ready_to_buy状态,我们在卖出时输入该状态,然后在买入后离开:

ready_to_buy = False
position = []
for row in df.iterrows():
    signal = row[1].iat[0]
    pos = 0
    if signal == 'Sell':
        ready_to_buy = True
    elif signal == 'Buy':
        if ready_to_buy:
            pos = 1
            ready_to_buy = False
    position.append(pos)

df['Position'] = position

相关问题 更多 >