Statistical and Algorithmic Investing Strategies for Everyone

Overview

Eiten - Algorithmic Investing Strategies for Everyone

Eiten is an open source toolkit by Tradytics that implements various statistical and algorithmic investing strategies such as Eigen Portfolios, Minimum Variance Portfolios, Maximum Sharpe Ratio Portfolios, and Genetic Algorithms based Portfolios. It allows you to build your own portfolios with your own set of stocks that can beat the market. The rigorous testing framework included in Eiten enables you to have confidence in your portfolios.

If you are looking to discuss these tools in depth and talk about more tools that we are working on, please feel free to join our Discord channel where we have a bunch of more tools too.

Files Description

Path Description
eiten Main folder.
└  figures Figures for this github repositories.
└  stocks Folder to keep your stock lists that you want to use to create your portfolios.
└  strategies A bunch of strategies implemented in python.
backtester.py Backtesting module that both backtests and forward tests all portfolios.
data_loader.py Module for loading data from yahoo finance.
portfolio_manager.py Main file that takes in a bunch of arguments and generates several portfolios for you.
simulator.py Simulator that uses historical returns and monte carlo to simulate future prices for the portfolios.
strategy_manager.py Manages the strategies implemented in the 'strategies' folder.

Required Packages

You will need to install the following package to train and test the models.

You can install all packages using the following command. Please note that the script was written using python3.

pip install -r requirements.txt

Build your portfolios

Let us see how we can use all the strategies given in the toolkit to build our portfolios. The first thing you need to do is modify the stocks.txt file in the stocks folder and add the stocks of your choice. It is recommended to keep the list small i.e anywhere between 5 to 50 stocks should be fine. We have already put a small stocks list containing a bunch of tech stocks like AAPL, MSFT, TSLA etc. Let us build our portfolios now. This is the main command that you need to run.

python portfolio_manager.py --is_test 1 --future_bars 90 --data_granularity_minutes 3600 --history_to_use all --apply_noise_filtering 1 --market_index QQQ --only_long 1 --eigen_portfolio_number 3 --stocks_file_path stocks/stocks.txt

This command will use last 5 years of daily data excluding the last 90 days and build several portfolios for you. Based on those portfolios, it will then test them on the out of sample data of 90 days and show you the performance of each portfolio. Finally, it will also compare the performance with your choice of market index which is QQQ here. Let's dive into each of the parameters in detail.

  • is_test: The value determined if the program is going to keep some separate data for future testing. When this is enabled, the value of future_bars should be larger than 5.
  • future_bars: These are the bars that the tool will exclude during portfolio building and will forward test the portfolios on the excluded set. This is also called out of sample data.
  • data_granularity_minutes: How much granular data do you want to use to build your portfolios. For long term portfolios, you should use daily data but for short term, you can use hourly or minute level data. The possible values here are 3600, 60, 30, 15, 5, 1. 3600 means daily.
  • history_to_use: Whether to use a specific number of historical bars or use everything that we receive from yahoo finance. For minute level data, we only receive up to one month of historical data. For daily, we receive 5 years worth of historical data. If you want to use all available data, the value should be all but if you want to use smaller history, you can set it to an integer value e.g 100 which will only use the last 100 bars to build the portfolios.
  • apply_noise_filtering: This uses random matrix theory to filter out the covariance matrix from randomness thus yielding better portfolios. A value of 1 will enable it and 0 will disable it.
  • market_index: Which index do you want to use to compare your portfolios. This should mostly be SPY but since we analyzed tech stocks, we used QQQ.
  • only_long: Whether to use long only portfolio or enable short selling as well. Long only portfolios have shown to have better performance using algorithmic techniques.
  • eigen_portfolio_number: Which eigen portfolio to use. Any value between 1-5 should work. The first eigen portfolio (1) represents the market portfolio and should act just like the underlying index such as SPY or QQQ. The second one is orthogonal and uncorrelated to the market and poses the greatest risk and reward. The following ones have reduced risk and reward. Read more on eigen-portfolios.
  • stocks_file_path: File that contains the list of stocks that you want to use to build your portfolio.

Some Portfolio Building Examples

Here are a few examples for building different types of portfolios.

  • Both long and short portfolios by analyzing last 90 days data and keeping the last 30 days as testing data. This will give us 60 days of portfolio construction data and 30 days of testing.
