我有一个数据帧,由几列交易策略的自定义计算组成。 我想向这个数据帧添加一个名为"信号"的新列,由 0 和 1 组成(仅多头策略)。 信号将在以下代码上生成,此代码中的每个项目都是数据帧中的单独列:
if:
open_price > low_sigma.shift(1) and high_price > high_sigma.shift(1):
signal = 1
else:
signal = 0
根据我的理解,if 语句对数据帧无效。 此外,我无法按预期输出它。 您建议我如何生成信号并将其添加到数据帧?
您可以将
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