mirror of
https://github.com/microsoft/qlib.git
synced 2026-07-20 02:37:38 +08:00
Compare commits
6 Commits
f48bf813e3
...
fix_hs_sym
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
b85a5c224e | ||
|
|
880a5d27b1 | ||
|
|
922494bdbb | ||
|
|
3277c2a512 | ||
|
|
06c8c4e37f | ||
|
|
84373de6e5 |
@@ -1,8 +1,8 @@
|
|||||||
# Copyright (c) Microsoft Corporation.
|
# Copyright (c) Microsoft Corporation.
|
||||||
# Licensed under the MIT License.
|
# Licensed under the MIT License.
|
||||||
"""
|
"""
|
||||||
The motivation of this demo
|
The motivation of this demo
|
||||||
- To show the data modules of Qlib is Serializable, users can dump processed data to disk to avoid duplicated data preprocessing
|
- To show the data modules of Qlib is Serializable, users can dump processed data to disk to avoid duplicated data preprocessing
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
# Copyright (c) Microsoft Corporation.
|
# Copyright (c) Microsoft Corporation.
|
||||||
# Licensed under the MIT License.
|
# Licensed under the MIT License.
|
||||||
"""
|
"""
|
||||||
The motivation of this demo
|
The motivation of this demo
|
||||||
- To show the data modules of Qlib is Serializable, users can dump processed data to disk to avoid duplicated data preprocessing
|
- To show the data modules of Qlib is Serializable, users can dump processed data to disk to avoid duplicated data preprocessing
|
||||||
"""
|
"""
|
||||||
|
|
||||||
from copy import deepcopy
|
from copy import deepcopy
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
# Copyright (c) Microsoft Corporation.
|
# Copyright (c) Microsoft Corporation.
|
||||||
# Licensed under the MIT License.
|
# Licensed under the MIT License.
|
||||||
"""
|
"""
|
||||||
NOTE:
|
NOTE:
|
||||||
- This scripts is a demo to import example data import Qlib
|
- This scripts is a demo to import example data import Qlib
|
||||||
- !!!!!!!!!!!!!!!TODO!!!!!!!!!!!!!!!!!!!:
|
- !!!!!!!!!!!!!!!TODO!!!!!!!!!!!!!!!!!!!:
|
||||||
- Its structure is not well designed and very ugly, your contribution is welcome to make importing dataset easier
|
- Its structure is not well designed and very ugly, your contribution is welcome to make importing dataset easier
|
||||||
"""
|
"""
|
||||||
from datetime import date, datetime as dt
|
from datetime import date, datetime as dt
|
||||||
|
|||||||
@@ -79,6 +79,7 @@ package = [
|
|||||||
test = [
|
test = [
|
||||||
"yahooquery",
|
"yahooquery",
|
||||||
"baostock",
|
"baostock",
|
||||||
|
"akshare",
|
||||||
]
|
]
|
||||||
analysis = [
|
analysis = [
|
||||||
"plotly",
|
"plotly",
|
||||||
|
|||||||
@@ -1,9 +1,9 @@
|
|||||||
# Copyright (c) Microsoft Corporation.
|
# Copyright (c) Microsoft Corporation.
|
||||||
# Licensed under the MIT License.
|
# Licensed under the MIT License.
|
||||||
"""
|
"""
|
||||||
This module is not a necessary part of Qlib.
|
This module is not a necessary part of Qlib.
|
||||||
They are just some tools for convenience
|
They are just some tools for convenience
|
||||||
It is should not imported into the core part of qlib
|
It is should not imported into the core part of qlib
|
||||||
"""
|
"""
|
||||||
import torch
|
import torch
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ class Trainer:
|
|||||||
|
|
||||||
if ckpt_path is not None:
|
if ckpt_path is not None:
|
||||||
_logger.info("Resuming states from %s", str(ckpt_path))
|
_logger.info("Resuming states from %s", str(ckpt_path))
|
||||||
self.load_state_dict(torch.load(ckpt_path))
|
self.load_state_dict(torch.load(ckpt_path, weights_only=False))
|
||||||
else:
|
else:
|
||||||
self.initialize()
|
self.initialize()
|
||||||
|
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import functools
|
|||||||
from pathlib import Path
|
from pathlib import Path
|
||||||
from typing import Iterable, Tuple, List
|
from typing import Iterable, Tuple, List
|
||||||
|
|
||||||
|
import akshare as ak
|
||||||
import numpy as np
|
import numpy as np
|
||||||
import pandas as pd
|
import pandas as pd
|
||||||
from loguru import logger
|
from loguru import logger
|
||||||
@@ -202,18 +203,9 @@ def get_hs_stock_symbols() -> list:
|
|||||||
-------
|
-------
|
||||||
{600000.ss, 600001.ss, 600002.ss, 600003.ss, ...}
|
{600000.ss, 600001.ss, 600002.ss, 600003.ss, ...}
|
||||||
"""
|
"""
|
||||||
url = "http://99.push2.eastmoney.com/api/qt/clist/get?pn=1&pz=10000&po=1&np=1&fs=m:0+t:6,m:0+t:80,m:1+t:2,m:1+t:23,m:0+t:81+s:2048&fields=f12"
|
stock_info_a_code_name_df = ak.stock_info_a_code_name()
|
||||||
try:
|
stock_codes = stock_info_a_code_name_df["code"].tolist()
|
||||||
resp = requests.get(url, timeout=None)
|
_symbols = [code for code in stock_codes if code and code.strip()]
|
||||||
resp.raise_for_status()
|
|
||||||
except requests.exceptions.HTTPError as e:
|
|
||||||
raise requests.exceptions.HTTPError(f"Request to {url} failed with status code {resp.status_code}") from e
|
|
||||||
|
|
||||||
try:
|
|
||||||
_symbols = [_v["f12"] for _v in resp.json()["data"]["diff"]]
|
|
||||||
except Exception as e:
|
|
||||||
logger.warning("An error occurred while extracting data from the response.")
|
|
||||||
raise
|
|
||||||
|
|
||||||
if len(_symbols) < 3900:
|
if len(_symbols) < 3900:
|
||||||
raise ValueError("The complete list of stocks is not available.")
|
raise ValueError("The complete list of stocks is not available.")
|
||||||
|
|||||||
@@ -50,12 +50,6 @@ pip install -r requirements.txt
|
|||||||
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data_1min --region cn --interval 1min
|
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data_1min --region cn --interval 1min
|
||||||
# us 1d
|
# us 1d
|
||||||
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/us_data --region us --interval 1d
|
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/us_data --region us --interval 1d
|
||||||
# us 1min
|
|
||||||
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/us_data_1min --region us --interval 1min
|
|
||||||
# in 1d
|
|
||||||
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/in_data --region in --interval 1d
|
|
||||||
# in 1min
|
|
||||||
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/in_data_1min --region in --interval 1min
|
|
||||||
```
|
```
|
||||||
|
|
||||||
### Collector *YahooFinance* data to qlib
|
### Collector *YahooFinance* data to qlib
|
||||||
|
|||||||
@@ -194,7 +194,7 @@ def test_trainer_checkpoint():
|
|||||||
assert (output_dir / "002.pth").exists()
|
assert (output_dir / "002.pth").exists()
|
||||||
assert os.readlink(output_dir / "latest.pth") == str(output_dir / "002.pth")
|
assert os.readlink(output_dir / "latest.pth") == str(output_dir / "002.pth")
|
||||||
|
|
||||||
trainer.load_state_dict(torch.load(output_dir / "001.pth"))
|
trainer.load_state_dict(torch.load(output_dir / "001.pth", weights_only=False))
|
||||||
assert trainer.current_iter == 1
|
assert trainer.current_iter == 1
|
||||||
assert trainer.current_episode == 100
|
assert trainer.current_episode == 100
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user