Exemplo n.º 1
0
 def _reqData(self, code, data=''):
     event = Event({
         'EventCode': code,
         'StrategyId': self._strategyId,
         'Data': data,
     })
     self.sendEvent2Engine(event)
Exemplo n.º 2
0
    def _onTradeOrder(self, apiEvent):
        '''
        交易委托信息发生变化时,更新交易模型信息
        :param apiEvent: 引擎返回事件
        :return: None
        '''
        if str(apiEvent.getStrategyId()) != str(self._strategyId):
            return

        self._dataModel._trdModel.updateOrderData(apiEvent)

        # 更新本地订单信息
        dataList = apiEvent.getData()
        eSessionId = apiEvent.getESessionId()
        for data in dataList:
            self.updateLocalOrder(eSessionId, data)

        if not self._dataModel.getConfigModel().hasTradeTrigger() or len(
                dataList) == 0:
            return

        if apiEvent.getEventCode() == EEQU_SRVEVENT_TRADE_ORDER and str(
                apiEvent.getStrategyId()) == str(self._strategyId):
            tradeTriggerEvent = Event({
                "EventCode": ST_TRIGGER_TRADE,
                "ContractNo": dataList[0]["Cont"],
                "Data": {
                    "TriggerType": "Trade",
                    "Data": apiEvent.getData()
                }
            })

            # 交易触发
            self.sendTriggerQueue(tradeTriggerEvent)
Exemplo n.º 3
0
    def _onTradeOrder(self, apiEvent):
        '''
        交易委托信息发生变化时,更新交易模型信息
        :param apiEvent: 引擎返回事件
        :return: None
        '''
        self._dataModel._trdModel.updateOrderData(apiEvent)

        # 更新本地订单信息
        dataList = apiEvent.getData()
        for data in dataList:
            sessionId = data['SessionId']
            if sessionId in self._sesnId2eSesnIdMap:
                self._eSesnId2orderNoMap[self._sesnId2eSesnIdMap[sessionId]] = data['OrderNo']

        if not self._dataModel.getConfigModel().hasTradeTrigger():
            return

        # print(apiEvent.getEventCode(), apiEvent.getStrategyId())
        if apiEvent.getEventCode() == EEQU_SRVEVENT_TRADE_ORDER and str(apiEvent.getStrategyId()) == str(self._strategyId):
            # print("交易触发===================11111")
            tradeTriggerEvent = Event({
                "EventCode":ST_TRIGGER_TRADE,
                "Data":{
                    "TriggerType":"Trade",
                    "Data": apiEvent.getData()
                }
            })

            # 交易触发
            self.sendTriggerQueue(tradeTriggerEvent)
Exemplo n.º 4
0
    def _triggerTime(self):
        '''检查定时触发'''
        if not self._dataModel.getConfigModel().hasTimerTrigger(
        ) or not self.isRealTimeStatus():
            return

        nowTime = datetime.now()
        for i, timeSecond in enumerate(self._dataModel.getConfigTimer()):
            specifiedTime = datetime.strptime(timeSecond, "%H%M%S")
            if 0 <= (nowTime - specifiedTime
                     ).seconds < 1 and not self._isTimeTriggered[i]:
                self._isTimeTriggered[i] = True
                key = self._dataModel.getConfigModel().getKLineShowInfoSimple()
                dateTimeStamp, tradeDate, lv1Data = self.getTriggerTimeAndData(
                    key[0])
                event = Event({
                    "EventCode": ST_TRIGGER_TIMER,
                    "ContractNo": None,
                    "KLineType": None,
                    "KLineSlice": None,
                    "Data": {
                        "TradeDate": tradeDate,
                        "DateTimeStamp": dateTimeStamp,
                        "Data": timeSecond
                    }
                })
                self._triggerQueue.put(event)