python portfolio_manager.py --is_test 1 --future_bars 30 --data_granularity_minutes 3600 --history_to_use 90 --apply_noise_filtering 1 --market_index QQQ --only_long 0 --eigen_portfolio_number 3 --stocks_file_path stocks/stocks.txt
  • Only long portfolio on 60 minute bars of the last 30 days. No future testing. Compare the results with SPY index instead of QQQ.
python portfolio_manager.py --is_test 0 --future_bars 0 --data_granularity_minutes 60 --history_to_use all --apply_noise_filtering 1 --market_index SPY --only_long 1 --eigen_portfolio_number 3 --stocks_file_path stocks/stocks.txt
  • Do not apply noise filtering on the covariance matrix. Use the first eigen portfolio (market portfolio) and compare with SQQQ,
python portfolio_manager.py --is_test 1 --future_bars 90 --data_granularity_minutes 3600 --history_to_use all --apply_noise_filtering 0 --market_index SQQQ --only_long 1 --eigen_portfolio_number 1 --stocks_file_path stocks/stocks.txt

Portfolio Strategies

Four different portfolio strategies are currently supported by the toolkit.

  1. Eigen Portfolios
    1. These portfolios are orthogonal and uncorrelated to the market in general thus yielding high reward and alpha. However, since they are uncorrelated to the market, they can also provide great risk. The first eigen portfolio is considered to be a market portfolio which is often ignored. The second one is uncorrelated to the others and provides the highest risk and reward. As we go down the numbering, the risk as well as the reward are reduced.
  2. Minimum Variance Portfolio (MVP)
    1. MVP tries to minimize the variance of the portfolio. These portfolios are lowest risk and reward.
  3. Maximum Sharpe Ratio Portfolio (MSR)
    1. MSR solves an optimization problem that tries to maximize the sharpe ratio of the portfolio. It uses past returns during the optimization process which means if past returns are not the same as future returns, the results can vary in future.
  4. Genetic Algorithm (GA) based Portfolio
    1. This is our own implementation of a GA based portfolio that again tries to maximize the sharpe ratio but in a slightly more robust way. This usually provides more robust portfolios than the others.

When you run the command above, our tool will generate portfolios from all these strategies and give them to you. Let us look at some resulting portfolios.

Resulting Portfolios

For the purpose these results, we will use the 9 stocks in the stocks/stocks.txt file. When we run the above command, we first get the portfolio weights for all four strategies. For testing purposes, the above command used last five years of daily data up till April 29th. The remaining data for this year was used for forward testing i.e the portfolio strategies had no access to it when building the portfolios.

What if my portfolio needs different stocks?: All you need to do is change the stocks in the stocks.txt file and run the tool again. Here is the final command again that we run in order to get our portfolios:

python portfolio_manager.py --is_test 1 --future_bars 90 --data_granularity_minutes 3600 --history_to_use all --apply_noise_filtering 1 --market_index QQQ --only_long 1 --eigen_portfolio_number 3 --stocks_file_path stocks/stocks.txt

Portfolio Weights

We can see that the eigen portfolio is giving a large weight to TSLA while the others are dividing their weights more uniformly. An interesting phenomena happening here is the hedging with SQQQ that all the strategies have learned automatically. Every tool is assigning some positive weight to SQQQ while also assigning positive weights to other stocks which indicates that the strategies are automatically trying to hedge the portfolios from risk. Obviously this is not perfect, but just the fact that it's happening is fascinating. Let us look at the backtest results on the last five years prior to April 29, 2020.

Backtest Results

The backtests look pretty encouraging. The black dotted line is the market index i.e QQQ. Other lines are the strategies. Our custom genetic algorithm implementation seems to have the best backtest results because it's an advanced version of other strategies. The eigen portfolio that weighed TSLA the most have the most volatility but its profits are also very high. Finally, as expected, the MVP has the minimum variance and ultimately the least profits. However, since the variance is extremely low, it is a good portfolio for those who want to stay safe. The most interesting part comes next, let us look at the forward or future test results for these portfolios.

Forward Test Results

