blackcat1402

再提Python与或非那些事

BINANCE:BTCUSDT   Bitcoin / TetherUS
最近,慢知慢觉才留意到Python逻辑与或非的一个坑。这与量化数据时候对与序列数据操作有关。在TradingView里面,无论是Simple还是Series类型,'and', 'or', 'not'是通吃的。但是要把Pine 脚本转成Python时候会遇到各种问题。逻辑与或非就是其中之一。

说明这个问题之前,还是做些铺垫,对于Python的逻辑与或非,很多人知道
1. and, or, not 逻辑运算符可以操作变量,但是无法对于布尔序列进行逻辑运算。用错的时候会提示加.any() 或者.all().
2. &, |, ~ 是逻辑位运算符,可以对布尔序列进行位运算,但是其运算结果等价与逻辑运算。
3. np.logical_and(), np.logical_or(), np.logical_not() 函数是numpy提供的用来对于布尔序列进行逻辑运算的函数。

之前,我一直认为2和3几乎是等价的,而且从测试很多函数和指标来看,确实在很多情况下位运算符都可以替代np.logical_系列函数。然而,最近发现,两者并非能够完全对等,在处理布尔序列运算时候numpy还是还是最准确的。说明这个只需一个反例。下面是分时资金呼吸指标产生的两个逻辑序列的输入信号,我要对这两个序列做逻辑与操作,对标的是TradingView上的and操作。

可以看出,&位运算在序列运算时候和np.logical_and()函数还是有差别的,后者可以保持和TradingView and操作符一致的结果。因为&d操作符的简便性,我在很多脚本中已经用了这个,看来又需要复查一遍了...

Avoid losing contact!Don't miss out! The first and most important thing to do is to join my Discord chat now! Click here to start your adventure: discord.com/invite/ZTGpQJq 防止失联,请立即行动,加入本猫聊天群: discord.com/invite/ZTGpQJq
免责声明

这些信息和出版物并不意味着也不构成TradingView提供或认可的金融、投资、交易或其它类型的建议或背书。请在使用条款阅读更多信息。