Skip to content

Commit 1b7080f

Browse files
committed
add get_data_cal_avail_range method
1 parent ed12c7f commit 1b7080f

File tree

3 files changed

+33
-3
lines changed

3 files changed

+33
-3
lines changed

qlib/backtest/order.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -523,4 +523,4 @@ def get_decision(self) -> List[object]:
523523
return self.order_list
524524

525525
def __repr__(self) -> str:
526-
return f"strategy: {self.strategy}; trade_range: {self.trade_range}; order_list[{len(self.order_list)}]"
526+
return f"class: {self.__class__}; strategy: {self.strategy}; trade_range: {self.trade_range}; order_list[{len(self.order_list)}]"

qlib/backtest/utils.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -181,7 +181,7 @@ def clip(idx):
181181
return clip(left), clip(right)
182182

183183
def __repr__(self) -> str:
184-
return f"{self.start_time}[{self.start_index}]~{self.end_time}[{self.end_index}]: [{self.trade_step}/{self.trade_len}]"
184+
return f"class: {self.__class__.__name__}; {self.start_time}[{self.start_index}]~{self.end_time}[{self.end_index}]: [{self.trade_step}/{self.trade_len}]"
185185

186186

187187
class BaseInfrastructure:

qlib/strategy/base.py

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
# Licensed under the MIT License.
33
from qlib.backtest.exchange import Exchange
44
from qlib.backtest.position import BasePosition
5-
from typing import List, Union
5+
from typing import List, Tuple, Union
66

77
from ..model.base import BaseModel
88
from ..data.dataset import DatasetH
@@ -158,6 +158,36 @@ def alter_outer_trade_decision(self, outer_trade_decision: BaseTradeDecision):
158158
# NOTE: normally, user should do something to the strategy due to the change of outer decision
159159
raise NotImplementedError(f"Please implement the `alter_outer_trade_decision` method")
160160

161+
# helper methods: not necessary but for convenience
162+
def get_data_cal_avail_range(self, rtype: str = "full") -> Tuple[int, int]:
163+
"""
164+
return data calendar's available decision range for `self` strategy
165+
the range consider following factors
166+
- data calendar in the charge of `self` strategy
167+
- trading range limitation from the decision of outer strategy
168+
169+
170+
related methods
171+
- TradeCalendarManager.get_data_cal_range
172+
- BaseTradeDecision.get_data_cal_range_limit
173+
174+
Parameters
175+
----------
176+
rtype: str
177+
- "full": return the available data index range of the strategy from `start_time` to `end_time`
178+
- "step": return the available data index range of the strategy of current step
179+
180+
Returns
181+
-------
182+
Tuple[int, int]:
183+
the available range both sides are closed
184+
"""
185+
cal_range = self.trade_calendar.get_data_cal_range(rtype=rtype)
186+
if self.outer_trade_decision is None:
187+
raise ValueError(f"There is not limitation for strategy {self}")
188+
range_limit = self.outer_trade_decision.get_data_cal_range_limit(rtype=rtype)
189+
return max(cal_range[0], range_limit[0]), min(cal_range[1], range_limit[1])
190+
161191

162192
class ModelStrategy(BaseStrategy):
163193
"""Model-based trading strategy, use model to make predictions for trading"""

0 commit comments

Comments
 (0)