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