示例#1
0
 def sendOrderHistorySyncEvent(self, exchange, fSymbol, tSymbol, limit,
                               ratio):
     try:
         # 构造事件对象
         TEMP_EVENT = json.loads(
             ORDER_HISTORY_SYNC_EVENT.substitute(
                 id=self._engine.getEventID(),
                 timeStamp=utcnow_timestamp(),
                 exchange=exchange,
                 fSymbol=fSymbol,
                 tSymbol=tSymbol,
                 limit=limit,
                 ratio=ratio))
         event = Event(TEMP_EVENT)
         self._logger.debug(
             "src.core.engine.sender.Sender.sendOrderHistorySyncEvent: " +
             json.dumps(TEMP_EVENT))
         # 发送事件
         self._engine.sendEvent(event)
         # 返回参数
         return event.id
     except Exception as err:
         errStr = "src.core.engine.sender.Sender.sendOrderHistorySyncEvent: %s" % EngineException(
             err)
         raise EngineException(errStr)
示例#2
0
 def sendListenMarketKlineEvent(self, exchange, fSymbol, tSymbol, interval,
                                start, end):
     try:
         # 构造事件对象
         TEMP_EVENT = json.loads(
             LISTEN_MARKET_KLINE_EVENT.substitute(
                 id=self._engine.getEventID(),
                 timeStamp=utcnow_timestamp(),
                 exchange=exchange,
                 fSymbol=fSymbol,
                 tSymbol=tSymbol,
                 interval=interval,
                 start=start,
                 end=end))
         event = Event(TEMP_EVENT)
         self._logger.debug(
             "src.core.engine.sender.Sender.sendListenMarketKlineEvent: " +
             json.dumps(TEMP_EVENT))
         # 发送事件
         self._engine.sendEvent(event)
         # 返回参数
         return event.id
     except Exception as err:
         errStr = "src.core.engine.sender.Sender.sendListenMarketKlineEvent: %s" % EngineException(
             err)
         raise EngineException(errStr)
示例#3
0
 def sendJudgeMarketKlineEvent(self, args):
     try:
         # 构造事件对象
         TEMP_EVENT = json.loads(
             JUDGE_MARKET_KLINE_EVENT.substitute(
                 id=self._engine.getEventID(),
                 timeStamp=utcnow_timestamp(),
                 args=""))
         event = Event(TEMP_EVENT)
         self._logger.debug(
             "src.core.engine.sender.Sender.sendJudgeMarketKlineEvent: " +
             json.dumps(TEMP_EVENT))
         # 发送事件
         pass
     except Exception as err:
         errStr = "src.core.engine.sender.Sender.sendJudgeMarketKlineEvent: %s" % EngineException(
             err)
         raise EngineException(errStr)
示例#4
0
 def sendStatiscJudgeEvent(self, exchange, types):
     try:
         # 构造事件对象
         TEMP_EVENT = json.loads(
             STATISTIC_JUDGE_EVENT.substitute(id=self._engine.getEventID(),
                                              timeStamp=utcnow_timestamp(),
                                              exchange=exchange,
                                              types=types))
         event = Event(TEMP_EVENT)
         self._logger.debug(
             "src.core.engine.sender.Sender.sendStatiscJudgeEvent: " +
             json.dumps(TEMP_EVENT))
         # 发送事件
         self._engine.sendEvent(event)
         # 返回参数
         return event.id
     except Exception as err:
         errStr = "src.core.engine.sender.Sender.sendStatiscJudgeEvent: %s" % EngineException(
             err)
         raise EngineException(errStr)
示例#5
0
 def sendListenAccountBalanceEvent(self, exchange):
     try:
         # 构造事件对象
         TEMP_EVENT = json.loads(
             LISTEN_ACCOUNT_BALANCE_EVENT.substitute(
                 id=self._engine.getEventID(),
                 timeStamp=utcnow_timestamp(),
                 exchange=exchange))
         event = Event(TEMP_EVENT)
         self._logger.debug(
             "src.core.engine.sender.Sender.sendListenAccountBalanceEvent: "
             + json.dumps(TEMP_EVENT))
         # 发送事件
         self._engine.sendEvent(event)
         # 返回参数
         return event.id
     except Exception as err:
         errStr = "src.core.engine.sender.Sender.sendListenAccountBalanceEvent: %s" % EngineException(
             err)
         raise EngineException(errStr)
