Search code examples
pythonpandasquantitative-finance

Signal conditional for column


Reading from yahoo finance download ohlcv for nvidia, I am creating a column for signal buy/dontbuy, when I try to define which passes the avg>volume test everything either comes out all 'buy' or don't buy.

df=pd.read_csv('NVDA.csv',dtype={'label':str})
df['Price%delta']=((df['Close']/df['Open'])*100)                       

df['Avg_volume']=df['Volume'].rolling(7).mean()

df['Signal']=0

for index, row in df.iterrows():
    if row['Volume'] > row['Avg_volume']:
    df['Signal']='Buy'
    else:
        df['Signal']='Dont Buy'

Solution

  • You don't really need the for loop at all:

    mask = df["Volume"] > df["Avg_volume"] 
    
    df.loc[mask, "Signal"] = "Buy"
    df.loc[~mask, "Signal"] = 'Don't buy'