1
0
mirror of https://github.com/microsoft/qlib.git synced 2026-07-17 01:14:35 +08:00

simplify signal parameter

This commit is contained in:
Young
2021-10-15 14:04:21 +00:00
parent 12f05c7182
commit 052aad7982
40 changed files with 160 additions and 98 deletions

View File

@@ -1,6 +1,8 @@
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
import copy
from qlib.backtest.signal import ModelSignal, Signal, SignalWCache
from typing import Union
from qlib.backtest.signal import Signal, create_signal_from
from typing import Dict, List, Text, Tuple, Union
from qlib.data.dataset import Dataset
from qlib.model.base import BaseModel
from qlib.backtest.position import Position
@@ -25,9 +27,7 @@ class TopkDropoutStrategy(BaseStrategy):
*,
topk,
n_drop,
model: BaseModel = None,
dataset: Dataset = None,
signal: Union[pd.DataFrame, pd.Series] = None,
signal: Union[Signal, Tuple[BaseModel, Dataset], List, Dict, Text, pd.Series, pd.DataFrame],
method_sell="bottom",
method_buy="top",
risk_degree=0.95,
@@ -45,6 +45,9 @@ class TopkDropoutStrategy(BaseStrategy):
the number of stocks in the portfolio.
n_drop : int
number of stocks to be replaced in each trading date.
signal :
the information to describe a signal. Please refer to the docs of `qlib.backtest.signal.create_signal_from`
the decision of the strategy will base on the given signal
method_sell : str
dropout method_sell, random/bottom.
method_buy : str
@@ -79,8 +82,7 @@ class TopkDropoutStrategy(BaseStrategy):
self.risk_degree = risk_degree
self.hold_thresh = hold_thresh
self.only_tradable = only_tradable
assert signal is not None or dataset is not None and model is not None
self.signal: Signal = ModelSignal(model=model, dataset=dataset) if signal is None else SignalWCache(signal)
self.signal: Signal = create_signal_from(signal)
def get_risk_degree(self, trade_step=None):
"""get_risk_degree
@@ -251,9 +253,7 @@ class WeightStrategyBase(BaseStrategy):
def __init__(
self,
*,
model: BaseModel = None,
dataset: Dataset = None,
signal: Union[pd.DataFrame, pd.Series] = None,
signal: Union[Signal, Tuple[BaseModel, Dataset], List, Dict, Text, pd.Series, pd.DataFrame],
order_generator_cls_or_obj=OrderGenWInteract,
trade_exchange=None,
level_infra=None,
@@ -261,6 +261,9 @@ class WeightStrategyBase(BaseStrategy):
**kwargs,
):
"""
signal :
the information to describe a signal. Please refer to the docs of `qlib.backtest.signal.create_signal_from`
the decision of the strategy will base on the given signal
trade_exchange : Exchange
exchange that provides market info, used to deal order and generate report
- If `trade_exchange` is None, self.trade_exchange will be set with common_infra
@@ -276,8 +279,8 @@ class WeightStrategyBase(BaseStrategy):
self.order_generator = order_generator_cls_or_obj()
else:
self.order_generator = order_generator_cls_or_obj
assert signal is not None or dataset is not None and model is not None
self.signal: Signal = ModelSignal(model=model, dataset=dataset) if signal is None else SignalWCache(signal)
self.signal: Signal = create_signal_from(signal)
def get_risk_degree(self, trade_step=None):
"""get_risk_degree