Integrate live feeds from Pyth (#2178)

* added dependency

* added pyth models

* dependencies

* docs

* some improvements to this pyth command (#2433)

* some improvements to this pyth command

* minor improv

* dependencies

* tests

Co-authored-by: DidierRLopes <dro.lopes@campus.fct.unl.pt>; COlin
This commit is contained in:
jose-donato
2022-09-21 13:32:03 +01:00
committed by GitHub
parent 8216e8581f
commit 1661ddd440
9 changed files with 621 additions and 2176 deletions

1
i18n/en.yml vendored
View File

@@ -489,6 +489,7 @@ en:
stocks/pred/mc: Monte-Carlo simulations
crypto/load: load a specific cryptocurrency for analysis
crypto/find: find coins
crypto/price: real-time price and interval of confidence
crypto/_symbol: Coin
crypto/_interval: Interval (min)
crypto/_source: Source

View File

@@ -8,7 +8,7 @@ import os
from typing import List
from prompt_toolkit.completion import NestedCompleter
from openbb_terminal.cryptocurrency import cryptocurrency_helpers
from openbb_terminal.cryptocurrency import cryptocurrency_helpers, pyth_model, pyth_view
from openbb_terminal import feature_flags as obbff
from openbb_terminal.cryptocurrency.cryptocurrency_helpers import (
FIND_KEYS,
@@ -56,6 +56,7 @@ class CryptoController(CryptoBaseController):
"find",
"prt",
"resources",
"price",
]
CHOICES_MENUS = [
"ta",
@@ -94,6 +95,7 @@ class CryptoController(CryptoBaseController):
}
choices["load"]["--vs"] = {c: {} for c in ["usd", "eur"]}
choices["find"]["-k"] = {c: {} for c in FIND_KEYS}
choices["price"] = {c: {} for c in pyth_model.ASSETS.keys()}
choices["headlines"] = {c: {} for c in finbrain_crypto_view.COINS}
# choices["prt"]["--vs"] = {c: {} for c in coingecko_coin_ids} # list is huge. makes typing buggy
@@ -107,6 +109,7 @@ class CryptoController(CryptoBaseController):
mt = MenuText("crypto/")
mt.add_cmd("load")
mt.add_cmd("find")
mt.add_cmd("price", "Pyth")
mt.add_raw("\n")
mt.add_param(
"_symbol", f"{self.symbol.upper()}/{self.vs.upper()}" if self.symbol else ""
@@ -199,6 +202,38 @@ class CryptoController(CryptoBaseController):
"No coin selected. Use 'load' to load the coin you want to look at.\n"
)
@log_start_end(log=logger)
def call_price(self, other_args):
"""Process price command"""
parser = argparse.ArgumentParser(
add_help=False,
formatter_class=argparse.ArgumentDefaultsHelpFormatter,
prog="price",
description="""Display price and interval of confidence in real-time. [Source: Pyth]""",
)
parser.add_argument(
"-s",
"--symbol",
required="-h" not in other_args,
type=str,
dest="symbol",
help="Symbol of coin to load data for, ~100 symbols are available",
)
if other_args and "-" not in other_args[0][0]:
other_args.insert(0, "-s")
ns_parser = self.parse_known_args_and_warn(parser, other_args)
if ns_parser:
if ns_parser.symbol in pyth_model.ASSETS.keys():
console.print(
"[param]If it takes too long, you can use 'Ctrl + C' to cancel.\n[/param]"
)
pyth_view.display_price(ns_parser.symbol)
else:
console.print("[red]The symbol selected does not exist.[/red]\n")
@log_start_end(log=logger)
def call_candle(self, other_args):
"""Process candle command"""

View File

@@ -0,0 +1,113 @@
import logging
from pythclient.pythaccounts import PythPriceAccount, PythPriceStatus
from pythclient.solana import (
SolanaClient,
SolanaPublicKey,
SOLANA_DEVNET_HTTP_ENDPOINT,
SOLANA_DEVNET_WS_ENDPOINT,
)
from openbb_terminal.decorators import log_start_end
logger = logging.getLogger(__name__)
ASSETS = {
"AAVE-USD": {"feedID": "FT7Cup6ZiFDF14uhFD3kYS3URMCf2RZ4iwfNEVUgndHW"},
"ADA-USD": {"feedID": "8oGTURNmSQkrBS1AQ5NjB2p8qY34UVmMA9ojrw8vnHus"},
"ALGO-USD": {"feedID": "c1A946dY5NHuVda77C8XXtXytyR3wK1SCP3eA9VRfC3"},
"ANC-USD": {"feedID": "5Si2Pdm7B87ojYvkegg7ct8Y446RHJyEjeREAyZEZcAV"},
"APE-USD": {"feedID": "EfnLcrwxCgwALc5vXr4cwPZMVcmotZAuqmHa8afG8zJe"},
"ATLAS-USD": {"feedID": "Dzs6SE1cssUqBpWCKzE4jeS5PrmRK1Fp2Kw1WMaDCiVR"},
"ATOM-USD": {"feedID": "7YAze8qFUMkBnyLVdKT4TFUUFui99EwS5gfRArMcrvFk"},
"AUST-UST": {"feedID": "9g8mGLKcDiKSrWahbjKGtpGCcrLkC5kbwmpFFGRs6euf"},
"AVAX-USD": {"feedID": "FVb5h1VmHPfVb1RfqZckchq18GxRv4iKt8T4eVTQAqdz"},
"BCH-USD": {"feedID": "4EQrNZYk5KR1RnjyzbaaRbHsv8VqZWzSUtvx58wLsZbj"},
"BETH-USD": {"feedID": "HyShqBUTtwAaCas9Dnib3ut6GmEDk9hTdKsrNfRffX8E"},
"BNB-USD": {"feedID": "GwzBgrXb4PG59zjce24SF2b9JXbLEjJJTBkmytuEZj1b"},
"BRZ-USD": {"feedID": "5g4XtpqLynP6YUSQwncw6CrdAEoy5a7QNDevgAgLsfyC"},
"BTC-USD": {"feedID": "HovQMDrbAgAYPCmHVSrezcSmkMtXSSUsLDFANExrZh2J"},
"BUSD-USD": {"feedID": "TRrB75VTpiojCy99S5BHmYkjARgtfBqZKk5JbeouUkV"},
"C98-USD": {"feedID": "Dxp7vob2NTGhmodyWyeEkqtNEpSfvSMoGKMYjmaY6pg1"},
"COPE-USD": {"feedID": "BAXDJUXtz6P5ARhHH1aPwgv4WENzHwzyhmLYK4daFwiM"},
"CUSD-USD": {"feedID": "DDwzo3aAjgYk8Vn8D3Zbxo62rTmBVdJv1WjaKQseiHKk"},
"DOGE-USD": {"feedID": "4L6YhY8VvUgmqG5MvJkUJATtzB2rFqdrJwQCmFLv4Jzy"},
"DOT-USD": {"feedID": "4dqq5VBpN4EwYb7wyywjjfknvMKu7m78j9mKZRXTj462"},
"ETH-USD": {"feedID": "EdVCmQ9FSPcVe5YySXDPCRmc8aDQLKJ9xvYBMZPie1Vw"},
"FIDA-USD": {"feedID": "7teETxN9Y8VK6uJxsctHEwST75mKLLwPH1jaFdvTQCpD"},
"FTM-USD": {"feedID": "BTwrLU4so1oJMViWA3BTzh8YmFwiLZ6CL4U3JryG7Q5S"},
"FTT-USD": {"feedID": "6vivTRs5ZPeeXbjo7dfburfaYDWoXjBtdtuYgQRuGfu"},
"GMT-USD": {"feedID": "EZy99wkoqohyyNxT1QCwW3epQtMQ1Dfqx4sXKqkHiSox"},
"GOFX-USD": {"feedID": "A9r7BHsXJQ2w9B7cdJV8BkfRoBWkxRichVGm72vVS1s5"},
"HXRO-USD": {"feedID": "6VrSw4Vxg5zs9shfdCxLqfUy2qSD3NCS9AsdBQUgbjnt"},
"INJ-USD": {"feedID": "44uRsNnT35kjkscSu59MxRr9CfkLZWf6gny8bWqUbVxE"},
"JET-USD": {"feedID": "3JnVPNY878pRH6TQ9f4wuwfNqGh6okyshmqmKsyvewMs"},
"LTC-USD": {"feedID": "BLArYBCUYhdWiY8PCUTpvFE21iaJq85dvxLk9bYMobcU"},
"LUNA-USD": {"feedID": "7xzCBiE2d9UwV9CYLV9vrbJPipJzMEaycPBoZg2LjhUf"},
"LUNC-USD": {"feedID": "8PugCXTAHLM9kfLSQWe2njE5pzAgUdpPk3Nx5zSm7BD3"},
"MATIC-USD": {"feedID": "FBirwuDFuRAu4iSGc7RGxN5koHB7EJM1wbCmyPuQoGur"},
"MER-USD": {"feedID": "6Z3ejn8DCWQFBuAcw29d3A5jgahEpmycn7YDMX7yRNrn"},
"MIR-USD": {"feedID": "4BDvhA5emySfqyyTHPHofTJqRw1cwDabK1yiEshetPv9"},
"MNGO-USD": {"feedID": "DCNw5mwZgjfTcoNsSZWUiXqU61ushNvr3JRQJRi1Nf95"},
"MSOL-USD": {"feedID": "9a6RNx3tCu1TSs6TBSfV2XRXEPEZXQ6WB7jRojZRvyeZ"},
"NEAR-USD": {"feedID": "3gnSbT7bhoTdGkFVZc1dW1PvjreWzpUNUD5ppXwv1N59"},
"ONE-USD": {"feedID": "BScN1mER6QJ2nFKpnP4PcqffQp97NXAvzAbVPjLKyRaF"},
"ORCA-USD": {"feedID": "A1WttWF7X3Rg6ZRpB2YQUFHCRh1kiXV8sKKLV3S9neJV"},
"PAI-USD": {"feedID": "8EjmYPrH9oHxLqk2oFG1qwY6ert7M9cv5WpXyWHxKiMb"},
"PORT-USD": {"feedID": "33ugpDWbC2mLrYSQvu1BHfykR8bt3MVc4S3YuuXMVRH3"},
"RAY-USD": {"feedID": "EhgAdTrgxi4ZoVZLQx1n93vULucPpiFi2BQtz9RJr1y6"},
"SBR-USD": {"feedID": "4WSN3XDSTfBX9A1YXGg8HJ7n2GtWMDNbtz1ab6aGGXfG"},
"SCNSOL-USD": {"feedID": "HoDAYYYhFvCNQNFPui51H8qvpcdz6KuVtq77ZGtHND2T"},
"SLND-USD": {"feedID": "FtwKARNAnZK2Nx1W4KVXzbyDzuRJqmApHRBtQpZ49HDv"},
"SNY-USD": {"feedID": "DEmEX28EgrdQEBwNXdfMsDoJWZXCHRS5pbgmJiTkjCRH"},
"SOL-USD": {"feedID": "J83w4HKfqxwcq3BEMMkPFSppX3gqekLyLJBexebFVkix"},
"SRM-USD": {"feedID": "992moaMQKs32GKZ9dxi8keyM2bUmbrwBZpK4p2K6X5Vs"},
"STEP-USD": {"feedID": "DKjdYzkPEZLBsfRzUaCjze5jjgCYu5kFCB19wVa9sy6j"},
"STSOL-USD": {"feedID": "2LwhbcswZekofMNRtDRMukZJNSRUiKYMFbqtBwqjDfke"},
"TUSD-USD": {"feedID": "2sbXow64dSbktGM6gG9FpszwVu7GNhr6Qi2WHRCP9ULn"},
"USDC-USD": {"feedID": "5SSkXsEKQepHHAewytPVwdej4epN1nxgLVM84L4KXgy7"},
"USDT-USD": {"feedID": "38xoQ4oeJCBrcVvca2cGk7iV1dAfrmTR1kmhSCJQ8Jto"},
"USTC-USD": {"feedID": "AUKjh1oVPZyudi3nzYSsdZxSjq42afUCvsdbKFc5CbD"},
"VAI-USD": {"feedID": "Gvm85Pbjq4Tv7qyaS4y9ZMqCdY3nynGDBFYAu7mjPoGM"},
"XVS-USD": {"feedID": "8Y4jhVcQvQZWjMarM855NMkVuua78FS8Uwy58TjcnUWs"},
"ZBC-USD": {"feedID": "7myonvBWD5zfh6qfScRP5E4anEue4Bqnu8XS8cdtJTQx"},
}
@log_start_end(log=logger)
async def get_price(symbol: str):
"""Returns price and confidence interval from pyth live feed. [Source: Pyth]
Parameters
----------
symbol : str
Symbol of the asset to get price and confidence interval from
Returns
-------
float
Price of the asset
float
Confidence level
float
Previous price of the asset
"""
account_key = SolanaPublicKey(ASSETS[symbol]["feedID"])
solana_client = SolanaClient(
endpoint=SOLANA_DEVNET_HTTP_ENDPOINT, ws_endpoint=SOLANA_DEVNET_WS_ENDPOINT
)
price: PythPriceAccount = PythPriceAccount(account_key, solana_client)
await price.update()
price_status = price.aggregate_price_status
aggregate_price = -1
confidence = -1
if price_status == PythPriceStatus.TRADING:
aggregate_price = price.aggregate_price
previous_price = price.prev_price
confidence = price.aggregate_price_confidence_interval
await solana_client.close()
return aggregate_price, confidence, previous_price

View File

@@ -0,0 +1,31 @@
# pylint: disable= C0301
import asyncio
import logging
from openbb_terminal.cryptocurrency.pyth_model import get_price
from openbb_terminal.decorators import log_start_end
from openbb_terminal.rich_config import console
logger = logging.getLogger(__name__)
@log_start_end(log=logger)
def display_price(symbol: str) -> None:
"""Displays live price from pyth live feed [Source: https://pyth.network/]
Parameters
----------
symbol : str
Symbol of the asset to get price for
"""
try:
while True:
price, confidence, previous_price = asyncio.run(get_price(symbol))
console.print(
f"{symbol} = {'[red]' if previous_price >= price else '[green]'}"
f"{price}{'[/red]' if previous_price >= price else '[/green]'} ± {confidence}",
end="\r",
)
except KeyboardInterrupt:
print(f"\n\nStopped watching {symbol} price and confidence interval\n")

2535
poetry.lock generated vendored

File diff suppressed because it is too large Load Diff

3
pyproject.toml vendored
View File

@@ -96,6 +96,7 @@ jupyterlab-code-formatter = {version = "^1.4.10", optional = true}
jupyterlab-lsp = {version = "^3.10.1", optional = true}
jedi-language-server = {version = "^0.35.1", optional = true}
charset-normalizer = "2.1.0"
pythclient = "^0.1.2"
[tool.poetry.dev-dependencies]
pytest = "^6.2.2"
@@ -130,4 +131,4 @@ installer = ["pyinstaller"]
[build-system]
requires = ["poetry-core>=1.0.0"]
build-backend = "poetry.core.masonry.api"
build-backend = "poetry.core.masonry.api"

37
requirements-full.txt vendored
View File

@@ -1,7 +1,7 @@
absl-py==1.2.0; python_version >= "3.7"
aiodns==3.0.0; python_version >= "3.5.2"
aiohttp==3.8.1; python_version >= "3.6"
aiosignal==1.2.0; python_version >= "3.6"
aiodns==3.0.0; python_version >= "3.5.2" and python_full_version >= "3.7.0"
aiohttp==3.8.2; python_version >= "3.6" and python_full_version >= "3.7.0"
aiosignal==1.2.0; python_version >= "3.6" and python_full_version >= "3.7.0"
alabaster==0.7.12; python_version >= "3.6"
alpha-vantage==2.3.1
ansiwrap==0.8.4; python_version >= "3.7"
@@ -17,13 +17,15 @@ astropy==5.1; python_version >= "3.8"
asttokens==2.0.8; python_full_version >= "3.6.2" and python_version >= "3.8"
astunparse==1.6.3; python_version >= "3.7"
async-generator==1.10; python_version >= "3.7" and python_version < "4.0"
async-timeout==4.0.2; python_version >= "3.6"
async-timeout==4.0.2; python_version >= "3.6" and python_full_version >= "3.7.0"
atomicwrites==1.4.1; python_version >= "3.7" and python_full_version < "3.0.0" and sys_platform == "win32" or sys_platform == "win32" and python_version >= "3.7" and python_full_version >= "3.4.0"
attrs==21.4.0; python_full_version >= "3.7.0" and python_version >= "3.7" and python_version < "4.0" and (python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.5.0")
attrs==21.4.0; python_full_version >= "3.7.0" and python_version >= "3.7" and (python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.5.0") and (python_version >= "3.6" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.6" and python_version < "4.0" and python_full_version >= "3.5.0") and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7")
babel==2.10.3; python_version >= "3.7"
backcall==0.2.0; python_full_version >= "3.6.2" and python_version >= "3.8"
backoff==2.1.2; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.7.0"
backports.zoneinfo==0.2.1; python_version < "3.9" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
bandit==1.7.4; python_version >= "3.7"
base58==2.1.1; python_version >= "3.5" and python_full_version >= "3.7.0"
beartype==0.7.1; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.0"
beautifulsoup4==4.11.1; python_full_version >= "3.6.0" and python_version >= "3.7"
black==22.8.0; python_full_version >= "3.6.2"
@@ -31,7 +33,7 @@ bleach==5.0.1; python_version >= "3.7"
bs4==0.0.1
bt==0.2.9; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
cachetools==5.2.0; python_version >= "3.7" and python_version < "4.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7")
ccxt==1.93.66
ccxt==1.93.78
certifi==2022.9.14; python_version >= "3.8" and python_version < "4" and python_full_version >= "3.7.1" and python_full_version < "4.0.0"
cffi==1.15.1
cfgv==3.3.1; python_full_version >= "3.6.1" and python_version >= "3.7"
@@ -64,7 +66,7 @@ entrypoints==0.4; python_full_version >= "3.7.0" and python_version >= "3.7"
et-xmlfile==1.1.0; python_version >= "3.6"
exchange-calendars==4.2.3; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
executing==1.0.0; python_full_version >= "3.6.2" and python_version >= "3.8"
fastjsonschema==2.16.1; python_full_version >= "3.7.0" and python_version >= "3.7"
fastjsonschema==2.16.2; python_full_version >= "3.7.0" and python_version >= "3.7"
feedparser==6.0.10; python_version >= "3.6"
ffn==0.3.6; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
filelock==3.8.0; python_version >= "3.7"
@@ -74,19 +76,19 @@ finviz==1.4.4
finvizfinance==0.14.3; python_version >= "3.5"
flake8==3.9.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
flatbuffers==2.0.7; python_version >= "3.7"
fonttools==4.37.2; python_version >= "3.7"
fonttools==4.37.3; python_version >= "3.7"
formulaic==0.3.4; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and python_version >= "3.8"
fred==3.1
fredapi==0.4.3
frozendict==2.3.4; python_version >= "3.6"
frozenlist==1.3.1; python_version >= "3.7"
frozenlist==1.3.1; python_version >= "3.7" and python_full_version >= "3.7.0"
fundamentalanalysis==0.2.14
future==0.18.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
gast==0.4.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
gitdb==4.0.9; python_version >= "3.7"
gitpython==3.1.27; python_version >= "3.7"
google-auth-oauthlib==0.4.6; python_version >= "3.7"
google-auth==2.11.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7"
google-auth==2.11.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7"
google-pasta==0.2.0; python_version >= "3.7"
grpcio==1.49.0; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and python_version >= "3.7"
h11==0.13.0; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.7.0"
@@ -130,6 +132,7 @@ korean-lunar-calendar==0.3.1; python_version >= "3.8" and python_version < "4.0"
lazy-object-proxy==1.7.1; python_version >= "3.6" and python_full_version >= "3.7.2"
libclang==14.0.6; python_version >= "3.7"
linearmodels==4.27; python_version >= "3.8"
loguru==0.6.0; python_version >= "3.5" and python_full_version >= "3.7.0"
lxml==4.9.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7"
markdown-it-py==1.1.0; python_version >= "3.6" and python_version < "4.0"
markdown==3.4.1; python_version >= "3.7"
@@ -142,7 +145,7 @@ mistune==0.8.4; python_version >= "3.7"
mock==4.0.3; python_version >= "3.6"
more-itertools==8.14.0; python_version >= "3.6"
mplfinance==0.12.9b1
multidict==6.0.2; python_version >= "3.7"
multidict==5.2.0; python_version >= "3.7" and python_full_version >= "3.7.0"
multitasking==0.0.11
mypy-extensions==0.4.3; python_version >= "3.8" and python_full_version >= "3.6.2"
mypy==0.930; python_version >= "3.6"
@@ -168,7 +171,7 @@ packaging==21.3; python_version >= "3.8"
pandas-datareader==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
pandas-market-calendars==3.2; python_full_version >= "3.7.0"
pandas-ta==0.3.14b
pandas==1.4.4; python_version >= "3.8"
pandas==1.5.0; python_version >= "3.8"
pandocfilters==1.5.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
papermill==2.4.0; python_version >= "3.7"
parso==0.8.3; python_full_version >= "3.6.2" and python_version >= "3.8"
@@ -197,13 +200,13 @@ py==1.11.0; python_full_version >= "3.7.0" and python_version >= "3.7" and imple
pyally==1.1.2
pyasn1-modules==0.2.8; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7"
pyasn1==0.4.8; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7") or python_full_version >= "3.6.0" and python_version >= "3.7" and python_version < "4" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7")
pycares==4.2.2; python_version >= "3.5.2"
pycodestyle==2.7.0; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
pycares==4.2.2; python_version >= "3.5.2" and python_full_version >= "3.7.0"
pycodestyle==2.7.0; python_full_version >= "3.7.0"
pycoingecko==2.3.0
pycparser==2.21
pyerfa==2.0.0.1; python_version >= "3.8"
pyex==0.5.0
pyflakes==2.3.1; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0"
pyflakes==2.3.1; python_full_version >= "3.7.0"
pygments==2.13.0; python_version >= "3.6"
pyhdfe==0.1.0; python_version >= "3.8"
pylint==2.15.2; python_full_version >= "3.7.2"
@@ -222,6 +225,7 @@ pytest-cov==3.0.0; python_version >= "3.6"
pytest-mock==3.8.2; python_version >= "3.7"
pytest-recording==0.12.1; python_version >= "3.5"
pytest==6.2.5; python_version >= "3.6"
pythclient==0.1.2; python_full_version >= "3.7.0"
python-binance==1.0.16
python-coinmarketcap==0.2
python-dateutil==2.8.2; python_full_version >= "3.7.1" and python_version >= "3.8" and python_version < "3.11" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.7") and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.5")
@@ -329,10 +333,11 @@ websocket-client==1.4.1; python_version >= "3.8" and python_version < "4.0"
websockets==10.3; python_version >= "3.7"
werkzeug==2.2.2; python_version >= "3.7"
widgetsnbextension==3.6.1
win32-setctime==1.1.0; python_version >= "3.5" and python_full_version >= "3.7.0" and sys_platform == "win32"
wrapt==1.14.1; python_full_version >= "3.7.2" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.7") and python_version >= "3.8" and python_version < "3.11"
wsproto==1.2.0; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.7.0"
xlsxwriter==3.0.3; python_version >= "3.7"
yarl==1.7.2; python_version >= "3.7"
yarl==1.7.2; python_version >= "3.7" and python_full_version >= "3.7.0"
yfinance==0.1.74
zipp==3.8.1; python_version < "3.10" and python_version >= "3.7"
zope.interface==5.4.0; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5"