Exemplo n.º 5
0
    def _onStrategyRemove(self, event):
        self._isSt2EgQueueEffective = False
        self._strategyState = StrategyStatusExit
        config = None if self._dataModel is None else self._dataModel.getConfigData(
        )
        responseEvent = Event({
            "EventCode": EV_EG2UI_STRATEGY_STATUS,
            "StrategyId": self._strategyId,
            "Data": {
                "Status": ST_STATUS_REMOVE,
                "Config": config,
                "Pid": os.getpid(),
                "Path": self._filePath,
                "StrategyName": self._strategyName,
            }
        })
        self.sendEvent2UI(responseEvent)
        self.sendEvent2EngineForce(responseEvent)
        self.logger.info(
            f"策略已经将删除完成信号发送到UI和engine,策略{self._strategyId}, {EV_EG2UI_STRATEGY_STATUS}"
        )

        # 保证该进程is_alive, 使得队列可用
        while True:
            time.sleep(2)
Exemplo n.º 6
0
    def _onStrategyQuit(self, event=None, status=ST_STATUS_QUIT):
        try:
            #回调退出函数
            if hasattr(self._userModule, 'exit_callback'):
                self._userModule.exit_callback(self._context)
        except Exception as e:
            self.logger.error('onStrategyStop callback error: %s' % str(e))

        self._isSt2EgQueueEffective = False
        self._strategyState = StrategyStatusExit
        config = None if self._dataModel is None else self._dataModel.getConfigData(
        )
        result = None
        if self._dataModel and self._dataModel.getCalcCenter():
            result = self._dataModel.getCalcCenter().testResult()
        quitEvent = Event({
            "EventCode": EV_EG2UI_STRATEGY_STATUS,
            "StrategyId": self._strategyId,
            "Data": {
                "Status": status,
                "Config": config,
                "Pid": os.getpid(),
                "Path": self._filePath,
                "StrategyName": self._strategyName,
                "Result": result
            }
        })
        self.sendEvent2UI(quitEvent)
        self.sendEvent2EngineForce(quitEvent)
        self.logger.info(f"策略已经将停止完成信号发送到UI和engine,策略{self._strategyId}")
        # 保证该进程is_alive, 使得队列可用
        while True:
            time.sleep(2)
Exemplo n.º 7
0
    def _snapShotTrigger(self, event):
        # 未选择即时行情触发
        # if not self._dataModel.getConfigModel().hasSnapShotTrigger() or not self.isRealTimeStatus():
        #     return
        #
        # # 该合约不触发
        # if event.getContractNo() not in self._dataModel.getConfigModel().getTriggerContract():
        #     return

        if not self.isRealTimeStatus():
            return

        # 对应字段没有变化不触发
        data = event.getData()
        if len(data) == 0 or (not set(data[0]["FieldData"].keys())
                              & set([4, 11, 17, 18, 19, 20])):
            # 4:最新价 11:成交量 17:最优买价 18:买量 19:最优卖价 20:卖量
            return

        dateTimeStamp, tradeDate, lv1Data = self.getTriggerTimeAndData(
            event.getContractNo())
        event = Event({
            "EventCode": ST_TRIGGER_SANPSHOT_FILL,
            "ContractNo": event.getContractNo(),
            "KLineType": None,
            "KLineSlice": None,
            "Data": {
                "Data": lv1Data,
                "DateTimeStamp": dateTimeStamp,
                "TradeDate": tradeDate,
                "IsLastPriceChanged": 4 in data[0]["FieldData"],  # 最新价是否改变
            }
        })
        self.sendTriggerQueue(event)
