【问题标题】:Python Stock Buying Indicators // Taking only 1 Position at a timePython 股票购买指标 // 一次只持有 1 个头寸
【发布时间】:2021-09-15 17:36:37
【问题描述】:

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

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" 出现 3 次,则只有第一个 "Buy" 会在 df['Position'] 中显示 1,其余的 "Buy" ,在任何 "Sell" 出现之前将是 "0"

非常感谢!

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我们需要跟踪两个事件,即卖出信号的发生,以及卖出后的第一次买入。似乎这是我们真正需要进行迭代的少数情况之一(这在 pandas 中不是很自然的事情)。

    以下代码遍历行,维持我们在卖出时进入的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
    

    【讨论】:

    • 谢谢乔奥!我已经尝试过了,但是如果数据框是这样的,这将起作用; df['信号'] = [不,不,不,卖,买,不,买,卖]。在这种情况下,位置将是两个而不是一个。
    • 我明白了,我误解了你的要求。让我试试别的。
    猜你喜欢
    • 2011-03-15
    • 2017-09-26
    • 2021-08-18
    • 1970-01-01
    • 2018-09-17
    • 1970-01-01
    • 2020-09-02
    • 2021-02-25
    相关资源
    最近更新 更多