From 08253b087b0f7598f7d771cbe676e7d3710a983c Mon Sep 17 00:00:00 2001 From: "vn.py" Date: Sat, 9 Jun 2018 18:55:04 +0800 Subject: [PATCH] =?UTF-8?q?[Add]=E6=96=B0=E5=A2=9E=E7=AE=97=E6=B3=95?= =?UTF-8?q?=E9=85=8D=E7=BD=AE=E4=BF=9D=E5=AD=98=E5=92=8C=E5=8A=A0=E8=BD=BD?= =?UTF-8?q?=E5=8A=9F=E8=83=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vnpy/trader/app/algoTrading/algoEngine.py | 49 +++++++++++++++++++++-- 1 file changed, 46 insertions(+), 3 deletions(-) diff --git a/vnpy/trader/app/algoTrading/algoEngine.py b/vnpy/trader/app/algoTrading/algoEngine.py index e6ac3617..5b69fb23 100644 --- a/vnpy/trader/app/algoTrading/algoEngine.py +++ b/vnpy/trader/app/algoTrading/algoEngine.py @@ -18,10 +18,16 @@ from .twapAlgo import TwapAlgo EVENT_ALGO_LOG = 'eAlgoLog' # 算法日志事件 EVENT_ALGO_PARAM = 'eAlgoParam' # 算法参数事件 EVENT_ALGO_VAR = 'eAlgoVar' # 算法变量事件 +EVENT_ALGO_SETTING = 'eAlgoSetting' # 算法配置事件 + + +ALGOTRADING_DB_NAME = 'VnTrader_AlgoTrading_Db' + +SETTING_COLLECTION_NAME = 'AlgoSetting' ALGO_DICT = { - TwapAlgo.name: TwapAlgo + TwapAlgo.templateName: TwapAlgo } @@ -39,6 +45,7 @@ class AlgoEngine(object): self.algoDict = {} # algoName:algo self.orderAlgoDict = {} # vtOrderID:algo self.symbolAlgoDict = {} # vtSymbol:algo set + self.settingDict = {} # settingName:setting self.registerEvent() @@ -90,9 +97,10 @@ class AlgoEngine(object): algo.updateTimer() #---------------------------------------------------------------------- - def addAlgo(self, name, algoSetting): + def addAlgo(self, algoSetting): """新增算法""" - algoClass = ALGO_DICT[name] + templateName = algoSetting['templateName'] + algoClass = ALGO_DICT[templateName] algo = algoClass.new(self, algoSetting) self.algoDict[algo.algoName] = algo return algo.algoName @@ -218,4 +226,39 @@ class AlgoEngine(object): return return tick + + #---------------------------------------------------------------------- + def saveAlgoSetting(self, settingName, algoSetting): + """保存算法配置""" + algoSetting['settingName'] = settingName + self.settingDict[settingName] = algoSetting + + self.mainEngine.dbUpdate(ALGOTRADING_DB_NAME, + SETTING_COLLECTION_NAME, + algoSetting, + {'settingName': settingName}, + True) + + self.putSettingEvent(settingName, algoSetting) + + #---------------------------------------------------------------------- + def loadAlgoSetting(self): + """加载算法配置""" + l = self.mainEngine.dbQuery(ALGOTRADING_DB_NAME, + SETTING_COLLECTION_NAME, + {}, + 'templateName') + for algoSetting in l: + settingName = algoSetting['settingName'] + self.settingDict[settingName] = algoSetting + self.putSettingEvent(settingName, algoSetting) + + #---------------------------------------------------------------------- + def putSettingEvent(self, settingName, algoSetting): + """发出算法配置更新事件""" + algoSetting['settingName'] = settingName + + event = Event(EVENT_ALGO_SETTING) + event.dict_['data'] = algoSetting + self.eventEngine.put(event)