Exemplo n.º 1
0
    def __init__(self, repAddress, pubAddress):
        """Constructor"""
        super(VtServer, self).__init__(repAddress, pubAddress)
        self.usePickle()

        # 创建主引擎对象
        self.engine = MainEngine()

        # 注册主引擎的方法到服务器的RPC函数
        self.register(self.engine.connect)
        self.register(self.engine.subscribe)
        self.register(self.engine.sendOrder)
        self.register(self.engine.cancelOrder)
        self.register(self.engine.qryAccount)
        self.register(self.engine.qryPosition)
        self.register(self.engine.exit)
        self.register(self.engine.writeLog)
        self.register(self.engine.dbConnect)
        self.register(self.engine.dbInsert)
        self.register(self.engine.dbQuery)
        self.register(self.engine.dbUpdate)
        self.register(self.engine.getContract)
        self.register(self.engine.getAllContracts)
        self.register(self.engine.getOrder)
        self.register(self.engine.getAllWorkingOrders)
        self.register(self.engine.getAllGatewayNames)
        self.register(self.engine.getGateway4sysMenu)

        # 注册事件引擎发送的事件处理监听
        self.engine.eventEngine.registerGeneralHandler(self.eventHandler)
Exemplo n.º 2
0
    def start(self, gatewayList):
        """
        
        :param gatewayList: such as ['CHBTC', 'HUOBI'] 
        :type gatewayList: 
        :return: 
        :rtype: 
        """

        if self.isRunning:
            return
        self.isRunning = True

        # 创建主引擎对象
        self.mainEngine = MainEngine(enableCtaEngine=False,
                                     enableDrEngine=True,
                                     enableRmEngine=False)

        # 启动server
        server = VtServer(self.reqAddr, self.pubAddr, self.mainEngine)
        server.start()
        self._connectGateway(gatewayList)

        printLog('-' * 50)
        printLog(u'marketing服务器已启动')
        # 进入主循环
        self.isRunning = True
        self.onRunging()

        server.stopServer()
        self.mainEngine.exit()
Exemplo n.º 3
0
 def __init__(self):
     self.mainEngine = MainEngine()
     self.ctaEngine = self.mainEngine.ctaEngine
     self.drEngine = self.mainEngine.drEngine
     self.gatewayConnectedDict = {}
     self.strategyInited = False
     self.strategyStarted = False
     self.mainEngine.writeLog("MainEngine Started.")
Exemplo n.º 4
0
class Marketing(object):
    def __init__(self, reqAddress, pubAddress):
        self.reqAddr = reqAddress
        self.pubAddr = pubAddress
        self.mainEngine = None
        self.isRunning = False

    def start(self, gatewayList):
        """
        
        :param gatewayList: such as ['CHBTC', 'HUOBI'] 
        :type gatewayList: 
        :return: 
        :rtype: 
        """

        if self.isRunning:
            return
        self.isRunning = True

        # 创建主引擎对象
        self.mainEngine = MainEngine(enableCtaEngine=False,
                                     enableDrEngine=True,
                                     enableRmEngine=False)

        # 启动server
        server = VtServer(self.reqAddr, self.pubAddr, self.mainEngine)
        server.start()
        self._connectGateway(gatewayList)

        printLog('-' * 50)
        printLog(u'marketing服务器已启动')
        # 进入主循环
        self.isRunning = True
        self.onRunging()

        server.stopServer()
        self.mainEngine.exit()

    def onRunging(self):
        cnt = 0
        while self.isRunning:
            if cnt >= 10:
                cnt = 0
                printLog(u'请输入Ctrl-C来关闭服务器')

            cnt += 1
            sleep(1)

    def _connectGateway(self, gatewayList):
        for gateway in gatewayList:
            # Marketing不需要对账户信息和交易信息进行查询
            self.mainEngine.gatewayDict[gateway].setQryEnabled(False)
            self.mainEngine.connect(gateway)

            printLog('Gateway(%s) connect finished.' % (gateway, ))