示例#6
0
 def sendStatiscOrderEvent(self, signals):
     try:
         for signal in signals:
             signal['status_assets'] = json_escape(signal['status_assets'])
         # 构造事件对象
         TEMP_EVENT = json.loads(
             STATISTIC_ORDER_EVENT.substitute(id=self._engine.getEventID(),
                                              timeStamp=utcnow_timestamp(),
                                              signals=signals))
         event = Event(TEMP_EVENT)
         self._logger.debug(
             "src.core.engine.sender.Sender.sendStatiscOrderEvent: " +
             json.dumps(TEMP_EVENT))
         # 发送事件
         self._engine.sendEvent(event)
         # 返回参数
         return event.id
     except Exception as err:
         errStr = "src.core.engine.sender.Sender.sendStatiscOrderEvent: %s" % EngineException(
             err)
         raise EngineException(errStr)
示例#7
0
 def sendOrderHistoryCreatEvent(self, exchange, signals, timeout):
     try:
         # 构造事件对象
         TEMP_EVENT = json.loads(
             BACKTEST_HISTORY_CREAT_EVENT.substitute(
                 id=self._engine.getEventID(),
                 timeStamp=utcnow_timestamp(),
                 exchange=exchange,
                 signals=signals,
                 timeout=timeout))
         event = Event(TEMP_EVENT)
         self._logger.debug(
             "src.core.engine.sender.Sender.sendOrderHistoryCreatEvent: " +
             json.dumps(TEMP_EVENT))
         # 发送事件
         self._engine.sendEvent(event)
         # 返回参数
         return event.id
     except Exception as err:
         errStr = "src.core.engine.sender.Sender.sendOrderHistoryCreatEvent: %s" % EngineException(
             err)
         raise EngineException(errStr)
示例#8
0
 def backtestUpdateSignalStatusByOrders(self, infoOrders, resInfoSymbol):
     self._logger.debug(
         "src.core.calc.signal.Signal.backtestUpdateSignalStatusByOrders: {infoOrders=%s, resInfoSymbol=%s}"
         % ('infoOrders', 'resInfoSymbol'))
     try:
         if not self._signals:
             raise Exception("NO SIGNAL ERROR, signals empty.")
         calc = Calc()
         resStatus = []
         timeStamp = utcnow_timestamp()
         for signal in self._signals:
             orders = infoOrders[(
                 infoOrders['group_id'] == signal['group_id'])]
             status = calc.calcSignalStatusByOrders(signal, orders,
                                                    resInfoSymbol,
                                                    SIGNAL_BASECOIN)
             if not status == []:
                 resStatus.append({
                     "signal_id": signal['signal_id'],
                     "status": status
                 })
         if not resStatus == []:
             for signal in self._signals:
                 for res in resStatus:
                     if signal['signal_id'] == res['signal_id']:
                         signal['timeStamp'] = timeStamp
                         signal['status_done'] = res['status'][
                             'status_done']
                         signal['status_assets'] = res['status'][
                             'status_assets']
                         signal['status_gain'] = res['status'][
                             'status_gain']
     except Exception as err:
         errStr = "src.core.calc.signal.Signal.backtestUpdateSignalStatusByOrders: {infoOrders=%s, resInfoSymbol=%s}, exception err=%s" % (
             'infoOrders', 'resInfoSymbol', err)
         raise CalcException(errStr)
