Python:实时流数据

时间:2017-11-15 06:20:00

标签: python database real-time bitcoin trading

我正在尝试通过Python捕获实时流式金融时间数据。我想最初将信息存储在数据库中,然后在以后进一步开发一个程序,根据这些数据分析和做出交易决策。能够随后在网站或Jupyter笔记本中以某种图形格式显示所述数据将会很不错。

作为一个起点,我想我会使用GDAX或Gemini的比特币数据。如果可行,我想捕获刻度数据和潜在的附加订单信息。

在进行一些研究时,我对这些选项感到有点不知所措,可以在如何构建项目以及哪些库最合适方面使用一些指导。

我查看了每个服务的API以及一些Github项目的相应文档,我仍然不确定从哪里开始。任何建议,建议或推荐阅读将不胜感激。

1 个答案:

答案 0 :(得分:10)

任何建议,建议或推荐阅读?

如果我可以在几十年的实际架构和设计推理的实践经验后增加几美分:

始终保持现实和诚实:

           0.5 ns - CPU L1 dCACHE reference
           1   ns - speed-of-light (a photon) travel a 1 ft (30.5cm) distance
           5   ns - CPU L1 iCACHE Branch mispredict
           7   ns - CPU L2  CACHE reference
          71   ns - CPU cross-QPI/NUMA best  case on XEON E5-46*
         100   ns - MUTEX lock/unlock
         100   ns - own DDR MEMORY reference
         135   ns - CPU cross-QPI/NUMA best  case on XEON E7-*
         202   ns - CPU cross-QPI/NUMA worst case on XEON E7-*
         325   ns - CPU cross-QPI/NUMA worst case on XEON E5-46*
      10,000   ns - Compress 1K bytes with Zippy PROCESS
      20,000   ns - Send 2K bytes over 1 Gbps NETWORK
     250,000   ns - Read 1 MB sequentially from MEMORY
     500,000   ns - Round trip within a same DataCenter
  10,000,000   ns - DISK seek
  10,000,000   ns - Read 1 MB sequentially from NETWORK
  30,000,000   ns - Read 1 MB sequentially from DISK
 150,000,000   ns - Send a NETWORK packet CA -> Netherlands
|   |   |   |
|   |   | ns|
|   | us|
| ms|
  • 决定实时&#34;实时&#34;是你实际的目标,这是最大的区别 - 如果你在技术上必须实施过程控制循环,由于其稳定性标准 1 kHz RTT下的阈值 - 端到端(事件发起+传输+本地采集+本地处理+反馈环 << 1 [ms] ), 10 kHz (< strong> << 100 [us] )。了解&#34;意图&#34; 可帮助您确定可以(或主要不能)实现所述目标的正确可行技术。选择不合适的技术是业余爱好者常见的(也是昂贵的)错误(但也经常被专业软件公司重复)。

  • 在知道RTT-E2E阈值的实际值之后,在进一步采取任何步骤之前进行检查,如果API提供商确实允许您在两个技术中提供如此频繁的更新和商业意识。如果没有,您必须找到另一个数据馈送提供商。如果您的实时系统无法从充分采样(快速)的馈电源馈送,控制环路将无法在稳定范围内工作 - 这很糟糕 - 就像您试图观察一样糟糕从高清视频流中,你的电视不会出现每一个,只有每一张37~46张图片。您将无法观看此&#34;子采样波动的东西&#34; (当然,如果您的本地DVB-T解码器不会放弃显示任何内容,因为这样DVB-T流协议违规的残酷规模,即使只有几个CRC比特超过Reed / Solomon冗余容错转码也无法正确通过,方格伪像是令人讨厌的)但绝对没有什么比稳定和无错1:1 FullHD-stream。

  • 同时具有RTT-E2E阈值的实际值和匹配的API供应商,开始设计技术步骤(而不是实施它们的技术)您打算如何帮助掩盖现实世界<强>实时延迟 - 传输的实际时间成本[us] (+所有相关的加密/解密方案,无论是SSL隧道还是VPN或其他)从API提供程序引用访问点到您的处理引擎输入。不知道这一点,你所有进一步的决定都会有缺陷。

  • 测量了实际的ISO / OSI-L9下游延迟,在 [us] 中加倍,以便保留合理的时间还包括上游延迟(不需要具有完全相同的延迟源,但数量级将接近)。

如果您的初始设计RTT-E2E目标数字具有所述 1kHz 的控制回路阈值,并且您的 max( DownStream ) + max( UpStream ) 实验性观察到的延迟上限,至少在一个24/7占空比期间,根据提供商的实际生产API网关(已检查其匹配您的1kHz控制回路阈值)进行实时测量,现在计算您开始任何类型的本地处理所需的时间 - 即实际保留多少[us]用于本地处理,以使您的1kHz控制环路不会失败达到稳定门槛。

如果您的净本地处理时间预算已经在否定,那么您知道您的工作不会带来任何好处。这不可以。拉停。

如果您的净本地处理时间预算尚未留下相当数量的[我们] - 这是您的实际流程&#39; 设计目标,开始设计这样的计算步骤和措施,以便始终安全地适应

任何在不知道这个主要设计限制的情况下开始编码的人要么是天真的,要么是不负责任的,只是教导&#34;院士或者是一个喜欢失败的人,并且不介意一次又一次地对着已知的墙壁反复思考,而一个系统的专业设计师现在专注于开始所有精心的设计工作,反对所收集的事实和证据支持设计目标(并且在不知道这些主要约束条件的情况下永远不会在任务上花费一秒钟,只有仙境中的爱丽丝才能抽象出来 - 不知道你想要去哪里,任何道路都会带你去那里 - 这是一个很好的童话故事,但不是真实世界的实验,是吗?)

  • 现在,检查一个阈值,GIL的发布频率([us] - 如果适合非常多次<强大的>内部你剩下的净本地处理时间预算,可能会直接忘记使用python,这很简单(对多线程处理的反对意见不会让你在Python领域变得更好:
  

&#34; ...在Python中,GIL意味着即使你有多个线程同时在计算上同时发送,这些线程中只有一个实际上会在任何给定时刻运行,因为所有其他线程都会被阻止,等待获取全局解释器锁。这意味着多线程Python程序实际上比单线程版本慢,而不是更快,因为一次只运行一个线程 - 加上每个线程等待,获取和强制会产生的会计开销。然后每隔几毫秒放弃GIL(循环式)。 ...&#34;

即使所有想要专家发布 这个和那个包是一个很棒的工具。当然,许多软件包确实很棒的工具,但遗憾的是,在某些主要稳定性阈值水平下,几乎从来没有任何更严格的实时应用程序域。是的,我对设计和操作python / scikit-learn GLAN分布式快速AI / ML预测系统感到非常满意,但我确信它符合<< 1 [ms]80 ~ 90 [us]阈值本地RTT-E2E完全位于我的控制回路的稳定性周边内

人们可能在工具中花费任意数量的爱情编码,专业人员永远不会有理由开始正确使用,因为已知的主要能力不匹配并且满足控制环稳定性阈值,所以更好在实时系统架构可行性/审查阶段要小心谨慎,不要重复其中一些或类似的天真致命决策错误。