Example #1
0
 def openCta(self):
     """打开CTA组件"""
     try:
         self.ctaM.show()
     except AttributeError:
         self.ctaM = CtaEngineManager(self.mainEngine.ctaEngine,
                                      self.eventEngine)
         self.ctaM.show()
 def openCta(self):
     """打开CTA组件"""
     try:
         self.widgetDict['ctaM'].show()
     except KeyError:
         self.widgetDict['ctaM'] = CtaEngineManager(self.mainEngine.ctaEngine, self.eventEngine)
         self.widgetDict['ctaM'].show()
Example #3
0
 def openCta(self):
     """打开CTA组件"""
     try:
         self.ctaM.show()
     except AttributeError:
         self.ctaM = CtaEngineManager(self.mainEngine.ctaEngine, self.eventEngine)
         self.ctaM.show()
Example #4
0
class MainWindow(QtGui.QMainWindow):
    """主窗口"""

    #----------------------------------------------------------------------
    def __init__(self, mainEngine, eventEngine, dataEngine):
        """Constructor"""
        super(MainWindow, self).__init__()

        self.mainEngine = mainEngine
        self.eventEngine = eventEngine
        self.dataEngine = dataEngine

        self.initUi()

    #----------------------------------------------------------------------
    def initUi(self):
        """初始化界面"""
        self.setWindowTitle('VnTrader')
        self.initCentral()
        self.initMenu()
        self.initStatusBar()

    #----------------------------------------------------------------------
    def initCentral(self):
        """初始化中心区域"""
        marketM = MarketMonitor(self.eventEngine)
        logM = LogMonitor(self.eventEngine)
        errorM = ErrorMonitor(self.eventEngine)
        tradeM = TradeMonitor(self.eventEngine)
        orderM = OrderMonitor(self.eventEngine, self.mainEngine)
        positionM = PositionMonitor(self.eventEngine)
        accountM = AccountMonitor(self.eventEngine)

        tradingW = TradingWidget(self.mainEngine, self.mainEngine.eventEngine,
                                 self.mainEngine.dataEngine)

        leftTab = QtGui.QTabWidget()
        leftTab.addTab(logM, u'日志')
        leftTab.addTab(errorM, u'错误')
        leftTab.addTab(accountM, u'账户')

        rightTab = QtGui.QTabWidget()
        rightTab.addTab(tradeM, u'成交')
        rightTab.addTab(orderM, u'委托')
        rightTab.addTab(positionM, u'持仓')

        hbox = QtGui.QHBoxLayout()
        hbox.addWidget(tradingW)
        hbox.addWidget(marketM)

        grid = QtGui.QGridLayout()
        grid.addLayout(hbox, 0, 0, 1, 2)
        grid.addWidget(leftTab, 1, 0)
        grid.addWidget(rightTab, 1, 1)

        central = QtGui.QWidget()
        central.setLayout(grid)
        self.setCentralWidget(central)

    #----------------------------------------------------------------------
    def initMenu(self):
        """初始化菜单"""
        # 创建操作
        connectCtpAction = QtGui.QAction(u'连接CTP', self)
        connectCtpAction.triggered.connect(self.connectCtp)

        connectLtsAction = QtGui.QAction(u'连接LTS', self)
        connectLtsAction.triggered.connect(self.connectLts)

        connectWindAction = QtGui.QAction(u'连接Wind', self)
        connectWindAction.triggered.connect(self.connectWind)

        connectIbAction = QtGui.QAction(u'连接IB', self)
        connectIbAction.triggered.connect(self.connectIb)

        testAction = QtGui.QAction(u'测试', self)
        testAction.triggered.connect(self.testSubscribe)

        exitAction = QtGui.QAction(u'退出', self)
        exitAction.triggered.connect(self.close)

        aboutAction = QtGui.QAction(u'关于', self)
        aboutAction.triggered.connect(self.openAbout)

        contractAction = QtGui.QAction(u'查询合约', self)
        contractAction.triggered.connect(self.openContract)

        ctaAction = QtGui.QAction(u'CTA策略', self)
        ctaAction.triggered.connect(self.openCta)

        # 创建菜单
        menubar = self.menuBar()

        sysMenu = menubar.addMenu(u'系统')
        sysMenu.addAction(connectCtpAction)
        sysMenu.addAction(connectLtsAction)
        sysMenu.addAction(connectWindAction)
        sysMenu.addAction(connectIbAction)
        sysMenu.addAction(testAction)
        sysMenu.addAction(exitAction)

        functionMenu = menubar.addMenu(u'功能')
        functionMenu.addAction(contractAction)
        functionMenu.addAction(ctaAction)

        helpMenu = menubar.addMenu(u'帮助')
        helpMenu.addAction(aboutAction)

    #----------------------------------------------------------------------
    def initStatusBar(self):
        """初始化状态栏"""
        self.statusLabel = QtGui.QLabel()
        self.statusLabel.setAlignment(QtCore.Qt.AlignLeft)

        self.statusBar().addPermanentWidget(self.statusLabel)
        self.statusLabel.setText(self.getCpuMemory())

        self.sbCount = 0
        self.sbTrigger = 10  # 10秒刷新一次
        self.eventEngine.register(EVENT_TIMER, self.updateStatusBar)

    #----------------------------------------------------------------------
    def updateStatusBar(self, event):
        """在状态栏更新CPU和内存信息"""
        self.sbCount += 1

        if self.sbCount == self.sbTrigger:
            self.sbCount = 0
            self.statusLabel.setText(self.getCpuMemory())

    #----------------------------------------------------------------------
    def getCpuMemory(self):
        """获取CPU和内存状态信息"""
        cpuPercent = psutil.cpu_percent()
        memoryPercent = psutil.virtual_memory().percent
        return u'CPU使用率:%d%%   内存使用率:%d%%' % (cpuPercent, memoryPercent)

    #----------------------------------------------------------------------
    def connectCtp(self):
        """连接CTP接口"""
        self.mainEngine.connect('CTP')

    #----------------------------------------------------------------------
    def connectLts(self):
        """连接LTS接口"""
        self.mainEngine.connect('LTS')

    #----------------------------------------------------------------------
    def connectWind(self):
        """连接Wind接口"""
        self.mainEngine.connect('Wind')

    #----------------------------------------------------------------------
    def connectIb(self):
        """连接Ib"""
        self.mainEngine.connect('IB')

    #----------------------------------------------------------------------
    def testSubscribe(self):
        """测试订阅"""
        req = VtSubscribeReq()
        req.symbol = 'GOOG'
        req.productClass = PRODUCT_EQUITY
        req.exchange = EXCHANGE_SMART
        req.currency = CURRENCY_USD
        self.mainEngine.subscribe(req, 'IB')

        req.symbol = 'AAPL'
        self.mainEngine.subscribe(req, 'IB')

        req.symbol = 'YHOO'
        self.mainEngine.subscribe(req, 'IB')

        req.symbol = 'MSFT'
        self.mainEngine.subscribe(req, 'IB')

        req.symbol = 'GE'
        self.mainEngine.subscribe(req, 'IB')

    #----------------------------------------------------------------------
    def openAbout(self):
        """打开关于"""
        try:
            self.aboutW.show()
        except AttributeError:
            self.aboutW = AboutWidget(self)
            self.aboutW.show()

    #----------------------------------------------------------------------
    def openContract(self):
        """打开合约查询"""
        try:
            self.contractM.show()
        except AttributeError:
            self.contractM = ContractMonitor(self.mainEngine.dataEngine)
            self.contractM.show()

    #----------------------------------------------------------------------
    def openCta(self):
        """打开CTA组件"""
        try:
            self.ctaM.show()
        except AttributeError:
            self.ctaM = CtaEngineManager(self.mainEngine.ctaEngine,
                                         self.eventEngine)
            self.ctaM.show()

    #----------------------------------------------------------------------
    def closeEvent(self, event):
        """关闭事件"""
        reply = QtGui.QMessageBox.question(
            self, u'退出', u'确认退出?',
            QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)

        if reply == QtGui.QMessageBox.Yes:
            self.mainEngine.exit()
            event.accept()
        else:
            event.ignore()
