python - np.where() 导致 RSI 提前结束
问题描述
我最初从一个 np.where() 开始运行我的 RSI 规则,当 RSI (rsip) 跌至 20 (lower_bnd) 以下时发送买入信号 (1.0),并在 80 (upper_bnd) 上方卖出 (0.0)。该程序正确购买,但在 rsip 超过 20 时立即出售。我希望程序保持购买直到 RSI 达到 80。
这是我原来的功能:
signals['signal']= np.where(signals['rsip'] < lower_bnd, 1.0, 0.0)
Signals 是包含一系列信号和 RSI 级别的数据帧。
我尝试将额外的 np.where() 与布尔运算符一起嵌套,以确保保持信号直到达到 80+:
signals['signal'] = np.where(signals['rsip']
< lower_bnd, 1.0, np.where((signals['rsip']
< upper_bnd) & (signals['signal']==1.0), 1.0, np.where(signals['rsip']
> upper_bnd, 0.0,np.where((signals['rsip']
< upper_bnd) & (signals['signal']==0.0), 0.0, 0.0))))
上面基本上说,“如果低于 20,则买入(1.0);否则如果低于 80 并且信号已经 =1.0,则继续使用相同的信号;否则如果高于 80,则卖出(0.0);否则如果低于 80 并且信号已经 = 0.0,继续 0.0"...
但是我遇到了错误。
Series 的真值是模棱两可的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
当我将 .values[-1] 添加到信号 ['rsip'] 的末尾时,数据帧中的每个信号都是 1.0,这让我相信这不是正确的方法......
经过数小时的故障排除后,我非常迷茫……我很想听听那里的任何想法或解决方案。谢谢你的时间。
编辑:通过使用此代码,使用与该方法略有不同的方法:
signals['signal'] = np.where(signals.rsip
<= lower_bnd, 1.0, np.where(((signals.rsip
> lower_bnd) & (signals.signal==1.0)), 1.0, np.where(((signals.rsip
>= upper_bnd) &(signals.signal==0.0)), 0.0, 0.0)))
我不会产生任何错误消息,但是,它与原始的单数 np.where() 语句一样有效。
解决方案
推荐阅读
- database - 同一列中 2 个日期时间元素的 SQL LITE 差异
- macos - 什么是“捕获”鼠标和键盘的 MacOS API,VM 或远程桌面程序会做的方式?
- c++ - 只要我可以为我的类型提供哈希函数,为什么我需要为我的类型专门化 std::hash?
- python - discord.py 编辑了消息记录问题
- string - const Char * 到 Char 数组
- artificial-intelligence - 有没有办法通过 CLIPS 中自己的插槽来确定规则的优先级?
- python - 即使在同一目录中,Pyinstaller exe 也找不到我想要操作的 excel 表
- django - 从 Firebase 访问 Django 管理员
- sql - 为什么这个索引会使 SELECT GROUP BY 查询变慢?
- c++ - Github Actions 路径未更新