Exemplo n.º 5
0
def main():
    """主程序入口"""
    # 重载sys模块,设置默认字符串编码方式为utf8
    reload(sys)
    sys.setdefaultencoding('utf8')

    # 初始化主引擎和主窗口对象
    mainEngine = MainEngine()
    mainEngine.connect('CTP')
    time.sleep(5)
    mainEngine.ctaEngine.loadSetting()
    mainEngine.ctaEngine.initStrategy('tradeTest')
    mainEngine.ctaEngine.startStrategy('tradeTest')
Exemplo n.º 6
0
def runChildProcess():
    """子进程运行函数"""
    print '-' * 20

    # 创建日志引擎
    le = LogEngine()
    le.setLogLevel(le.LEVEL_INFO)
    le.addConsoleHandler()
    le.info(u'启动行情记录运行子进程')

    ee = EventEngine2()
    le.info(u'事件引擎创建成功')

    me = MainEngine(ee)
    me.addGateway(ctpGateway)
    me.addApp(dataRecorder)
    le.info(u'主引擎创建成功')

    ee.register(EVENT_LOG, le.processLogEvent)
    ee.register(EVENT_ERROR, processErrorEvent)
    le.info(u'注册日志事件监听')

    me.connect('CTP')
    le.info(u'连接CTP接口')

    while True:
        sleep(1)
Exemplo n.º 7
0
class VtServer(RpcServer):
    """vn.trader服务器"""

    #----------------------------------------------------------------------
    def __init__(self, repAddress, pubAddress):
        """Constructor"""
        super(VtServer, self).__init__(repAddress, pubAddress)
        self.usePickle()

        # 创建主引擎对象
        self.engine = MainEngine()

        # 注册主引擎的方法到服务器的RPC函数
        self.register(self.engine.connect)
        self.register(self.engine.subscribe)
        self.register(self.engine.sendOrder)
        self.register(self.engine.cancelOrder)
        self.register(self.engine.qryAccount)
        self.register(self.engine.qryPosition)
        self.register(self.engine.exit)
        self.register(self.engine.writeLog)
        self.register(self.engine.dbConnect)
        self.register(self.engine.dbInsert)
        self.register(self.engine.dbQuery)
        self.register(self.engine.dbUpdate)
        self.register(self.engine.getContract)
        self.register(self.engine.getAllContracts)
        self.register(self.engine.getOrder)
        self.register(self.engine.getAllWorkingOrders)
        self.register(self.engine.getAllGatewayNames)
        self.register(self.engine.getGateway4sysMenu)

        # 注册事件引擎发送的事件处理监听
        self.engine.eventEngine.registerGeneralHandler(self.eventHandler)

    #----------------------------------------------------------------------
    def eventHandler(self, event):
        """事件处理"""
        self.publish(event.type_, event)

    #----------------------------------------------------------------------
    def stopServer(self):
        """停止服务器"""
        # 关闭引擎
        self.engine.exit()

        # 停止服务器线程
        self.stop()
Exemplo n.º 8
0
class VtServer(RpcServer):
    """vn.trader服务器"""

    #----------------------------------------------------------------------
    def __init__(self, repAddress, pubAddress):
        """Constructor"""
        super(VtServer, self).__init__(repAddress, pubAddress)
        self.usePickle()
        
        # 创建主引擎对象
        self.engine = MainEngine()
        
        # 注册主引擎的方法到服务器的RPC函数
        self.register(self.engine.connect)
        self.register(self.engine.subscribe)
        self.register(self.engine.sendOrder)
        self.register(self.engine.cancelOrder)
        self.register(self.engine.qryAccount)
        self.register(self.engine.qryPosition)
        self.register(self.engine.exit)
        self.register(self.engine.writeLog)
        self.register(self.engine.dbConnect)
        self.register(self.engine.dbInsert)
        self.register(self.engine.dbQuery)
        self.register(self.engine.dbUpdate)
        self.register(self.engine.getContract)
        self.register(self.engine.getAllContracts)
        self.register(self.engine.getOrder)
        self.register(self.engine.getAllWorkingOrders)
        self.register(self.engine.getAllGatewayNames)
        self.register(self.engine.getGateway4sysMenu)

        # 注册事件引擎发送的事件处理监听
        self.engine.eventEngine.registerGeneralHandler(self.eventHandler)
        
    #----------------------------------------------------------------------
    def eventHandler(self, event):
        """事件处理"""
        self.publish(event.type_, event)
        
    #----------------------------------------------------------------------
    def stopServer(self):
        """停止服务器"""
        # 关闭引擎
        self.engine.exit()
        
        # 停止服务器线程
        self.stop()