39
requirements.txt vendored
View File

@@ -1,6 +1,6 @@
aiodns==3.0.0; python_version >= "3.5.2"
aiohttp==3.8.1; python_version >= "3.6"
aiosignal==1.2.0; python_version >= "3.6"
aiodns==3.0.0; python_version >= "3.5.2" and python_full_version >= "3.7.0"
aiohttp==3.8.2; python_version >= "3.6" and python_full_version >= "3.7.0"
aiosignal==1.2.0; python_version >= "3.6" and python_full_version >= "3.7.0"
alpha-vantage==2.3.1
ansiwrap==0.8.4; python_version >= "3.7"
anyio==3.6.1; python_full_version >= "3.6.2" and python_version >= "3.7"
@@ -13,23 +13,25 @@ astor==0.8.1; python_full_version >= "3.7.1" and python_full_version < "4.0.0" a
astropy==5.1; python_version >= "3.8"
asttokens==2.0.8; python_full_version >= "3.6.2" and python_version >= "3.8"
async-generator==1.10; python_version >= "3.7" and python_version < "4.0"
async-timeout==4.0.2; python_version >= "3.6"
attrs==21.4.0; python_full_version >= "3.7.0" and python_version >= "3.7" and python_version < "4.0" and (python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.5.0")
async-timeout==4.0.2; python_version >= "3.6" and python_full_version >= "3.7.0"
attrs==21.4.0; python_version >= "3.7" and python_full_version >= "3.7.0" and (python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4.0" or python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.5.0")
babel==2.10.3; python_version >= "3.7"
backcall==0.2.0; python_full_version >= "3.6.2" and python_version >= "3.8"
backoff==2.1.2; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.7.0"
backports.zoneinfo==0.2.1; python_version < "3.9" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
base58==2.1.1; python_version >= "3.5" and python_full_version >= "3.7.0"
beartype==0.7.1; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.6.0"
beautifulsoup4==4.11.1; python_full_version >= "3.6.0" and python_version >= "3.7"
black==22.8.0; python_full_version >= "3.6.2"
bleach==5.0.1; python_version >= "3.7"
bs4==0.0.1
bt==0.2.9; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.6.0")
ccxt==1.93.66
ccxt==1.93.78
certifi==2022.9.14; python_version >= "3.8" and python_version < "4" and python_full_version >= "3.7.1" and python_full_version < "4.0.0"
cffi==1.15.1
charset-normalizer==2.1.0; python_full_version >= "3.6.0"
click==8.1.3; python_version >= "3.7" and python_full_version >= "3.6.2"
colorama==0.4.5; python_full_version >= "3.6.2" and python_full_version < "4.0.0" and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5") and (python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or python_full_version >= "3.5.0" and platform_system == "Windows" and python_version >= "3.7") and platform_system == "Windows" and python_version >= "3.8" and sys_platform == "win32"
colorama==0.4.5; python_full_version >= "3.7.0" and python_full_version < "4.0.0" and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5") and (python_version >= "3.7" and python_full_version < "3.0.0" and platform_system == "Windows" or python_full_version >= "3.5.0" and platform_system == "Windows" and python_version >= "3.7") and platform_system == "Windows" and python_version >= "3.8" and sys_platform == "win32"
commonmark==0.9.1; python_full_version >= "3.6.2" and python_full_version < "4.0.0"
convertdate==2.4.0; python_version >= "3.7" and python_version < "4"
cryptography==38.0.1; python_version >= "3.6"
@@ -51,19 +53,20 @@ entrypoints==0.4; python_full_version >= "3.7.0" and python_version >= "3.7"
et-xmlfile==1.1.0; python_version >= "3.6"
exchange-calendars==4.2.3; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
executing==1.0.0; python_full_version >= "3.6.2" and python_version >= "3.8"
fastjsonschema==2.16.1; python_full_version >= "3.7.0" and python_version >= "3.7"
fastjsonschema==2.16.2; python_full_version >= "3.7.0" and python_version >= "3.7"
feedparser==6.0.10; python_version >= "3.6"
ffn==0.3.6; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
financedatabase==1.0.2
finnhub-python==2.4.14
finviz==1.4.4
finvizfinance==0.14.3; python_version >= "3.5"
fonttools==4.37.2; python_version >= "3.7"
flake8==3.9.2; (python_version >= "2.7" and python_full_version < "3.0.0") or (python_full_version >= "3.5.0")
fonttools==4.37.3; python_version >= "3.7"
formulaic==0.3.4; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and python_version >= "3.8"
fred==3.1
fredapi==0.4.3
frozendict==2.3.4; python_version >= "3.6"
frozenlist==1.3.1; python_version >= "3.7"
frozenlist==1.3.1; python_version >= "3.7" and python_full_version >= "3.7.0"
fundamentalanalysis==0.2.14
future==0.18.2; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
gitdb==4.0.9; python_version >= "3.7"
@@ -101,14 +104,16 @@ jupyterlab==3.4.7; python_version >= "3.7"
kiwisolver==1.4.4; python_version >= "3.7"
korean-lunar-calendar==0.3.1; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
linearmodels==4.27; python_version >= "3.8"
loguru==0.6.0; python_version >= "3.5" and python_full_version >= "3.7.0"
lxml==4.9.1; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.7"
markupsafe==2.1.1; python_version >= "3.7"
matplotlib-inline==0.1.6; python_full_version >= "3.6.2" and python_version >= "3.8"
matplotlib==3.5.3; python_version >= "3.7"
mccabe==0.6.1; python_full_version >= "3.7.0"
mistune==0.8.4; python_version >= "3.7"
more-itertools==8.14.0; python_version >= "3.6"
mplfinance==0.12.9b1
multidict==6.0.2; python_version >= "3.7"
multidict==5.2.0; python_version >= "3.6" and python_full_version >= "3.7.0"
multitasking==0.0.11
mypy-extensions==0.4.3; python_version >= "3.8" and python_full_version >= "3.6.2"
mypy==0.930; python_version >= "3.6"
@@ -131,7 +136,7 @@ packaging==21.3; python_version >= "3.8"
pandas-datareader==0.10.0; python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6"
pandas-market-calendars==3.2; python_full_version >= "3.7.0"
pandas-ta==0.3.14b
pandas==1.4.4; python_version >= "3.8"
pandas==1.5.0; python_version >= "3.8"
pandocfilters==1.5.0; python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.4.0" and python_version >= "3.7"
papermill==2.4.0; python_version >= "3.7"
parso==0.8.3; python_full_version >= "3.6.2" and python_version >= "3.8"
@@ -155,11 +160,13 @@ ptyprocess==0.7.0; os_name != "nt" and python_version >= "3.8" and sys_platform
pure-eval==0.2.2; python_full_version >= "3.6.2" and python_version >= "3.8"
py==1.11.0; implementation_name == "pypy" and python_version >= "3.7" and python_full_version >= "3.7.0"
pyally==1.1.2
pycares==4.2.2; python_version >= "3.5.2"
pycares==4.2.2; python_version >= "3.5.2" and python_full_version >= "3.7.0"
pycodestyle==2.7.0; python_full_version >= "3.7.0"
pycoingecko==2.3.0
pycparser==2.21
pyerfa==2.0.0.1; python_version >= "3.8"
pyex==0.5.0
pyflakes==2.3.1; python_full_version >= "3.7.0"
pygments==2.13.0; python_version >= "3.6"
pyhdfe==0.1.0; python_version >= "3.8"
pyluach==2.0.1; python_version >= "3.8" and python_version < "4.0" and python_full_version >= "3.7.0"
@@ -173,6 +180,7 @@ pyportfolioopt==1.5.3; python_version >= "3.8" and python_version < "3.11"
pyprind==2.11.3; python_version >= "2.7" and python_full_version < "3.0.0" or python_full_version >= "3.6.0"
pyrsistent==0.18.1; python_version >= "3.7"
pysocks==1.7.1; python_version >= "3.7" and python_full_version < "3.0.0" and python_version < "4" or python_full_version >= "3.6.0" and python_version < "4" and python_version >= "3.7"
pythclient==0.1.2; python_full_version >= "3.7.0"
python-binance==1.0.16
python-coinmarketcap==0.2
python-dateutil==2.8.2; python_full_version >= "3.7.1" and python_version >= "3.8" and python_version < "3.11" and python_full_version < "4.0.0" and (python_version >= "3.7" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.7") and (python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.3.0" and python_version >= "3.5")
@@ -233,7 +241,7 @@ tradingview-ta==3.2.10; python_version >= "3.6"
traitlets==5.4.0; python_full_version >= "3.7.0" and python_version >= "3.8"
trio-websocket==0.9.2; python_version >= "3.7" and python_version < "4.0"
trio==0.21.0; python_version >= "3.7" and python_version < "4.0"
typing-extensions==4.3.0; python_version < "3.10" and python_full_version >= "3.6.2" and python_version >= "3.7"
typing-extensions==4.3.0; python_version < "3.10" and python_full_version >= "3.7.0" and python_version >= "3.7"
tzdata==2022.2; platform_system == "Windows" and python_version >= "3.6" and (python_version >= "3.6" and python_full_version < "3.0.0" or python_full_version >= "3.6.0" and python_version >= "3.6")
tzlocal==4.2; python_version >= "3.6"
ujson==5.5.0; python_version >= "3.7"
@@ -249,10 +257,11 @@ webencodings==0.5.1; python_version >= "3.7" and python_full_version < "3.0.0" o
websocket-client==1.4.1; python_version >= "3.8" and python_version < "4.0"
websockets==10.3; python_version >= "3.7"
widgetsnbextension==3.6.1
win32-setctime==1.1.0; python_version >= "3.5" and python_full_version >= "3.7.0" and sys_platform == "win32"
wrapt==1.14.1; python_full_version >= "3.7.1" and python_full_version < "4.0.0" and python_version >= "3.8"
wsproto==1.2.0; python_version >= "3.7" and python_version < "4.0" and python_full_version >= "3.7.0"
xlsxwriter==3.0.3; python_version >= "3.7"
yarl==1.7.2; python_version >= "3.6"
yarl==1.7.2; python_version >= "3.6" and python_full_version >= "3.7.0"
yfinance==0.1.74
zipp==3.8.1; python_version < "3.10" and python_version >= "3.7"
zope.interface==5.4.0; python_version >= "3.5" and python_full_version < "3.0.0" or python_full_version >= "3.5.0" and python_version >= "3.5"

View File

@@ -1,5 +1,6 @@
load load a specific cryptocurrency for analysis [YahooFinance, CoinGecko, CCXT]
find find coins [CoinGecko, CoinPaprika, Binance, Coinbase, YahooFinance]
price real-time price and interval of confidence
Coin:
Source: