1
0
mirror of https://github.com/microsoft/qlib.git synced 2026-07-16 17:12:20 +08:00

Merge branch 'nested_decision_exe' of github.com:microsoft/qlib into nested_decision_exe

This commit is contained in:
Young
2021-07-16 03:12:09 +00:00
4 changed files with 24 additions and 20 deletions

View File

@@ -128,8 +128,8 @@ class OrderHelper:
code: str, code: str,
amount: float, amount: float,
direction: OrderDir, direction: OrderDir,
start_time: Union[str, pd.Timestamp]=None, start_time: Union[str, pd.Timestamp] = None,
end_time: Union[str, pd.Timestamp]=None, end_time: Union[str, pd.Timestamp] = None,
) -> Order: ) -> Order:
""" """
help to create a 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) _start_idx, _end_idx = max(0, _start_idx), min(self.total_step - 1, _end_idx)
return _start_idx, _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 get the range limit based on data calendar

View File

@@ -100,7 +100,7 @@ class TradeCalendarManager:
Parameters Parameters
---------- ----------
trade_step : int, optional 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 : int, optional
shift bars , by default 0 shift bars , by default 0
@@ -239,8 +239,9 @@ class LevelInfrastructure(BaseInfrastructure):
if self.has("trade_calendar"): if self.has("trade_calendar"):
self.get("trade_calendar").reset(freq, start_time=start_time, end_time=end_time) self.get("trade_calendar").reset(freq, start_time=start_time, end_time=end_time)
else: else:
self.reset_infra(trade_calendar=TradeCalendarManager(freq, start_time=start_time, end_time=end_time, self.reset_infra(
level_infra=self)) 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): def set_sub_level_infra(self, sub_level_infra: LevelInfrastructure):
"""this will make the calendar access easier when acrossing multi-levels""" """this will make the calendar access easier when acrossing multi-levels"""

View File

@@ -313,7 +313,9 @@ class SBBStrategyEMA(SBBStrategyBase):
if isinstance(instruments, str): if isinstance(instruments, str):
self.instruments = D.instruments(instruments) self.instruments = D.instruments(instruments)
self.freq = freq 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): def _reset_signal(self):
trade_len = self.trade_calendar.get_trade_len() trade_len = self.trade_calendar.get_trade_len()
@@ -396,11 +398,9 @@ class ACStrategy(BaseStrategy):
if isinstance(instruments, str): if isinstance(instruments, str):
self.instruments = D.instruments(instruments) self.instruments = D.instruments(instruments)
self.freq = freq self.freq = freq
super(ACStrategy, self).__init__(outer_trade_decision, super(ACStrategy, self).__init__(
level_infra, outer_trade_decision, level_infra, common_infra, trade_exchange=trade_exchange, **kwargs
common_infra, )
trade_exchange=trade_exchange,
**kwargs)
def _reset_signal(self): def _reset_signal(self):
trade_len = self.trade_calendar.get_trade_len() trade_len = self.trade_calendar.get_trade_len()
@@ -561,11 +561,14 @@ class RandomOrderStrategy(BaseStrategy):
if step_time_start in self.volume_df: 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(): for stock_id, volume in self.volume_df[step_time_start].dropna().sample(frac=self.sample_ratio).items():
order_list.append( 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, code=stock_id,
amount=volume * self.volume_ratio, amount=volume * self.volume_ratio,
direction=self.direction, direction=self.direction,
)) )
)
return TradeDecisionWO(order_list, self, self.trade_range) 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. - 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 Parameters

View File

@@ -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 1. Users want to initialize his strategy by overriding `reset`, but they don't want to affect the `_reset` called
when initialization when initialization
""" """
self._reset(level_infra=level_infra, self._reset(
common_infra=common_infra, level_infra=level_infra, common_infra=common_infra, outer_trade_decision=outer_trade_decision, **kwargs
outer_trade_decision=outer_trade_decision, )
**kwargs)
def _reset( def _reset(
self, self,
@@ -114,7 +113,6 @@ class BaseStrategy:
if outer_trade_decision is not None: if outer_trade_decision is not None:
self.outer_trade_decision = outer_trade_decision self.outer_trade_decision = outer_trade_decision
def generate_trade_decision(self, execute_result=None): def generate_trade_decision(self, execute_result=None):
"""Generate trade decision in each trading bar """Generate trade decision in each trading bar