These results are from April 29th, 2020 to September 4th, 2020. The eigen portfolio performed the best but it also had a lot of volatility. Moreover, most of those returns are due to TSLA rocketing in the last few months. After that, our GA algorithm worked quite effectively as it beat the market index. Again, as expected, the MVP had the lowest risk and reward and slowly went up in 4-5 months. This shows the effectiveness and power of these algorithmic portfolio optimization strategies where we've developed different portfolios for different kinds of risk and reward profiles.

Conclusion and Discussion

We are happy to share this toolkit with the trading community and hope that people will like and contribute to it. As is the case with everything in trading, these strategies are not perfect but they are based on rigorous theory and some great empirical results. Please take care when trading with these strategies and always manage your risk. The above results were not cherry picked but the market has been highly bullish in the last few months which has led to the strong results shown above. We would love for the community to try out different strategies and share them with us.

Special Thanks

Special thanks to Scott Rome's blog. The eigen portfolios and minimum variance portfolio concepts came from his blog posts. The code for filtering eigen values of the covariance matrix was also mostly obtained from one of his posts.

License

License: GPL v3

A product by Tradytics

Copyright (c) 2020-present, Tradytics.com

Comments
  • Error when running portfolio_manager.py

    Error when running portfolio_manager.py

    With the most recent code, I run the following command:

    python3 portfolio_manager.py --is_test 1 --future_bars 90 --data_granularity_minutes 3600 --history_to_use all --apply_noise_filtering 1 --market_index QQQ --only_long 1 --eigen_portfolio_number 3 --stocks_file_path stocks/stocks.txt
    

    Previously, this worked. Now, I get an error:

    Traceback (most recent call last):
      File "portfolio_manager.py", line 37, in <module>
        main()
      File "portfolio_manager.py", line 33, in main
        eiten.run_strategies()
      File "/Users/jmartinezlago/eiten/eiten.py", line 107, in run_strategies
        historical_price_info, future_prices, symbol_names, predicted_return_vectors, returns_matrix, returns_matrix_percentages = self.load_data()
      File "/Users/jmartinezlago/eiten/eiten.py", line 95, in load_data
        self.data_dictionary[symbol]["historical_prices"])
    KeyError: 'historical_prices'
    
    opened by edoreld 8
  • Improved organization and removed redundancy

    Improved organization and removed redundancy

    This tackles the redundancies that were created by separating each argument. Now the args dictionary is passed and any new argument added or change is automatically passed.

    Also separated files so users can import Eiten and use it as a library,

    opened by silvavn 3
  • (Question) Disable negative weights/shorting

    (Question) Disable negative weights/shorting

    Hi, I'm building portfolios for my home country's stock market. However there is limited options for shorting stocks. Is it possible to run Eiten without allowing negative weight (shorting)?

    opened by tatumakseli 3
  • The whole thing may not as good as it looks like

    The whole thing may not as good as it looks like

    There is a serious issue for the portfolio weights. When run for long only, there is not code do divide sum(weights). Total weights is almost round 2.5 to 4. So the result scaled 2.5 to 4. Because the project use the bull market data. So we got a pretty beautiful cumsum curve.

    opened by rongzhou 2
  • Ticker issue

    Ticker issue

    Hi how does one load in this https://finance.yahoo.com/quote/ICNYB.PA?p=ICNYB.PA ?

    Tried different combo's of ticker but throws error or ignored (if use ICNYB.PA) ...

    Txs

    opened by monkeydust 2
  • Plots not showing; Saving yields a blank png file

    Plots not showing; Saving yields a blank png file

    This is all on Google Colab.

    I tried showing plot but I get this: <Figure size 1200x600 with 1 Axes>

    So I tried doing:

    %matplotlib inline
    !python portfolio_manager.py --is_test 1 --future_bars 90 --data_granularity_minutes 3600 --history_to_use all --apply_noise_filtering 1 --market_index QQQ --only_long 1 --eigen_portfolio_number 3 --stocks_file_path stocks/stocks.txt
    

    But still no output.

    Any ideas why?

    opened by sososasa 1
  • Save plots to files with --save_plot and a dockerfile

    Save plots to files with --save_plot and a dockerfile

    Hi there!

    Was fiddling with your project and wanted to save the images from matplotlib, rather than render them directly. I amended the code to give people the option to save the plots instead. I figured I'd share that work back to you.

    I also included a Dockerfile that would enable someone to utilize a container for the app so that you don't have to worry about python package version collisions with preexisting python installs.

    For myself, I was doing something like:

    docker build -t eiten .
    docker run -v `pwd`/output:/app/output -v `pwd`/mystocklist.txt:/app/stocks/stocks.txt eiten:latest
    

    which would prompt it to run with my stocks from 'mystocklist.txt' and save graphs to my output subdirectory.

    opened by PeterGrace 1
  • Fix incorrect argument usage in argchecker

    Fix incorrect argument usage in argchecker

    File "\eiten\argchecker.py", line 20, in check_arguments assert not(args.history_to_use != "all" and int(args.history_to_use_int) < AttributeError: 'Namespace' object has no attribute 'history_to_use_int'

    opened by UncleGene 0
  • Random Matrix Theory seem to make correlation vanish

    Random Matrix Theory seem to make correlation vanish

    The random_matrix_theory_based_cov seems to be vanishing with the covariance values. Empirical evidence shows this:

    Experiment one: How Eiten works in the current push, without matrix normalization:

    This is a regular matrix without the noise cleaning method image

    After transformation the matrix becomes this: image

    We can see a shadow of red in the diagonal so I though I would plot out of scale. This is the result: image

    This leads me to question whether there is an implementation issue or if the method is really reliable.

    opened by silvavn 0
  • Vectorization

    Vectorization

    I rewrote the code to do vectorized operations. That way we do not have to use arrays and the speedup allows us to use many more stocks, instead of a few. I am opening this as a draft because the results after vectorization doesn't seem to quite match the results that are presented on the main page.

    If the main author could audit the math on this branch and verify if its correct that would allow us to either merge smoothly or to fix any bugs in the code.

    Example of the output (that i am not sure is correct) image

    opened by silvavn 0
  • (Question) Portfolios without shorting?

    (Question) Portfolios without shorting?

    Hi, I'm building portfolios for my home country's stock market. However there is limited options for shorting stocks. Is it possible to run Eiten without allowing negative weight (shorting)?

    opened by tatumakseli 0
  • Exception in thread Thread-2 error ?

    Exception in thread Thread-2 error ?

    Fresh install and run the README command ╰─ python portfolio_manager.py --is_test 1 --future_bars 90 --data_granularity_minutes 3600 --history_to_use all --apply_noise_filtering 1 --market_index QQQ --only_long 1 --eigen_portfolio_number 3 --stocks_file_path stocks/stocks.txt

    Then got the following error, is this because yfinance is having issue?

    Loading data for all stocks... 0%| | 0/6 [00:00<?, ?it/s]Exception in thread Thread-2: Traceback (most recent call last): File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/threading.py", line 932, in _bootstrap_inner self.run() File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/threading.py", line 870, in run self._target(*self._args, **self._kwargs) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/multitasking/init.py", line 102, in _run_via_pool return callee(*args, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/yfinance/multi.py", line 166, in _download_one_threaded data = _download_one(ticker, start, end, auto_adjust, back_adjust, File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/yfinance/multi.py", line 178, in _download_one return Ticker(ticker).history(period=period, interval=interval, File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/yfinance/base.py", line 155, in history data = data.json() File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages/requests/models.py", line 898, in json return complexjson.loads(self.text, **kwargs) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/init.py", line 357, in loads return _default_decoder.decode(s) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/decoder.py", line 337, in decode obj, end = self.raw_decode(s, idx=_w(s, 0).end()) File "/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/json/decoder.py", line 355, in raw_decode raise JSONDecodeError("Expecting value", s, err.value) from None json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)

    opened by yidea 1
  • Bug when is_test == 0

    Bug when is_test == 0

    future_prices is initialized to None, https://github.com/tradytics/eiten/blob/master/data_loader.py#L51

    If is_test is not 1, future_prices doesn't change, https://github.com/tradytics/eiten/blob/master/data_loader.py#L99

    future_prices as None is called with .values, https://github.com/tradytics/eiten/blob/master/data_loader.py#L111

    opened by geofflittle 0
  • Errors Coming after Previous Successful Use

    Errors Coming after Previous Successful Use

    When I run this from the examples:

    python portfolio_manager.py --is_test 1 --future_bars 90 --data_granularity_minutes 3600 --history_to_use all --apply_noise_filtering 1 --market_index QQQ --only_long 1 --eigen_portfolio_number 3 --stocks_file_path stocks/stocks.txt

    I get: Traceback (most recent call last): File "portfolio_manager.py", line 37, in main() File "portfolio_manager.py", line 33, in main eiten.run_strategies() File "/Users/matt/Desktop/eiten-master/eiten.py", line 118, in run_strategies returns_matrix) File "/Users/matt/Desktop/eiten-master/strategy_manager.py", line 59, in random_matrix_theory_based_cov filtered_covariance_matrix = self.strategyHelperFunctions.random_matrix_theory_based_cov(returns_matrix) File "/Users/matt/Desktop/eiten-master/strategies/strategy_helper_functions.py", line 18, in random_matrix_theory_based_cov variances = np.diag(np.cov(returns_matrix)) File "<array_function internals>", line 6, in diag File "/Users/matt/opt/anaconda3/lib/python3.7/site-packages/numpy/lib/twodim_base.py", line 283, in diag raise ValueError("Input must be 1- or 2-d.") ValueError: Input must be 1- or 2-d.

    I used this just yesterday to do an analysis with no problem. Also, I looked at the other issue in the list that said maybe there's some issue with a stock picked in stocks.txt, so picked two stocks (AAPL and BA) to check if that could be it and it still causes an error.

    opened by mcb219 0
  • Completely Rewritten as a Library

    Completely Rewritten as a Library

    I have completely re-written the code as a library instead of writing a CLI. I did that because, in my humble opinion, it is more useful to use Eiten in data analysis by integrating it into pipelines and notebooks. Taking this approach, the next step would be making it a package and releasing it on PyPi.

    Features:

    1. Eiten now gracefully ignores companies that does not fit the timeline size (in the future I would like to just fill the gaps) image

    2. We can now use any future estimator desired and compare its performance image image

    3. We can use any kind of covariance matrix calculation, including those from Scikit Learn image

    4. Portfolio weights are now normalized and correspond to percentages (we can just multiply by some number and output a portfolio) image

    5. Testing is now completely vectorized image image image

    6. And we can easily evaluate our portfolios image

    Disclaimer: I haven't developed unit tests. I have changed the GA a bit. This is not finance advice (obviously).

    opened by silvavn 2
  • IndexError: list index out of range when running with default settings

    IndexError: list index out of range when running with default settings

    Running this command from the examples:

    python portfolio_manager.py --is_test 0 --future_bars 30 --data_granularity_minutes 60 --history_to_use all --apply_noise_filtering 1 --market_index QQQ --only_long 1 --eigen_portfolio_number 3 --stocks_file_path stocks/stocks.txt
    

    returns: Traceback (most recent call last): File "portfolio_manager.py", line 37, in main() File "portfolio_manager.py", line 33, in main eiten.run_strategies() File "Work/eiten/eiten.py", line 107, in run_strategies historical_price_info, future_prices, symbol_names, predicted_return_vectors, returns_matrix, returns_matrix_percentages = self.load_data() File "Work/eiten/eiten.py", line 88, in load_data self.data_dictionary = self.dataEngine.collect_data_for_all_tickers() File "Work/eiten/data_loader.py", line 153, in collect_data_for_all_tickers historical_price, future_price, symbol_names) File "Work/eiten/data_loader.py", line 171, in remove_bad_data most_common_length = length_dictionary[0] IndexError: list index out of range

    Any thoughts on what I'm doing wrong?

    opened by sradu 2