Example #5
0
class MainWindow(QtGui.QMainWindow):
    """主窗口"""

    #----------------------------------------------------------------------
    def __init__(self, mainEngine, eventEngine, dataEngine):
        """Constructor"""
        super(MainWindow, self).__init__()
        
        self.mainEngine = mainEngine
        self.eventEngine = eventEngine
        self.dataEngine = dataEngine
        
        self.initUi()
        
    #----------------------------------------------------------------------
    def initUi(self):
        """初始化界面"""
        self.setWindowTitle('VnTrader')
        self.initCentral()
        self.initMenu()
        self.initStatusBar()
        
    #----------------------------------------------------------------------
    def initCentral(self):
        """初始化中心区域"""
        marketM = MarketMonitor(self.eventEngine)
        logM = LogMonitor(self.eventEngine)
        errorM = ErrorMonitor(self.eventEngine)
        tradeM = TradeMonitor(self.eventEngine)
        orderM = OrderMonitor(self.eventEngine, self.mainEngine)
        positionM = PositionMonitor(self.eventEngine)
        accountM = AccountMonitor(self.eventEngine)
        
        tradingW = TradingWidget(self.mainEngine, self.mainEngine.eventEngine, self.mainEngine.dataEngine)
        
        leftTab = QtGui.QTabWidget()
        leftTab.addTab(logM, u'日志')
        leftTab.addTab(errorM, u'错误')
        leftTab.addTab(accountM, u'账户')
        
        rightTab = QtGui.QTabWidget()
        rightTab.addTab(tradeM, u'成交')
        rightTab.addTab(orderM, u'委托')
        rightTab.addTab(positionM, u'持仓')
    
        hbox = QtGui.QHBoxLayout()
        hbox.addWidget(tradingW)
        hbox.addWidget(marketM)
        
        grid = QtGui.QGridLayout()
        grid.addLayout(hbox, 0, 0, 1, 2)
        grid.addWidget(leftTab, 1, 0)
        grid.addWidget(rightTab, 1, 1)
        
        central = QtGui.QWidget()
        central.setLayout(grid)
        self.setCentralWidget(central)
        
    #----------------------------------------------------------------------
    def initMenu(self):
        """初始化菜单"""
        # 创建操作
        connectCtpAction = QtGui.QAction(u'连接CTP', self)
        connectCtpAction.triggered.connect(self.connectCtp)
        
        connectLtsAction = QtGui.QAction(u'连接LTS', self)
        connectLtsAction.triggered.connect(self.connectLts)
        
        connectWindAction = QtGui.QAction(u'连接Wind', self)
        connectWindAction.triggered.connect(self.connectWind)
        
        connectIbAction = QtGui.QAction(u'连接IB', self)
        connectIbAction.triggered.connect(self.connectIb)        
        
        testAction = QtGui.QAction(u'测试', self)
        testAction.triggered.connect(self.testSubscribe)
        
        exitAction = QtGui.QAction(u'退出', self)
        exitAction.triggered.connect(self.close)
        
        aboutAction = QtGui.QAction(u'关于', self)
        aboutAction.triggered.connect(self.openAbout)
        
        contractAction = QtGui.QAction(u'查询合约', self)
        contractAction.triggered.connect(self.openContract)
        
        ctaAction = QtGui.QAction(u'CTA策略', self)
        ctaAction.triggered.connect(self.openCta)
        
        # 创建菜单
        menubar = self.menuBar()
        
        sysMenu = menubar.addMenu(u'系统')
        sysMenu.addAction(connectCtpAction)
        sysMenu.addAction(connectLtsAction)
        sysMenu.addAction(connectWindAction)
        sysMenu.addAction(connectIbAction)
        sysMenu.addAction(testAction)
        sysMenu.addAction(exitAction)
        
        functionMenu = menubar.addMenu(u'功能')
        functionMenu.addAction(contractAction)
        functionMenu.addAction(ctaAction)
        
        helpMenu = menubar.addMenu(u'帮助')
        helpMenu.addAction(aboutAction)
    
    #----------------------------------------------------------------------
    def initStatusBar(self):
        """初始化状态栏"""
        self.statusLabel = QtGui.QLabel()
        self.statusLabel.setAlignment(QtCore.Qt.AlignLeft)
        
        self.statusBar().addPermanentWidget(self.statusLabel)
        self.statusLabel.setText(self.getCpuMemory())
        
        self.sbCount = 0
        self.sbTrigger = 10     # 10秒刷新一次
        self.eventEngine.register(EVENT_TIMER, self.updateStatusBar)
        
    #----------------------------------------------------------------------
    def updateStatusBar(self, event):
        """在状态栏更新CPU和内存信息"""
        self.sbCount += 1
        
        if self.sbCount == self.sbTrigger:
            self.sbCount = 0
            self.statusLabel.setText(self.getCpuMemory())
    
    #----------------------------------------------------------------------
    def getCpuMemory(self):
        """获取CPU和内存状态信息"""
        cpuPercent = psutil.cpu_percent()
        memoryPercent = psutil.virtual_memory().percent
        return u'CPU使用率:%d%%   内存使用率:%d%%' % (cpuPercent, memoryPercent)        
        
    #----------------------------------------------------------------------
    def connectCtp(self):
        """连接CTP接口"""
        self.mainEngine.connect('CTP')
        
    #----------------------------------------------------------------------
    def connectLts(self):
        """连接LTS接口"""
        self.mainEngine.connect('LTS')    
    
    #----------------------------------------------------------------------
    def connectWind(self):
        """连接Wind接口"""
        self.mainEngine.connect('Wind')
    
    #----------------------------------------------------------------------
    def connectIb(self):
        """连接Ib"""
        self.mainEngine.connect('IB')
        
    #----------------------------------------------------------------------
    def testSubscribe(self):
        """测试订阅"""
        req = VtSubscribeReq()
        req.symbol = 'GOOG'
        req.productClass = PRODUCT_EQUITY
        req.exchange = EXCHANGE_SMART
        req.currency = CURRENCY_USD
        self.mainEngine.subscribe(req, 'IB')
        
        req.symbol = 'AAPL'
        self.mainEngine.subscribe(req, 'IB')
        
        req.symbol = 'YHOO'
        self.mainEngine.subscribe(req, 'IB')
        
        req.symbol = 'MSFT'
        self.mainEngine.subscribe(req, 'IB')
        
        req.symbol = 'GE'
        self.mainEngine.subscribe(req, 'IB')        
        
    #----------------------------------------------------------------------
    def openAbout(self):
        """打开关于"""
        try:
            self.aboutW.show()
        except AttributeError:
            self.aboutW = AboutWidget(self)
            self.aboutW.show()
    
    #----------------------------------------------------------------------
    def openContract(self):
        """打开合约查询"""
        try:
            self.contractM.show()
        except AttributeError:
            self.contractM = ContractMonitor(self.mainEngine.dataEngine)
            self.contractM.show()
            
    #----------------------------------------------------------------------
    def openCta(self):
        """打开CTA组件"""
        try:
            self.ctaM.show()
        except AttributeError:
            self.ctaM = CtaEngineManager(self.mainEngine.ctaEngine, self.eventEngine)
            self.ctaM.show()
    
    #----------------------------------------------------------------------
    def closeEvent(self, event):
        """关闭事件"""
        reply = QtGui.QMessageBox.question(self, u'退出',
                                           u'确认退出?', QtGui.QMessageBox.Yes | 
                                           QtGui.QMessageBox.No, QtGui.QMessageBox.No)

        if reply == QtGui.QMessageBox.Yes:        
            self.mainEngine.exit()
            event.accept()
        else:
            event.ignore()
