我有以下代码给出信号(1或0)
问题是我有一份股票收盘价格[' SPY',' TLT'等等] 我现在正在做的是为每只股票手动更改stock = df []。
您能否建议如何为此创建功能? 另外df ['信号']对每个人来说应该是唯一的...例如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'])
Dataframe Sample
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
答案 0 :(得分:1)
我会用这样的东西:
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', ...
字符串,并按照您之前手动执行的方式处理它们。
我希望我的问题正确无误!