Owner
Tradytics
Artificial Intelligence driven Trading Tools
Tradytics
An Open Source Machine Learning Framework for Everyone

Documentation TensorFlow is an end-to-end open source platform for machine learning. It has a comprehensive, flexible ecosystem of tools, libraries, a

null 170.1k Jan 4, 2023
An Open Source Machine Learning Framework for Everyone

Documentation TensorFlow is an end-to-end open source platform for machine learning. It has a comprehensive, flexible ecosystem of tools, libraries, a

null 170.1k Jan 5, 2023
An Open Source Machine Learning Framework for Everyone

Documentation TensorFlow is an end-to-end open source platform for machine learning. It has a comprehensive, flexible ecosystem of tools, libraries, a

null 153.2k Feb 13, 2021
CARLA: A Python Library to Benchmark Algorithmic Recourse and Counterfactual Explanation Algorithms

CARLA - Counterfactual And Recourse Library CARLA is a python library to benchmark counterfactual explanation and recourse models. It comes out-of-the

Carla Recourse 200 Dec 28, 2022
Algorithmic trading using machine learning.

Algorithmic Trading This machine learning algorithm was built using Python 3 and scikit-learn with a Decision Tree Classifier. The program gathers sto

Sourav Biswas 101 Nov 10, 2022
High frequency AI based algorithmic trading module.

