python - 根据两列的条件向数据框添加新列
问题描述
我有一个数据框,其中包含资产的两个常见财务指标。buy
我想通过以下方式再创建一列:
默认值buy
是0
表示“持有交易/不执行任何操作”。列值等于1
每次RSI
下降到 30 以下,而它-1
仅等于 a 之后的第一次1
,如果STOCH_D
超过 70 (所以我们不希望有很多连续-1
的 s 即使在STOCH_D
一段时间内保持在 70 以上。直观地说,这将如果有多个进场头寸(进场:buy
= 1),但在退出指标显示时立即退出所有交易(退出:buy
= -1),则模拟交易者打开多个买入头寸的场景。一旦所有头寸都退出,buy
应该不再发出信号-1
,因为没有开仓 - 因此应该0
直到下一个入场信号。
仅第一次出现的条件-1
是我被阻止的地方。以下行方便地计算1
s、0
s 和-1
s,但会产生许多连续-1
的 s:
df['buy'] = np.where(df['RSI'] < 30, 1, np.where(df['STOCH_D'] > 70, -1, 0))
有问题的示例数据框如下:
RSI STOCH_D buy
Date
2020-10-19 49.297715 23.535389 0
2020-10-20 51.587642 13.570258 0
2020-10-21 50.558997 16.546760 0
2020-10-22 48.727857 21.006063 0
2020-10-23 47.552104 16.663536 0
2020-10-26 37.571296 21.539473 0
2020-10-27 31.588796 37.253202 0
2020-10-28 29.604796 33.607540 1
2020-10-29 37.040601 44.511199 0
2020-10-30 40.362108 27.216796 0
2020-11-02 40.255221 31.589231 0
2020-11-03 43.257823 19.649698 0
2020-11-04 50.493844 42.140280 0
2020-11-05 55.964795 69.021952 0
2020-11-06 55.415214 89.012891 -1
2020-11-09 51.610569 81.627353 -1
2020-11-10 51.053114 62.410246 0
2020-11-11 56.179475 54.328367 0
2020-11-12 55.679922 56.792115 0
2020-11-13 55.755586 66.030560 0
2020-11-16 57.385142 73.280021 -1
在这里,只有-1
at 索引2020-11-06
应该存在,之后的所有索引都应该是 0,因为它们没有直接跟在 1 之后(即买入信号)。
解决方案
推荐阅读
- r - R:被删除的节点在被删除后仍然出现
- python - python中使用z = x + y和z = f“{x}{y}”有什么区别?
- node.js - Socket.io 应用程序在本地工作,但不在 Heroku 上
- arrays - 在 char 数组中,如何将所有元素更改为相同?
- c++ - 在不使用数组的情况下查找用户输入的最小值和最大值
- git - git命令“git am”中的“am”是什么意思?
- typescript - Typescript - 默认泛型为另一个泛型的属性
- javascript - 如何根据特定键的值访问数组中的对象?
- javascript - 在 React 组件中使用双箭头函数处理模糊
- python - 如何在 Flask SQLAlchemy 中从具有 2 个主键的表中查询一行?