mirror of
https://github.com/microsoft/qlib.git
synced 2026-07-05 12:00:58 +08:00
Merge branch 'nested_decision_exe' of github.com:microsoft/qlib into nested_decision_exe
This commit is contained in:
@@ -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
|
||||
|
||||
|
||||
@@ -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"""
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
Reference in New Issue
Block a user