Flow Flow is a high frequency algorithmic trading module that uses machine learning to self regulate and self optimize for maximum return. The current

null 59 Dec 14, 2022
Algorithmic trading with deep learning experiments

Deep-Trading Algorithmic trading with deep learning experiments. Now released part one - simple time series forecasting. I plan to implement more soph

Alex Honchar 1.4k Jan 2, 2023
Algorithmic Trading using RNN

Deep-Trading This an implementation adapted from Rachnog Neural networks for algorithmic trading. Part One — Simple time series forecasting and this c

Hazem Nomer 29 Sep 4, 2022
This project is a loose implementation of paper "Algorithmic Financial Trading with Deep Convolutional Neural Networks: Time Series to Image Conversion Approach"

Stock Market Buy/Sell/Hold prediction Using convolutional Neural Network This repo is an attempt to implement the research paper titled "Algorithmic F

Asutosh Nayak 136 Dec 28, 2022
Submission to Twitter's algorithmic bias bounty challenge

Twitter Ethics Challenge: Pixel Perfect Submission to Twitter's algorithmic bias bounty challenge, by Travis Hoppe (@metasemantic). Abstract We build

Travis Hoppe 4 Aug 19, 2022
The CLRS Algorithmic Reasoning Benchmark

Learning representations of algorithms is an emerging area of machine learning, seeking to bridge concepts from neural networks with classical algorithms.

