diff --git a/qlib/backtest/order.py b/qlib/backtest/order.py index 88d47dd73..49b200833 100644 --- a/qlib/backtest/order.py +++ b/qlib/backtest/order.py @@ -128,8 +128,8 @@ class OrderHelper: code: str, amount: float, direction: OrderDir, - start_time: Union[str, pd.Timestamp]=None, - end_time: Union[str, pd.Timestamp]=None, + start_time: Union[str, pd.Timestamp] = None, + end_time: Union[str, pd.Timestamp] = None, ) -> Order: """ help to create a order @@ -410,7 +410,7 @@ class BaseTradeDecision: _start_idx, _end_idx = max(0, _start_idx), min(self.total_step - 1, _end_idx) return _start_idx, _end_idx - def get_data_cal_range_limit(self, rtype: str="full", raise_error: bool = False) -> Tuple[int, int]: + def get_data_cal_range_limit(self, rtype: str = "full", raise_error: bool = False) -> Tuple[int, int]: """ get the range limit based on data calendar diff --git a/qlib/backtest/utils.py b/qlib/backtest/utils.py index 8937434c9..34c91151f 100644 --- a/qlib/backtest/utils.py +++ b/qlib/backtest/utils.py @@ -100,7 +100,7 @@ class TradeCalendarManager: Parameters ---------- trade_step : int, optional - the number of trading step finished, by default None to indicate + the number of trading step finished, by default None to indicate current step shift : int, optional shift bars , by default 0 @@ -239,8 +239,9 @@ class LevelInfrastructure(BaseInfrastructure): if self.has("trade_calendar"): self.get("trade_calendar").reset(freq, start_time=start_time, end_time=end_time) else: - self.reset_infra(trade_calendar=TradeCalendarManager(freq, start_time=start_time, end_time=end_time, - level_infra=self)) + self.reset_infra( + trade_calendar=TradeCalendarManager(freq, start_time=start_time, end_time=end_time, level_infra=self) + ) def set_sub_level_infra(self, sub_level_infra: LevelInfrastructure): """this will make the calendar access easier when acrossing multi-levels""" diff --git a/qlib/contrib/strategy/rule_strategy.py b/qlib/contrib/strategy/rule_strategy.py index 2fc1a1768..c16af7ae5 100644 --- a/qlib/contrib/strategy/rule_strategy.py +++ b/qlib/contrib/strategy/rule_strategy.py @@ -313,7 +313,9 @@ class SBBStrategyEMA(SBBStrategyBase): if isinstance(instruments, str): self.instruments = D.instruments(instruments) self.freq = freq - super(SBBStrategyEMA, self).__init__(outer_trade_decision, level_infra, common_infra, trade_exchange=trade_exchange, **kwargs) + super(SBBStrategyEMA, self).__init__( + outer_trade_decision, level_infra, common_infra, trade_exchange=trade_exchange, **kwargs + ) def _reset_signal(self): trade_len = self.trade_calendar.get_trade_len() @@ -396,11 +398,9 @@ class ACStrategy(BaseStrategy): if isinstance(instruments, str): self.instruments = D.instruments(instruments) self.freq = freq - super(ACStrategy, self).__init__(outer_trade_decision, - level_infra, - common_infra, - trade_exchange=trade_exchange, - **kwargs) + super(ACStrategy, self).__init__( + outer_trade_decision, level_infra, common_infra, trade_exchange=trade_exchange, **kwargs + ) def _reset_signal(self): trade_len = self.trade_calendar.get_trade_len() @@ -561,11 +561,14 @@ class RandomOrderStrategy(BaseStrategy): if step_time_start in self.volume_df: for stock_id, volume in self.volume_df[step_time_start].dropna().sample(frac=self.sample_ratio).items(): order_list.append( - self.common_infra.get("trade_exchange").get_order_helper().create( + self.common_infra.get("trade_exchange") + .get_order_helper() + .create( code=stock_id, amount=volume * self.volume_ratio, direction=self.direction, - )) + ) + ) return TradeDecisionWO(order_list, self, self.trade_range) @@ -575,7 +578,9 @@ class FileOrderStrategy(BaseStrategy): - This class provides an interface for user to read orders from csv files. """ - def __init__(self, file: Union[IO, str, Path], trade_range: Union[Tuple[int, int], TradeRange]= None, *args, **kwargs): + def __init__( + self, file: Union[IO, str, Path], trade_range: Union[Tuple[int, int], TradeRange] = None, *args, **kwargs + ): """ Parameters diff --git a/qlib/strategy/base.py b/qlib/strategy/base.py index 15cad4986..265ff309c 100644 --- a/qlib/strategy/base.py +++ b/qlib/strategy/base.py @@ -91,10 +91,9 @@ class BaseStrategy: 1. Users want to initialize his strategy by overriding `reset`, but they don't want to affect the `_reset` called when initialization """ - self._reset(level_infra=level_infra, - common_infra=common_infra, - outer_trade_decision=outer_trade_decision, - **kwargs) + self._reset( + level_infra=level_infra, common_infra=common_infra, outer_trade_decision=outer_trade_decision, **kwargs + ) def _reset( self, @@ -114,7 +113,6 @@ class BaseStrategy: if outer_trade_decision is not None: self.outer_trade_decision = outer_trade_decision - def generate_trade_decision(self, execute_result=None): """Generate trade decision in each trading bar