我有一个数据框,包含几列交易策略的自定义计算。我想添加一个名为' Signals'到这个数据帧,由0和1组成(仅限长策略)。信号将在以下代码中生成,此代码中的每个项目都是数据框中的单独列:
if:
open_price > low_sigma.shift(1) and high_price > high_sigma.shift(1):
signal = 1
else:
signal = 0
根据我的理解,如果语句对数据帧无效。另外,我还没有按照要求输出。您如何建议我生成信号并将其添加到数据帧?
答案 0 :(得分:0)
您可以将df['Signals']
分配给布尔条件本身,然后使用astype
将布尔值转换为0和1:
df['Signals'] = (((df['open_price'] > df['low_sigma'].shift(1))
& (df['high_price'] > df['high_sigma'].shift(1)))
.astype('int'))
例如,
import pandas as pd
df = pd.DataFrame({
'open_price': [1,2,3,4],
'low_sigma': [1,3,2,4],
'high_price': [10,20,30,40],
'high_sigma': [10,40,20,30]})
# high_price high_sigma low_sigma open_price
# 0 10 10 1 1
# 1 20 40 3 2
# 2 30 20 2 3
# 3 40 30 4 4
mask = ((df['open_price'] > df['low_sigma'].shift(1))
& (df['high_price'] > df['high_sigma'].shift(1)))
# 0 False
# 1 True
# 2 False
# 3 True
# dtype: bool
df['Signals'] = mask.astype('int')
print(df)
产量
high_price high_sigma low_sigma open_price Signals
0 10 10 1 1 0
1 20 40 3 2 1
2 30 20 2 3 0
3 40 30 4 4 1