DeepMind 251 Jan 5, 2023
Re-implementation of 'Grokking: Generalization beyond overfitting on small algorithmic datasets'

Re-implementation of the paper 'Grokking: Generalization beyond overfitting on small algorithmic datasets' Paper Original paper can be found here Data

Tom Lieberum 38 Aug 9, 2022
PyTorch implementation of Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets

Simple PyTorch Implementation of "Grokking" Implementation of Grokking: Generalization Beyond Overfitting on Small Algorithmic Datasets Usage Running

Teddy Koker 15 Sep 29, 2022
This is the official implementation of TrivialAugment and a mini-library for the application of multiple image augmentation strategies including RandAugment and TrivialAugment.

Trivial Augment This is the official implementation of TrivialAugment (https://arxiv.org/abs/2103.10158), as was used for the paper. TrivialAugment is

AutoML-Freiburg-Hannover 94 Dec 30, 2022
Python Library for learning (Structure and Parameter) and inference (Statistical and Causal) in Bayesian Networks.

pgmpy pgmpy is a python library for working with Probabilistic Graphical Models. Documentation and list of algorithms supported is at our official sit

pgmpy 2.2k Jan 3, 2023
existing and custom freqtrade strategies supporting the new hyperstrategy format.

freqtrade-strategies Description Existing and self-developed strategies, rewritten to support the new HyperStrategy format from the freqtrade-develop

null 39 Aug 20, 2021
How Do Adam and Training Strategies Help BNNs Optimization? In ICML 2021.

AdamBNN This is the pytorch implementation of our paper "How Do Adam and Training Strategies Help BNNs Optimization?", published in ICML 2021. In this

Zechun Liu 47 Sep 20, 2022
An e-commerce company wants to segment its customers and determine marketing strategies according to these segments.

customer_segmentation_with_rfm Business Problem : An e-commerce company wants to

Buse Yıldırım 3 Jan 6, 2022
Trading Strategies for Freqtrade

Freqtrade Strategies Strategies for Freqtrade, developed primarily in a partnership between @werkkrew and @JimmyNixx from the Freqtrade Discord. Use t

Bryan Chain 242 Jan 7, 2023