对Dataframe列表中的每个项目重复计算,并对其进行唯一命名

2024-06-28 11:29:52 发布

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

我有以下代码来给出信号(1或0)

问题是我有一份股票收盘价的清单,。。。。等] 我现在所做的是手动更改每个股票的stock=df[]

您能建议如何为此创建一个函数吗? 此外,df['Signal']对于每个。。例如,df['SPY']将产生df['SPYsignal']

我对python太陌生了,已经尝试过错误,希望你能指导我,谢谢

# I am doing this for all my tickers, this is inefficient 
# Only wanted to do it for selected columns so I should begin with List = [['SPY','TLT']] yes? 

stock = df['SPY']

df['avg'] = stock.shift(1).rolling(window=5).mean()
df['LongEntry'] = stock > df.avg
df['LongExit'] = stock < df.avg

df['PositionLong'] = np.nan
df.loc[df.LongEntry,'PositionLong'] = 1
df.loc[df.LongExit, 'PositionLong'] = 0

df['SPYSignal'] = df.PositionLong 
df['SPYSignal'].fillna(method='ffill')
df['SPYSignal'].fillna(0, inplace = True)

print (df['SPYSignal'])


stock = df['TLT']

df['avg'] = stock.shift(1).rolling(window=5).mean()
df['LongEntry'] = stock > df.avg
df['LongExit'] = stock < df.avg

df['PositionLong'] = np.nan
df.loc[df.LongEntry,'PositionLong'] = 1
df.loc[df.LongExit, 'PositionLong'] = 0

df['TLTSignal'] = df.PositionLong 
df['TLTSignal'].fillna(method='ffill')
df['TLTSignal'].fillna(0, inplace = True)

print (df['TLTSignal'])

数据帧示例

SPY TLT
100 200
102 202
105 208
106 205
108 210

期望输出

SPY TLT SPYSignal   TLTSignal
100 200      0          1
102 202      1          0
105 208      0          0
106 205      1          0
108 210      0          1

Tags: dfforstockthislocavg股票spy
1条回答
网友
1楼 · 发布于 2024-06-28 11:29:52

我会用这样的方式:

for stockClosePrice in ['SPY','TLT', 'OTHERVALUES']:
    stock = df[stockClosePrice]

    df['avg'] = stock.shift(1).rolling(window=5).mean()
    df['LongEntry'] = stock > df.avg
    df['LongExit'] = stock < df.avg

    df['PositionLong'] = np.nan
    df.loc[df.LongEntry,'PositionLong'] = 1
    df.loc[df.LongExit, 'PositionLong'] = 0

    stockSignal = stockClosePrice + 'Signal'

    df[stockSignal] = df.PositionLong 
    df[stockSignal].fillna(method='ffill')
    df[stockSignal].fillna(0, inplace = True)

    print (df[stockSignal])

这段代码循环遍历每一个'SPY', 'TLT', ...字符串,并像以前手动操作一样对它们进行处理

我希望我没有弄错你的问题

相关问题 更多 >