示例#9
0
    def __run(self):
        self.__logger.debug(
            "src.core.engine.engine.EventEngine.__mainProcess.__run")
        try:
            while self.__active.value:
                # 执行 Epoch
                time.sleep(self.__epoch)
                # 控制最大进程数量
                if self.getActiveEventNum() > int(self.__maxProcess):
                    self.__logger.warn(
                        "src.core.engine.engine.EventEngine.__mainProcess.__run.__eventQueue: Too Many"
                    )
                else:
                    # 按优先级 获取队列中的事件 超时1秒
                    event = None
                    if not self.__highEventQueue.empty():
                        self.__logger.debug(
                            "src.core.engine.engine.EventEngine.__mainProcess.__run.__highEventQueue"
                        )
                        event = self.__highEventQueue.get(block=False)
                        while utcnow_timestamp(
                        ) - event.timeStamp > HIGH_PRIORITY_EVENT_TIMEOUT:
                            self.__status.delEventStatus(event)
                            if not self.__highEventQueue.empty():
                                self.__logger.error(
                                    "src.core.engine.engine.EventEngine.__mainProcess.__run.__highEventQueue TIMEOUT: {id=%s, type=%s, priority=%s, timeStamp=%s, args=%s}"
                                    % (event.id, event.type, event.priority,
                                       event.timeStamp, event.args))
                                event = self.__highEventQueue.get(block=False)
                            else:
                                event = None
                                break

                    if not self.__mediumEventQueue.empty() and event == None:
                        self.__logger.debug(
                            "src.core.engine.engine.EventEngine.__mainProcess.__run.__mediumEventQueue"
                        )
                        event = self.__mediumEventQueue.get(block=False)
                        while utcnow_timestamp(
                        ) - event.timeStamp > MEDIUM_PRIORITY_EVENT_TIMEOUT:
                            self.__status.delEventStatus(event)
                            if not self.__mediumEventQueue.empty():
                                self.__logger.error(
                                    "src.core.engine.engine.EventEngine.__mainProcess.__run.__mediumEventQueue TIMEOUT: {id=%s, type=%s, priority=%s, timeStamp=%s, args=%s}"
                                    % (event.id, event.type, event.priority,
                                       event.timeStamp, event.args))
                                event = self.__mediumEventQueue.get(
                                    block=False)
                            else:
                                event = None
                                break

                    if not self.__lowEnventQueue.empty() and event == None:
                        self.__logger.debug(
                            "src.core.engine.engine.EventEngine.__mainProcess.__run.__lowEnventQueue"
                        )
                        event = self.__lowEnventQueue.get(block=False)
                        while utcnow_timestamp(
                        ) - event.timeStamp > LOW_PRIORITY_EVENT_TIMEOUT:
                            self.__status.delEventStatus(event)
                            if not self.__lowEnventQueue.empty():
                                self.__logger.error(
                                    "src.core.engine.engine.EventEngine.__mainProcess.__run.__lowEnventQueue TIMEOUT: {id=%s, type=%s, priority=%s, timeStamp=%s, args=%s}"
                                    % (event.id, event.type, event.priority,
                                       event.timeStamp, event.args))
                                event = self.__lowEnventQueue.get(block=False)
                            else:
                                event = None
                                break

                    # 事件队列非空
                    if not event == None:
                        # 执行事件
                        self.__logger.debug(
                            "src.core.engine.engine.EventEngine.__mainProcess.__run.__eventQueue: {id=%s, type=%s, priority=%s, timeStamp=%s, args=%s}"
                            % (event.id, event.type, event.priority,
                               event.timeStamp, event.args))
                        self.__process(event)
                    else:
                        self.__logger.debug(
                            "src.core.engine.engine.EventEngine.__mainProcess.__run.__eventQueue: empty"
                        )
                    # 定期清理进程池
                    if len(self.__processPool) > self.__maxProcess:
                        for (_id, _pid) in self.__processPool:
                            if not psutil.pid_exists(_pid):
                                self.__processPool.remove((_id, _pid))
            # break out while
            # 终止所有事件处理进程
            for (_id, _pid) in self.__processPool:
                if psutil.pid_exists(_pid):
                    _p = psutil.Process(_pid)
                    _p.terminate()
                    self.__processPool.remove((_id, _pid))
        except Exception as err:
            errStr = "src.core.engine.engine.EventEngine.__mainProcess.__run: exception err=%s" % EngineException(
                err)
            raise EngineException(errStr)
