Qlib is an AI-oriented quantitative investment platform, which aims to realize the potential, empower the research, and create the value of AI technologies in quantitative investment. With Qlib, you can easily try your ideas to create better Quant investment strategies.

Overview

Python Versions Platform PypI Versions Upload Python Package Github Actions Test Status Documentation Status License Join the chat at https://gitter.im/Microsoft/qlib

Qlib is an AI-oriented quantitative investment platform, which aims to realize the potential, empower the research, and create the value of AI technologies in quantitative investment.

It contains the full ML pipeline of data processing, model training, back-testing; and covers the entire chain of quantitative investment: alpha seeking, risk modeling, portfolio optimization, and order execution.

With Qlib, users can easily try ideas to create better Quant investment strategies.

For more details, please refer to our paper "Qlib: An AI-oriented Quantitative Investment Platform".

News And Plans

New features under development(order by estimated release time). Your feedbacks about the features are very important.

Feature Status
Online serving and automatic model rolling Under review: https://github.com/microsoft/qlib/pull/290
Planning-based portfolio optimization Under review: https://github.com/microsoft/qlib/pull/280
Fund data supporting and analysis Under review: https://github.com/microsoft/qlib/pull/292
Point-in-Time database Under review: https://github.com/microsoft/qlib/pull/343
High-frequency trading Initial opensource version under development
Meta-Learning-based data selection Initial opensource version under development

Recent released features

Feature Status
DoubleEnsemble Model Released https://github.com/microsoft/qlib/pull/286
High-frequency data processing example Released https://github.com/microsoft/qlib/pull/257
High-frequency trading example Part of code released https://github.com/microsoft/qlib/pull/227
High-frequency data(1min) Released https://github.com/microsoft/qlib/pull/221
Tabnet Model Released https://github.com/microsoft/qlib/pull/205

Features released before 2021 are not listed here.

Framework of Qlib

At the module level, Qlib is a platform that consists of the above components. The components are designed as loose-coupled modules, and each component could be used stand-alone.

Name Description
Infrastructure layer Infrastructure layer provides underlying support for Quant research. DataServer provides a high-performance infrastructure for users to manage and retrieve raw data. Trainer provides a flexible interface to control the training process of models, which enable algorithms to control the training process.
Workflow layer Workflow layer covers the whole workflow of quantitative investment. Information Extractor extracts data for models. Forecast Model focuses on producing all kinds of forecast signals (e.g. alpha, risk) for other modules. With these signals Portfolio Generator will generate the target portfolio and produce orders to be executed by Order Executor.
Interface layer Interface layer tries to present a user-friendly interface for the underlying system. Analyser module will provide users detailed analysis reports of forecasting signals, portfolios and execution results
  • The modules with hand-drawn style are under development and will be released in the future.
  • The modules with dashed borders are highly user-customizable and extendible.

Quick Start

This quick start guide tries to demonstrate

  1. It's very easy to build a complete Quant research workflow and try your ideas with Qlib.
  2. Though with public data and simple models, machine learning technologies work very well in practical Quant investment.

Here is a quick demo shows how to install Qlib, and run LightGBM with qrun. But, please make sure you have already prepared the data following the instruction.

Installation

This table demonstrates the supported Python version of Qlib:

install with pip install from source plot
Python 3.6 ✔️ ✔️ (only with Anaconda) ✔️
Python 3.7 ✔️ ✔️ ✔️
Python 3.8 ✔️ ✔️ ✔️
Python 3.9 ✔️

Note:

  1. Please pay attention that installing cython in Python 3.6 will raise some error when installing Qlib from source. If users use Python 3.6 on their machines, it is recommended to upgrade Python to version 3.7 or use conda's Python to install Qlib from source.
  2. For Python 3.9, Qlib supports running workflows such as training models, doing backtest and plot most of the related figures (those included in notebook). However, plotting for the model performance is not supported for now and we will fix this when the dependent packages are upgraded in the future.

Install with pip

Users can easily install Qlib by pip according to the following command.

  pip install pyqlib

Note: pip will install the latest stable qlib. However, the main branch of qlib is in active development. If you want to test the latest scripts or functions in the main branch. Please install qlib with the methods below.

Install from source

Also, users can install the latest dev version Qlib by the source code according to the following steps:

  • Before installing Qlib from source, users need to install some dependencies:

    pip install numpy
    pip install --upgrade  cython
  • Clone the repository and install Qlib as follows.

    • If you haven't installed qlib by the command pip install pyqlib before:
      git clone https://github.com/microsoft/qlib.git && cd qlib
      python setup.py install
    • If you have already installed the stable version by the command pip install pyqlib:
      git clone https://github.com/microsoft/qlib.git && cd qlib
      pip install .

    Note: Only the command pip install . can overwrite the stable version installed by pip install pyqlib, while the command python setup.py install can't.

Tips: If you fail to install Qlib or run the examples in your environment, comparing your steps and the CI workflow may help you find the problem.

Data Preparation

Load and prepare data by running the following code:

# get 1d data
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data --region cn

# get 1min data
python scripts/get_data.py qlib_data --target_dir ~/.qlib/qlib_data/cn_data_1min --region cn --interval 1min

This dataset is created by public data collected by crawler scripts, which have been released in the same repository. Users could create the same dataset with it.

Please pay ATTENTION that the data is collected from Yahoo Finance, and the data might not be perfect. We recommend users to prepare their own data if they have a high-quality dataset. For more information, users can refer to the related document.

Auto Quant Research Workflow

