{"id":23727753,"url":"https://github.com/hal9000cc/live_trading_indicators","last_synced_at":"2025-09-03T08:42:41.722Z","repository":{"id":62706128,"uuid":"546797093","full_name":"hal9000cc/live_trading_indicators","owner":"hal9000cc","description":null,"archived":false,"fork":false,"pushed_at":"2025-02-10T18:28:47.000Z","size":23624,"stargazers_count":27,"open_issues_count":3,"forks_count":7,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-03-03T21:56:14.340Z","etag":null,"topics":["algoritmic-trading","binance","bitcoin","ccxt","cryptocurrency","etherium","finance","historical-qoutes","indicator","live-trading","machine-learning-trading","market-data","market-data-download","python","python-library","stock-indicators","stock-market","technical-analysis","trading","trading-indicator"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/hal9000cc.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-06T16:57:49.000Z","updated_at":"2025-02-28T10:12:33.000Z","dependencies_parsed_at":"2025-02-09T22:34:32.297Z","dependency_job_id":null,"html_url":"https://github.com/hal9000cc/live_trading_indicators","commit_stats":null,"previous_names":[],"tags_count":22,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hal9000cc%2Flive_trading_indicators","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hal9000cc%2Flive_trading_indicators/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hal9000cc%2Flive_trading_indicators/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/hal9000cc%2Flive_trading_indicators/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/hal9000cc","download_url":"https://codeload.github.com/hal9000cc/live_trading_indicators/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":244047646,"owners_count":20389206,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["algoritmic-trading","binance","bitcoin","ccxt","cryptocurrency","etherium","finance","historical-qoutes","indicator","live-trading","machine-learning-trading","market-data","market-data-download","python","python-library","stock-indicators","stock-market","technical-analysis","trading","trading-indicator"],"created_at":"2024-12-31T01:29:58.196Z","updated_at":"2025-03-17T14:14:22.185Z","avatar_url":"https://github.com/hal9000cc.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# live_trading_indicators\n[![PyPI version](https://badge.fury.io/py/live-trading-indicators.svg)](https://badge.fury.io/py/live-trading-indicators)\n[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n[![CodeQL](https://github.com/hal9000cc/live_trading_indicators/actions/workflows/codeql.yml/badge.svg)](https://github.com/hal9000cc/live_trading_indicators/actions/workflows/codeql.yml)\n[![PyPI pyversions](https://img.shields.io/pypi/pyversions/live_trading_indicators.svg)](https://pypi.python.org/pypi/live_trading_indicators/)\n\nA package for obtaining quotation data from various sources and saving them to a database. Quotes can be quickly extracted and used for calculations and forecasts. It is possible to receive and process data in real time. There are a significant number of ready-to-use indicators.\nThe integrity of the data stored in the database is carefully monitored.\n\nOne of the advantages of the live_trading_indicators library is the speed of work. Extracting 31 million quotes in one year on the 1s timeframe takes less than two seconds: [performance test](https://github.com/hal9000cc/live_trading_indicators/blob/stable/benchmarks.ipynb).\n\nTo calculate indicators, you can also use the Pandas Data Frame as a data source.\n\nThe current version allows you to receive exchange data from:\n- **Binance** (**spot**, **futures USD-M**, **futures COIN-M**).\n- Many different exchanges via **CCXT** ([CryptoCurrency eXchange Trading Library](https://github.com/ccxt/ccxt#readme))\n\nThe data can be obtained in *numpy ndarray* and *Dataframe Pandas*..\n\nPackage data from online sources is stored by default in the *.lti* folder of the user's home directory. A significant amount of data can be created in this folder, depending on the number of instruments and their timeframes. Only data received from online sources is saved.\n## Version 0.7.5\n### what's new\n#### 0.7.5\n- New indicator - Chandelier\n- Fix some bugs\n#### 0.7.4\n- New indicator - MFI\n- Fix some bugs\n- Change some default [settings](https://github.com/hal9000cc/live_trading_indicators/blob/stable/README.md#live_trading_indicators-library-settings) during a new installation\n#### 0.7.3\n- The quotation database has been optimized (the conversion may take some time at the first launch)\n- Fix some bugs (when ccxt is used for multiple exchanges at the same time)\n- New indicator - Williams %R\n#### 0.7.2\n- The quotation database has been optimized (the conversion may take some time at the first launch)\n- New indicator - Ichimoku\n#### 0.7.1\n- Migration of quote storage to sqlite3\n- Added support for three compression algorithms: gzip, bz2 and lz4 ([see](https://github.com/hal9000cc/live_trading_indicators/blob/stable/README.md#compression_type))\n- Add the depth parameter for ZigZag indicator\n\n[previous releases...](https://github.com/hal9000cc/live_trading_indicators/releases)\n## Installing\n```python\npip install live_trading_indicators\n```\n## Feedback\n- [Discussions](https://github.com/hal9000cc/live_trading_indicators/discussions)\n- [Issues](https://github.com/hal9000cc/live_trading_indicators/issues)\n## Quick start\nAll the examples given here can be found in [jupyter notebook examples](https://github.com/hal9000cc/live_trading_indicators/blob/stable/examples.ipynb).\n### Getting quotes (online / cache)\n```python\nimport live_trading_indicators as lti\n\nindicators = lti.Indicators('binance')\nohlcv = indicators.OHLCV('ethusdt', '4h', '2022-07-01', '2022-07-01')\nprint(ohlcv)\n```\n###### Result:\n```\n\u003cOHLCV data\u003e symbol: ethusdt, timeframe: 4h\ndate: 2022-07-01T00:00 - 2022-07-01T20:00 (length: 6) \nempty bars: count 0 (0.00 %), max consecutive 0\nValues: time, open, high, low, close, volume\n```\n\nNow *ohlcv* contains quotes in *numpy array* (*ohlcv.time*, *ohlcv.open*, *ohlcv.high*, *ohlcv.low*, *ohlcv.close*, *ohlcv.volume*).\n\n### Export in pandas dataframe\n```python\ndataframe = ohlcv.pandas()\nprint(dataframe.head())\n```\n###### Result:\n```\n                 time     open     high      low    close       volume\n0 2022-07-01 00:00:00  1071.02  1117.00  1050.46  1054.52  430646.8720\n1 2022-07-01 04:00:00  1054.52  1076.43  1045.41  1066.81  275557.9328\n2 2022-07-01 08:00:00  1066.81  1086.44  1033.44  1050.22  252105.5665\n3 2022-07-01 12:00:00  1050.21  1074.23  1043.00  1056.86  298465.0695\n4 2022-07-01 16:00:00  1056.86  1083.10  1054.82  1067.91  158796.2248\n```\n### Example of getting indicator data from Bybit quotes via ccxt (online / cache)\n```python\nimport live_trading_indicators as lti\n\nindicators = lti.Indicators('ccxt.bybit')\nmacd = indicators.MACD('ETHUSDT', '1h', '2022-07-01', '2022-07-30', period_short=15, period_long=26, period_signal=9)\nprint(macd[40:].pandas().head())\n```\n###### Result:\n```\n                 time      macd    signal      hist\n0 2022-07-02 16:00:00 -1.661969 -3.514499  1.852530\n1 2022-07-02 17:00:00 -0.983912 -3.125461  2.141548\n2 2022-07-02 18:00:00 -0.081701 -2.617233  2.535532\n3 2022-07-02 19:00:00  0.464134 -2.064394  2.528529\n4 2022-07-02 20:00:00  0.828222 -1.477419  2.305641\n```\n### Example of getting indicator data from Pandas quotes\n```python\nimport pandas\nimport live_trading_indicators as lti\n\ndataframe = pandas.read_csv('tests/data/ETHUSDT-1m-2022-08-15.zip', header=None)\ndataframe.rename(columns={0: 'time', 1: 'open', 2: 'high', 3: 'low', 4: 'close', 5: 'volume', }, inplace=True)\nindicators = lti.Indicators(dataframe)\nmacd = indicators.MACD(period_short=15, period_long=26, period_signal=9)\nprint(macd[40:].pandas().head())\n```\n###### Result:\n```\n                 time      macd    signal      hist\n0 2022-08-15 00:40:00  3.403958  2.320975  1.082984\n1 2022-08-15 00:41:00  3.540428  2.643593  0.896835\n2 2022-08-15 00:42:00  3.594786  2.930063  0.664722\n3 2022-08-15 00:43:00  3.684476  3.170449  0.514027\n4 2022-08-15 00:44:00  3.763257  3.354183  0.409074\n```\n### Plotting indicators charts\nPlotting uses matplotlib. These are optional features, so matplotlib must be installed separately.\nThere are two methods for plotting: plot() and show(). plot() returns the drawn figure, show() returns None. For jupyter notepad, it is better to use show(), since plot() can draw a figure twice.\n```python\nindicators = lti.Indicators('binance', '2022-07-01', '2022-07-15')\nbb = indicators.BollingerBands('btcusdt', '4h', '2022-07-05', '2022-07-15', period=14)\nbb.show()\n```\n###### Result:\n![live_trading_indicators library example chart: Bollinger bands for BTCUSDT timeframe 4h](https://raw.githubusercontent.com/hal9000cc/live_trading_indicators/stable/images/bb_show_example.png \"live_trading_indicators library example chart: Bollinger bands for BTCUSDT timeframe 4h\")\nYou can find other examples of charts [here](https://github.com/hal9000cc/live_trading_indicators/blob/stable/examples_show.ipynb).\n### Getting real-time data (the last 3 minutes on the 1m timeframe without an incomplete bar)\nTo get real-time data, you **don't have to specify an end date**.\n```python\nimport datetime as dt\nimport live_trading_indicators as lti\n\nutcnow = dt.datetime.utcnow()\nprint(f'Now is {utcnow} UTC')\nindicators = lti.Indicators('binance', utcnow - dt.timedelta(minutes=3))\nohlcv = indicators.OHLCV('btcusdt', '1m')\nprint(ohlcv.pandas())\n```\n###### Result:\n```\nNow is 2022-11-04 09:32:31.528230 UTC\n                 time      open      high       low     close     volume\n0 2022-11-04 09:29:00  20594.39  20595.60  20591.06  20592.38  177.35380\n1 2022-11-04 09:30:00  20592.38  20600.98  20591.75  20600.30  178.40869\n2 2022-11-04 09:31:00  20600.98  20623.93  20600.30  20621.45  431.11917\n```\n### Getting real-time data (the last 3 minutes on the 1m timeframe and an incomplete bar)\nTo get data containing an incomplete bar, you must specify *with_incomplete_bar=True* when creating *Indicators*.\n```python\nutcnow = dt.datetime.utcnow()\nprint(f'Now is {utcnow} UTC')\nindicators = lti.Indicators('binance', utcnow - dt.timedelta(minutes=3), with_incomplete_bar=True)\nohlcv = indicators.OHLCV('btcusdt', '1m')\nprint(ohlcv.pandas())\n```\n###### Result:\n```\nNow is 2022-11-04 09:37:07.372986 UTC\n                 time      open      high       low     close     volume\n0 2022-11-04 09:34:00  20614.55  20618.50  20610.76  20615.97  263.96754\n1 2022-11-04 09:35:00  20615.61  20624.00  20610.29  20616.53  258.53777\n2 2022-11-04 09:36:00  20615.69  20617.75  20609.74  20611.46  199.43313\n3 2022-11-04 09:37:00  20611.11  20611.89  20608.17  20609.02   15.15800\n```\n## Details\nlive-trading-indicators supports the following timeframes: 1s, 1m, 3m, 5m, 10m, 15m, 30m, 1h, 2h, 4h, 6h, 8h, 12h, 1d.\nThe specific supported timeframes for the source depend on the source.\n### Сhecking quotes\n**live-trading-indicators** check the integrity of quotes when they are loaded.\nThe fraction of lost quotes should not exceed max_empty_bars_fraction. The number of lost quotes in a row should not exceed max_empty_bars_consecutive.\nThe values of max_empty_bars_fraction and max_empty_bars_consecutive are set to 0 by default. That is, if there is at least one lost quote, LTIExceptionTooManyEmptyBars will be raised:\n```\nlive_trading_indicators.exceptions.LTIExceptionTooManyEmptyBars: Too many empty bars: fraction 0.014076769406392695, consecutive 79200. Source binance, symbol ethusdt, timeframe 1s, date 2021-01-01T00:00:00.000 - 2021-12-31T23:59:59.000.\n```\nThe values of max_empty_bars_fraction and max_empty_bars_consecutive can be set as follows:\n```\nimport live_trading_indicators as lti\nlti.config(max_empty_bars_fraction=0.1, max_empty_bars_consecutive=10)\n```\nIf you don't need integrity control at all, do:\n```\nimport live_trading_indicators as lti\nlti.config(max_empty_bars_fraction=-1, max_empty_bars_consecutive=-1)\n```\nThe presence of the first and last bars in the date range is also checked. For more details, see [Settings](https://github.com/hal9000cc/live_trading_indicators/blob/stable/README.md#live_trading_indicators-library-settings).\n### Informational messages\nBy default, log messages are output to the console, and you will see similar messages:\n```\n2022-11-04 12:32:31,528 Download using api symbol btcusdt timeframe 1m from 2022-11-04T00:00:00.000...\n```\nTo disable these messages, run the following code and restart python.\n```python\nimport live_trading_indicators as lti\nlti.config(print_log=False)\n```\n### Indicators\nWhen getting indicator values from **online** source, the first two parameters should be *symbol* and *timeframe*. Further, the period can optionally be specified. Then the parameters of the indicator are specified by name.\nWhen getting indicator values **offline** from Pandas DataFrame parameters *symbol* and *timeframe* are **not specified**. \n#### Example (online)\n```python\nindicators = lti.Indicators('binance', '2022-07-01', '2022-08-30')\nsma = indicators.SMA('ethusdt', '1h', period=9)\nmacd = indicators.MACD('ethusdt', '1h', '2022-07-01', '2022-07-30', period_short=15, period_long=26, period_signal=9)\n```\n#### Example (offline)\n```python\ndataframe = pandas.readcsv('ETHUSDT-1m-2022-08-15.zip')\nindicators = lti.Indicators(dataframe)\nmacd = indicators.MACD(period_short=15, period_long=26, period_signal=9)\nsma = indicators.SMA('2022-08-15T03:00', '2022-08-15T06:00', period=9)\n```\nThe list of supported indicators and their parameters can be obtained by calling lti.help(). Parameters *symbol*, *timeframe*, *time_start*, *time_end* are omitted for brevity.\n```python\nimport live_trading_indicators as lti\nprint(lti.help())\n```\n- ADL(ma_period=None, ma_type='sma') - Accumulation/distribution line.\n- ADX(period=14, smooth=14, ma_type='mma') - Average directional movement index.\n- ATR(smooth=14, ma_type='mma') - Average true range.\n- Aroon(period=14) - Aroon oscillator.\n- Awesome(period_fast=5, period_slow=34, ma_type_fast='smw', ma_type_slow='sma', normalized=False) - Awesome oscillator.\n- BollingerBands(period=20, deviation=2, ma_type='sma', value='close') - Bollinger bands.\n- CCI(period=) - Commodity channel index.\n- Chandelier(period=22, multiplier=3, use_close=False) - Chandelier Exit.\n- EMA(period=, value='close') - Exponential moving average.\n- Ichimoku(period_short=9, period_mid=26, period_long=52, offset_senkou=26, offset_chikou=26) - Ichimoku indicator.\n- Keltner(period=10, multiplier=1, period_atr=10, ma_type='ema', ma_type_atr='mma') - Keltner channel.\n- MA(period=, value='close', ma_type='sma') - Moving average of different types: 'sma', 'ema', 'mma', 'ema0', 'mma0'\n- MACD(period_short=, period_long=, period_signal=, ma_type='ema', ma_type_signal='sma', value='close') - Moving Average Convergence/Divergence.\n- MFI(period=14) - Money flow index.\n- OBV() - On Balance Volume.\n- OHLCV() - Quotes: open, high, low, close, volume.\n- OHLCVM(timeframe_low='1m', bars_on_bins=6) - Quotes and the price of the maximum volume: open, high, low, close, volume, mv_price.\n- ParabolicSAR(start=0.02, maximum=0.2, increment=0.02) - Parabolic SAR.\n- ROC(period=14, ma_period=14, ma_type='sma', value='close') - Rate of Change.\n- RSI(period=, ma_type='mma', value='close') - Relative strength index.\n- SMA(period=, value='close') - Simple moving average.\n- Stochastic(period=, period_d=, smooth=3, ma_type='sma') - Stochastic oscillator.\n- Supertrend(period=10, multipler=3, ma_type='mma') - Supertrend indicator.\n- TEMA(period=, value='close') - Triple exponential moving average.\n- TRIX(period=, value='close') - TRIX oscillator.\n- VWAP() - Volume-weighted average price.\n- VWMA(period=, value='close') - Volume Weighted Moving Average.\n- VolumeClusters(timeframe_low='1m', bars_on_bins=6) - OHLCVM and volume clusters is determined by the lower timeframe.\n- VolumeOsc(period_long=5, period_short=10, ma_type='ema') - Volume oscillator.\n- WilliamsR(period=14) - Williams %R oscillator.\n- ZigZag(delta=0.02, depth=1, type='high_low', end_points=False) - Zig-zag indicator (pivots).\n### Specifying the period\nThere are three strategies for specifying a time period:\n#### 1. The time period is specified when creating Indicators (base period)\nIndicator values can be obtained for any period within the interval specified for *Indicators*. When exiting the specified interval, an exception will be raised *LTIExceptionOutOfThePeriod*.\n##### Example\n```python\nindicators = lti.Indicators('binance', 20220901, 20220930) # the base period\nohlcv = indicators.OHLCV('um/ethusdt', '1h') # the period is not specified, the base period is used\nsma22 = indicators.SMA('um/ethusdt', '1h', 20220905, 20220915, period=22) # the period is specified\nsma15 = indicators.SMA('um/ethusdt', '1h', 20220905, 20221015, period=15) # ERROR, going beyond the boundaries of the base period\n```\n#### 2. The time period is not specified when creating Indicators\nIn this variant, when getting indicator data, the period should always be specified. When the interval is extended, data may be updated, this may slow down the work.\n##### Example\n```python\nindicators = lti.Indicators('binance') # period not specified\nohlcv = indicators.OHLCV('um/ethusdt', '1h', 20220801, 20220815) # the period must be specified\nma22 = indicators.SMA('um/ethusdt', '1h', 'close', 22, 20220905, 20220915) # the period must be specified\n```\n#### 3. Real-time mode\nIn this variant, when creating *Indicators*, only the start date is specified. The data is always received up to the current moment.\nWhen creating Indicators, you can specify *with_incomplete_bar=True*, then the data of the last, incomplete bar will be received. See the example above.\n### Binance source\n#### Binance trading symbol codes\n- For the spot market, they completely coincide with the code on binance (*btcusdt*, *ethusdt*, etc.)\n- For the futures market **USD-M**, codes are prefixed with **um/** (*um/btcusdt*, *um/ethusdt*, etc.)\n- For the futures market **COIN-M**, codes are prefixed with **cm/** (*cm/btcusd_perp*, *cm/ethusd_perp*, etc.)\n### CCXT source\nUsing CCXT, you can download data from a large number of exchanges, currently there are more than 100. The available symbols, their names and timeframes depend on the specific source. More information can be found in [the CCXT documentation.](https://github.com/ccxt/ccxt#readme)\nThe use of ccxt is optional, so it must be installed separately. It can be done like this:\n```\npip install ccxt\n```\nThen you can use all available ccxt exchanges by specifying them through a dot. To download, for example, from binance via ccxt, you need to specify ccxt.binance. To download from okx, we use ccxt.okx, Bybit - ccxt.bybit, etc.\n##### Example\n```python\nindicators = lti.Indicators('ccxt.okx')\nohlcv = indicators.OHLCV('BTC/USDT', '1h', 20220701, 20220702)\n```\n**live-trading-indicators** has not been tested with all quotation sources supported by **ccxt**. If you find a problem with some data source, open the problem [here](https://github.com/hal9000cc/live_trading_indicators/issues).\n\nSometimes the **ccxt** source may need additional parameters passed through *params*. In this case, these parameters are passed via *exchange_params* when creating *Indicators*:\n```python\nindicators = lti.Indicators('ccxt.okx', exchange_params={'limit': 300})\n```\n### Types of move average\nlive-trading-indicators supports the following types of moving averages:\n- 'sma' - simple move average\n- 'ema' - classical exponential moving average with alpha = 2 / (n + 1), initialized by SMA (as in binance EMA)\n- 'ema0' - classical exponential moving average with alpha = 2 / (n + 1), initialized by the first value\n- 'mma' - Modified moving average with alpha = 1 / n, initialized by SMA (as in some binance indicators)\n- 'mma0' - Modified moving average с alpha = 1 / n, initialized by the first value\n\n## live_trading_indicators library settings\nThe settings can be obtained as dict using *config()*:\n```python\nimport live_trading_indicators as lti\nprint(lti.config())\n```\nResult:\n```\n{'cache_folder': '/home/user/.lti/data/timeframe_data', 'sources_folder': '/home/user/.lti/data/sources', 'log_folder': '/home/hal/.lti/logs', 'endpoints_required': True, 'max_empty_bars_fraction': 0.0, 'max_empty_bars_consecutive': 0, 'restore_empty_bars': True, 'print_log': True, 'log_level': 'INFO', 'request_timeout': 10, 'request_trys': 3}\n```\n*config()* is also used to change the settings:\n```python\nimport live_trading_indicators as lti\nlti.config(request_timeout=15)\n```\nWhen creating Indicators, you can specify the settings that will be used instead of the saved ones:\n```python\n    indicators = lti.Indicators(test_source, time_begin, time_end, timeout=15, request_trys=5)\n```\n### Settings\n#### cache_folder\nDirectory for storing quotation data.\n#### log_folder\nDirectory of log files.\n#### endpoints_required\nControl of the presence of the first and last bar in the selected date range. In the absence of the first or last bar, LTIExceptionQuotationDataNotFound is raised. Default: False.\n#### max_empty_bars_fraction\nThe maximum fraction of lost bars, if exceeded, an error will occur. Default: 1 (100% empty bars are allowed).\n#### max_empty_bars_consecutive\nThe maximum number of lost bars in a row, if exceeded, LTIExceptionTooManyEmptyBars will be raised. Default: -1 (any number of empty bars in a row is allowed).\n#### restore_empty_bars\nIf True, it restores the lost bars (open=close=close of the previous one, volume=0). The control of the number of lost bars (max_empty_bars_fraction, max_empty_bars_consecutive) is performed BEFORE recovery. Default: True.\n#### print_log\nIf True, outputs log messages to standard output. Default: True.\n#### log_level\nLog registration level. Default: INFO.\n#### request_timeout\nTimeout of requests to download quotes, seconds. Default: 30.\n#### request_trys\nThe number of attempts to download quotes. Default: 3.\n#### quotation_database\nPath to the sqlite3 database for storing quotes.\n#### compression_type\nThe algorithm for compressing quotes when saving to the database. Can be gzip, bz2, lz4 and auto:\n- bz2 - good compression, slow\n- gzip - medium compression, medium speed\n- lz4 - low compression, high speed\n- auto - automatic selection\n\nDefault: auto\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhal9000cc%2Flive_trading_indicators","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fhal9000cc%2Flive_trading_indicators","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fhal9000cc%2Flive_trading_indicators/lists"}