mirror of
https://github.com/microsoft/qlib.git
synced 2026-07-02 18:40:58 +08:00
75 lines
2.6 KiB
Python
75 lines
2.6 KiB
Python
import qlib
|
|
from qlib.config import REG_CN
|
|
from qlib.utils import exists_qlib_data, init_instance_by_config
|
|
import optuna
|
|
|
|
provider_uri = "~/.qlib/qlib_data/cn_data"
|
|
if not exists_qlib_data(provider_uri):
|
|
print(f"Qlib data is not found in {provider_uri}")
|
|
sys.path.append(str(scripts_dir))
|
|
from get_data import GetData
|
|
GetData().qlib_data(target_dir=provider_uri, region='cn')
|
|
qlib.init(provider_uri=provider_uri, region='cn')
|
|
|
|
market = "csi300"
|
|
benchmark = "SH000300"
|
|
|
|
data_handler_config = {
|
|
'start_time': '2008-01-01',
|
|
'end_time': '2020-08-01',
|
|
'fit_start_time': '2008-01-01',
|
|
'fit_end_time': '2014-12-31',
|
|
'instruments': market
|
|
}
|
|
dataset_task = {
|
|
"dataset": {
|
|
"class": "DatasetH",
|
|
"module_path": "qlib.data.dataset",
|
|
"kwargs": {
|
|
"handler": {
|
|
"class": "Alpha360",
|
|
"module_path": "qlib.contrib.data.handler",
|
|
"kwargs": data_handler_config,
|
|
},
|
|
"segments": {
|
|
'train': ('2008-01-01', '2014-12-31'),
|
|
'valid': ('2015-01-01', '2016-12-31'),
|
|
'test': ('2017-01-01', '2020-08-01'),
|
|
},
|
|
},
|
|
},
|
|
}
|
|
dataset = init_instance_by_config(dataset_task["dataset"])
|
|
|
|
def objective(trial):
|
|
task = {
|
|
"model": {
|
|
"class": "LGBModel",
|
|
"module_path": "qlib.contrib.model.gbdt",
|
|
"kwargs": {
|
|
"loss": "mse",
|
|
"colsample_bytree": trial.suggest_uniform('colsample_bytree', 0.5, 1),
|
|
"learning_rate": trial.suggest_uniform('learning_rate', 0, 1),
|
|
"subsample": trial.suggest_uniform('subsample', 0, 1),
|
|
"lambda_l1": trial.suggest_loguniform('lambda_l1', 1e-8, 1e+4),
|
|
"lambda_l2": trial.suggest_loguniform('lambda_l2', 1e-8, 1e+4),
|
|
"max_depth": 10,
|
|
"num_leaves": trial.suggest_int('num_leaves', 1, 1024),
|
|
'feature_fraction': trial.suggest_uniform('feature_fraction', 0.4, 1.0),
|
|
'bagging_fraction': trial.suggest_uniform('bagging_fraction', 0.4, 1.0),
|
|
'bagging_freq': trial.suggest_int('bagging_freq', 1, 7),
|
|
'min_data_in_leaf': trial.suggest_int('min_data_in_leaf', 1, 50),
|
|
'min_child_samples': trial.suggest_int('min_child_samples', 5, 100),
|
|
},
|
|
},
|
|
}
|
|
|
|
evals_result = dict()
|
|
model = init_instance_by_config(task["model"])
|
|
|
|
model.fit(dataset, evals_result=evals_result)
|
|
return min(evals_result['valid'])
|
|
|
|
study = optuna.Study(study_name='LGBM_360', storage='sqlite:///db.sqlite3')
|
|
study.optimize(objective, n_jobs=6)
|