从 mplfinance 重新绘制 candlestick_ohlc 的最有效方法

Most efficient way to re-plot candlestick_ohlc from mplfinance

我在 tkinter GUI 中有一个 pyplot 图,我正在尝试使用实时数据每秒从 mplfinance 更新 candlestick_ohlc 图。

mySubplot = myFigure.add_subplot(111)

然后 运行 每秒都有新数据

mySubplot.clear()
...
repeat all axis formatting 
...
candlestick_ohlc(mySubplot, myData.values)

当只有最近的蜡烛发生变化时,重新格式化我的轴并重新绘制每根蜡烛的速度非常非常慢。

最有效的方法是什么?

好吧,就我个人而言 我不会 使用 TkinterMPLfinance 做到这一点!

这是因为:

  1. Tkinter 的帧率很糟糕,我的意思是绝对糟糕,你会很幸运地通过使用 while 循环不断改变图像来获得 5 fps。
  2. Tkinter 陈旧过时,没有其他流行的 GUI 库(如 Qt 和 GTK)所具有的许多有用功能。
  3. 当您经常使用 MPLfinance 制作图表时,MPLfinance 非常密集,而且生成图表的速度很慢,这会使您的交易平台变慢。
  4. 您的申请文件会很大。
  5. 数据不准确。

为了使其成为“实时”,我的方法是 运行 使用 cocurrent.futures 并行执行三个函数,其中一个函数将在 stock/currency/crypto 上获取数据来自 api 或通过网络 scraping(我不推荐这样做,因为延迟和延迟会很高),第二个函数将用于制作烛台图,第三个函数将是对于 运行 循环以保持图形用户界面并随着图形的变化不断更新图形图片。

对于 GUI,我可能会使用称为 pygame 的“游戏引擎”,因为它具有更高的 fps,因为它旨在制作游戏,但这会使应用程序变得密集,但会使 fps 更高。如果你在 tkinter 中这样做,你会看到框架在图形变化时闪烁,这真的很烦人。

我建议使用 new mplfinance API(mpf.plot() 而不是 candlestick_ohlc())。它在处理方面可能不会更有效率(虽然我怀疑它 稍微更有效率) 但它肯定更就您必须编写的代码量而言效率很高,因为新的 API 为您做了很多 matplotlib 格式化和其他工作。

我建议在新的 API 中使用“外轴模式”的动画支持功能。这将允许您与 tkinter 进行交互。有关 mplfinance 中动画的一般示例,请参阅 https://github.com/matplotlib/mplfinance/blob/master/markdown/animation.md and the links therein (for example https://github.com/matplotlib/mplfinance/blob/master/examples/mpf_animation_demo2.py)。我认为您将能够将这些示例中的代码调整为您需要使用 tkinter 执行相同操作的代码。