Exemplo n.º 9
0
 def __init__(self, repAddress, pubAddress):
     """Constructor"""
     super(VtServer, self).__init__(repAddress, pubAddress)
     self.usePickle()
     
     # 创建主引擎对象
     self.engine = MainEngine()
     
     # 注册主引擎的方法到服务器的RPC函数
     self.register(self.engine.connect)
     self.register(self.engine.subscribe)
     self.register(self.engine.sendOrder)
     self.register(self.engine.cancelOrder)
     self.register(self.engine.qryAccont)
     self.register(self.engine.qryPosition)
     self.register(self.engine.exit)
     self.register(self.engine.writeLog)
     self.register(self.engine.dbConnect)
     self.register(self.engine.dbInsert)
     self.register(self.engine.dbQuery)
     self.register(self.engine.dbUpdate)
     self.register(self.engine.getContract)
     self.register(self.engine.getAllContracts)
     self.register(self.engine.getOrder)
     self.register(self.engine.getAllWorkingOrders)
     self.register(self.engine.getAllGatewayNames)
     
     # 注册事件引擎发送的事件处理监听
     self.engine.eventEngine.registerGeneralHandler(self.eventHandler)
Exemplo n.º 10
0
def main():
    """主程序入口"""
    # 重载sys模块,设置默认字符串编码方式为utf8
    reload(sys)
    sys.setdefaultencoding('utf8')

    # 设置Windows底部任务栏图标
    if 'Windows' in platform.uname():
        ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(
            'vn.trader')

    # 初始化Qt应用对象
    app = QtGui.QApplication(sys.argv)
    app.setWindowIcon(QtGui.QIcon('vnpy.ico'))
    app.setFont(BASIC_FONT)
    mainEngine = MainEngine()

    sm = SelectedMainWidget(mainEngine, mainEngine.eventEngine)
    sm.show()

    #sm = MainWindow(mainEngine,mainEngine.eventEngine)
    #sm.showMaximized()

    # 在主线程中启动Qt事件循环
    sys.exit(app.exec_())

    print("------------------over")
Exemplo n.º 11
0
def main():
    """主程序入口"""
    # 重载sys模块,设置默认字符串编码方式为utf8
    reload(sys)
    sys.setdefaultencoding('utf8')

    # 设置Windows底部任务栏图标
    if 'Windows' in platform.uname():
        ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(
            u'vn.trader')

    # 初始化Qt应用对象
    app = QtGui.QApplication(sys.argv)
    app.setWindowIcon(QtGui.QIcon(ICON_FILENAME))
    app.setFont(BASIC_FONT)

    # 设置Qt的皮肤
    try:
        f = file(SETTING_FILENAME)
        setting = json.load(f)
        if setting['darkStyle']:
            import qdarkstyle
            app.setStyleSheet(qdarkstyle.load_stylesheet(pyside=False))
        f.close()
    except:
        pass

    # 初始化主引擎和主窗口对象
    mainEngine = MainEngine()
    mainWindow = MainWindow(mainEngine, mainEngine.eventEngine)
    mainWindow.showMaximized()

    # 在主线程中启动Qt事件循环
    sys.exit(app.exec_())
Exemplo n.º 12
0
class App(object):
    def __init__(self):
        self.mainEngine = MainEngine()
        self.ctaEngine = self.mainEngine.ctaEngine
        self.drEngine = self.mainEngine.drEngine
        self.gatewayConnectedDict = {}
        self.strategyInited = False
        self.strategyStarted = False
        self.mainEngine.writeLog("MainEngine Started.")
        #self.connectGateway('SHZD')
        # self.connectGateway('CTP')
        #self.connectGateway('OANDA')

    def quit(self):
        try:
            self.mainEngine.exit()
        except Exception, e:
            pass
        else:
Exemplo n.º 13
0
def main():
    """主程序入口"""
    app = QtGui.QApplication(sys.argv)
    app.setWindowIcon(QtGui.QIcon('vnpy.ico'))
    app.setFont(BASIC_FONT)

    mainEngine = MainEngine()
    mainWindow = MainWindow(mainEngine, mainEngine.eventEngine)
    mainWindow.showMaximized()

    sys.exit(app.exec_())
Exemplo n.º 14
0
def main():
    """主程序入口"""
    # 设置底部任务栏图标,win7以下请注释掉
    ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID('vn.py trading system')
    
    app = QtGui.QApplication(sys.argv)
    app.setWindowIcon(QtGui.QIcon('vnpy.ico'))
    app.setFont(BASIC_FONT)
    
    mainEngine = MainEngine()
    mainWindow = MainWindow(mainEngine, mainEngine.eventEngine)
    mainWindow.showMaximized()
    
    sys.exit(app.exec_())
Exemplo n.º 15
0
def runServer():
    """运行服务器"""
    global g_trade
    signal.signal(signal.SIGTERM, signal_handler)
    signal.signal(signal.SIGINT, signal_handler)

    mainEngine = MainEngine(enableCtaEngine=False, enableDrEngine=True, enableRmEngine=False)
    g_trade = Trade(
        config.TRADE_REQ_ADDR,
        config.TRADE_PUB_ADDR,
    )
    g_trade.start([
        vtConstant.EXCHANGE_CHBTC,
    ], mainEngine)
Exemplo n.º 16
0
def tcplink(sock, addr):
    print 'Accept new connection from %s:%s...' % addr
    sock.send('Welcome!')
    mainEngine = MainEngine()

    while True:
        data = sock.recv(1024)
        time.sleep(1)
        if data == 'exit' or not data:
            break
        mainEngine.ctaEngine.loadSetting()
        mainEngine.ctaEngine.initStrategy(data)
        mainEngine.ctaEngine.startStrategy(data)
        sock.send("SEVER OK")
    sock.close()
Exemplo n.º 17
0
def main():
    """主程序入口"""
    # 重载sys模块,设置默认字符串编码方式为utf8
    reload(sys)
    sys.setdefaultencoding('utf8')

    # 设置Windows底部任务栏图标
    if platform.uname() == 'Windows':
        ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID('vn.trader')

        # 初始化Qt应用对象
    app = QtCore.QCoreApplication(sys.argv)

    # 初始化主引擎和主窗口对象
    mainEngine = MainEngine()

    # 在主线程中启动Qt事件循环
    sys.exit(app.exec_())

    # 连接mongo数据库
    mainEngine.dbConnect()

    # 连接CTP接口
    mainEngine.connect('CTP')
Exemplo n.º 18
0
    def __init__(self):
        self.makeLog('Event loop manager started', False)
        self.engineStarted = False
        self.mainEngine = MainEngine()
        self.eventEngine = EventEngine2()
	
        # 注册事件监听
        self.registerEvent()
        self.mainEngine.dbConnect()
        time.sleep(2)
	'''
        self.mainEngine.connect('CTP')
        time.sleep(3)
        self.mainEngine.ctaEngine.loadSetting()
        self.mainEngine.ctaEngine.initStrategy('double ema')
	'''
        self.eventEngine.start()
Exemplo n.º 19
0
def main():
    """主程序入口"""
    # 重载sys模块,设置默认字符串编码方式为utf8
    '''
    reload(sys)
    try:
        sys.setdefaultencoding('utf8')
    except:
        pass
    '''

    # 设置Windows底部任务栏图标
    if 'Windows' in platform.uname():
        ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(
            'vn.trader')

    # 初始化Qt应用对象
    icon = os.path.join(os.getcwd(), 'setting', 'vnpy.ico')

    app = QApplication(['VnTrader', ''])
    app.setWindowIcon(QIcon(icon))
    app.setFont(BASIC_FONT)

    darksheet = qdarkstyle.load_stylesheet(pyside=False)
    whitesheet = app.styleSheet()
    sheets = [whitesheet, darksheet]
    # 设置Qt的皮肤
    try:
        f = open("setting/VT_setting.json")
        setting = json.load(f)
        if setting['darkStyle']:
            app.setStyleSheet(darksheet)
            sheets = [darksheet, whitesheet]
    except:
        pass

    # 初始化主引擎和主窗口对象
    mainEngine = MainEngine()
    mainWindow = MainWindow(mainEngine, mainEngine.eventEngine, app, sheets)
    mainWindow.showMaximized()
    mainWindow.showLogin()

    # 在主线程中启动Qt事件循环
    sys.exit(app.exec_())
