Metadata-Version: 2.1
Name: quantbacktest
Version: 0.0.26
Summary: This backtesting is used to backtest algorithmic/quant trading strategies.
Home-page: https://gitlab.com/fsbc/theses/quantbacktest
Author: Jan Frederic Spörer
Author-email: jan.spoerer@whu.edu
License: BSD two-clause license
Description: # Access
        
        Repository (GitLab): https://gitlab.com/fsbc/theses/quantbacktest
        PyPI: https://pypi.org/project/quantbacktest/
        Master's thesis: https://drive.google.com/file/d/13tK1kpX_csPnG-l2UNoQUak1IZ5kWRaA/view
        
        # Setup
        
        Install the project via the shell: `pip install quantbacktest`.
        
        Update to a newer version via the shell (do this twice!): `pip install quantbacktest --upgrade`.
        
        # Exemplary usage
        
        ```
        from quantbacktest import backtest_visualizer
        
        # Importing modules from this repository
        import sys
        
        # For managing dates
        from datetime import datetime
        
        # For allowing for flexible time differences (frequencies)
        from pandas.tseries.offsets import Timedelta
        
        
        display_options = {
            'boolean_plot_heatmap': False,
            'boolean_test': False,  # If multi-asset strategy is used, this will cause sampling of the signals to speed up the run for testing during development.
            'warning_no_price_for_last_day': False,
            'warning_no_price_during_execution': False,
            'warning_no_price_for_intermediate_valuation': True,
            'warning_alternative_date': False,
            'warning_calculate_daily_returns_alternative_date': False,
            'warning_no_price_for_calculate_daily_returns': False,
            'warning_buy_order_could_not_be_filled': True,
            'warning_sell_order_could_not_be_filled': True,
            'errors_on_benchmark_gap': True,
            'boolean_plot_equity_curve': False,
            'boolean_save_equity_curve_to_disk': True,
            'string_results_directory': '/home/janspoerer/code/janspoerer/tmp/results'
        }
        
        general_settings = {
            'rounding_decimal_places': 4,
            'rounding_decimal_places_for_security_quantities': 0,
        }
        
        excel_worksheet_name = 'weights'
        
        strategy_hyperparameters = {
            'maximum_deviation_in_days': 300,
            'prices_table_id_column_name': 'token_itin',
            'excel_worksheet_name': excel_worksheet_name,  # Set this to None if CSV is used!
            # For OpenMetrics: 9.8
            'buy_parameter_space': [9.8],  # [11, 20] # Times 10! Will be divided by 10.
            # For OpenMetrics: 9.7
            'sell_parameter_space': [9.7],  # [5, 9] # Times 10! Will be divided by 10.
            'maximum_relative_exposure_per_buy': 0.34,
            'frequency': Timedelta(days=1),
            'moving_average_window_in_days': 14,
            'id': 'TP3B-248N-Q',
            'boolean_allow_partially_filled_orders': True,
            'string_file_path_with_signal_data': '/home/janspoerer/code/janspoerer/quantbacktest/quantbacktest/assets/strategy_tables/test.csv'
        }
        
        constraints = {
            'maximum_individual_asset_exposure_all': 1.0,  # Not yet implemented
            'maximum_individual_asset_exposure_individual': {},  # Not yet implemented
            'maximum_gross_exposure': 1.0,  # Already implemented
            'boolean_allow_shortselling': False,  # Shortselling not yet implemented
            'minimum_cash': 100,
        }
        
        comments = {
            'display_options': repr(display_options),
            'strategy_hyperparameters': repr(strategy_hyperparameters)
        }
        
        backtest_visualizer(
            file_path_with_price_data='/home/janspoerer/code/janspoerer/quantbacktest/quantbacktest/assets/raw_itsa_data/20190717_itsa_tokenbase_top600_wtd302_token_daily.csv',
            # ONLY LEAVE THIS LINE UNCOMMENTED IF YOU WANT TO USE ETH-ADDRESSES AS ASSET IDENTIFIERS!
            # file_path_with_token_data='raw_itsa_data/20190717_itsa_tokenbase_top600_wtd301_token.csv',  # Only for multi-asset strategies.
            name_of_foreign_key_in_price_data_table='token_itin',
            name_of_foreign_key_in_token_metadata_table='token_itin',
            # 1: execute_strategy_white_noise()
            # 2: Not used anymore, can be reassigned
            # 3: execute_strategy_multi_asset() -> Uses strategy table
            # 4: execute_strategy_ma_crossover()
            int_chosen_strategy=4,
            dict_crypto_options={
                'general': {
                    'percentage_buying_fees_and_spread': 0.005,  # 0.26% is the taker fee for low-volume clients at kraken.com https://www.kraken.com/features/fee-schedule
                    'percentage_selling_fees_and_spread': 0.005,  # 0.26% is the taker fee for low-volume clients at kraken.com https://www.kraken.com/features/fee-schedule
                    # Additional fees may apply for depositing money.
                    'absolute_fee_buy_order': 0.0,
                    'absolute_fee_sell_order': 0.0,
                }
            },
            float_budget_in_usd=1000000.00,
            strategy_hyperparameters=strategy_hyperparameters,
            margin_loan_rate=0.05,
            list_times_of_split_for_robustness_test=[
                [datetime(2014, 1, 1), datetime(2019, 5, 30)]
            ],
            benchmark_data_specifications={
                'name_of_column_with_benchmark_primary_key': 'id',  # Will be id after processing. Columns will be renamed.
                'benchmark_key': 'TP3B-248N-Q',  # Ether: T22F-QJGB-N, Bitcoin: TP3B-248N-Q
                'file_path_with_benchmark_data': '/home/janspoerer/code/janspoerer/quantbacktest/quantbacktest/assets/raw_itsa_data/20190717_itsa_tokenbase_top600_wtd302_token_daily.csv',
                'risk_free_rate': 0.02
            },
            display_options=display_options,
            constraints=constraints,
            general_settings=general_settings,
            comments=comments,
        )
        
        ```
        
        # Information for maintainers/contributors
        
        To make changes available in GitLab and as a `pip install`, please first push your changes to a new branch to GitLab and merge them.
        
        1. Update the version numbers in `setup.py` and in `quantbacktest/__init__.py`.
        2. Build wheel: `python setup.py sdist bdist_wheel`.
        3. Upload to PyPI: `twine upload --skip-existing dist/*.*`
        4. Get the current version on your machine: `pip install quantbacktest --upgrade`
        
        Maintainers can also refer to this great guide: https://realpython.com/pypi-publish-python-package/#versioning-your-package
        
        # Further reference to quant trading in general
        
        [Quantopian](https://www.quantopian.com/) offers state-of-the art backtesting for quantitative trading strategies for equity markets. Their [YouTube channel](https://www.youtube.com/channel/UC606MUq45P3zFLa4VGKbxsg) hosts some excellent, generally applicable talks from renowned experts:
          * ["When Should You Build Your Own Backtester?" by Dr. Michael Halls-Moore](https://www.youtube.com/watch?v=OhGdVdolqkU&t)
          * ["Optimizing Trading Strategies without Overfitting" by Dr. Ernest Chan - QuantCon 2018](https://www.youtube.com/watch?v=UD92QBqA8Eo&t=)
          * ["Beware of Low Frequency Data" by Ernest Chan](https://www.youtube.com/watch?v=m7IPbPg_ME8&t)
        
        
Platform: UNKNOWN
Description-Content-Type: text/markdown