示例#10
0
 def _configSignals(self, exchange, types):
     self._logger.debug("src.core.calc.signal.Signal._configSignals")
     try:
         signals = []
         strList = ast.literal_eval(self._signals_str)
         if not strList == []:
             pid = os.getpid()
             timeStamp = utcnow_timestamp()
             id = 0
             for s in strList:
                 id = id + 1
                 signal = {}
                 if s['type'] == TYPE_DIS:
                     if (types == 'all' or TYPE_DIS in types) and (
                             exchange == 'all' or
                         (s['bid_server'] in exchange
                          and s['ask_server'] in exchange)):
                         id_str = str(pid) + str(timeStamp) + str(id)
                         signal['timeStamp'] = timeStamp
                         signal['signal_id'] = '0x1c-' + str(
                             uuid.uuid3(uuid.NAMESPACE_DNS, id_str))
                         signal['type'] = s['type']
                         signal['bid_server'] = s['bid_server']
                         signal['ask_server'] = s['ask_server']
                         signal['fSymbol'] = s['fSymbol']
                         signal['tSymbol'] = s['tSymbol']
                         signal['forward_ratio'] = float(s['forward_ratio'])
                         signal['backward_ratio'] = float(
                             s['backward_ratio'])
                         signal['base_start'] = float(s['base_start'])
                         signal['base_gain'] = float(s['base_gain'])
                         signal['base_timeout'] = float(s['base_timeout'])
                         signal['group_id'] = str(s['group_id'])
                         signal['status_done'] = False
                         signal['status_assets'] = [{
                             "server":
                             s['bid_server'],
                             "asset":
                             SIGNAL_BASECOIN,
                             "balance":
                             float(s['base_start']) / 2,
                             "free":
                             float(s['base_start']) / 2,
                             "locked":
                             0.0
                         }, {
                             "server":
                             s['ask_server'],
                             "asset":
                             SIGNAL_BASECOIN,
                             "balance":
                             float(s['base_start']) / 2,
                             "free":
                             float(s['base_start']) / 2,
                             "locked":
                             0.0
                         }]
                         signal['status_gain'] = 0.0
                 if s['type'] == TYPE_TRA:
                     if (types == 'all' or TYPE_TRA in types) and (
                             exchange == 'all' or s['server'] in exchange):
                         tuple = tuple_str_to_list(s['symbol_pair'])
                         id_str = str(pid) + str(timeStamp) + str(id)
                         signal['timeStamp'] = timeStamp
                         signal['signal_id'] = '0x2c-' + str(
                             uuid.uuid3(uuid.NAMESPACE_DNS, id_str))
                         signal['type'] = s['type']
                         signal['server'] = s['server']
                         signal['V1_fSymbol'] = tuple[0][0]
                         signal['V1_tSymbol'] = tuple[0][1]
                         signal['V2_fSymbol'] = tuple[1][0]
                         signal['V2_tSymbol'] = tuple[1][1]
                         signal['V3_fSymbol'] = tuple[2][0]
                         signal['V3_tSymbol'] = tuple[2][1]
                         signal['forward_ratio'] = float(s['forward_ratio'])
                         signal['base_start'] = float(s['base_start'])
                         signal['base_gain'] = float(s['base_gain'])
                         signal['base_timeout'] = float(s['base_timeout'])
                         signal['group_id'] = str(s['group_id'])
                         signal['status_done'] = False
                         signal['status_assets'] = [{
                             "server":
                             s['server'],
                             "asset":
                             SIGNAL_BASECOIN,
                             "balance":
                             float(s['base_start']),
                             "free":
                             float(s['base_start']),
                             "locked":
                             0.0
                         }]
                         signal['status_gain'] = 0.0
                 if s['type'] == TYPE_PAIR:
                     if (types == 'all' or TYPE_PAIR in types) and (
                             exchange == 'all' or
                         (s['J1_server'] in exchange
                          and s['J2_server'] in exchange)):
                         tuple = tuple_str_to_list(s['symbol_pair'])
                         id_str = str(pid) + str(timeStamp) + str(id)
                         signal['timeStamp'] = timeStamp
                         signal['signal_id'] = '0x3c-' + str(
                             uuid.uuid3(uuid.NAMESPACE_DNS, id_str))
                         signal['type'] = s['type']
                         signal['J1_server'] = s['J1_server']
                         signal['J2_server'] = s['J2_server']
                         signal['V1_fSymbol'] = tuple[0][0]
                         signal['V1_tSymbol'] = tuple[0][1]
                         signal['V2_fSymbol'] = tuple[1][0]
                         signal['V2_tSymbol'] = tuple[1][1]
                         signal['V3_fSymbol'] = tuple[2][0]
                         signal['V3_tSymbol'] = tuple[2][1]
                         signal['forward_ratio'] = float(s['forward_ratio'])
                         signal['base_start'] = float(s['base_start'])
                         signal['base_gain'] = float(s['base_gain'])
                         signal['base_timeout'] = float(s['base_timeout'])
                         signal['group_id'] = str(s['group_id'])
                         signal['status_done'] = False
                         signal['status_assets'] = [{
                             "server":
                             s['J1_server'],
                             "asset":
                             SIGNAL_BASECOIN,
                             "balance":
                             float(s['base_start']) / 2,
                             "free":
                             float(s['base_start']) / 2,
                             "locked":
                             0.0
                         }, {
                             "server":
                             s['J2_server'],
                             "asset":
                             SIGNAL_BASECOIN,
                             "balance":
                             float(s['base_start']) / 2,
                             "free":
                             float(s['base_start']) / 2,
                             "locked":
                             0.0
                         }]
                         signal['status_gain'] = 0.0
                 if not signal == {}:
                     signals.append(signal)
         # return signals
         return signals
     except Exception as err:
         errStr = "src.core.calc.signal.Signal.signals, exception err=%s" % err
         raise CalcException(errStr)