Exemplo n.º 20
0
def main():
    """主程序入口"""
    # 重载sys模块,设置默认字符串编码方式为utf8
    reload(sys)

    # 设置Windows底部任务栏图标
    if 'Windows' in platform.uname():
        ctypes.windll.shell32.SetCurrentProcessExplicitAppUserModelID(
            'vn.trader')

    # 初始化Qt应用对象
    app = QtGui.QApplication(sys.argv)
    # app.setFont(BASIC_FONT)

    # 初始化主引擎和主窗口对象
    mainEngine = MainEngine()
    mainWindow = MainWindow(mainEngine, mainEngine.eventEngine)
    mainWindow.showMaximized()

    # 在主线程中启动Qt事件循环
    sys.exit(app.exec_())
Exemplo n.º 21
0
def runServer():
    """运行服务器"""
    repAddress = 'tcp://*:2014'
    pubAddress = 'tcp://*:2015'

    # 创建并启动服务器
    server = VtServer(repAddress, pubAddress, MainEngine())
    server.start()

    printLog('-' * 50)
    printLog(u'vn.trader服务器已启动')

    # 进入主循环
    while True:
        printLog(u'请输入exit来关闭服务器')
        if raw_input() != 'exit':
            continue

        printLog(u'确认关闭服务器?yes|no')
        if raw_input() == 'yes':
            break

    server.stopServer()
Exemplo n.º 22
0
def run(gateway, strategyName):
    reload(sys)
    sys.setdefaultencoding('utf-8')
    """主程序入口"""
    mainEngine = MainEngine()
    logPrint = LogPrint(mainEngine)
    print "connect MongoDB.........."
    mainEngine.dbConnect()
    time.sleep(5)

    print "connet %s.........." % gateway
    mainEngine.connect(gateway)
    time.sleep(5)

    print "start strategy %s......." % strategyName
    mainEngine.ctaEngine.loadSetting()
    mainEngine.ctaEngine.initStrategy(strategyName)
    mainEngine.ctaEngine.startStrategy(strategyName)
Exemplo n.º 23
0
def main():
    app = QCoreApplication(sys.argv)
    mainEngine = MainEngine()
    # 若需要连接数据库,则启动
    mainEngine.dbConnect()
    # 指定的连接配置
    mainEngine.connect('CTP_Prod')
    # 加载cta的配置
    mainEngine.ctaEngine.loadSetting()
    # 初始化策略,如果多个,则需要逐一初始化多个
    mainEngine.ctaEngine.initStrategy(u'S26_PTA套利')
    # 逐一启动策略
    mainEngine.ctaEngine.startStrategy(u'S26_PTA套利')

    logM = LogMonitor(mainEngine.eventEngine)
    errorM = ErrorMonitor(mainEngine.eventEngine)
    tradeM = TradeMonitor(mainEngine.eventEngine)
    orderM = OrderMonitor(mainEngine.eventEngine, mainEngine)
    positionM = PositionMonitor(mainEngine.eventEngine)
    accountM = AccountMonitor(mainEngine.eventEngine)

    app.exec_()
Exemplo n.º 24
0
            if response:
                break
        except Exception, e:
            pass  

    # 初始化Qt应用对象
    app = QtGui.QApplication(sys.argv)
    app.setWindowIcon(QtGui.QIcon(ICON_FILENAME))
    app.setFont(BASIC_FONT)
    
    # 设置Qt的皮肤
    try:
        f = file(SETTING_FILENAME)
        setting = json.load(f)    
        if setting['darkStyle']:
            import qdarkstyle
            app.setStyleSheet(qdarkstyle.load_stylesheet(pyside=False))
    except:
        pass
    
    # 初始化主引擎和主窗口对象
    mainEngine = MainEngine()
    mainWindow = MainWindow(mainEngine, mainEngine.eventEngine)
    mainWindow.showMaximized()
    
    # 在主线程中启动Qt事件循环
    sys.exit(app.exec_())
    
