所以我试图找到一种方法来允许在我的应用程序的前端进行OR操作,然后在后端服务器上转换条件,然后将与Intrinio(Financial Data API)对话。我尝试使用的端点(为了节省api调用信用)只允许AND运算符,但我希望有一些解决方法。
以下是我尝试使用的端点:http://docs.intrinio.com/#securities-search-screener
以下是我要发送到服务器进行翻译的示例条件:
open_price > 10 && (current_volume > 1000000 || current_volume > average_volume)
P.S open_price,current_volume和average_volume都是Intrinio生态系统中使用的标签
我可能还应该提到他们没有不
我恳请你们在评论之前查看链接......
答案 0 :(得分:1)
一般情况下,你不能。
在此API中,您只能否定原子条件,将~gt~
更改为~lte~
等,e。 G。将open_price~gt~10
更改为open_price~lte~10
。
但是你不能否定这个API中的非原子条件,特别是你不能使用De Morgan的定律。
n 变量只有 3 n (+1)布尔函数,可以使用连词和原子否定来表达。 n 变量的布尔函数总数为 2 2ⁿ 。顺便说一下,所有这些都可以使用连接和非原子否定来表达。因此,存在使用连词和原子否定无法表达的布尔函数。
您应该在API客户端上发出两个或更多请求,然后联合结果。 有几种方法可以执行请求数量不同,检索的记录总数(某些记录可能被检索多次),以及所需的API调用信用(等于条件数)。
让我们假设原始数据如下所示(让我们跳过open_price
属性)。
{
{
"identifier": "A-OK",
"current_volume": 1000002, "average_volume": 1000001
},
{
"identifier": "B-OK",
"current_volume": 1000001, "average_volume": 999999
},
{
"identifier": "D-OK",
"current_volume": 999999, "average_volume": 999998
},
{
"identifier": "E-OK",
"current_volume": 1000001, "average_volume": 1000002
},
{
"identifier": "G-NO",
"current_volume": 999999, "average_volume": 1000001
},
{
"identifier": "H-NO",
"current_volume": 999998, "average_volume": 999999
}
}
您需要检索标识为A-OK
,B-OK
,D-OK
,E-OK
的记录。
方法1 (两个请求,结果集不相交)
current_volume~gt~1000000
current_volume~gt~average_volume
如您所见,我们只是在客户端执行析取,而不是在服务器上执行...
方法2 (三个请求,结果集不相交)
current_volume~gt~1000000,current_volume~gt~average_volume
current_volume~gt~1000000,current_volume~lte~average_volume
current_volume~lte~1000000,current_volume~gt~average_volume
在这种方法中,我们依赖于这一事实:A||B
等于(A && B) ^^ (A && !B) ^^ (!A && B)
。
方法3 (两个请求,结果集不相交)
current_volume~gt~1000000
current_volume~lte~1000000,current_volume~gt~average_volume
在这种方法中,我们依赖于这一事实:A||B
等于A ^^ (!A && B)
。
方法4 (两个请求,结果集不相交)
在您的特定情况下,存在一种依赖于实数上的顺序关系的传递性的方法。
average_volume~gt~1000000,current_volume~gt~1000000
average_volume~lte~1000000,current_volume~gt~average_volume
但是,这种方法在API调用信用方面没有太大的利润。
<强>比较
+----------+----------+-----------+--------------+----------+
| Approach | Number of| Records | Resultsets | Total |
| | requests | retrieved | disjointness | credits |
+----------+----------+-----------+--------------+----------+
| # 1 | 2 | 6 (3+3) | no | 2 |
| # 2 | 3 | 4 | yes | 6 |
| # 3 | 2 | 4 | yes | 3 |
| # 4 | 2 | 4 | yes | 4 |
+----------+----------+-----------+--------------+----------+
答案 1 :(得分:0)
答案 2 :(得分:0)
首先检查average_volume和1000000中哪一个是更大的值,然后根据结果选择要检查的条件:
ol.work > li