From 7a13aec4ecec431b7a86f6fe3a9e90d147912e91 Mon Sep 17 00:00:00 2001 From: cclauss Date: Mon, 14 May 2018 15:47:19 +0200 Subject: [PATCH] Modernize vnpy/trader/app --- vnpy/trader/app/ctaStrategy/ctaBacktesting.py | 7 ++-- vnpy/trader/app/ctaStrategy/ctaHistoryData.py | 39 ++++++++++--------- .../app/ctaStrategy/language/__init__.py | 3 +- .../app/ctaStrategy/strategy/__init__.py | 1 + vnpy/trader/app/dataRecorder/__init__.py | 5 ++- .../app/dataRecorder/language/__init__.py | 5 ++- vnpy/trader/app/jaqsService/__init__.py | 5 ++- vnpy/trader/app/jaqsService/jrpc_server.py | 23 +++++------ vnpy/trader/app/jaqsService/jsEngine.py | 3 +- vnpy/trader/app/jaqsService/service.py | 10 +++-- vnpy/trader/app/optionMaster/omDate.py | 10 +++-- .../app/optionMaster/strategy/__init__.py | 1 + .../app/optionMaster/uiOmManualTrader.py | 3 +- vnpy/trader/app/optionMaster/uiOmWidget.py | 4 +- vnpy/trader/app/riskManager/__init__.py | 3 +- .../app/riskManager/language/__init__.py | 3 +- vnpy/trader/app/spreadTrading/uiStWidget.py | 6 ++- 17 files changed, 76 insertions(+), 55 deletions(-) diff --git a/vnpy/trader/app/ctaStrategy/ctaBacktesting.py b/vnpy/trader/app/ctaStrategy/ctaBacktesting.py index c0bb5c6d..8adffc5d 100644 --- a/vnpy/trader/app/ctaStrategy/ctaBacktesting.py +++ b/vnpy/trader/app/ctaStrategy/ctaBacktesting.py @@ -5,6 +5,7 @@ 可以使用和实盘相同的代码进行回测。 ''' from __future__ import division +from __future__ import print_function from datetime import datetime, timedelta from collections import OrderedDict @@ -112,7 +113,7 @@ class BacktestingEngine(object): #---------------------------------------------------------------------- def output(self, content): """输出内容""" - print str(datetime.now()) + "\t" + content + print(str(datetime.now()) + "\t" + content) #------------------------------------------------ # 参数设置相关 @@ -1213,11 +1214,11 @@ class OptimizationSetting(object): return if end < start: - print u'参数起始点必须不大于终止点' + print(u'参数起始点必须不大于终止点') return if step <= 0: - print u'参数布进必须大于0' + print(u'参数布进必须大于0') return l = [] diff --git a/vnpy/trader/app/ctaStrategy/ctaHistoryData.py b/vnpy/trader/app/ctaStrategy/ctaHistoryData.py index aa49d82e..362a66e2 100644 --- a/vnpy/trader/app/ctaStrategy/ctaHistoryData.py +++ b/vnpy/trader/app/ctaStrategy/ctaHistoryData.py @@ -7,6 +7,7 @@ 3. 将交易开拓者导出的历史数据载入到MongoDB中的函数 4. 将OKEX下载的历史数据载入到MongoDB中的函数 """ +from __future__ import print_function import csv from datetime import datetime, timedelta @@ -26,7 +27,7 @@ def downloadEquityDailyBarts(self, symbol): """ 下载股票的日行情,symbol是股票代码 """ - print u'开始下载%s日行情' %symbol + print(u'开始下载%s日行情' %symbol) # 查询数据库中已有数据的最后日期 cl = self.dbClient[DAILY_DB_NAME][symbol] @@ -62,20 +63,20 @@ def downloadEquityDailyBarts(self, symbol): bar.datetime = datetime.strptime(bar.date, '%Y%m%d') bar.volume = d.get('volume') except KeyError: - print d + print(d) flt = {'datetime': bar.datetime} self.dbClient[DAILY_DB_NAME][symbol].update_one(flt, {'$set':bar.__dict__}, upsert=True) - print u'%s下载完成' %symbol + print(u'%s下载完成' %symbol) else: - print u'找不到合约%s' %symbol + print(u'找不到合约%s' %symbol) #---------------------------------------------------------------------- def loadMcCsv(fileName, dbName, symbol): """将Multicharts导出的csv格式的历史数据插入到Mongo数据库中""" start = time() - print u'开始读取CSV文件%s中的数据插入到%s的%s中' %(fileName, dbName, symbol) + print(u'开始读取CSV文件%s中的数据插入到%s的%s中' %(fileName, dbName, symbol)) # 锁定集合,并创建索引 client = pymongo.MongoClient(globalSetting['mongoHost'], globalSetting['mongoPort']) @@ -99,15 +100,15 @@ def loadMcCsv(fileName, dbName, symbol): flt = {'datetime': bar.datetime} collection.update_one(flt, {'$set':bar.__dict__}, upsert=True) - print bar.date, bar.time + print(bar.date, bar.time) - print u'插入完毕,耗时:%s' % (time()-start) + print(u'插入完毕,耗时:%s' % (time()-start)) #---------------------------------------------------------------------- def loadTbCsv(fileName, dbName, symbol): """将TradeBlazer导出的csv格式的历史分钟数据插入到Mongo数据库中""" start = time() - print u'开始读取CSV文件%s中的数据插入到%s的%s中' %(fileName, dbName, symbol) + print(u'开始读取CSV文件%s中的数据插入到%s的%s中' %(fileName, dbName, symbol)) # 锁定集合,并创建索引 client = pymongo.MongoClient(globalSetting['mongoHost'], globalSetting['mongoPort']) @@ -132,15 +133,15 @@ def loadTbCsv(fileName, dbName, symbol): flt = {'datetime': bar.datetime} collection.update_one(flt, {'$set':bar.__dict__}, upsert=True) - print bar.date, bar.time + print(bar.date, bar.time) - print u'插入完毕,耗时:%s' % (time()-start) + print(u'插入完毕,耗时:%s' % (time()-start)) #---------------------------------------------------------------------- def loadTbPlusCsv(fileName, dbName, symbol): """将TB极速版导出的csv格式的历史分钟数据插入到Mongo数据库中""" start = time() - print u'开始读取CSV文件%s中的数据插入到%s的%s中' %(fileName, dbName, symbol) + print(u'开始读取CSV文件%s中的数据插入到%s的%s中' %(fileName, dbName, symbol)) # 锁定集合,并创建索引 client = pymongo.MongoClient(globalSetting['mongoHost'], globalSetting['mongoPort']) @@ -167,9 +168,9 @@ def loadTbPlusCsv(fileName, dbName, symbol): bar.openInterest = d[7] flt = {'datetime': bar.datetime} collection.update_one(flt, {'$set':bar.__dict__}, upsert=True) - print bar.date, bar.time + print(bar.date, bar.time) - print u'插入完毕,耗时:%s' % (time()-start) + print(u'插入完毕,耗时:%s' % (time()-start)) #---------------------------------------------------------------------- """ @@ -186,7 +187,7 @@ def loadTdxCsv(fileName, dbName, symbol): """将通达信导出的csv格式的历史分钟数据插入到Mongo数据库中""" start = time() date_correct = "" - print u'开始读取CSV文件%s中的数据插入到%s的%s中' %(fileName, dbName, symbol) + print(u'开始读取CSV文件%s中的数据插入到%s的%s中' %(fileName, dbName, symbol)) # 锁定集合,并创建索引 client = pymongo.MongoClient(globalSetting['mongoHost'], globalSetting['mongoPort']) @@ -218,7 +219,7 @@ def loadTdxCsv(fileName, dbName, symbol): flt = {'datetime': bar.datetime} collection.update_one(flt, {'$set':bar.__dict__}, upsert=True) - print u'插入完毕,耗时:%s' % (time()-start) + print(u'插入完毕,耗时:%s' % (time()-start)) #---------------------------------------------------------------------- """ @@ -231,7 +232,7 @@ def loadTdxLc1(fileName, dbName, symbol): """将通达信导出的lc1格式的历史分钟数据插入到Mongo数据库中""" start = time() - print u'开始读取通达信Lc1文件%s中的数据插入到%s的%s中' %(fileName, dbName, symbol) + print(u'开始读取通达信Lc1文件%s中的数据插入到%s的%s中' %(fileName, dbName, symbol)) # 锁定集合,并创建索引 client = pymongo.MongoClient(globalSetting['mongoHost'], globalSetting['mongoPort']) @@ -267,13 +268,13 @@ def loadTdxLc1(fileName, dbName, symbol): flt = {'datetime': bar.datetime} collection.update_one(flt, {'$set':bar.__dict__}, upsert=True) - print u'插入完毕,耗时:%s' % (time()-start) + print(u'插入完毕,耗时:%s' % (time()-start)) #---------------------------------------------------------------------- def loadOKEXCsv(fileName, dbName, symbol): """将OKEX导出的csv格式的历史分钟数据插入到Mongo数据库中""" start = time() - print u'开始读取CSV文件%s中的数据插入到%s的%s中' %(fileName, dbName, symbol) + print(u'开始读取CSV文件%s中的数据插入到%s的%s中' %(fileName, dbName, symbol)) # 锁定集合,并创建索引 client = pymongo.MongoClient(globalSetting['mongoHost'], globalSetting['mongoPort']) @@ -304,5 +305,5 @@ def loadOKEXCsv(fileName, dbName, symbol): collection.update_one(flt, {'$set':bar.__dict__}, upsert=True) print('%s \t %s' % (bar.date, bar.time)) - print u'插入完毕,耗时:%s' % (time()-start) + print(u'插入完毕,耗时:%s' % (time()-start)) diff --git a/vnpy/trader/app/ctaStrategy/language/__init__.py b/vnpy/trader/app/ctaStrategy/language/__init__.py index f5c4ca18..e402c4f5 100644 --- a/vnpy/trader/app/ctaStrategy/language/__init__.py +++ b/vnpy/trader/app/ctaStrategy/language/__init__.py @@ -1,5 +1,6 @@ # encoding: UTF-8 +from __future__ import absolute_import import json import os import traceback @@ -10,4 +11,4 @@ from .chinese import text # 是否要使用英文 from vnpy.trader.vtGlobal import globalSetting if globalSetting['language'] == 'english': - from english import text + from .english import text diff --git a/vnpy/trader/app/ctaStrategy/strategy/__init__.py b/vnpy/trader/app/ctaStrategy/strategy/__init__.py index 7a14afa9..5b10bc02 100644 --- a/vnpy/trader/app/ctaStrategy/strategy/__init__.py +++ b/vnpy/trader/app/ctaStrategy/strategy/__init__.py @@ -3,6 +3,7 @@ ''' 动态载入所有的策略类 ''' +from __future__ import print_function import os import importlib diff --git a/vnpy/trader/app/dataRecorder/__init__.py b/vnpy/trader/app/dataRecorder/__init__.py index 84020dfe..8d3ddf78 100644 --- a/vnpy/trader/app/dataRecorder/__init__.py +++ b/vnpy/trader/app/dataRecorder/__init__.py @@ -1,7 +1,8 @@ # encoding: UTF-8 -from drEngine import DrEngine -from uiDrWidget import DrEngineManager +from __future__ import absolute_import +from .drEngine import DrEngine +from .uiDrWidget import DrEngineManager appName = 'DataRecorder' appDisplayName = u'行情记录' diff --git a/vnpy/trader/app/dataRecorder/language/__init__.py b/vnpy/trader/app/dataRecorder/language/__init__.py index ecf72358..09d8fba7 100644 --- a/vnpy/trader/app/dataRecorder/language/__init__.py +++ b/vnpy/trader/app/dataRecorder/language/__init__.py @@ -1,13 +1,14 @@ # encoding: UTF-8 +from __future__ import absolute_import import json import os import traceback # 默认设置 -from chinese import text +from .chinese import text # 是否要使用英文 from vnpy.trader.vtGlobal import globalSetting if globalSetting['language'] == 'english': - from english import text \ No newline at end of file + from .english import text \ No newline at end of file diff --git a/vnpy/trader/app/jaqsService/__init__.py b/vnpy/trader/app/jaqsService/__init__.py index f0bf3d26..4f7abcdd 100644 --- a/vnpy/trader/app/jaqsService/__init__.py +++ b/vnpy/trader/app/jaqsService/__init__.py @@ -1,7 +1,8 @@ # encoding: UTF-8 -from jsEngine import JsEngine -from uiJsWidget import JsEngineManager +from __future__ import absolute_import +from .jsEngine import JsEngine +from .uiJsWidget import JsEngineManager appName = 'JaqsService' appDisplayName = u'Jaqs服务' diff --git a/vnpy/trader/app/jaqsService/jrpc_server.py b/vnpy/trader/app/jaqsService/jrpc_server.py index d49037c1..a80edda3 100644 --- a/vnpy/trader/app/jaqsService/jrpc_server.py +++ b/vnpy/trader/app/jaqsService/jrpc_server.py @@ -1,3 +1,4 @@ +from __future__ import print_function import zmq import Queue import threading @@ -108,11 +109,11 @@ class JRpcServer : #client_addr_map[client_id] = identity self._on_data_arrived(identity, data) - except zmq.error.Again, e: + except zmq.error.Again as e: #print "RECV timeout: ", e pass - except Exception, e: - print("_recv_run:", e) + except Exception as e: + print(("_recv_run:", e)) def _callback_run(self): while not self._should_close: @@ -120,12 +121,12 @@ class JRpcServer : r = self._callback_queue.get(timeout = 1) if r : r() - except Queue.Empty, e: + except Queue.Empty as e: pass - except Exception, e: + except Exception as e: traceback.print_exc(e) - print "_callback_run", type(e), e + print("_callback_run", type(e), e) def _async_call(self, func): self._callback_queue.put( func ) @@ -164,12 +165,12 @@ class JRpcServer : #print "RECV", msg if not msg: - print "wrong message format" + print("wrong message format") return - method = msg['method'] if msg.has_key('method') else None + method = msg['method'] if 'method' in msg else None - call_id = msg['id'] if msg.has_key('id') and msg['id'] else None + call_id = msg['id'] if 'id' in msg and msg['id'] else None if call_id and method: if method == ".sys.heartbeat": @@ -183,8 +184,8 @@ class JRpcServer : if self.on_call : self._async_call( lambda : self.on_call(identity, msg)) - except Exception, e: - print( "_on_data_arrived:", e) + except Exception as e: + print(( "_on_data_arrived:", e)) pass diff --git a/vnpy/trader/app/jaqsService/jsEngine.py b/vnpy/trader/app/jaqsService/jsEngine.py index 8a072b57..15c6265c 100644 --- a/vnpy/trader/app/jaqsService/jsEngine.py +++ b/vnpy/trader/app/jaqsService/jsEngine.py @@ -1,9 +1,10 @@ # encoding: UTF-8 +from __future__ import absolute_import import json from collections import defaultdict -import jrpc_server +from . import jrpc_server from vnpy.event import Event from vnpy.trader.vtFunction import getJsonPath diff --git a/vnpy/trader/app/jaqsService/service.py b/vnpy/trader/app/jaqsService/service.py index 39bf6485..38cbae97 100644 --- a/vnpy/trader/app/jaqsService/service.py +++ b/vnpy/trader/app/jaqsService/service.py @@ -1,6 +1,8 @@ # -*- coding: utf-8 -*- -import jrpc_server +from __future__ import print_function +from __future__ import absolute_import +from . import jrpc_server import time import pandas as pd from qdata.database import DatabaseConn @@ -15,7 +17,7 @@ db = None def on_call(client_id, req): if req['method'] != '.sys.heartbeat': - print "on_call", req + print("on_call", req) if req['method'] == 'auth.login': server.send_rsp(client_id, req, result = { "username" : "fixme", "name": "fixme" }) @@ -25,7 +27,7 @@ def on_call(client_id, req): server.send_rsp(client_id, req, error=[-1, "unknown method"]) return - if not req.has_key('params'): + if 'params' not in req: server.send_rsp(client_id, req, error=[-1, "missing params"]) return @@ -55,7 +57,7 @@ def run(): server = jrpc_server.JRpcServer() server.on_call = on_call addr = "tcp://%s:%s"%(st.HOST, st.PORT) - print "listen at " + addr + print("listen at " + addr) server.listen(addr) while True: diff --git a/vnpy/trader/app/optionMaster/omDate.py b/vnpy/trader/app/optionMaster/omDate.py index 1211c166..795f3068 100644 --- a/vnpy/trader/app/optionMaster/omDate.py +++ b/vnpy/trader/app/optionMaster/omDate.py @@ -159,9 +159,11 @@ class CalendarManager(QtWidgets.QWidget): #---------------------------------------------------------------------- def runCalendarEditor(): """运行日历编辑器""" - reload(sys) - sys.setdefaultencoding('utf8') - + try: # Python 2 + reload(sys) + sys.setdefaultencoding('utf8') + except NameError: # Python 3 + pass app = QtWidgets.QApplication(sys.argv) app.setFont(QtGui.QFont(u'微软雅黑', 12)) @@ -249,4 +251,4 @@ def getTimeToMaturity(expiryDate): if __name__ == '__main__': - runCalendarEditor() \ No newline at end of file + runCalendarEditor() diff --git a/vnpy/trader/app/optionMaster/strategy/__init__.py b/vnpy/trader/app/optionMaster/strategy/__init__.py index 5e349490..0035381d 100644 --- a/vnpy/trader/app/optionMaster/strategy/__init__.py +++ b/vnpy/trader/app/optionMaster/strategy/__init__.py @@ -3,6 +3,7 @@ ''' 动态载入所有的策略类 ''' +from __future__ import print_function import os import importlib diff --git a/vnpy/trader/app/optionMaster/uiOmManualTrader.py b/vnpy/trader/app/optionMaster/uiOmManualTrader.py index 1652be06..d29743f9 100644 --- a/vnpy/trader/app/optionMaster/uiOmManualTrader.py +++ b/vnpy/trader/app/optionMaster/uiOmManualTrader.py @@ -1,5 +1,6 @@ # encoding: UTF-8 +from __future__ import absolute_import from vnpy.event import Event from vnpy.trader.vtConstant import DIRECTION_LONG, DIRECTION_SHORT, OFFSET_OPEN, OFFSET_CLOSE, PRICETYPE_LIMITPRICE @@ -7,7 +8,7 @@ from vnpy.trader.vtObject import VtOrderReq from vnpy.trader.vtEvent import EVENT_TICK, EVENT_TRADE from vnpy.trader.uiBasicWidget import WorkingOrderMonitor, PositionMonitor -from uiOmBase import * +from .uiOmBase import * diff --git a/vnpy/trader/app/optionMaster/uiOmWidget.py b/vnpy/trader/app/optionMaster/uiOmWidget.py index ea770808..956a6372 100644 --- a/vnpy/trader/app/optionMaster/uiOmWidget.py +++ b/vnpy/trader/app/optionMaster/uiOmWidget.py @@ -5,6 +5,8 @@ from __future__ import division import os from datetime import datetime +from six import text_type + from vnpy.event import Event from .omBase import EVENT_OM_LOG @@ -113,7 +115,7 @@ class OmManager(QtWidgets.QWidget): def initOmEngine(self): """初始化引擎""" path = os.getcwd() - fileName = unicode(self.comboSettingFile.currentText()) + fileName = text_type(self.comboSettingFile.currentText()) fileName = os.path.join(path, fileName) result = self.omEngine.initEngine(fileName) diff --git a/vnpy/trader/app/riskManager/__init__.py b/vnpy/trader/app/riskManager/__init__.py index 04e66bc5..daa917c0 100644 --- a/vnpy/trader/app/riskManager/__init__.py +++ b/vnpy/trader/app/riskManager/__init__.py @@ -1,5 +1,6 @@ # encoding: UTF-8 +from __future__ import absolute_import from .rmEngine import RmEngine from .uiRmWidget import RmEngineManager @@ -7,4 +8,4 @@ appName = 'RiskManager' appDisplayName = u'风险管理' appEngine = RmEngine appWidget = RmEngineManager -appIco = 'rm.ico' \ No newline at end of file +appIco = 'rm.ico' diff --git a/vnpy/trader/app/riskManager/language/__init__.py b/vnpy/trader/app/riskManager/language/__init__.py index f5c4ca18..e402c4f5 100644 --- a/vnpy/trader/app/riskManager/language/__init__.py +++ b/vnpy/trader/app/riskManager/language/__init__.py @@ -1,5 +1,6 @@ # encoding: UTF-8 +from __future__ import absolute_import import json import os import traceback @@ -10,4 +11,4 @@ from .chinese import text # 是否要使用英文 from vnpy.trader.vtGlobal import globalSetting if globalSetting['language'] == 'english': - from english import text + from .english import text diff --git a/vnpy/trader/app/spreadTrading/uiStWidget.py b/vnpy/trader/app/spreadTrading/uiStWidget.py index 7f505c8b..76b932fd 100644 --- a/vnpy/trader/app/spreadTrading/uiStWidget.py +++ b/vnpy/trader/app/spreadTrading/uiStWidget.py @@ -2,6 +2,8 @@ from collections import OrderedDict +from six import text_type + from vnpy.event import Event from vnpy.trader.uiQt import QtWidgets, QtCore from vnpy.trader.uiBasicWidget import (BasicMonitor, BasicCell, PnlCell, @@ -338,7 +340,7 @@ class StModeComboBox(QtWidgets.QComboBox): #---------------------------------------------------------------------- def setMode(self): """设置模式""" - mode = unicode(self.currentText()) + mode = text_type(self.currentText()) self.algoEngine.setAlgoMode(self.spreadName, mode) #---------------------------------------------------------------------- @@ -582,4 +584,4 @@ class StManager(QtWidgets.QWidget): - \ No newline at end of file +