if __name__ == '__main__':
    main()
Exemplo n.º 25
0
class EventLoopManager(object):
    def __init__(self):
        self.makeLog('Event loop manager started', False)
        self.engineStarted = False
        self.mainEngine = MainEngine()
        self.eventEngine = EventEngine2()
	
        # 注册事件监听
        self.registerEvent()
        self.mainEngine.dbConnect()
        time.sleep(2)
	'''
        self.mainEngine.connect('CTP')
        time.sleep(3)
        self.mainEngine.ctaEngine.loadSetting()
        self.mainEngine.ctaEngine.initStrategy('double ema')
	'''
        self.eventEngine.start()
        
    def start(self):
        self.eventEngine.start()
        # 注册事件监听
        self.registerEvent()
        
    def onEventLog(self, event):
        log = event.dict_['data']
        logContent = ' '.join([log.logTime, log.logContent, '\n'])
        self.makeLog(logContent)
        
    def onEventTimer(self, event):
        today = date.weekday(datetime.now().date())
        if today == 5 or today == 6:#weekends
            return
        hour =  datetime.now().hour
        
        #log in
        if(self.engineStarted == False 
           and (hour in [9, 10, 11, 13, 20, 21, 22, 23, 24, 1])#trading hour
           ):
            #self.makeLog('Starting CTP double ema')
            self.run()
            return
        time.sleep(2)
        #log out
        if(self.engineStarted == True 
           and (hour in [14, 2])
           ):
            #self.makeLog('Ending CTP double ema')
            self.stop()
            return        
        
    def registerEvent(self):
        """注册事件监听"""
        self.mainEngine.eventEngine.register(EVENT_LOG, self.onEventLog)
        self.mainEngine.eventEngine.register(EVENT_CTA_LOG, self.onEventLog)
        self.eventEngine.register(EVENT_TIMER, self.onEventTimer)
        #self.makeLog('Events registerred',False)
        
    def run(self):
        self.mainEngine.connect('CTP')
        time.sleep(3)

        self.mainEngine.drEngine.loadSetting()

        self.mainEngine.ctaEngine.loadSetting()
        self.mainEngine.ctaEngine.initStrategy('double ema')
        self.mainEngine.ctaEngine.startStrategy('double ema')
        self.engineStarted = True
        
    def stop(self):
        try:
            #self.mainEngine.ctaEngine.stopStrategy('double ema')
            #self.mainEngine.exit()
 	        #time.sleep(2)
            self.engineStarted = False
        except Exception as e:
            print e
        
    def makeLog(self, content, sendemail = False):
        if sendemail == True:
            send_email(subject = content)
        print content
Exemplo n.º 26
0
from datetime import datetime, timedelta

import pandas as pd

import vtPath
from ctaBase import *
from ctaStrategy import ctaEngine2
#from data.loader import DataLoader
from data.csv_loader import DataLoader
from gateway import GATEWAY_DICT
from vtEngine import MainEngine

__BAR__ = False

if __name__ == '__main__':
    mainEngine = MainEngine()
    mainEngine.dbConnect()
    drEngine = mainEngine.drEngine
    drEngine.loadSetting()
    dl = DataLoader()
    if __BAR__:
        # ru
        #df_rs = dl.LoadBar('ru1305', '20130104', '20130218', bin='1min')
        #df_rs = dl.LoadBar('ru1309', '20130219', '20130627', bin='1min')
        #df_rs = dl.LoadBar('ru1401', '20130628', '20131103', bin='1min')
        #df_rs = dl.LoadBar('ru1405', '20131104', '20140227', bin='1min')
        #df_rs = dl.LoadBar('ru1409', '20140228', '20140722', bin='1min')
        #df_rs = dl.LoadBar('ru1501', '20140723', '20141120', bin='1min')
        #df_rs = dl.LoadBar('ru1505', '20141121', '20150303', bin='1min')
        #df_rs = dl.LoadBar('ru1509', '20150304', '20150715', bin='1min')
        #df_rs = dl.LoadBar('ru1601', '20150716', '20151125', bin='1min')