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 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 __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.")
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, ))
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')
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)
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()
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)
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")
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_())
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:
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_())
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_())
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)
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()
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')
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 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_())
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_())
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()
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)
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_()
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()
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
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')