首页 > 解决方案 > 根据两列的条件向数据框添加新列

问题描述

我有一个数据框,其中包含资产的两个常见财务指标。buy我想通过以下方式再创建一列:

默认值buy0表示“持有交易/不执行任何操作”。列值等于1每次RSI下降到 30 以下,而它-1仅等于 a 之后的第一次1,如果STOCH_D超过 70 (所以我们不希望有很多连续-1的 s 即使在STOCH_D一段时间内保持在 70 以上。直观地说,这将如果有多个进场头寸(进场:buy= 1),但在退出指标显示时立即退出所有交易(退出:buy= -1),则模拟交易者打开多个买入头寸的场景。一旦所有头寸都退出,buy应该不再发出信号-1,因为没有开仓 - 因此应该0直到下一个入场信号。

仅第一次出现的条件-1是我被阻止的地方。以下行方便地计算1s、0s 和-1s,但会产生许多连续-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

在这里,只有-1at 索引2020-11-06应该存在,之后的所有索引都应该是 0,因为它们没有直接跟在 1 之后(即买入信号)。

标签: pythonpandas

解决方案


推荐阅读