Qlib provides a tool named qrun to run the whole workflow automatically (including building dataset, training models, backtest and evaluation). You can start an auto quant research workflow and have a graphical reports analysis according to the following steps:

  1. Quant Research Workflow: Run qrun with lightgbm workflow config (workflow_config_lightgbm_Alpha158.yaml as following.

      cd examples  # Avoid running program under the directory contains `qlib`
      qrun benchmarks/LightGBM/workflow_config_lightgbm_Alpha158.yaml

    If users want to use qrun under debug mode, please use the following command:

    python -m pdb qlib/workflow/cli.py examples/benchmarks/LightGBM/workflow_config_lightgbm_Alpha158.yaml

    The result of qrun is as follows, please refer to Intraday Trading for more details about the result.

    'The following are analysis results of the excess return without cost.'
                           risk
    mean               0.000708
    std                0.005626
    annualized_return  0.178316
    information_ratio  1.996555
    max_drawdown      -0.081806
    'The following are analysis results of the excess return with cost.'
                           risk
    mean               0.000512
    std                0.005626
    annualized_return  0.128982
    information_ratio  1.444287
    max_drawdown      -0.091078

    Here are detailed documents for qrun and workflow.

  2. Graphical Reports Analysis: Run examples/workflow_by_code.ipynb with jupyter notebook to get graphical reports

    • Forecasting signal (model prediction) analysis

      • Cumulative Return of groups Cumulative Return
      • Return distribution long_short
      • Information Coefficient (IC) Information Coefficient
        Monthly IC IC
      • Auto Correlation of forecasting signal (model prediction) Auto Correlation
    • Portfolio analysis

      • Backtest return Report
    • Explanation of above results

Building Customized Quant Research Workflow by Code

The automatic workflow may not suit the research workflow of all Quant researchers. To support a flexible Quant research workflow, Qlib also provides a modularized interface to allow researchers to build their own workflow by code. Here is a demo for customized Quant research workflow by code.

Quant Model Zoo

Here is a list of models built on Qlib.

Your PR of new Quant models is highly welcomed.

The performance of each model on the Alpha158 and Alpha360 dataset can be found here.

Run a single model

All the models listed above are runnable with Qlib. Users can find the config files we provide and some details about the model through the benchmarks folder. More information can be retrieved at the model files listed above.

Qlib provides three different ways to run a single model, users can pick the one that fits their cases best:

  • Users can use the tool qrun mentioned above to run a model's workflow based from a config file.

  • Users can create a workflow_by_code python script based on the one listed in the examples folder.

  • Users can use the script run_all_model.py listed in the examples folder to run a model. Here is an example of the specific shell command to be used: python run_all_model.py --models=lightgbm, where the --models arguments can take any number of models listed above(the available models can be found in benchmarks). For more use cases, please refer to the file's docstrings.

Run multiple models

Qlib also provides a script run_all_model.py which can run multiple models for several iterations. (Note: the script only support Linux for now. Other OS will be supported in the future. Besides, it doesn't support parrallel running the same model for multiple times as well, and this will be fixed in the future development too.)

The script will create a unique virtual environment for each model, and delete the environments after training. Thus, only experiment results such as IC and backtest results will be generated and stored.

Here is an example of running all the models for 10 iterations:

python run_all_model.py 10

It also provides the API to run specific models at once. For more use cases, please refer to the file's docstrings.

Quant Dataset Zoo

Dataset plays a very important role in Quant. Here is a list of the datasets built on Qlib:

Dataset US Market China Market
Alpha360
Alpha158

Here is a tutorial to build dataset with Qlib. Your PR to build new Quant dataset is highly welcomed.

More About Qlib

The detailed documents are organized in docs. Sphinx and the readthedocs theme is required to build the documentation in html formats.

cd docs/
conda install sphinx sphinx_rtd_theme -y
# Otherwise, you can install them with pip
# pip install sphinx sphinx_rtd_theme
make html

You can also view the latest document online directly.

Qlib is in active and continuing development. Our plan is in the roadmap, which is managed as a github project.

Offline Mode and Online Mode

The data server of Qlib can either deployed as Offline mode or Online mode. The default mode is offline mode.

Under Offline mode, the data will be deployed locally.

Under Online mode, the data will be deployed as a shared data service. The data and their cache will be shared by all the clients. The data retrieval performance is expected to be improved due to a higher rate of cache hits. It will consume less disk space, too. The documents of the online mode can be found in Qlib-Server. The online mode can be deployed automatically with Azure CLI based scripts. The source code of online data server can be found in Qlib-Server repository.

Performance of Qlib Data Server

The performance of data processing is important to data-driven methods like AI technologies. As an AI-oriented platform, Qlib provides a solution for data storage and data processing. To demonstrate the performance of Qlib data server, we compare it with several other data storage solutions.

We evaluate the performance of several storage solutions by finishing the same task, which creates a dataset (14 features/factors) from the basic OHLCV daily data of a stock market (800 stocks each day from 2007 to 2020). The task involves data queries and processing.

HDF5 MySQL MongoDB InfluxDB Qlib -E -D Qlib +E -D Qlib +E +D
Total (1CPU) (seconds) 184.4±3.7 365.3±7.5 253.6±6.7 368.2±3.6 147.0±8.8 47.6±1.0 7.4±0.3
Total (64CPU) (seconds) 8.8±0.6 4.2±0.2
  • +(-)E indicates with (out) ExpressionCache
  • +(-)D indicates with (out) DatasetCache

Most general-purpose databases take too much time to load data. After looking into the underlying implementation, we find that data go through too many layers of interfaces and unnecessary format transformations in general-purpose database solutions. Such overheads greatly slow down the data loading process. Qlib data are stored in a compact format, which is efficient to be combined into arrays for scientific computation.

Related Reports

Contact Us

  • If you have any issues, please create issue here or send messages in gitter.
  • If you want to make contributions to Qlib, please create pull requests.
  • For other reasons, you are welcome to contact us by email([email protected]).
    • We are recruiting new members(both FTEs and interns), your resumes are welcome!

Join IM discussion groups:

Gitter
image

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the right to use your contribution. For details, visit https://cla.opensource.microsoft.com.

When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Issues
  • Error when running LightGBM_Alpha158 model with minimal custom data

    Error when running LightGBM_Alpha158 model with minimal custom data

    🐛 Bug Description

    I try to import my own mini csv data (2 symbol and sh000300 index), and run the same model as demo:

    qrun benchmarks/LightGBM/workflow_config_lightgbm_Alpha158.yaml

    However it gives this error:

    TypeError: Can only swap levels on a hierarchical axis.

    To Reproduce

    Steps to reproduce the behavior:

    1. import 3 data series into own data folder cn_1d through csv import.

    000615 2008-01-02 2021-04-30 603919 2016-03-10 2021-04-30 SH000300 2008-01-02 2021-04-30

    1. Copy csi300.txt to own data folder subfolder cn_1d\instruments
    2. Update workflow_config_lightgbm_Alpha158.yaml to point to own data folder cn_1d
    3. run benchmark:

    qrun benchmarks/LightGBM/workflow_config_lightgbm_Alpha158.yaml

    Expected Behavior

    Similar analysis result as running on demo cn 1d data, with reduced data set.

    Screenshot

    image

    Environment

    Note: User could run cd scripts && python collect_info.py all under project directory to get system information and paste them here directly.

    Windows AMD64 Windows-10-10.0.19041-SP0 10.0.19041

    Python version: 3.8.8 (default, Feb 24 2021, 15:54:32) [MSC v.1928 64 bit (AMD64)]

    Qlib version: 0.6.3.99 numpy==1.20.3 pandas==1.2.4 scipy==1.6.0 requests==2.25.1 sacred==0.8.2 python-socketio==3.1.2 redis==3.5.3 python-redis-lock==3.7.0 schedule==1.0.0 cvxpy==1.0.21 hyperopt==0.1.1 fire==0.4.0 statsmodels==0.12.1 xlrd==2.0.1 plotly==4.12.0 matplotlib==3.1.3 tables==3.6.1 pyyaml==5.4.1 mlflow==1.14.0 tqdm==4.61.0 loguru==0.5.3 lightgbm==3.1.1 tornado==6.1 joblib==1.0.1 fire==0.4.0 ruamel.yaml==0.16.12

    • Commit number (optional, please provide it if you are using the dev version): cbbf6cd82260e533662a7433ba72cf3391347619

    Additional Notes

    bug 
    opened by arisliang 20
  • 请问在使用自己的数据集时如果生成例如csi300.txt的instrument

    请问在使用自己的数据集时如果生成例如csi300.txt的instrument

    ❓ Questions and Help

    We sincerely suggest you to carefully read the documentation of our library as well as the official paper. After that, if you still feel puzzled, please describe the question clearly under this issue.

    您好!我在尝试引入自己的数据,使用dump_bin.py生成features,calendars和instruments,但是instruments中没有csi300和csi100.在跑的时候会报错csi300.txt不存在,请问这个instruments中的csi300如何生成,谢谢!

    question stale 
    opened by TompaBay 19
  • 如何使用低频数据

    如何使用低频数据

    ❓ Questions and Help

    我将日频数据只取偶数交易日的值,去掉奇数交易日的数据,然后dump_all成qlib类型的数据,然后导入到实例程序workflow_by_code.ipynb里进行训练,在train model过程中出现报错。但我看您之前回答某个问题中说“Qlib didn't hard code the data frequency.”,请问一下如果数据不是日频的,应该如何使用(包括导入,训练,回测)?谢谢

    question 
    opened by panshuaiyin 17
  • Would you introduce about library of mlflow?

    Would you introduce about library of mlflow?

    ❓ Questions and Help

    What is the function of this library?#MLFLOW this is just a machinelearning frame,when i run one of benchmrks ,but it cound't it.

    question stale 
    opened by vinsvison 17
  • confusions about dump_bin.py

    confusions about dump_bin.py

    In https://github.com/microsoft/qlib/blob/main/scripts/dump_bin.py#L352 and https://github.com/microsoft/qlib/blob/main/scripts/dump_bin.py#L315 There are two classes that I don't know how to use, class DumpDataFix(DumpDataAll), and class DumpDataUpdate(DumpDataBase), can anyone explain it for me? I am looking for some ways to update dump data, but did not succeed till now.

    question stale 
    opened by zymmatt 16
  • Add two transformer models via upload

    Add two transformer models via upload

    Add a naive transformer model and an improved transformer model.

    Description

    The tested successful requirement is Python 3.6/3.7/3.8 and Pytorch 1.12/1.2.

    The naive transformer implemented here for financial time series prediction follows the paper "Attention is all you need": Given the input (N, T, F),

    1. An embedding layer that maps the input (N, T, F) to representation (N, T, F’);
    2. A positional encoding layer that adds the positional sigmoid;
    3. An encoder that consists of several encoding layers, each of which uses a self-attention layer as the computing module (function of query, key, and value).
    4. A decoder that consists of an MLP (or a Linear layer) that maps the representation of the last time (N, 1, F') into output (N, 1).

    The improved transformer is a simple self-designed transformer (based on the paper 'SLGT: Self-adaptive Local-global aware Transformer for Sequential Recommendation', which is submitted to a conference and will be available on ArXiv soon). Localformer imports 1-dimensional convolutional layers besides the encoder layer as a locality inductive bias to supplement the long-term dependent self-attention module, which updates the representation of sequence at each time locally. Specifically, the input representation that passes through each encoder layer (self-attention layer) will be the original input adds (+) the output of the input passing through an extra 1-d convolutional layer. For example, if the encoder originally contains three self-attention layers attn-attn-attn, it will now be conv-attn-conv-attn-conv-attn. After the transformer module, a GRU is added to further aggregate the representation with sequential inductive bias (provided by the RNN layers).

    Motivation and Context

    It adds two famous transformer models for customers to select, besides other base models that Qlib already contains. The model performance reaches a 1.47 information ratio, which is fairly high. The improved version transformer adds convolution and RNN to supplement inductive bias, which is simple but effective.

    How Has This Been Tested?

    • [ ] Pass the test by running: qrun benchmarks/Transformer/workflow_config_localformer_Alpha158.yaml under upper directory of qlib, where 'workflow_config_localformer_Alpha158.yaml' only needs to change this line of code 'task: model: class: LocalformerModel' or 'task: model: class: TransformerModel'.
    • [ ] The performances of the two models are described above.

    Screenshots of Test Results (if appropriate):

    Transformer Results on Alpha158: ''' 'IC': 0.03186587768611013, 'ICIR': 0.2556910881045764, 'Rank IC': 0.04735251936658551, 'Rank ICIR': 0.388378955424602

    'The following are analysis results of the excess return without cost.' risk mean 0.000309 std 0.004209 annualized_return 0.077839 information_ratio 1.164993 max_drawdown -0.106215

    'The following are analysis results of the excess return with cost.' risk mean 0.000126 std 0.004209 annualized_return 0.031707 information_ratio 0.474567 max_drawdown -0.131948

    Transformer Results on Alpha360: {'IC': 0.011659216755690713, 'ICIR': 0.07383408561758713, 'Rank IC': 0.03505118059955821, 'Rank ICIR': 0.2453042675836217} 'The following are analysis results of the excess return without cost.' risk mean 0.000026 std 0.005318 annualized_return 0.006658 information_ratio 0.078865 max_drawdown -0.104203

    Localformer Results on Alpha158: {'IC': 0.037426503365732174, 'ICIR': 0.28977883455541603, 'Rank IC': 0.04659889541774283, 'Rank ICIR': 0.373569340092482}

    'The following are analysis results of the excess return without cost.' risk mean 0.000381 std 0.004109 annualized_return 0.096066 information_ratio 1.472729 max_drawdown -0.094917

    'The following are analysis results of the excess return with cost.' risk mean 0.000213 std 0.004111 annualized_return 0.053630 information_ratio 0.821711 max_drawdown -0.113694

    Localformer Results on Alpha360: {'IC': 0.03766845905185995, 'ICIR': 0.26793394150788935, 'Rank IC': 0.0530091645633088, 'Rank ICIR': 0.40090294387953357} 'The following are analysis results of the excess return without cost.' risk mean 0.000131 std 0.004943 annualized_return 0.033129 information_ratio 0.422228 max_drawdown -0.127502

    Types of changes

    • [ ] Fix bugs
    • [x] Add new feature
    • [ ] Update documentation
    opened by yingtaoluo 15
  • about qlib data

    about qlib data

    If you use the pre-reinstatement price,it will imply future information.Howerer,If you use the real price,there will be problems in the calculation of return.Which kind of raw data is used in qilb?

    question stale 
    opened by ZFgan 15
  • Label does not match calculation from sorce data

    Label does not match calculation from sorce data

    ❓ Questions and Help

    Tried to understand how Qlib works and hit this issue: I calculated a label by Excel and compared it with the same label dumped from Qlib code, by same stock instrument in same year. They did NOT match, not evel close. I know even the 'source data' from Yahoo Finance was pre-processed by some notmalization but since my lebel involves only the close feature, it is supposed to remain unchanged through the process. See my screenshot below.

    In the left marked in yello is the source data calculation in Excel, data was fetched by D.feature and stored in csv, dumped to .bin then finally feed into 'provider_uri'; in the right marked in blue is the dump from DatasetH.prepare() by Qlib code. Please see both labels have same calculating expression but totally different values.

    image

    So why am I seeing this?

    question stale 
    opened by hensejiang 13
  • Qlib run into error by joblib or multiprocessing

    Qlib run into error by joblib or multiprocessing

    ❓ Questions and Help

    I was trying to develop some alpha following the doc at https://qlib.readthedocs.io/en/latest/advanced/alpha.html The code was pasted from the example as:

    if name == 'main': from qlib.data.dataset.loader import QlibDataLoader#MACD_EXP = '(EMA($close, 12) - EMA($close, 26))/$close - EMA((EMA($close, 12) - EMA($close, 26))/$close, 9)/$close' close_EXP = '($close)'` fields = [close_EXP] # close itself names = ['close_itself'] print('label test is trying to set label') labels = ['((Ref($close, -3) + Ref($close, -2) + Ref($close, -1)) / 3) / Ref($close) - 1'] # set label to IDC label_names = ['LABEL_IDC'] data_loader_config = { "feature": (fields, names), "label": (labels, label_names), } print('label test is trying to load data') data_loader = QlibDataLoader(config=data_loader_config) df = data_loader.load(instruments='csi300', start_time='2010-01-01', end_time='2010-01-31') df.to_csv(os.path.join(model_saving_uri,'label_mean-3_try.csv')) print(df) print('label test data is done')

    print('done...')

    Result from running this simple test is a long error message:

    TypeError Traceback (most recent call last) ~\AppData\Roaming\Python\Python38\site-packages\qlib\data\dataset_init_.py in init(self, handler, segments, **kwargs) 113 } 114 """ --> 115 self.handler: DataHandler = init_instance_by_config(handler, accept_types=DataHandler) 116 self.segments = segments.copy() 117 self.fetch_kwargs = {}

    ~\AppData\Roaming\Python\Python38\site-packages\qlib\utils_init_.py in init_instance_by_config(config, default_module, accept_types, try_kwargs, **kwargs) 334 # 1: XXX() got multiple values for keyword argument 'YYY' 335 # 2: `XXX() got an unexpected keyword argument 'YYY' --> 336 return klass(**cls_kwargs, **kwargs) 337 338

    ~\AppData\Roaming\Python\Python38\site-packages\qlib\contrib\data\handler.py in init(self, instruments, start_time, end_time, freq, infer_processors, learn_processors, fit_start_time, fit_end_time, filter_pipe, inst_processor, **kwargs) 78 } 79 ---> 80 super().init( 81 instruments=instruments, 82 start_time=start_time,

    ~\AppData\Roaming\Python\Python38\site-packages\qlib\data\dataset\handler.py in init(self, instruments, start_time, end_time, data_loader, infer_processors, learn_processors, shared_processors, process_type, drop_raw, **kwargs) 387 self.process_type = process_type 388 self.drop_raw = drop_raw --> 389 super().init(instruments, start_time, end_time, data_loader, **kwargs) 390 391 def get_all_processors(self):

    ~\AppData\Roaming\Python\Python38\site-packages\qlib\data\dataset\handler.py in init(self, instruments, start_time, end_time, data_loader, init_data, fetch_orig) 103 if init_data: 104 with TimeInspector.logt("Init data"): --> 105 self.setup_data() 106 super().init() 107

    ~\AppData\Roaming\Python\Python38\site-packages\qlib\data\dataset\handler.py in setup_data(self, init_type, **kwargs) 523 """ 524 # init raw data --> 525 super().setup_data(**kwargs) 526 527 with TimeInspector.logt("fit & process data"):

    ~\AppData\Roaming\Python\Python38\site-packages\qlib\data\dataset\handler.py in setup_data(self, enable_cache) 147 with TimeInspector.logt("Loading data"): 148 # make sure the fetch method is based on a index-sorted pd.DataFrame --> 149 self._data = lazy_sort_index(self.data_loader.load(self.instruments, self.start_time, self.end_time)) 150 # TODO: cache 151

    ~\AppData\Roaming\Python\Python38\site-packages\qlib\data\dataset\loader.py in load(self, instruments, start_time, end_time) 135 if self.is_group: 136 df = pd.concat( --> 137 { 138 grp: self.load_group_df(instruments, exprs, names, start_time, end_time, grp) 139 for grp, (exprs, names) in self.fields.items()

    ~\AppData\Roaming\Python\Python38\site-packages\qlib\data\dataset\loader.py in (.0) 136 df = pd.concat( 137 { --> 138 grp: self.load_group_df(instruments, exprs, names, start_time, end_time, grp) 139 for grp, (exprs, names) in self.fields.items() 140 },

    ~\AppData\Roaming\Python\Python38\site-packages\qlib\data\dataset\loader.py in load_group_df(self, instruments, exprs, names, start_time, end_time, gp_name) 211 212 freq = self.freq[gp_name] if isinstance(self.freq, dict) else self.freq --> 213 df = D.features( 214 instruments, exprs, start_time, end_time, freq=freq, inst_processors=self.inst_processor.get(gp_name, []) 215 )

    ~\AppData\Roaming\Python\Python38\site-packages\qlib\data\data.py in features(self, instruments, fields, start_time, end_time, freq, disk_cache, inst_processors) 1014 ) 1015 except TypeError: -> 1016 return DatasetD.dataset(instruments, fields, start_time, end_time, freq, inst_processors=inst_processors) 1017 1018

    ~\AppData\Roaming\Python\Python38\site-packages\qlib\data\data.py in dataset(self, instruments, fields, start_time, end_time, freq, inst_processors) 749 end_time = cal[-1] 750 --> 751 data = self.dataset_processor( 752 instruments_d, column_names, start_time, end_time, freq, inst_processors=inst_processors 753 )

    ~\AppData\Roaming\Python\Python38\site-packages\qlib\data\data.py in dataset_processor(instruments_d, column_names, start_time, end_time, freq, inst_processors) 522 zip( 523 inst_l, --> 524 ParallelExt(n_jobs=workers, backend=C.joblib_backend, maxtasksperchild=C.maxtasksperchild)(task_l), 525 ) 526 )

    ~\AppData\Roaming\Python\Python38\site-packages\joblib\parallel.py in call(self, iterable) 1054 1055 with self._backend.retrieval_context(): -> 1056 self.retrieve() 1057 # Make sure that we get a last message telling us we are done 1058 elapsed_time = time.time() - self._start_time

    ~\AppData\Roaming\Python\Python38\site-packages\joblib\parallel.py in retrieve(self) 933 try: 934 if getattr(self._backend, 'supports_timeout', False): --> 935 self._output.extend(job.get(timeout=self.timeout)) 936 else: 937 self._output.extend(job.get())

    ~.conda\envs\pt\lib\multiprocessing\pool.py in get(self, timeout) 769 return self._value 770 else: --> 771 raise self._value 772 773 def _set(self, i, obj):

    TypeError: init() missing 1 required positional argument: 'N'

    It seems the error lies in involking multiprocessing from joblib. I can't handle an error so deep down there, could someone look into this?

    From searching on web I got a possible reason that somewhere in a package is missing a 'self' in the init() function. While I can't tell it's from the code of Qlib or some other place. My own code was too simple to directly call any initiation function except the dataloaderlp and it appears with enough parameters sent in 'config' argument.

    Thanks.

    question stale 
    opened by hensejiang 13
  • Workflow questions

    Workflow questions

    First of all, thanks to you developers and Qlib contributors. This platform is contributing to my learning of the Quant world and especially Python programming, topics that I'm still a beginner.

    I'm from Brazil and running Qlib strategies for brazilian stocks. Luckily I managed to convert my dataset originally from CSV to qlib format and it seems to be working.

    That's why I have some doubts about the workflow, which if solved, will help me to flow in the work here.

    1. In “market” do I define a benchmark for my country? In Brazil we use the IBOVESPA benchmark, but as I have not yet selected the stocks that make up the index, I left this option as “all”. Whereas the “market” option is where I define the benchmark. What is the “benchmark” option in the workflow? lol is confusing to me. Was it my portfolio?

    image

    1. I am using LGBModel for testing. I see that in the prediction results the “sr.generate()” generates a score of the actions. What would this result be? Are the stocks that improve performed in the backtest?

    image

    1. If I understand the “market” and “benchmark” functions in workflow I should understand these results below. But I would like to know if I can change the frequency to “week” instead of “day”? Would I have to change my dataset?

    One suggestion: write some comments in the workflow_by_code.ipynb file I think it will help beginners like me.

    question stale 
    opened by Queituron 13
  • 画分层图时出现报错

    画分层图时出现报错

    ❓ Questions and Help

    在使用qlib.contrib.report.analysis_model.analysis_model_performance._group_return(pred_label)绘制分层图时出现如下报错:

    IndexError Traceback (most recent call last) in ----> 1 fun_res = analysis_model.analysis_model_performance._group_return(pred_label) 2 fun_res

    d:\miniconda3\envs\pytorch\lib\site-packages\pyqlib-0.7.0.99-py3.7-win-amd64.egg\qlib\contrib\report\analysis_model\analysis_model_performance.py in _group_return(pred_label, reverse, N, **kwargs) 66 cols=2, 67 print_grid=False, ---> 68 subplot_titles=["long-short", "long-average"], 69 ), 70 ).figure

    d:\miniconda3\envs\pytorch\lib\site-packages\pyqlib-0.7.0.99-py3.7-win-amd64.egg\qlib\contrib\report\graph.py in init(self, df, kind_map, layout, sub_graph_layout, sub_graph_data, subplots_kwargs, **kwargs) 294 self._init_sub_graph_data() 295 --> 296 self._init_figure() 297 298 def _init_sub_graph_data(self):

    d:\miniconda3\envs\pytorch\lib\site-packages\pyqlib-0.7.0.99-py3.7-win-amd64.egg\qlib\contrib\report\graph.py in _init_figure(self) 358 df=self._df.loc[:, [column_name]], 359 name_dict={column_name: temp_name}, --> 360 graph_kwargs=_graph_kwargs, 361 ) 362 )

    d:\miniconda3\envs\pytorch\lib\site-packages\pyqlib-0.7.0.99-py3.7-win-amd64.egg\qlib\contrib\report\graph.py in get_instance_with_graph_parameters(graph_type, **kwargs) 86 _graph_module = importlib.import_module("qlib.contrib.report.graph") 87 _graph_class = getattr(_graph_module, graph_type) ---> 88 return _graph_class(**kwargs) 89 90 @staticmethod

    d:\miniconda3\envs\pytorch\lib\site-packages\pyqlib-0.7.0.99-py3.7-win-amd64.egg\qlib\contrib\report\graph.py in init(self, df, layout, graph_kwargs, name_dict, **kwargs) 47 48 self._init_parameters(**kwargs) ---> 49 self._init_data() 50 51 def _init_data(self):

    d:\miniconda3\envs\pytorch\lib\site-packages\pyqlib-0.7.0.99-py3.7-win-amd64.egg\qlib\contrib\report\graph.py in _init_data(self) 57 raise ValueError("df is empty.") 58 ---> 59 self.data = self._get_data() 60 61 def _init_parameters(self, **kwargs):

    d:\miniconda3\envs\pytorch\lib\site-packages\pyqlib-0.7.0.99-py3.7-win-amd64.egg\qlib\contrib\report\graph.py in _get_data(self) 163 _data_list = [_t_df[_col] for _col in self._name_dict] 164 _label_list = list(self._name_dict.values()) --> 165 _fig = create_distplot(_data_list, _label_list, show_rug=False, **self._graph_kwargs) 166 167 return _fig["data"]

    d:\miniconda3\envs\pytorch\lib\site-packages\plotly-4.12.0-py3.7.egg\plotly\figure_factory_distplot.py in create_distplot(hist_data, group_labels, bin_size, curve_type, colors, rug_text, histnorm, show_hist, show_curve, show_rug) 196 rug_text, 197 show_hist, --> 198 show_curve, 199 ).make_hist() 200

    d:\miniconda3\envs\pytorch\lib\site-packages\plotly-4.12.0-py3.7.egg\plotly\figure_factory_distplot.py in make_hist(self) 341 start=self.start[index], 342 end=self.end[index], --> 343 size=self.bin_size[index], 344 ), 345 opacity=0.7,

    IndexError: invalid index to scalar variable.

    请问一下应该怎么改呢?

    question 
    opened by panshuaiyin 13
  • DoubleEnsemble doesn't Honor sub_weights When Computing Loss Values

    DoubleEnsemble doesn't Honor sub_weights When Computing Loss Values

    Hello, I notice in fit(), loss_values is computed based on the average prediction of trained sub-models (i.e. pred_ensemble): https://github.com/microsoft/qlib/blob/a87b02619aee4aff9c5aba23a66e614106050d75/qlib/contrib/model/double_ensemble.py#L90-L91

    However, in predict(), the final output is the weighted sum of predictions of sub-models: https://github.com/microsoft/qlib/blob/a87b02619aee4aff9c5aba23a66e614106050d75/qlib/contrib/model/double_ensemble.py#L245-L248

    In the paper https://arxiv.org/abs/2010.01265, the authors don't use weights for sub-models when making predictions. In fact, it is mentioned that

    We note it is possible to set a weight for each sub-model or develop a stacked generalization ensemble (aka stacking). In general, a proper way to combine the sub-models can further improve the performance and we leave it as a future research direction.

    My questions are:

    1. should we honor the weights when computing loss_values?
    2. without removing the flexibility of using custom sub_weights, is it better to use equal weights (i.e. [1/6]*6) as default values? https://github.com/microsoft/qlib/blob/a87b02619aee4aff9c5aba23a66e614106050d75/qlib/contrib/model/double_ensemble.py#L47
    opened by bridgream 0
  • split_CI

    split_CI

    Description

    Motivation and Context

    How Has This Been Tested?

    • [ ] Pass the test by running: pytest qlib/tests/test_all_pipeline.py under upper directory of qlib.
    • [ ] If you are adding a new feature, test on your own test scripts.

    Screenshots of Test Results (if appropriate):

    1. Pipeline test:
    2. Your own tests:

    Types of changes

    • [ ] Fix bugs
    • [ ] Add new feature
    • [ ] Update documentation
    opened by SunsetWolf 0
  •  Install in Win: error: command 'H:\\VisualStudio\\VC\\Tools\\MSVC\\14.29.30133\\bin\\HostX86\\x86\\link.exe' failed with exit code 1120

    Install in Win: error: command 'H:\\VisualStudio\\VC\\Tools\\MSVC\\14.29.30133\\bin\\HostX86\\x86\\link.exe' failed with exit code 1120

    build\lib.win32-cpython-37\qlib\data_libs\rolling.cp37-win_amd64.pyd : fatal error LNK1120: 108 个无法解析的外部命令 error: command 'H:\VisualStudio\VC\Tools\MSVC\14.29.30133\bin\HostX86\x86\link.exe' failed with exit code 1120 [end of output]

    ❓ Questions and Help

    We sincerely suggest you to carefully read the documentation of our library as well as the official paper. After that, if you still feel puzzled, please describe the question clearly under this issue.

    question 
    opened by ArtificialZeng 0
  • how to enable cache with redis?

    how to enable cache with redis?

    Hi,

    If I initialize qlib noly with a provider_uri like this: qlib.init(provider_uri='~/.qlib/qlib_data/cn_data')

    it seems that no cache is being done:

    1. I found the keys empty on redis
    2. when I repeat calling sth like D.features(instruments, fields, start_time='2010-01-01', end_time='2017-12-31', freq='day'), it always takes very long to get the data. No speeding up with cache.

    If I initialize qlib with this params: qlib.init(provider_uri='~/.qlib/qlib_data/cn_data', dataset_cache="SimpleDatasetCache"), obviously SimpleDatasetCache is doing its job.

    But still,

    1. what's the diffrenence between a DatasetCache and an expression_cache?
    2. how do I enable expression_cache?
    3. how do I enable the cache on redis?

    Many thanks!

    opened by rambo-yuanbo 3
  • training tricks of HIST

    training tricks of HIST

    Hi there,

    Thanks for making the codes of HIST public. I may need some discussion on two topics.

    1. iter_daily_shuffle or iter_daily Regarding the order of training samples fed to model, I've noticed that the days were shuffled by default (iter_daily_shuffle). And when I changed the setting to train samples day by day (iter_daily), I met a huge performance decrease. I'm a little confused about that. Is the method iter_daily_shuffle on suspicion of some information leakage since the model see later samples at first? Have you met the same situation when training the model?

    2. split of train/valid/test sets It introduces great randomness to model performance when I split train/valid/test sets in different time windows. I'm not sure if there is some workaround to overcome this kind of randomness and make the model more robust.

    Any idea or help would be appreciated!

    question 
    opened by BeckyYu96 0
  • fix bug on TRA dataset

    fix bug on TRA dataset

    solve issue "qrun TRA model error (#1062)"

    This is my first contrib here. I'd appreciate your help if there is anything wrong:)

    Description

    Motivation and Context

    How Has This Been Tested?

    • [ ] Pass the test by running: pytest qlib/tests/test_all_pipeline.py under upper directory of qlib.
    • [ ] If you are adding a new feature, test on your own test scripts.

    Screenshots of Test Results (if appropriate):

    1. Pipeline test:
    2. Your own tests:

    Types of changes

    • [X] Fix bugs
    • [ ] Add new feature
    • [ ] Update documentation
    opened by HyeongminMoon 0
Releases(v0.8.6)
  • v0.8.6(Jun 15, 2022)

    Changes

    🌟 Features

    • Csi500 example @you-n-g (#1126)
    • Add log info for ensemble @you-n-g (#1113)
    • opt local trainer (better mem releasing) @you-n-g (#1116)
    • Refine backtest codes @lihuoran (#1120)
    • fix_pylint_for_CI @SunsetWolf (#1119)
    • change_datasource @SunsetWolf (#1109)
    • Add .idea/ into gitignore @lihuoran (#1110)
    • Add .idea/ into gitignore @lihuoran (#1108)
    • init_instance_by_config enhancement @you-n-g (#1103)
    • Qlib RL framework (stage 1) - single-asset order execution @ultmaster (#1076)
    • fix_issue_1060 @SunsetWolf (#1092)
    • add_test_pit @SunsetWolf (#1089)
    • fix_macos_CI @SunsetWolf (#1081)
    • fix SepDataFrame when we del it to empty @you-n-g (#1082)
    • Make sepdf more like DataFrame @you-n-g (#1080)

    🐛 Bug Fixes

    • Fix hist_ref in update.py @you-n-g (#1096)
    • add gym @you-n-g (#1104)
    • Update detailed_workflow.ipynb @ChiahungTai (#1084)
    • fix_issue_715 @SunsetWolf (#1070)
    • Fixed pandas FutureWarning @Hubedge (#1073)
    • Missing f prefix on f-strings fix @code-review-doctor (#1072)

    📚 Documentation

    • Fixed a few mixed Chinese punctuation typos @bingyao (#1123)
    • Refine backtest codes @lihuoran (#1120)
    • Add explanation for the evalution metrics of Qlib @you-n-g (#1090)
    • Qlib RL framework (stage 1) - single-asset order execution @ultmaster (#1076)
    • Update README.md @you-n-g (#1091)
    • fix_issue_1060 @SunsetWolf (#1092)
    • Add instructions to add models @you-n-g (#1088)
    • Yahoo data Docs @you-n-g (#1077)
    • fix_macos_CI @SunsetWolf (#1081)
    • Fixed typos in workflow.rst @jingedawang (#1068)
    Source code(tar.gz)
    Source code(zip)
  • v0.8.5(Apr 24, 2022)

    Changes

    • update doc for TopK-Drop @wan9c9 (#1015)
    • Known Limitations In Recorder @you-n-g (#999)
    • Fix pit docs format @Chaoyingz (#957)
    • Add REG_TW. @ChiahungTai (#955)

    🌟 Features

    • fast fillna @you-n-g (#1074)
    • fix_issue_1019 @SunsetWolf (#1046)
    • Change Power to a NpPairOperator @wuzhe1234 (#1052)
    • Use the region in qlib.config for FileCalendarStorage. @ChiahungTai (#1049)
    • Update test_macos.yml with test doc @Wangwuyi123 (#1055)
    • update ci with test doc @Wangwuyi123 (#1054)
    • Add the HIST and IGMTF model on Alpha360 @Wentao-Xu (#1040)
    • Add high-frequency feature engineering code @Arthur-Null (#1022)
    • Add Qlib notebook tutorial @you-n-g (#1037)
    • Ibovespa index support @igor17400 (#990)
    • Fix Chinese punctuation regex comment @Chaoyingz (#1012)
    • Add pre-commit @you-n-g (#992)
    • Support feature names contain Chinese punctuation @Chaoyingz (#1003)
    • Add PRef operator (#988) @Chaoyingz (#1000)
    • Add lightgbm min version. @ChiahungTai (#995)
    • Add backtest example to online simulation @you-n-g (#984)
    • Optimize the pit collector script @Chaoyingz (#982)
    • Fix pit download_data script TypeError (#978) @Chaoyingz (#979)
    • Skip idx.is_lexsorted() when pandas version is larger than 1.3.0. @ChiahungTai (#973)
    • Use callback in LGBM.train. @ChiahungTai (#974)
    • Remove redundant import [fix pylint] @you-n-g (#962)
    • feat: add instrument context to inst_processor @PalanQu (#959)
    • Fix csi500 @SunsetWolf (#938)
    • Support Point-in-time Data Operation @bxdd (#343)

    🐛 Bug Fixes

    • Fix shared DF Error @you-n-g (#1044)
    • fix tra dataset bug @you-n-g (#1050)
    • Fixed issue #943 about TCTS init_fore_model @TuozhenLiu (#1047)
    • chore: bug-fix for crypto data collector @plpycoin (#1038)
    • Update setup.py to fix doc @Wangwuyi123 (#1043)
    • update cli.py @wan9c9 (#1008)
    • Fix pit download_data script TypeError (#978) @Chaoyingz (#979)
    • Fix load_object bug @you-n-g (#977)
    • safe remove file and more friendly log @you-n-g (#967)

    📚 Documentation

    • Update setup.py @you-n-g (#1048)
    • Update README.md @qinmoelei (#1039)
    • Add Qlib notebook tutorial @you-n-g (#1037)
    • Add docs for CSRankNorm @you-n-g (#1032)
    • fix ddgda run all bug & pylint @you-n-g (#1031)
    • Fix format for PULL_REQUEST_TEMPLATE.md @Chaoyingz (#1001)
    • Add lightgbm min version. @ChiahungTai (#995)
    • Add backtest example to online simulation @you-n-g (#984)
    • Fix comment typo @Chaoyingz (#987)
    • fix-issue948 @SunsetWolf (#986)
    • Update report.rst Metric @you-n-g (#980)
    • Update Tool Info @you-n-g (#981)
    • Update yahooquery marked words @Wangwuyi123 (#966)
    • fix annotation in PIT script @bxdd (#958)
    Source code(tar.gz)
    Source code(zip)
  • v0.8.4(Mar 8, 2022)

    Changes

    • Update initialization.rst @SunsetWolf (#941)
    • Bump numpy from 1.17.4 to 1.21.0 in /examples/benchmarks/TabNet @dependabot (#898)
    • Bump numpy from 1.17.4 to 1.21.0 in /examples/benchmarks/Transformer @dependabot (#897)
    • Bump numpy from 1.17.4 to 1.21.0 in /examples/hyperparameter/LightGBM @dependabot (#896)
    • Bump numpy from 1.17.4 to 1.21.0 in /examples/benchmarks/XGBoost @dependabot (#895)

    🌟 Features

    • [949] - Remove argument internal in BaseRun::download_data. @ChiahungTai (#953)
    • Fix error message in position.py @cuicorey (#922)
    • Fix wrong error messages. @ChiahungTai (#946)
    • [931] Remove mutable default argument. @ChiahungTai (#932)
    • performance mprovement @you-n-g (#921)
    • Add data analysis feature for report @you-n-g (#918)
    • Enhance pytorch nn @you-n-g (#917)
    • Fix pylint @SunsetWolf (#888)
    • Add more docs about initialization @you-n-g (#880)
    • Make the logic of handler Clear @you-n-g (#877)

    🐛 Bug Fixes

    • fix bug @wan9c9 (#950)
    • [930] Fix typo HasingStockStorage to HashingStockStorage. @ChiahungTai (#947)
    • Support Reweighter for HighFreq Model @you-n-g (#908)
    • add weight param @aurora5161 (#907)
    • fix workflow bug @you-n-g (#882)

    📚 Documentation

    • Update Metric Explanation @you-n-g (#920)
    • Add data analysis feature for report @you-n-g (#918)
    • Update README.md @wendili-cs (#915)
    • Some links about high-frequency trading @you-n-g (#884)
    • Update Portfolio README.md @you-n-g (#900)
    • Update Benchmark Docs @you-n-g (#899)
    • Docs improvement of backtest @you-n-g (#885)
    • Update handler processors docs @you-n-g (#879)
    • expression example @you-n-g (#887)
    • Docs to get original price @you-n-g (#878)
    Source code(tar.gz)
    Source code(zip)
  • v0.8.3(Jan 19, 2022)

    Changes

    • Bump numpy from 1.17.4 to 1.21.0 in /examples/benchmarks/ADARNN @dependabot (#870)
    • Bump numpy from 1.17.4 to 1.21.0 in /examples/benchmarks/ADD @dependabot (#869)
    • Bump numpy from 1.17.4 to 1.21.0 in /examples/benchmarks/ALSTM @dependabot (#868)
    • Bump numpy from 1.17.4 to 1.21.0 in /examples/benchmarks/CatBoost @dependabot (#867)
    • Bump numpy from 1.17.4 to 1.21.0 in /examples/benchmarks/DoubleEnsemble @dependabot (#866)
    • Bump numpy from 1.17.4 to 1.21.0 in /examples/benchmarks/GRU @dependabot (#833)
    • Bump numpy from 1.17.4 to 1.21.0 in /examples/benchmarks/LightGBM @dependabot (#830)
    • Bump numpy from 1.17.4 to 1.21.0 in /examples/benchmarks/SFM @dependabot (#829)
    • Bump numpy from 1.17.4 to 1.21.0 in /examples/benchmarks/TCTS @dependabot (#834)
    • Bump numpy from 1.17.4 to 1.21.0 in /examples/benchmarks/GATs @dependabot (#831)
    • Bump numpy from 1.17.4 to 1.21.0 in /examples/benchmarks/TRA @dependabot (#832)
    • Bump numpy from 1.17.4 to 1.21.0 in /examples/benchmarks/Localformer @dependabot (#835)
    • Bump numpy from 1.17.4 to 1.21.0 in /examples/benchmarks/MLP @dependabot (#836)
    • Bump numpy from 1.17.4 to 1.21.0 in /examples/benchmarks/TCN @dependabot (#837)
    • Bump numpy from 1.17.4 to 1.21.0 in /examples/benchmarks/LSTM @dependabot (#838)

    🌟 Features

    • fall back error @you-n-g (#875)
    • Disable Cache By Default @you-n-g (#871)
    • Supporting Arctic Backend Provider & Orderbook, Tick Data Example @luocy16 (#744)
    • Add future calendar collector @zhupr (#795)

    🐛 Bug Fixes

    • Remove arctic from Qlib core to Contrib @you-n-g (#865)
    • Fix pytorch_nn.py step bug @you-n-g (#864)

    📚 Documentation

    • Add Desc For the limitation of 3.9 @Wangwuyi123 (#863)
    • Fix code and docs for issues @you-n-g (#853)
    Source code(tar.gz)
    Source code(zip)
  • v0.8.1(Jan 15, 2022)

    Changes

    🌟 Features

    • pylint code refine & Fix nested example @you-n-g (#848)
    • chore: remove hard code input dimension of model pytorch_tcts @PalanQu (#843)
    • [840] - Test case for operators. @ChiahungTai (#841)
    • DDG-DA paper code @you-n-g (#743)
    • [807] Move the REG_CONSTANT/EPS to constant.py. @ChiahungTai (#811)
    • Some Optimization of online code @you-n-g (#784)
    • Add Crypto dataset from coingecko @b4thesunrise (#733)
    • Reformat example data names: use {region}_data for 1-day data, and {region}_data_1min for 1-min data @cning112 (#781)
    • support optimization based strategy @evanzd (#754)
    • Add hook for supporting RL strategy @you-n-g (#768)
    • Enhance Task Dict Var @you-n-g (#778)
    • Add Cache to avoid frequently loading Calendar @you-n-g (#766)
    • Update BCELoss in MLP model @cuicorey (#756)
    • solve VERSION.txt bug @b4thesunrise (#732)
    • Hyperopt upgrade @upgradvisor-bot (#741)
    • Add method parameter for volume @you-n-g (#734)

    🐛 Bug Fixes

    • Fix the read the docs error @you-n-g (#852)
    • pylint code refine & Fix nested example @you-n-g (#848)
    • fix: highfreq_gdbt_model of prepare data @PalanQu (#846)
    • Fix some warnings in log.py. @ChiahungTai (#805)
    • Fix $volume normalization issue @2young-2simple-sometimes-naive (#792)
    • Fix account shared bug @you-n-g (#791)
    • fix dump_bin:DumpDataUpdate @zhupr (#783)
    • Fix torch models on cpu @cning112 (#782)
    • fix cn_index collector @zhupr (#780)
    • Use encoding="utf-8" in open. @ChiahungTai (#773)
    • fix IndexError of the last trading day in backtest calendar @zhupr (#751)
    • remove unneeded code from workflow_by_code.ipynb && fix analysis_model_performance @zhupr (#740)

    📚 Documentation

    • Add description of the pr template. @ChiahungTai (#812)
    • Fix typos and comments. @ChiahungTai (#815)
    • Update README.md @you-n-g (#802)
    • Fix BaseStrategy path. @ChiahungTai (#801)
    • Add a more understandable example of data workflow @you-n-g (#797)
    • fix_typo @SunsetWolf (#790)
    • Update Contributor list @you-n-g (#779)
    • Update Docs of Alpha360 @you-n-g (#777)
    • Replace scripts/get_data.py to get_data.py. @ChiahungTai (#775)
    • Fix typo leanable to learnable. @ChiahungTai (#774)
    • Add docs about the patameters @you-n-g (#771)
    • add description of dataset document @zhupr (#742)
    Source code(tar.gz)
    Source code(zip)
  • v0.8.0(Dec 7, 2021)

    Changes

    • docs improvement @you-n-g (#730)
    • Fix backtest @zhupr (#719)
    • add logger @demon143 (#709)
    • Add SigAnaRecord in to workflow_by_code.py @you-n-g (#707)
    • support adding from date when updating pred @you-n-g (#703)
    • Add A New Baseline: ADD @f-cg (#704)
    • Fix high-freq data @zhupr (#702)
    • Update task_management.rst @demon143 (#700)
    • Update workflow_by_code.ipynb @wan9c9 (#697)
    • Update task_management.rst @demon143 (#654)
    • Merging Backtest improve @you-n-g (#694)
    • Add AdaRNN baseline. @lwwang1995 (#689)
    • add ops_warning_log to config @zhupr (#685)
    • Callable Exp @you-n-g (#683)
    • bugfix: Fix the problem that caused highfreq's yaml to be unusable @Ckend (#678)
    • add default protocol_version @zhupr (#677)
    • An example to get index from TSDataSampler @you-n-g (#679)
    • handler demo cache @you-n-g (#606)
    • Improve the backtest design and APIs @you-n-g (#650)
    • More citations @markzhao98 (#673)
    • Add A New Baseline: TCN @f-cg (#668)
    • GPU identification bug fix for GATs @markzhao98 (#669)
    • fix 'duplicate axis' error when updating cache @zhupr (#661)
    • add logs in case of ops.py errors @zhupr (#659)
    • Adjusting gbdt.py's parameter @you-n-g (#660)

    🌟 Features

    • Auto injecting model and dataset for Recorder @you-n-g (#645)
    • Checking dataset empty @you-n-g (#647)
    • Update TCTS. @lwwang1995 (#643)
    • Add support for MacOS-11 @zhupr (#630)

    🐛 Bug Fixes

    • Fix update record bug @you-n-g (#723)
    • improve the doc of auto init @you-n-g (#541)
    • fix workflow_config_lightgbm_multi_freq.yaml @zhupr (#635)
    • remove 3.6 @you-n-g (#629)

    📚 Documentation

    • Update the docs of ops.py @you-n-g (#718)
    • improve the doc of auto init @you-n-g (#541)
    • more detailed docs for workflow @you-n-g (#639)
    • Update manage.py @demon143 (#628)
    • Update benchmark based on new backtest @you-n-g (#634)
    Source code(tar.gz)
    Source code(zip)
  • v0.8.0a1(Sep 30, 2021)

    Changes

    • Merge nested main @wangwenxi-handsome (#597)

    🌟 Features

    • Support Highfreq Backtest with the Model/Rule/RL Strategy @bxdd (#438)
    Source code(tar.gz)
    Source code(zip)
  • v0.7.2(Sep 30, 2021)

    Changes

    • make the prediction update more friendly @you-n-g (#609)
    • Fix Models @you-n-g (#483)
    • update change doc @demon143 (#623)
    • Update initialization.rst @demon143 (#622)
    • Share version number @you-n-g (#620)
    • Add file lock for MLflowExpManager @you-n-g (#619)
    • Update code_standard.rst @demon143 (#587)
    • update cvxpy version @you-n-g (#616)

    🐛 Bug Fixes

    • Fix the type of filter_pipe @zhupr (#611)
    Source code(tar.gz)
    Source code(zip)
  • v0.7.1(Sep 16, 2021)

    Changes

    • Update setup.py @anukaal (#600)
    • Fix SimpleDatasetCache @zhupr (#604)
    • Fix undefined names in Python code @cclauss (#599)
    • Supporting shared processor @you-n-g (#596)
    • test.yml: Remove redundant code @cclauss (#595)
    • fix typos @saintmalik (#592)
    • Fix TRA @evanzd (#591)
    • Modify the Feature to be case sensitive @zhupr (#589)
    • Update manage.py @demon143 (#586)
    • Update FAQ.rst @zhupr (#588)
    • Multiple freq support @zhupr (#580)
    • without_conda @Wangwuyi123 (#575)
    • Update ensemble.py @demon143 (#560)
    • Update README.md @you-n-g (#546)
    • Update strategy.py @ZhangTP1996 (#545)
    • fix TRA when logdir is None @evanzd (#542)
    • refactor TRA @evanzd (#531)
    • refactor online serving rolling api @you-n-g (#539)
    • sort index after loader @you-n-g (#538)
    • Update data.rst @panshuaiyin (#532)
    • Add two transformer models via upload @yingtaoluo (#508)
    • Fix macos test ci @zhupr (#530)
    • Remove the date fetch from the expression and calculate it when used instead @zhupr (#527)
    • Update qrun to automaticly save the config to the artifacts uri @wuzhe1234 (#525)
    • Add a check if change is mutated to YahooNormalize1d @zhupr (#524)
    • Issue fix @slowy07 (#523)
    • Add filter string to mlflow experiment list_recorders function. @chaosddp (#512)
    • Add a check if change is mutated to YahooNormalize1d @zhupr (#514)
    • Bug fix: ClientProvider not set connection to calendar and instrument provider when initializing. @chaosddp (#500)
    • updated readme of yahoo collector where region parameter was incorrect @2796gaurav (#504)

    🌟 Features

    • MVP for Indian Stocks in qlib using yahooquery @2796gaurav (#513)

    🐛 Bug Fixes

    • check lexsort in the 'lazy_sort_index' function @markzhao98 (#566)
    • Fix multi-process loop calls @zhupr (#574)
    • Fix shared task dict BUG @you-n-g (#576)
    Source code(tar.gz)
    Source code(zip)
  • v0.7.0(Jul 11, 2021)

    Changes

    • Update workflow.rst @xiaowuhu (#497)
    • Update workflow.rst @xiaowuhu (#496)
    • Update TCTS. @lwwang1995 (#495)
    • support check_transform_proc module_path @bxdd (#494)
    • Make OnlineToolR more user-friendly and fix some bugs @lzh222333 (#475)
    • examples/workflow_by_code.ipynd: fix an error in R.get_recorder() par… @docularxu (#481)
    • Add TRA Model @linhx25 (#479)
    • Support using config to register custom operators @bxdd (#476)
    • Set self.fitted = True instead of self._fitted. @topskychen (#478)
    • Support extend data @zhupr (#463)
    • simplify the code and prevent float when shifting @you-n-g (#473)
    • Update TCTS README. @lwwang1995 (#472)
    • Add TCTS baseline. @lwwang1995 (#464)
    • Remove non-existing parameter description @arisliang (#462)
    • fix DelayTrainerRM @lzh222333 (#459)
    • Multiprocessing support for Online Serving @lzh222333 (#435)
    • fix XGBoost predict error @zhupr (#457)
    • Add import stock pool in doc @arisliang (#452)
    • add get_feature_importance to model interpret @zhupr (#444)
    • Update 1min demo data in CSV format @arisliang (#442)
    • Remove repeated package from requirements @arisliang (#447)
    • Update integration.rst @arisliang (#448)
    • Update report.rst @arisliang (#450)
    • Fix YahooCollector can't download 1min data @zhupr (#441)
    • Update collector.py @arisliang (#440)
    • Update README.md @arisliang (#439)
    • add data storage @zhupr (#372)
    • Update README.md @arisliang (#433)
    • Fix get_module_by_module_path to support pickle module loaded from arbitrage source file @evanzd (#431)
    • LightGBM hyperparameter @ChengYen-Tang (#423)
    • Add configurable dataset to examples @zhupr (#416)
    • Add set_global_logger_level @zhupr (#412)
    • Add future trading date collector @zhupr (#405)
    • Fix online mode bugs @zhupr (#401)
    • update high freq demo @javaThonc (#358)
    • Fix print issue @D-X-Y (#381)
    • Modify get_exp & get_recorder api @Derek-Wds (#380)
    • Add DataLoader Based on DataHandler & Add Rolling Process Example & Restructure the Config & Setup_data @bxdd (#374)
    • Fix us_index collector @zhupr (#379)
    • Add MultiSegRecord and add segment kwargs in model.pred @D-X-Y (#378)
    • debug @lewwang1995 (#373)
    • Update notebook @Derek-Wds (#371)
    • fix docs @Flouse (#365)
    • Add load_object function for R @D-X-Y (#362)
    • Fix data doc @bxdd (#359)
    • Fix yahoo_collector @zhupr (#357)
    • Fix dump_bin.py && check_dump_bin.py @zhupr (#350)
    • Update init.py @wendili-cs (#351)
    • Update Contact Us Information @you-n-g (#348)
    • fix bug of consider TURE as boolean instead of stock code @2young-2simple-sometimes-naive (#347)
    • Fix errors when SignalRecord is not called before SigAna/PortAna @D-X-Y (#345)
    • Fix bugs in Ghost BN in TabNet and typos in README @D-X-Y (#337)
    • another typo of docs @Rekind1e (#333)
    • Fix typo of docs @Rekind1e (#332)
    • Fixed code quality issues @withshubh (#311)
    • Fix Various Bugs for contrib.pytorch_ models @D-X-Y (#329)
    • Add BaseCollector @zhupr (#324)
    • Move get_path to get_or_create_path, use the best model of SFM / TabNet @D-X-Y (#328)
    • Fix code in ops @bxdd (#318)
    • Fix collector doc @ChengYen-Tang (#272)
    • Update FAQ doc & Update ops docstring @bxdd (#300)
    • Update the Wrapper class to have an informative str representation @D-X-Y (#298)
    • Add a new method to benchmarks: DoubleEnsemble @meng-ustc (#286)
    • Update README.md @wendili-cs (#291)
    • Update filter.py @you-n-g (#277)
    • safe yaml loader @you-n-g (#273)
    • Update workflow.rst @lbaiao (#268)
    • Fix typo in Data Layer @miaekim (#265)
    • Add Qlib highfreq doc & Update DatatSet Init Method @bxdd (#257)
    • Fix typo in workflow_by_code.py @pingsutw (#259)
    • Fix Highfreq Freq @bxdd (#256)

    🌟 Features

    • Online bug fix, enhancement & docs for dataset, workflow, trainer ... @you-n-g (#466)
    • init version of online serving and rolling @you-n-g (#290)
    • Modify set_global_logger_level use of contextmanager @zhupr (#418)
    • Stale bot update @Derek-Wds (#413)
    • Support start exp with given exp & recorder id @Derek-Wds (#404)
    • Add fund data as an example @wangershi (#292)
    • Support resuming recorder @Derek-Wds (#340)
    • Implement Enhanced Indexing as a Portfolio Optimizer @yongzhengqi (#280)
    • (1) Fix /0 bug in double_ensemble, (2) remove _default_uri for R/expm, (3) support model size in pytorch models @D-X-Y (#314)
    • Update repr for dataset/workflow classes and add uri kwarg for QlibRecorder @D-X-Y (#302)
    • Add model saving for qrun and workflow example @Derek-Wds (#264)
    • Update models to enable save/load @Derek-Wds (#261)

    🐛 Bug Fixes

    • Online bug fix, enhancement & docs for dataset, workflow, trainer ... @you-n-g (#466)
    • Update Recorder Wrapper to prevent reinitialization @Derek-Wds (#471)
    • Fix exception hook bug @Derek-Wds (#461)
    • Fix bug and update doc @Derek-Wds (#419)
    • Fix logger pickling error @Derek-Wds (#407)
    • Update qlib logger @Derek-Wds (#393)
    • Support resuming recorder @Derek-Wds (#340)
    • (1) Fix /0 bug in double_ensemble, (2) remove _default_uri for R/expm, (3) support model size in pytorch models @D-X-Y (#314)
    • Fix pytorch ts model loader bug @Derek-Wds (#322)
    • Update repr for dataset/workflow classes and add uri kwarg for QlibRecorder @D-X-Y (#302)
    • Update Highfreq Handler & Ops / Fix a Highfreq Bug @bxdd (#254)
    • Update models to enable save/load @Derek-Wds (#261)
    • Update readme and setup.py @Derek-Wds (#258)
    • CI: the MacOS numpy bug. @Derek-Wds (#253)
    • Fix CI @Derek-Wds (#250)

    📚 Documentation

    • Online bug fix, enhancement & docs for dataset, workflow, trainer ... @you-n-g (#466)
    • Fix bug and update doc @Derek-Wds (#419)
    • Update doc @Derek-Wds (#399)
    • Update Filter doc @Derek-Wds (#319)
    • Update docs about record-temp @Derek-Wds (#260)
    • update 1min docs @zhupr (#252)
    Source code(tar.gz)
    Source code(zip)
  • v0.6.2(Feb 2, 2021)

    Changes

    • move freq params to dataloader @you-n-g (#234)
    • Update pytorch_nn.py @wendili-cs (#241)
    • Update pytorch_alstm_ts.py @wendili-cs (#243)
    • Update pytorch_gats.py @wendili-cs (#244)
    • Update pytorch_gru.py @wendili-cs (#245)
    • Update pytorch_gru_ts.py @wendili-cs (#246)
    • Update pytorch_lstm.py @wendili-cs (#247)
    • Update pytorch_lstm_ts.py @wendili-cs (#248)
    • Update pytorch_alstm.py @wendili-cs (#242)
    • Fix bug in alpha360 @bxdd (#236)
    • Add filter_pipe API @Derek-Wds (#220)
    • Update data handler @you-n-g (#228)
    • Qlib Highfreq Support & Highfreq DataHanlder/Operator/Processor Examples @bxdd (#222)
    • Add paper year @Derek-Wds (#224)
    • Support yahoo 1min data @zhupr (#221)
    • Fix the error when the stock code is a number @zhupr (#78)
    • Support Register of Custom Feature Operators Easily @bxdd (#92)
    • Update pytorch_nn.py @wendili-cs (#213)
    • tabnet @javaThonc (#205)
    • for IDE auto-complete with global Wrapper @GoooIce (#201)
    • Update .gitignore @GoooIce (#203)
    • Add dataset standalone usage example @you-n-g (#200)
    • Support Return Order List in Backtest & Assign Executor in Config @bxdd (#198)
    • fix setup error @GoooIce (#197)
    • Update pytorch_lstm_ts.py @wendili-cs (#194)
    • Update pytorch_gru_ts.py @wendili-cs (#193)
    • Update pytorch_gats_ts.py @wendili-cs (#192)
    • Update pytorch_alstm_ts.py @wendili-cs (#191)
    • Security Fix for Arbitrary Code Execution - huntr.dev @huntr-helper (#189)
    • Update docs and add Python 3.9 CI @Derek-Wds (#178)
    • Update initialization.rst @GoooIce (#188)
    • Fix create_recorder bug @Derek-Wds (#182)
    • Fix unrecognized config bug @fzc621 (#183)
    • Fix some typo in qlib/tests/data.py @fzc621 (#179)
    • Supporting dict to define strategy in evaluate.py @you-n-g (#177)
    • Update workflow_config_gru_Alpha158.yaml @wendili-cs (#175)
    • Update workflow_config_lstm_Alpha158.yaml @wendili-cs (#174)
    • Update docs @Derek-Wds (#164)
    • Fix the first trading day of the calendar extra in report_df @zhupr (#125)
    • Fix recorder temp dir bug @Derek-Wds (#148)
    • better MemCacheUnit implement @hadrianl (#145)
    • Update alpha.rst @bxdd (#143)
    • add more doc to PortAnaRecord @you-n-g (#138)
    • fixing typos #4 @maciejdomagala (#135)
    • fixing typos #3 @maciejdomagala (#134)
    • Update benchmark performance @Derek-Wds (#97)
    • fixing typos #2 @maciejdomagala (#130)
    • Config.getattr should raise AttributeError @hadrianl (#129)
    • Refactor to Python3 style @Gwill (#119)
    • Demo @Derek-Wds (#122)
    • Add stale bot @Derek-Wds (#124)
    • Typo fix @maciejdomagala (#123)
    • Update CI and script @Derek-Wds (#118)
    • Update the Sign operation in ops.py @YifanDengWHU (#113)
    Source code(tar.gz)
    Source code(zip)
  • v0.6.0(Dec 1, 2020)

    Changes

    • Add AI baselines

      • CatBoost @javaThonc
      • TFT @wendili-cs
      • Linear @evanzd
      • ALSTM @Pikapikachuu @Don-ustc
      • SFM @javaThonc
      • LSTM & GRU @evanzd @lwwang1995
      • Gats @meng-ustc @Turtlesyu-27
      • XGBoost @javaThonc @lwwang1995
    • Fix and move to version 0.6.0 @Derek-Wds (#73)

    • Help to PR @you-n-g (#72)

    • refine docs @you-n-g (#71)

    • Fix ops bug & add raise comments of Skew Kurt @bxdd (#70)

    • Add download qlib_data docs @zhupr (#69)

    • Refactor collector @zhupr (#68)

    • Fix re about provider_uri & Fix 'exit not defined' error in ipython @bxdd (#67)

    • Add RiskModel and Portfolio Module @evanzd (#60)

    • Support csi100 data collection && Fix data collector @zhupr (#57)

    🌟 Features

    • Refactor Qlib interface @you-n-g @Derek-Wds @lwwang1995 @evanzd @zhupr @wendili-cs @javaThonc @meng-ustc @Don-ustc @Pikapikachuu @bxdd (#56)
    • support non-full-fill rate of executor @you-n-g (#66)
    • Make the DNN model compatible with CPU & Update the Estimator doc @bxdd (#49)

    🐛 Bug Fixes

    • fix the float conversion bug @you-n-g (#62)
    • fix requirements.txt @morristai (#45)

    📚 Documentation

    • Fix typo @ogabrielluiz (#55)
    • Make the DNN model compatible with CPU & Update the Estimator doc @bxdd (#49)
    • Update CI & add black formatter @Derek-Wds (#51)
    • Update badges in REAME.md @bxdd (#44)
    Source code(tar.gz)
    Source code(zip)
    pyqlib-0.6.0-cp36-cp36m-macosx_10_14_x86_64.whl(254.74 KB)
    pyqlib-0.6.0-cp36-cp36m-manylinux1_x86_64.whl(608.91 KB)
    pyqlib-0.6.0-cp36-cp36m-manylinux2010_x86_64.whl(608.91 KB)
    pyqlib-0.6.0-cp36-cp36m-win_amd64.whl(260.37 KB)
    pyqlib-0.6.0-cp37-cp37m-macosx_10_14_x86_64.whl(253.50 KB)
    pyqlib-0.6.0-cp37-cp37m-manylinux1_x86_64.whl(611.79 KB)
    pyqlib-0.6.0-cp37-cp37m-manylinux2010_x86_64.whl(611.79 KB)
    pyqlib-0.6.0-cp37-cp37m-win_amd64.whl(260.14 KB)
    pyqlib-0.6.0-cp38-cp38-macosx_10_14_x86_64.whl(254.07 KB)
    pyqlib-0.6.0-cp38-cp38-manylinux1_x86_64.whl(647.67 KB)
    pyqlib-0.6.0-cp38-cp38-manylinux2010_x86_64.whl(647.67 KB)
    pyqlib-0.6.0-cp38-cp38-win_amd64.whl(261.91 KB)
  • v0.5.1(Oct 1, 2020)

    Changes

    • Add the CI/CD
      • add the test CI @Derek-Wds
      • add the publishing action to support pip installation @bxdd
    • Fix some bugs
      • Fix bugs in test scripts @you-n-g @zhupr
      • Add the error message when using Qlib in the repository directory @bxdd
    • Add a simpler dataset @zhupr
    • Update the documentation
      • Add the badges @bxdd
      • Add the FAQ document @zhupr
      • Add the description for the new installation method (pip) @bxdd
      • Fix some other errors @wendili-cs @vanshg

    🌟 Features

    • Release v0.5.1 @you-n-g (#31)

    🐛 Bug Fixes

    • Release v0.5.1 @you-n-g (#31)

    📚 Documentation

    • Fix typo in examples README @vanshg (#32)
    • add test and mod doc @you-n-g (#17)
    • Update data.rst @wendili-cs (#24)
    • Update README.md @wendili-cs (#22)
    • Update estimator.rst @wendili-cs (#23)
    • Add a Gitter chat badge to README.md @gitter-badger (#21)
    • Update data related information @Derek-Wds (#16)
    Source code(tar.gz)
    Source code(zip)
    pyqlib-0.5.1-cp36-cp36m-macosx_10_14_x86_64.whl(206.06 KB)
    pyqlib-0.5.1-cp36-cp36m-manylinux1_x86_64.whl(559.86 KB)
    pyqlib-0.5.1-cp36-cp36m-manylinux2010_x86_64.whl(559.86 KB)
    pyqlib-0.5.1-cp36-cp36m-win_amd64.whl(210.99 KB)
    pyqlib-0.5.1-cp37-cp37m-macosx_10_14_x86_64.whl(204.69 KB)
    pyqlib-0.5.1-cp37-cp37m-manylinux1_x86_64.whl(562.31 KB)
    pyqlib-0.5.1-cp37-cp37m-manylinux2010_x86_64.whl(562.32 KB)
    pyqlib-0.5.1-cp37-cp37m-win_amd64.whl(210.77 KB)
    pyqlib-0.5.1-cp38-cp38-macosx_10_14_x86_64.whl(205.47 KB)
    pyqlib-0.5.1-cp38-cp38-manylinux1_x86_64.whl(598.61 KB)
    pyqlib-0.5.1-cp38-cp38-manylinux2010_x86_64.whl(598.62 KB)
    pyqlib-0.5.1-cp38-cp38-win_amd64.whl(212.47 KB)
  • v0.5.0(Sep 24, 2020)

    Qlib is an AI-oriented quantitative investment platform, which aims to realize the potential, empower the research, and create the value of AI technologies in quantitative investment. With Qlib, you can easily try your ideas to create better Quant investment strategies.

    Source code(tar.gz)
    Source code(zip)
Owner
Microsoft
Open source projects and samples from Microsoft
Microsoft
High-performance TensorFlow library for quantitative finance.

TF Quant Finance: TensorFlow based Quant Finance Library Table of contents Introduction Installation TensorFlow training Development roadmap Examples

Google 3.1k Jun 18, 2022
Python library for backtesting trading strategies & analyzing financial markets (formerly pythalesians)

finmarketpy (formerly pythalesians) finmarketpy is a Python based library that enables you to analyze market data and also to backtest trading strateg

Cuemacro 2.9k Jun 11, 2022
Python Backtesting library for trading strategies

backtrader Yahoo API Note: [2018-11-16] After some testing it would seem that data downloads can be again relied upon over the web interface (or API v

DRo 8.9k Jun 18, 2022
:mag_right: :chart_with_upwards_trend: :snake: :moneybag: Backtest trading strategies in Python.

Backtesting.py Backtest trading strategies with Python. Project website Documentation the project if you use it. Installation $ pip install backtestin

null 2.5k Jun 20, 2022
'Personal Finance' is a project where people can manage and track their expenses

Personal Finance by Abhiram Rishi Pratitpati 'Personal Finance' is a project where people can manage and track their expenses. It is hard to keep trac

Abhiram Rishi Prattipati 1 Dec 21, 2021
rotki is an open source portfolio tracking, analytics, accounting and tax reporting tool that respects your privacy.

rotki is an open source portfolio tracking, analytics, accounting and tax reporting tool that respects your privacy. The mission of rotki is to bring transparency into the crypto and financial sectors through the use of open source.

Rotki 1.7k Jun 24, 2022
Common financial risk and performance metrics. Used by zipline and pyfolio.

empyrical Common financial risk metrics. Table of Contents Installation Usage Support Contributing Testing Installation pip install empyrical Usage S

Quantopian, Inc. 933 Jun 13, 2022
Technical Analysis Library using Pandas and Numpy

Technical Analysis Library in Python It is a Technical Analysis library useful to do feature engineering from financial time series datasets (Open, Cl

Darío López Padial 3.1k Jun 21, 2022
Portfolio and risk analytics in Python

pyfolio pyfolio is a Python library for performance and risk analysis of financial portfolios developed by Quantopian Inc. It works well with the Zipl

Quantopian, Inc. 4.4k Jun 21, 2022
An open source reinforcement learning framework for training, evaluating, and deploying robust trading agents.

TensorTrade: Trade Efficiently with Reinforcement Learning TensorTrade is still in Beta, meaning it should be used very cautiously if used in producti

null 3.9k Jun 21, 2022
Find big moving stocks before they move using machine learning and anomaly detection

Surpriver - Find High Moving Stocks before they Move Find high moving stocks before they move using anomaly detection and machine learning. Surpriver

Tradytics 1.5k Jun 18, 2022
personal finance tracker, written in python 3 and using the wxPython GUI toolkit.

personal finance tracker, written in python 3 and using the wxPython GUI toolkit.

wenbin wu 23 Jun 8, 2022
Fourth and final milestone project

Milestone Project 4: Pound Dog Click link to visit "Pound Dog" Aim of the project The aim of this project is to provide access to a website informing

Jamie Wilson 1 Oct 31, 2021
Investment and risk technologies maintained by Fortitudo Technologies.

Fortitudo Technologies Open Source This package allows you to freely explore open-source implementations of some of our fundamental technologies under

Fortitudo Technologies 7 Jun 24, 2022
Fully Automated YouTube Channel ▶️with Added Extra Features.

Fully Automated Youtube Channel ▒█▀▀█ █▀▀█ ▀▀█▀▀ ▀▀█▀▀ █░░█ █▀▀▄ █▀▀ █▀▀█ ▒█▀▀▄ █░░█ ░░█░░ ░▒█░░ █░░█ █▀▀▄ █▀▀ █▄▄▀ ▒█▄▄█ ▀▀▀▀ ░░▀░░ ░▒█░░ ░▀▀▀ ▀▀▀░

sam-sepiol 180 Jun 21, 2022
✔️ Create to-do lists to easily manage your ideas and work.

Todo List + Add task + Remove task + List completed task + List not completed task + Set clock task time + View task statistics by date Changelog v 1.

Abbas Ataei 25 May 31, 2022
Empyrial is a Python-based open-source quantitative investment library dedicated to financial institutions and retail investors

By Investors, For Investors. Want to read this in Chinese? Click here Empyrial is a Python-based open-source quantitative investment library dedicated

Santosh 555 Jun 21, 2022
Showing potential issues with merge strategies

Showing potential issues with merge strategies Context There are two branches in this repo: main and a feature branch feat/inverting-method (not the b

Rubén 2 Dec 20, 2021
Quant & Systematic Crypto Research Tools

qsec Quant & Systematic Crypto Research Tools -->WORK IN PROGRESS<-- This repo is a collection of research tools to help in exploring and building sys

Darren Smith 2 Jan 19, 2022
Procedurally generated Oblique Strategies for writing your own Oblique Strategies

Procedurally generated Oblique Strategies for writing your own Oblique Strategies.

Gordon Brander 12 May 23, 2022
A set of procedures that can realize covid19 virus detection based on blood.

A set of procedures that can realize covid19 virus detection based on blood.

Nuyoah-xlh 3 Mar 7, 2022
A project which aims to protect your privacy using inexpensive hardware and easily modifiable software

Protecting your privacy using an ESP32, an IR sensor and a python script This project, which I personally call the "never-gonna-catch-me-in-the-act-ev

null 7 May 19, 2022
Using Hotel Data to predict High Value And Potential VIP Guests

Description Using hotel data and AI to predict high value guests and potential VIP guests. Hotel can leverage on prediction resutls to run more effect

HCG 12 Feb 14, 2022
BisQue is a web-based platform designed to provide researchers with organizational and quantitative analysis tools for 5D image data. Users can extend BisQue by implementing containerized ML workflows.

Overview BisQue is a web-based platform specifically designed to provide researchers with organizational and quantitative analysis tools for up to 5D

Vision Research Lab @ UCSB 17 Jun 10, 2022
Multi-asset backtesting framework. An intuitive API lets analysts try out their strategies right away

Multi-asset backtesting framework. An intuitive API lets analysts try out their strategies right away. Fast execution of profit-take/loss-cut orders is built-in. Seamless with Pandas.

Epymetheus 28 Jun 11, 2022
Checkout some cool self-projects you can try your hands on to curb your boredom this December!

SoC-Winter Checkout some cool self-projects you can try your hands on to curb your boredom this December! These are short projects that you can do you

Web and Coding Club, IIT Bombay 27 Jun 1, 2022
You can easily send campaigns, e-marketing have actually account using cash will thank you for using our tools, and you can support our Vodafone Cash +201090788026

*** Welcome User Sorry I Mean Hello Brother ✓ Devolper and Design : Mokhtar Abdelkreem ========================================== You Can Follow Us O

Mo Code 1 Nov 3, 2021
Leakvertise is a Python open-source project which aims to bypass these fucking annoying captchas and ads from linkvertise, easily

Leakvertise Leakvertise is a Python open-source project which aims to bypass these fucking annoying captchas and ads from linkvertise, easily. You can

Quatrecentquatre 6 Jun 3, 2022
This repo uses a stereo camera and gray-code-based structured light to realize dense 3D reconstruction.

Structured-light-stereo This repo uses a stereo camera and gray-code-based structured light to realize dense 3D reconstruction. . How to use: STEP 1:

FEI 14 May 22, 2022