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

问题描述

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

mysubplot = myfigure.add_subplot(111)

然后每秒运行一次新数据

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

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

最有效的方法是什么?

解决方法

我建议使用 new mplfinance API(mpf.plot() 而不是 candlestick_ohlc())。它在处理方面可能不是更有效(虽然我怀疑它效率更高)但它在代码量方面肯定更有效您将不得不编写,因为新 API 为您完成了大量 matplotlib 格式设置和其他工作。

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

,

我个人我不会使用TkinterMPLfinance来做这件事!

这是因为:

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

我这样做以使其“实时”的方法是通过使用 cocurrent.futures 并行运行三个函数,一个函数将从 api 或通过网络抓取获取有关股票/货币/加密货币的数据(我不建议这样做,因为延迟和延迟会很高),第二个函数将用于制作烛台图,第三个函数将用于运行循环以保持 gui 并不断更新图形图片变化。

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

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...