From 66518a323892e8df4f86ecd23c33aaafa678574e Mon Sep 17 00:00:00 2001 From: oscarcui Date: Thu, 21 Sep 2017 10:15:22 +0800 Subject: [PATCH 1/2] mod-sys-simulation will not run when live trading --- rqalpha/mod/rqalpha_mod_sys_simulation/mod.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rqalpha/mod/rqalpha_mod_sys_simulation/mod.py b/rqalpha/mod/rqalpha_mod_sys_simulation/mod.py index e7b705e67..7adcb6f24 100644 --- a/rqalpha/mod/rqalpha_mod_sys_simulation/mod.py +++ b/rqalpha/mod/rqalpha_mod_sys_simulation/mod.py @@ -19,7 +19,7 @@ from rqalpha.interface import AbstractMod from rqalpha.utils.i18n import gettext as _ from rqalpha.utils.exception import patch_user_exc -from rqalpha.const import MATCHING_TYPE +from rqalpha.const import MATCHING_TYPE, RUN_TYPE from .simulation_broker import SimulationBroker from .signal_broker import SignalBroker @@ -31,6 +31,10 @@ def __init__(self): pass def start_up(self, env, mod_config): + + if env.config.base.run_type == RUN_TYPE.LIVE_TRADING: + return + mod_config.matching_type = self.parse_matching_type(mod_config.matching_type) if mod_config.commission_multiplier < 0: raise patch_user_exc(ValueError(_(u"invalid commission multiplier value: value range is [0, +∞)"))) From 107b5c769964fad5e5839f2a6d0abb66d492c206 Mon Sep 17 00:00:00 2001 From: oscarcui Date: Sat, 23 Sep 2017 23:41:28 +0800 Subject: [PATCH 2/2] publish event with the copy of order object in signal_broker --- rqalpha/mod/rqalpha_mod_sys_simulation/signal_broker.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/rqalpha/mod/rqalpha_mod_sys_simulation/signal_broker.py b/rqalpha/mod/rqalpha_mod_sys_simulation/signal_broker.py index 054d8f700..6b4106acd 100644 --- a/rqalpha/mod/rqalpha_mod_sys_simulation/signal_broker.py +++ b/rqalpha/mod/rqalpha_mod_sys_simulation/signal_broker.py @@ -15,6 +15,7 @@ # limitations under the License. import numpy as np +from copy import copy from rqalpha.interface import AbstractBroker from rqalpha.utils.logger import user_system_log @@ -43,11 +44,11 @@ def get_open_orders(self, order_book_id=None): def submit_order(self, order): account = self._env.get_account(order.order_book_id) - self._env.event_bus.publish_event(Event(EVENT.ORDER_PENDING_NEW, account=account, order=order)) + self._env.event_bus.publish_event(Event(EVENT.ORDER_PENDING_NEW, account=account, order=copy(order))) if order.is_final(): return order.active() - self._env.event_bus.publish_event(Event(EVENT.ORDER_CREATION_PASS, account=account, order=order)) + self._env.event_bus.publish_event(Event(EVENT.ORDER_CREATION_PASS, account=account, order=copy(order))) self._match(account, order) def cancel_order(self, order): @@ -73,7 +74,7 @@ def _match(self, account, order): reason = _(u"Order Cancelled: current bar [{order_book_id}] miss market data.").format( order_book_id=order_book_id) order.mark_rejected(reason) - self._env.event_bus.publish_event(Event(EVENT.ORDER_UNSOLICITED_UPDATE, account=account, order=order)) + self._env.event_bus.publish_event(Event(EVENT.ORDER_UNSOLICITED_UPDATE, account=account, order=copy(order))) return if order.type == ORDER_TYPE.LIMIT: @@ -116,4 +117,4 @@ def _match(self, account, order): trade._tax = self._tax_decider.get_tax(account.type, trade) order.fill(trade) - self._env.event_bus.publish_event(Event(EVENT.TRADE, account=account, trade=trade, order=order)) + self._env.event_bus.publish_event(Event(EVENT.TRADE, account=account, trade=trade, order=copy(order)))