Example #6
0
class MainWindow(QtGui.QMainWindow):
    """主窗口"""

    # ----------------------------------------------------------------------
    def __init__(self, mainEngine, eventEngine, dataEngine):
        """Constructor"""
        super(MainWindow, self).__init__()

        self.mainEngine = mainEngine
        self.eventEngine = eventEngine
        self.dataEngine = dataEngine

        self.initUi()

    # ----------------------------------------------------------------------
    def initUi(self):
        """初始化界面"""
        self.setWindowTitle("VnTrader")
        self.initCentral()
        self.initMenu()
        self.initStatusBar()

    # ----------------------------------------------------------------------
    def initCentral(self):
        """初始化中心区域"""
        marketM = MarketMonitor(self.eventEngine)
        logM = LogMonitor(self.eventEngine)
        errorM = ErrorMonitor(self.eventEngine)
        tradeM = TradeMonitor(self.eventEngine)
        orderM = OrderMonitor(self.eventEngine, self.mainEngine)
        positionM = PositionMonitor(self.eventEngine)
        accountM = AccountMonitor(self.eventEngine)

        tradingW = TradingWidget(self.mainEngine, self.mainEngine.eventEngine, self.mainEngine.dataEngine)

        leftTab = QtGui.QTabWidget()
        leftTab.addTab(logM, u"日志")
        leftTab.addTab(errorM, u"错误")
        leftTab.addTab(accountM, u"账户")

        rightTab = QtGui.QTabWidget()
        rightTab.addTab(tradeM, u"成交")
        rightTab.addTab(orderM, u"委托")
        rightTab.addTab(positionM, u"持仓")

        hbox = QtGui.QHBoxLayout()
        hbox.addWidget(tradingW)
        hbox.addWidget(marketM)

        grid = QtGui.QGridLayout()
        grid.addLayout(hbox, 0, 0, 1, 2)
        grid.addWidget(leftTab, 1, 0)
        grid.addWidget(rightTab, 1, 1)

        central = QtGui.QWidget()
        central.setLayout(grid)
        self.setCentralWidget(central)

    # ----------------------------------------------------------------------
    def initMenu(self):
        """初始化菜单"""
        # 创建操作
        connectCtpAction = QtGui.QAction(u"连接CTP", self)
        connectCtpAction.triggered.connect(self.connectCtp)

        connectLtsAction = QtGui.QAction(u"连接LTS", self)
        connectLtsAction.triggered.connect(self.connectLts)

        connectWindAction = QtGui.QAction(u"连接Wind", self)
        connectWindAction.triggered.connect(self.connectWind)

        testAction = QtGui.QAction(u"测试", self)
        testAction.triggered.connect(self.testSubscribe)

        exitAction = QtGui.QAction(u"退出", self)
        exitAction.triggered.connect(self.close)

        aboutAction = QtGui.QAction(u"关于", self)
        aboutAction.triggered.connect(self.openAbout)

        contractAction = QtGui.QAction(u"查询合约", self)
        contractAction.triggered.connect(self.openContract)

        ctaAction = QtGui.QAction(u"CTA策略", self)
        ctaAction.triggered.connect(self.openCta)

        # 创建菜单
        menubar = self.menuBar()

        sysMenu = menubar.addMenu(u"系统")
        sysMenu.addAction(connectCtpAction)
        sysMenu.addAction(connectLtsAction)
        sysMenu.addAction(connectWindAction)
        sysMenu.addAction(testAction)
        sysMenu.addAction(exitAction)

        functionMenu = menubar.addMenu(u"功能")
        functionMenu.addAction(contractAction)
        functionMenu.addAction(ctaAction)

        helpMenu = menubar.addMenu(u"帮助")
        helpMenu.addAction(aboutAction)

    # ----------------------------------------------------------------------
    def initStatusBar(self):
        """初始化状态栏"""
        self.statusLabel = QtGui.QLabel()
        self.statusLabel.setAlignment(QtCore.Qt.AlignLeft)

        self.statusBar().addPermanentWidget(self.statusLabel)
        self.statusLabel.setText(self.getCpuMemory())

        self.sbCount = 0
        self.sbTrigger = 10  # 10秒刷新一次
        self.eventEngine.register(EVENT_TIMER, self.updateStatusBar)

    # ----------------------------------------------------------------------
    def updateStatusBar(self, event):
        """在状态栏更新CPU和内存信息"""
        self.sbCount += 1

        if self.sbCount == self.sbTrigger:
            self.sbCount = 0
            self.statusLabel.setText(self.getCpuMemory())

    # ----------------------------------------------------------------------
    def getCpuMemory(self):
        """获取CPU和内存状态信息"""
        cpuPercent = psutil.cpu_percent()
        memoryPercent = psutil.virtual_memory().percent
        return u"CPU使用率:%d%%   内存使用率:%d%%" % (cpuPercent, memoryPercent)

    # ----------------------------------------------------------------------
    def connectCtp(self):
        """连接CTP接口"""
        self.mainEngine.connect("CTP")

    # ----------------------------------------------------------------------
    def connectLts(self):
        """连接LTS接口"""
        self.mainEngine.connect("LTS")

    # ----------------------------------------------------------------------
    def connectWind(self):
        """连接Wind接口"""
        self.mainEngine.connect("Wind")

    # ----------------------------------------------------------------------
    def testSubscribe(self):
        """测试订阅"""
        req = VtSubscribeReq()
        req.symbol = "600000"
        req.exchange = EXCHANGE_SSE
        self.mainEngine.subscribe(req, "Wind")

        req = VtSubscribeReq()
        req.symbol = "000062"
        req.exchange = EXCHANGE_SZSE
        self.mainEngine.subscribe(req, "Wind")

        req = VtSubscribeReq()
        req.symbol = "IF1511"
        req.exchange = EXCHANGE_CFFEX
        self.mainEngine.subscribe(req, "Wind")

        req = VtSubscribeReq()
        req.symbol = "CU1601"
        req.exchange = EXCHANGE_SHFE
        self.mainEngine.subscribe(req, "Wind")

        req = VtSubscribeReq()
        req.symbol = "C1601"
        req.exchange = EXCHANGE_DCE
        self.mainEngine.subscribe(req, "Wind")

        req = VtSubscribeReq()
        req.symbol = "SR1601"
        req.exchange = EXCHANGE_CZCE
        self.mainEngine.subscribe(req, "Wind")

    # ----------------------------------------------------------------------
    def openAbout(self):
        """打开关于"""
        try:
            self.aboutW.show()
        except AttributeError:
            self.aboutW = AboutWidget(self)
            self.aboutW.show()

    # ----------------------------------------------------------------------
    def openContract(self):
        """打开合约查询"""
        try:
            self.contractM.show()
        except AttributeError:
            self.contractM = ContractMonitor(self.mainEngine.dataEngine)
            self.contractM.show()

    # ----------------------------------------------------------------------
    def openCta(self):
        """打开CTA组件"""
        try:
            self.ctaM.show()
        except AttributeError:
            self.ctaM = CtaEngineManager(self.mainEngine.ctaEngine, self.eventEngine)
            self.ctaM.show()

    # ----------------------------------------------------------------------
    def closeEvent(self, event):
        """关闭事件"""
        reply = QtGui.QMessageBox.question(
            self, u"退出", u"确认退出?", QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No
        )

        if reply == QtGui.QMessageBox.Yes:
            self.mainEngine.exit()
            event.accept()
        else:
            event.ignore()