Exemplo n.º 8
0
    def _tradeTriggerMatch(self, apiEvent):
        if not self._dataModel.getConfigModel().hasTradeTrigger() or len(
                apiEvent.getData()) == 0:
            return

        if apiEvent.getEventCode() == EEQU_SRVEVENT_TRADE_MATCH and str(
                apiEvent.getStrategyId()) == str(self._strategyId):
            contractNo = apiEvent.getData()[0]["Cont"]
            dateTimeStamp, tradeDate, lv1Data = self.getTriggerTimeAndData(
                contractNo)

            tradeTriggerEvent = Event({
                "EventCode": ST_TRIGGER_TRADE_MATCH,
                "ContractNo": contractNo,
                "KLineType": None,
                "KLineSlice": None,
                "Data": {
                    "Data": apiEvent.getData()[0],
                    "DateTimeStamp": dateTimeStamp,
                    "TradeDate": tradeDate,
                }
            })

            # 交易触发
            self.sendTriggerQueue(tradeTriggerEvent)
Exemplo n.º 9
0
    def _triggerCycle(self):
        '''检查周期性触发'''
        if not self._dataModel.getConfigModel().hasCycleTrigger():
            return

        if not self.isRealTimeStatus():
            return

        nowTime = datetime.now()
        cycle = self._dataModel.getConfigCycle()
        if (nowTime - self._nowTime).total_seconds() * 1000 > cycle:
            self._nowTime = nowTime
            key = self._dataModel.getConfigModel().getKLineShowInfoSimple()
            dateTimeStamp, tradeDate, lv1Data = self.getTriggerTimeAndData(
                key[0])
            event = Event({
                "EventCode": ST_TRIGGER_CYCLE,
                "ContractNo": None,
                "KLineType": None,
                "KLineSlice": None,
                "Data": {
                    "TradeDate": tradeDate,
                    "DateTimeStamp": dateTimeStamp,
                    "Data": None,
                }
            })
            self._triggerQueue.put(event)
Exemplo n.º 10
0
 def _onStrategyQuit(self, event=None, status=ST_STATUS_QUIT):
     self._isSt2EgQueueEffective = False
     self._strategyState = StrategyStatusExit
     config = None if self._dataModel is None else self._dataModel.getConfigData()
     result = None
     if self._dataModel and self._dataModel.getCalcCenter():
         result = self._dataModel.getCalcCenter().testResult()
     quitEvent = Event({
         "EventCode": EV_EG2UI_STRATEGY_STATUS,
         "StrategyId": self._strategyId,
         "Data":{
             "Status":status,
             "Config":config,
             "Pid":os.getpid(),
             "Path":self._filePath,
             "StrategyName": self._strategyName,
             "Result":result
         }
     })
     self.sendEvent2UI(quitEvent)
     self.sendEvent2EngineForce(quitEvent)
     self.logger.info(f"策略已经将停止完成信号发送到UI和engine,策略{self._strategyId}")
     # 保证该进程is_alive, 使得队列可用
     while True:
         time.sleep(2)
Exemplo n.º 11
0
 def _onReport(self, event):
     data = self._dataModel.getCalcCenter().testResult()
     responseEvent = Event({
         "EventCode": EV_EG2UI_REPORT_RESPONSE,
         "StrategyId": self._strategyId,
         "Data": data
     })
     self.sendEvent2Engine(responseEvent)
Exemplo n.º 12
0
 def resetSyncPosConf(self, config):
     msg = {
         "EventSrc": EEQU_EVSRC_UI,
         "EventCode": EV_UI2EG_SYNCPOS_CONF,
         "Data": config
     }
     event = Event(msg)
     self._ui2egQueue.put(event)
     self._logger.info(f"[UI]: Reset position setting send completely!")
Exemplo n.º 13
0
 def _onStrategyPause(self, event):
     self._strategyState = StrategyStatusPause
     responseEvent = Event({
         "EventCode": EV_EG2UI_STRATEGY_STATUS,
         "StrategyId": self._strategyId,
         "Data":{
             "Status":ST_STATUS_PAUSE
         }
     })
     self.sendEvent2Engine(responseEvent)
