利用python的script_trader获取到行情信息,然后利用PyQT5 和 pyqtgraph 可以将Tick级别的图形绘制出来,方便大家分析技术指标
这里仅仅只是展示了如何绘制价差的代码,可以根据自己的需要展示任意的指标
可以优化的点很多:
例如只在tick有变化的时候更新图形
或者初始化的时候读取历史数据
这里只发出绘制图形的部分供大家参考

盘口信息

description

价差源代码

from PyQt5 import QtWidgets,QtCore,QtGui
import pyqtgraph as pg
import sys
import traceback
from collections import deque
from vnpy.app.script_trader.cli import init_cli_trading
from vnpy.gateway.ctp import CtpGateway
from time import sleep

CTP_SETTING = {
    "用户名": "",
    "密码": "",
    "经纪商代码": "9999",
    "交易服务器": "180.168.146.187:10101", # Simnow IP地址做交易
    "行情服务器": "180.166.37.142:43213",  # 实盘IP地址,行情更稳定
    "产品名称": "simnow_client_test",
    "授权编码": "0000000000000000",
    "产品信息": ""
}

MAIN_VT_SYMBOL = "rb2101.SHFE"
SUB_VT_SYMBOL = "rb2105.SHFE"

class MainUi(QtWidgets.QMainWindow):

    spread_list = []
    engine = None

    def __init__(self):
        super().__init__()
        self.setWindowTitle("Tick价差监控")
        self.main_widget = QtWidgets.QWidget()
        self.main_layout = QtWidgets.QGridLayout()
        self.main_widget.setLayout(self.main_layout)
        self.setCentralWidget(self.main_widget)

        self.plot_widget = QtWidgets.QWidget()
        self.plot_layout = QtWidgets.QGridLayout()
        self.plot_widget.setLayout(self.plot_layout)
        self.plot_plt = pg.PlotWidget()
        self.plot_plt.showGrid(x=True,y=True)
        self.plot_layout.addWidget(self.plot_plt)

        self.main_layout.addWidget(self.plot_widget, 1, 0, 3, 3)

        self.setCentralWidget(self.main_widget)
        self.connect_ctp()
        self.timer_start()

    def connect_ctp(self):
        self.engine = init_cli_trading([CtpGateway])
        self.engine.connect_gateway(CTP_SETTING, "CTP")
        sleep(5)
        self.engine.subscribe([MAIN_VT_SYMBOL, SUB_VT_SYMBOL])

    # 启动定时器 时间间隔秒
    def timer_start(self):
        self.timer = QtCore.QTimer(self)
        self.timer.timeout.connect(self.update)
        self.timer.start(500)

    # update
    def update(self):
        try:
            main_last_tick = self.engine.get_tick(MAIN_VT_SYMBOL)
            sub_last_tick = self.engine.get_tick(SUB_VT_SYMBOL)
            if(main_last_tick and sub_last_tick):
                self.spread_list.append(main_last_tick.last_price - sub_last_tick.last_price)

                self.plot_plt.plot().setData(self.spread_list,pen='b')

        except Exception as e:
            print(traceback.print_exc())

def main():
    app = QtWidgets.QApplication(sys.argv)
    gui = MainUi()
    gui.showMaximized()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()