np.where()导致RSI提前结束

时间:2018-08-01 01:22:08

标签: python pandas numpy boolean financial

我最初从一个np.where()开始运行我的RSI规则,即当RSI(rsip)跌破20(lower_bnd)并发出(0.0)高于80(upper_bnd)时发出买入信号(1.0)。该程序已正确购买,但在rsip超过20时就立即卖出。我希望该程序继续购买,直到RSI达到80。

这是我的原始功能:

signals['signal']= np.where(signals['rsip'] < lower_bnd, 1.0, 0.0)

信号是一个包含一系列信号和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“ ...

但是我遇到了错误。

  

系列的真值不明确。使用a.empty,a.bool(),a.item(),a.any()或a.all()。

当我在信号['rsip']的末尾添加.values [-1]时,数据帧中的每个信号都是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()语句一样有效。

0 个答案:

没有答案