Exemplo n.º 14
0
 def _send2UIStatus(self, status):
     '''通知界面策略运行状态'''
     event = Event({
         "StrategyId": self._strategyId,
         "EventCode": EV_EG2UI_STRATEGY_STATUS,
         "Data": {
             'Status': status
         }
     })
     self.sendEvent2UI(event)
Exemplo n.º 15
0
 def _exit(self, errorCode, errorText):
     event = Event({
         "EventCode": EV_EG2UI_CHECK_RESULT,
         "StrategyId": self._strategyId,
         "Data": {
             "ErrorCode": errorCode,
             "ErrorText": errorText,
         }
     })
     self.sendEvent2EngineForce(event)
     self._onStrategyQuit(None, ST_STATUS_EXCEPTION)
Exemplo n.º 16
0
 def _onStrategyResume(self, event):
     self._strategyState = StrategyStatusRunning
     status = ST_STATUS_CONTINUES if self.isRealTimeStatus() else ST_STATUS_HISTORY
     responseEvent = Event({
         "EventCode": EV_EG2UI_STRATEGY_STATUS,
         "StrategyId": self._strategyId,
         "Data": {
             "Status": status
         }
     })
     self.sendEvent2Engine(responseEvent)
Exemplo n.º 17
0
    def deleteOrderByOrderId(self, orderId):
        aOrder = {
            "OrderId": orderId,
        }
        aOrderEvent = Event({
            "EventCode": EV_ST2EG_ACTUAL_CANCEL_ORDER,
            "StrategyId": self.getStrategyId(),
            "Data": aOrder
        })
        self.sendEvent2Engine(aOrderEvent)

        return True
Exemplo n.º 18
0
 def strategyParamRestart(self, strategyId, config):
     """属性设置"""
     msg = {
         "EventSrc"  :   EEQU_EVSRC_UI,
         "EventCode" :   EV_UI2EG_STRATEGY_RESTART,
         "SessionId" :   0,
         "StrategyId":   strategyId,
         "Data"      :   {"Config": config}
     }
     event = Event(msg)
     self._ui2egQueue.put(event)
     self._logger.info(f"[UI][{strategyId}]: Strategy Param setting send completely!")
Exemplo n.º 19
0
    def strategyRemove(self, strategyId):
        """移除策略"""
        msg = {
            "EventSrc": EEQU_EVSRC_UI,
            "EventCode": EV_UI2EG_STRATEGY_REMOVE,
            "SessionId": 0,
            "StrategyId": strategyId,
            "Data": {}
        }

        event = Event(msg)
        self._ui2egQueue.put(event)
Exemplo n.º 20
0
    def strategySignal(self, strategyId):
        """策略信号和指标图"""
        msg = {
            "EventSrc": EEQU_EVSRC_UI,
            "EventCode": EV_UI2EG_STRATEGY_FIGURE,
            "SessionId": 0,
            "StrategyId": strategyId,
            "Data": {}
        }

        event = Event(msg)
        self._ui2egQueue.put(event)
Exemplo n.º 21
0
    def strategyQuit(self, strategyId):
        """策略停止运行"""
        msg = {
            "EventSrc": EEQU_EVSRC_UI,
            "EventCode": EV_UI2EG_STRATEGY_QUIT,
            "SessionId": 0,
            "StrategyId": strategyId,
            "Data": {}
        }

        event = Event(msg)
        self._ui2egQueue.put(event)
Exemplo n.º 22
0
 def _onReport(self, event):
     data = self._dataModel.getCalcCenter().testResult()
     responseEvent = Event({
         "EventCode":EV_EG2UI_REPORT_RESPONSE,
         "StrategyId":self._strategyId,
         "Data":{
             "Result":data,
             "BeginTradeDate":self._dataModel.getHisQuoteModel().getBeginDate(),
             "EndTradeDate":self._dataModel.getHisQuoteModel().getEndDate(),
         }
     })
     self.sendEvent2Engine(responseEvent)
