1
0
mirror of https://github.com/microsoft/qlib.git synced 2026-07-04 03:21:00 +08:00

update workflow_by_code & update executor

This commit is contained in:
bxdd
2021-06-01 17:44:22 +08:00
parent a46d99a2be
commit a183d8a631
4 changed files with 37 additions and 16 deletions

View File

@@ -66,32 +66,45 @@ if __name__ == "__main__":
},
}
# model initialization
model = init_instance_by_config(task["model"])
dataset = init_instance_by_config(task["dataset"])
port_analysis_config = {
"executor": {
"class": "SimulatorExecutor",
"module_path": "qlib.backtest.executor",
"kwargs": {
"time_per_step": "day",
"generate_report": True,
},
},
"strategy": {
"class": "TopkDropoutStrategy",
"module_path": "qlib.contrib.strategy.strategy",
"module_path": "qlib.contrib.strategy.model_strategy",
"kwargs": {
"model": model,
"dataset": dataset,
"topk": 50,
"n_drop": 5,
},
},
"backtest": {
"verbose": False,
"limit_threshold": 0.095,
"start_time": "2017-01-01",
"end_time": "2020-08-01",
"account": 100000000,
"benchmark": benchmark,
"deal_price": "close",
"open_cost": 0.0005,
"close_cost": 0.0015,
"min_cost": 5,
"return_order": True,
"exchange_kwargs": {
"freq": "day",
"limit_threshold": 0.095,
"deal_price": "close",
"open_cost": 0.0005,
"close_cost": 0.0015,
"min_cost": 5,
},
},
}
# model initialization
model = init_instance_by_config(task["model"])
dataset = init_instance_by_config(task["dataset"])
# NOTE: This line is optional
# It demonstrates that the dataset can be used standalone.
example_df = dataset.prepare("train")
@@ -110,5 +123,5 @@ if __name__ == "__main__":
# backtest. If users want to use backtest based on their own prediction,
# please refer to https://qlib.readthedocs.io/en/latest/component/recorder.html#record-template.
par = PortAnaRecord(recorder, port_analysis_config)
par = PortAnaRecord(recorder, port_analysis_config, "day")
par.generate()

View File

@@ -8,6 +8,7 @@ from .backtest import backtest as backtest_func
from .backtest import collect_data as data_generator
from .utils import CommonInfrastructure
from .order import Order
from ..strategy.base import BaseStrategy
from ..utils import init_instance_by_config
from ..log import get_module_logger

View File

@@ -118,6 +118,9 @@ class BaseExecutor:
def get_report(self):
raise NotImplementedError("get_report is not implemented!")
def get_all_executor(self):
return [self]
class NestedExecutor(BaseExecutor):
"""
@@ -244,6 +247,9 @@ class NestedExecutor(BaseExecutor):
sub_env_report_dict.update({f"{_count}{_freq}": (_report, _positions)})
return sub_env_report_dict
def get_all_executor(self):
return [self, *self.inner_executor.get_all_executor()]
class SimulatorExecutor(BaseExecutor):
"""Executor that simulate the true market"""

View File

@@ -11,10 +11,11 @@ class Order:
stock_id : str
amount : float
start_time : pd.Timestamp
closed start time for order generation
closed start time for order trading
end_time : pd.Timestamp
closed end time for order generation
direction : Order.SELL for sell; Order.BUY for buy
closed end time for order trading
direction : int
Order.SELL for sell; Order.BUY for buy
factor : float
presents the weight factor assigned in Exchange()
"""