记录一下:用 pyqt5 画 K 线及信号 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
hdjdjrjjfjdnee
V2EX    Python

记录一下:用 pyqt5 画 K 线及信号

  •  
  •   hdjdjrjjfjdnee 2022-04-27 11:07:54 +08:00 3357 次点击
    这是一个创建于 1331 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最早是用 pyqtgraph 画 k 线的,这个库性能可以, 但是我感觉线条丑, 改用 qtchart 画图
    发现 v2 不能上图, 那就算了
    汇总下这几天的问题:
    1 、k 线数据量有点大 2w 多根, 图形压缩严重 [后期用放大缩小处理]
    2 、横坐标只能全部显示,这样每次放大缩小很卡, 只显示 30 个坐标点
    3 、画十字线显示价格及买卖信息
    9 条回复    2022-05-14 23:08:10 +08:00
    jones2000
        1
    jones2000  
       2022-04-27 11:29:20 +08:00
    绘图直接用 h5 绘制,更方便。py 用来做后台的指标的计算什么的比较方便。 另外通用的图形插件不适合做 K 线图。
    ericgui
        2
    ericgui  
       2022-04-28 00:05:26 +08:00
    是实时数据,还是下载好了的数据?
    hdjdjrjjfjdnee
        3
    hdjdjrjjfjdnee  
    OP
       2022-04-29 15:14:58 +08:00
    昨天 v2 上不了,
    昨天解决的问题:
    数据量上 2w 多跟 K 线的时候超级卡:
    1 、series.append(QCandlestickSet(o, h, l, c, ind)) , 导入的 o, h, l, c, ind , 千万不要用 pandas 数据的.iloc 取值,2w 行数据:
    o = data.iloc[ind]['o'] 要了 4 秒,
    o = data['o'].iloc[ind] 要了 0.47 秒
    o = data[ind, 0] 用 numpy 取值只要了 0.0099 秒
    2 、第二个图形卡的原因是:
    2w 个数据 ,setGridLineVisible 必须设置 False , 不然图像卡死了
    chart.axisX().hide() 横坐标最好是隐藏或者设置具体个数在 30 个以内, 不然刷新图形卡死了

    自己定义鼠标滚轮事件 wheelEvent , 用来放大缩小图形, 做是做好了, 但是卡死了:因为滚轮每次滚动一下就刷新一次, 但是我们用滚轮滑一下会触发非常多下, 导致 1 秒内会刷新 3 次以上的图形,
    1 、解决办法是:找到滚轮结束的时候状态去更新, 这个问题找了一个上午没找到, 放弃了
    2 、最后用 setRubberBand , 发现他会跟我现有的鼠标事件 mouseMoveEvent 、mousePressEvent 、mouseReleaseEvent 冲突了。。。。。

    昨天的问题:

    1 、图都画好了, 卡在了 setRubberBand (橡皮筋控件上),QChartView 这个类没有 RubberBandchange 响应函数,画图选取矩形后 k 线 Y 轴没有跟着曲线变化, 最后曲线扭曲了,于是想从 QGraphicsView 父类自己造个梯子。。。搞了我快一天了, 发现 QGraphicsView 无法叠加在 k 线,放弃了, 最后发现 QChartView 可以自己定义一个自己的 RubberBand , 然后重写鼠标事件就搞定了
    self.rb = QRubberBand(QRubberBand.Rectangle, self.chartview) # 橡皮筋控件
    2 、十字线及鼠标所在 k 线显示价格信号数据,用 QGraphicsLineItem 这个类定义 2 条直线

    现在的问题:
    卡在了买卖信号连线。。。已经找了一个上午了。。。。
    hdjdjrjjfjdnee
        4
    hdjdjrjjfjdnee  
    OP
       2022-04-29 15:19:23 +08:00
    @jones2000 ,h5 不会, 但是感觉 h5 功能控件比较多,但是感觉应该没有 qt 功能强大, 而且我写的是风控模块的部分,后续好扩展
    hdjdjrjjfjdnee
        5
    hdjdjrjjfjdnee  
    OP
       2022-04-29 15:20:10 +08:00
    @ericgui 目前是历史数据, 后续会绑定实盘的实时数据 [估计有点难, 不行就跑路]
    hdjdjrjjfjdnee
        6
    hdjdjrjjfjdnee  
    OP
       2022-04-29 15:23:16 +08:00
    开平买卖 5000 次, 要写个 5000 个连线, 目前想要不写 5000 个 series_, 不知道卡不卡, 有点不敢试。。。。
    正在查 qtchart 有没有 分段的折线 函数
    hdjdjrjjfjdnee
        7
    hdjdjrjjfjdnee  
    OP
       2022-04-29 16:00:45 +08:00
    我刚试了 画 5000 个 series_, 也还好。。。。不算卡, 买卖信号连线解决了,
    下周的问题是: 横坐标目前是 30 个数值, 要改成日期时间
    jones2000
        8
    jones2000  
       2022-04-30 00:23:19 +08:00
    @hdjdjrjjfjdnee 开 GPU 加速, 双缓存, 十字光标使用异或绘制十字线,十字光标移动指标栏信息使用区域重绘,不要整个页面都刷,这样4-5 W 的数据都不卡。
    yellowtail
        9
    yellowtail  
       2022-05-14 23:08:10 +08:00
    推荐 finplot 库,网上很多 pyqt 花 k 线的例子,可以搜一下景色的 ctp 案例
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1186 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 17:45 PVG 01:45 LAX 09:45 JFK 12:45
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86