Exemplo n.º 23
0
    def strategyResume(self, strategyId):
        """策略运行恢复"""
        msg = {
            "EventSrc": EEQU_EVSRC_UI,
            "EventCode": EV_UI2EG_STRATEGY_RESUME,
            "SessionId": 0,
            "Data": strategyId
        }

        event = Event(msg)
        self._ui2egQueue.put(event)
        print("恢复事件已发送")
Exemplo n.º 24
0
 def _onEquantExit(self, event):
     self._strategyState = StrategyStatusExit
     responseEvent = Event({
         "EventCode": EV_EG2UI_STRATEGY_STATUS,
         "StrategyId": self._strategyId,
         "Data": {
             "Status": event.getEventCode(),
             "Config": self._dataModel.getConfigData(),
             "Pid": os.getpid(),
             "Path": self._filePath,
         }
     })
     self.sendEvent2Engine(responseEvent)
Exemplo n.º 25
0
    def strategyQuit(self, strategyId):
        """策略停止运行"""
        msg = {
            "EventSrc"    :   EEQU_EVSRC_UI,
            "EventCode"   :   EV_UI2EG_STRATEGY_QUIT,
            "SessionId"   :   0,
            "StrategyId"  :   strategyId,
            "Data"        :   {}
        }

        event = Event(msg)
        self._ui2egQueue.put(event)
        self._logger.info(f"[UI][{strategyId}]: Strategy quit request send completely")
Exemplo n.º 26
0
    def strategyRemove(self, strategyId):
        """移除策略"""
        msg = {
            "EventSrc": EEQU_EVSRC_UI,
            "EventCode": EV_UI2EG_STRATEGY_REMOVE,
            "SessionId": 0,
            "StrategyId": strategyId,
            "Data": {}
        }

        event = Event(msg)
        self._ui2egQueue.put(event)
        self._logger.info(f"[UI][{strategyId}]: Strategy remove request send completely!")
Exemplo n.º 27
0
    def strategySignal(self, strategyId):
        """策略信号和指标图"""
        msg = {
            "EventSrc"     :    EEQU_EVSRC_UI,
            "EventCode"    :    EV_UI2EG_STRATEGY_FIGURE,
            "SessionId"    :    0,
            "StrategyId"   :    strategyId,
            "Data"         :    {}
        }

        event = Event(msg)
        self._ui2egQueue.put(event)
        self._logger.info(f"[UI][{strategyId}]: Strategy Signal and index figure request send completely!")
Exemplo n.º 28
0
    def strategyResume(self, strategyId):
        """策略运行恢复"""
        msg = {
            "EventSrc"    :   EEQU_EVSRC_UI,
            "EventCode"   :   EV_UI2EG_STRATEGY_RESUME,
            "SessionId"   :   0,
            "StrategyId"  :   strategyId,
            "Data"        :   {}
        }

        event = Event(msg)
        self._ui2egQueue.put(event)
        self._logger.info(f"[UI]{strategyId}: Strategy resume request send completely!")
Exemplo n.º 29
0
    def strategyPause(self, strategyId):
        """策略暂停事件"""
        msg = {
            "EventSrc": EEQU_EVSRC_UI,
            "EventCode": EV_UI2EG_STRATEGY_PAUSE,
            "StrategyId": strategyId,
            "SessionId": 0,
            "Data": {}
        }

        event = Event(msg)

        self._ui2egQueue.put(event)
Exemplo n.º 30
0
 def _onStrategyQuit(self, event):
     self._strategyState = StrategyStatusExit
     quitEvent = Event({
         "EventCode": EV_EG2UI_STRATEGY_STATUS,
         "StrategyId": self._strategyId,
         "Data":{
             "Status":ST_STATUS_QUIT,
             "Config":self._dataModel.getConfigData(),
             "Pid":os.getpid(),
             "Path":self._filePath,
         }
     })
     self.sendEvent2Engine(quitEvent)