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
Thông báo miễn trừ trách nhiệm

Thông tin và ấn phẩm không có nghĩa là và không cấu thành, tài chính, đầu tư, kinh doanh, hoặc các loại lời khuyên hoặc khuyến nghị khác được cung cấp hoặc xác nhận bởi TradingView. Đọc thêm trong Điều khoản sử dụng.