Nodejs https .post()请求;有没有比通过请求包更快的方式?

时间:2017-10-27 09:01:35

标签: api http-post distributed-transactions algorithmic-trading poloniex

所以,我一直在阅读有关自动(加密)交易的内容,我想让我们试一试。我已经能够为Poloniex交易所做一个简单的交易者。

我的想法是连续进行多笔交易,这样当第一笔交易完成后,它会给出开始第二笔交易的信号,等等。

买卖交易通过HTTPS POST方法发送到Poloniex API。

我希望几次连续交易的时间跨度最小化。但是,我注意到使用npm请求包单个买/卖请求大约需要500 [ms] (有时甚至超过一秒)。

现在我想知道是否有更快的方法来发送这些HTTPS POST请求,这样在第二次连续请求时价格变化的可能性很小。

我目前的方法如下:

            //   create timestamp and encrypt secret
            //                              + message
            //   with current timestamp using Hmac
            timeStamp = Math.floor(Date.now());
            sign = ...

            var headers = {
                'Key':    key,
                'Sign':   sign
            };

            // make first trade
            request.post({
                'headers': headers,
                'url':    'https://poloniex.com/tradingApi',
                'form':    ... 
            }, function (error, response, body) {
                // go on to second trade if previous finished correctly
                if (!error)
                {
                    // use same procedure again for encryption
                    timeStamp = Math.floor(Date.now());
                    sign      = ... 

                    headers = {
                        'Key':    key,
                        'Sign':   sign
                    };

                    request.post({
                        'headers': headers,
                        'url':    'https://poloniex.com/tradingApi',
                        'form':    ...
                    }, function (error, response, body) {
                        if (!error)
                        {
                         // same pattern for the third one

1 个答案:

答案 0 :(得分:0)

建议购买稍微好一点的计算机(参见下文)以加速SSL加密/解密阶段(下面的步骤[3]),并附加说明,大部分500 [ ms]可能主要是只是您发送给服务器的响应时间。" (充分尊重)直接错误和误导性陈述

(cit。,重点补充)

  

" ... 稍微快一点的计算机可能会更快地为初始连接进行SSL连接计算,但这只是一个猜测。仅供参考,在开始下一个交易之前,您不必等待一笔交易完成。您可以一次启动多个事务,看看它们何时完成。然后他们将全部在飞行中#34;同时。 您注意到的500毫秒延迟可能主要是您发送给服务器的响应时间。 - jfriend00 10小时前"

Ooops ,我仍然在屏幕上看到此评论,由jfriend00签名,日期为[2017-10-27 09:15:37Z]。 ..现在似乎被作者删除,而不是明确地解决下面要求澄清多少[ms]确实会被削减,因为她/他建议使用稍快的计算机来进行O / P)

嗯,这是选择直接错误工具的典型结果......

  

enter image description here

  仔细阅读实际的 e2e.RTT 数字,以及他们的差异(比一个常见的延迟噪音大两个数量级) L3-网络传送阶段),

只有在一起观察时才能真实地反映所有XTO中最简单的确认的真实端到端往返时间-instructions,不需要在API提供者BackOffice / NDD / ECN侧进行任何额外的[风险管理]或其他后处理

也可以看到有多少人失踪API提供商的答案丢失了 - 发送 BEEP[7238] LAST[7206] 已收到准备处理甚至丢失的API调用?

在外汇市场技术领域工作了几十年(很少> 3),我觉得我可以说出这些观点:

  • 市场准入提供商(您全名)决定向公众出售/提供API
  • 他们的CIO + COO决定将+轻量级加密服务包装成 HTTPS - 信封
  • 您的应用程序必须满足其API-Finite-State-Machine的逻辑,包括。他们选择将所有内容重新包装进/出HTTPS - 信封。

工作原理:

  1. 您的应用程序逻辑可能会被确定, [NOW] ,以便发送一些 交易引擎的XTO指令

  2. 此时,您的应用必须执行XTO指令重新制定格式,远程操作的API可以接收和处理。这需要一些时间,通常不超过几十〜[我们]

  3. 接下来,您的符合API标准的XTO指令必须被包装+加密到HTTPS - 信封中,再次几十〜[我们]添加

  4. 接下来,您的localhost将HTTPS - 信封封装到您的LAN界面,添加一些[我们]

  5. 您的下一个障碍是通过公共互联网提供此类信封(无论是全球性的(在 +1 .. +10 [ms] 上超过欧洲大陆,或〜 +100 [ms] 如果通过海底电缆连接或通过新西兰等人的卫星通信连接, OR ,以防指定的提供商的本地内部网在其共置的数据中心中暴露用于共同对等的区域(在10GBE电缆上支付的成本仅为几英尺( +〜[ns] )(如果API提供商为您提供此类优惠)。)。 p>

  6. 此处 - 仍然不是故事的结尾 - 您的HTTPS包裹的信封刚刚到达提供商自己的API的队列的输入端口 - 提供网关,所以到目前为止还没有任何处理开始,直到你已经收集了数百个[我们](至少)。所述API提供商稍后会在队列中弹出您的HTTPS - 信封,以便开始解码+展开已释放队列的内容HTTPS - 信封(添加费用a +少[us] ,取决于在API提供的流量模式和排队策略 - 网关+解码取决于他们用于此分解的技术,即使是最复杂的基于硅的技术也无法执行此操作(快得多)
  7. 上一步之后,API提供网关可以将解码后的XTO指令传递到API服务中(猜测,为此步骤添加一些+ [us]
  8. API-FSA在这里开始将符合API标准的XTO指令转换为交易执行(取决于备用性能和工作负载/流量模式,此处您支付几十,几百,几千[ms] < / strong>还取决于贸易执行场所的智能集成工具如何以及NDD / ECN执行引擎和政策与之合作的风险评估,价格馈送,流动性池和群岛书维护的难度,以及最终设置有实际的市场价格,XTO将在。执行。
  9.   

    -------- 到目前为止,这是时间(价格) - 严重的一部分XTO事务端到端路径。

    1. 一旦你的XTO实际上匹配了#34;在订单簿记录中,确认将被创建,以便被发送回您的身边(时间非关键操作,因此不要指望任何最高优先级,既不在处理中,也不在排队策略中发生,所以添加+几个[ms]

    2. 为了交付,重复相同的步骤序列 - 符合API的答案汇编+排队+ API响应转换,在API提供网关中使用HTTPS加密+排队+文本格式所有涉及ISO / OSI-L3交付路线的系列(无论是共置还是通过全球网络)

    3. 在这里,您的LAN已经向您的localhost接口发送了一系列IP数据包,以解压缩,解密,转换并开始解码消息的含义。
    4. 此时,您的XTO指令的响应可以与最初发送的XTO指令的意图进行比较和最佳匹配。
    5. 按秒表以阅读 E2E-RTT 持续时间。
    6.   

      为什么你可以遇到几十个[我们]到高于+1000 [ms]

      的任何东西

      The Bests of the Bests如何?

      • 避免项目启动时没有彻底验证其可行性(在高工作负载和整体扩展下的延迟包络意义上) - 在简单工作负载下可能工作的事情往往显示讨厌在沉重而持久的载荷模式和虚假风暴下的惊喜和非凡的麻烦......
      • 避免依赖&#34; Wannabe-TechGuru&#34; (即使所有人都谈论基于REST / HTTP的API,也永远不要将这种体验移到区域之外,这可能就足够了,区域越少,最终紧密的实时控制循环无法提供稳定的结果)< / LI>
      • 避免关注&#34;营销&#34;准参数(即使所有人都谈论某些技术 - 无论是{JSON | XML | CORBA-BLOBs} - 永远不会为延迟敏感的实时分布式系统自动采用这种技术,等等)
      • 介绍低延迟工具+避免任何昂贵的开销
      • 从不重新包装(最好在二进制密集地图中提供)
      • 始终个人资料时间戳时间和日志/协调证据记录与合同条款&amp;条件,如果T&amp; C未达到或以其他方式违反生产要求财务补救措施(这是一个漫长的故事)

      最好的下一步?

      如果您已经阅读了这个预告片,那么您一定已经注意到,以上这些选择都不是您的预告。

      在任何情况下,您都会承担项目 [1..8] 之间价格变动的风险,并且会受到 [8] 内价格下滑的影响

      最好去寻求更好更快的API +共存的服务器托管。

      奖金:

      如果确实在寻找高级

        

      &#34;发送...请求的方法,以便在第二个连续请求中更改价格的机会最小。&#34;

      然后倾听 - 有一种方法 - 如果您的交易策略需要与E2E分布式交易确认/ { price | DoM-L3 }进行交互 -changes,通过所有传入的[_>>_price-stream_>>_] - 频道异步宣布,只需聪明并立即在 [PARALLEL] 中提交所有此类XTO指令(已经过验证)在当地方面做的事情。)

      使用这种方法,您的齐射将简单地以最佳执行价格从订单簿的实际状态中剔除所有必要的流动性(如果没有被运营商政策欺骗(再次,请参阅日记账记录)如果存在任何公平交易+公平价格差异,则可以检查并可能要求FSA保护您的利益。)

      更新

      好的,@ jfriend00介入并反对(引用,强调添加)

        

      你问的方法是过于复杂。 OP有一个HTTP API,他们想知道他们是否可以比request()模块做更快的事情来向该API发出请求。这是问的问题。你完全没有解决这个问题,而是你会遇到各种与问题完全无关的东西。 复杂难以理解回答实际上甚至没有回答问题问是什么是downvotes。 - jfriend00 28分钟前

      是:

      • long - 确定 - 算法交易基础架构 SIMPLEX

      • 复杂 - 多方(相反的利益)分布式交易 ARE 已复制

      • 难以理解 - 任何人都可以在这里出现并更好地解释这种复杂的E2E问题
      • 没有解决问题 - 提供唯一有意义的解决方案 WAS 连同所有相关争论,为什么任何其他(更简单,只是一步孤立,甚至过度简化成为&#34;更容易&#34;)将无法工作解决问题O / P正面临。

      很抱歉不得不重复一遍,30多年后我敢告诉你我很清楚没有其他(如果仍然怀疑,重新思考这个故事 - if有任何 ,所有排名靠前的HFT鲨鱼已经证明了他们的立即进入它。所以,如果他们都没有进入任何这样轻松和琐碎的魔术镜头,但所有保持在下面解释的最着名的解决方案的周边,这是一个明确和合理的证据,没有更好的存在。 QED