add order book command

This commit is contained in:
Jamie
2021-04-30 22:49:30 -04:00
parent ff8be2405e
commit 5f9ef3ddee
5 changed files with 163 additions and 21 deletions

View File

@@ -225,10 +225,14 @@ These are the ones where a key is necessary:
* Tradier: https://developer.tradier.com/getting_started
* Oanda API: https://developer.oanda.com
* CoinMarketCap API: https://coinmarketcap.com/api/
* Binance: https://binance.us
When these are obtained, don't forget to update [config_terminal.py](/gamestonk_terminal/config_terminal.py).
Alternatively, you can also set them to the following environment variables: GT_API_KEY_ALPHAVANTAGE, GT_API_KEY_FINANCIALMODELINGPREP, GT_API_KEY_QUANDL, GT_API_REDDIT_CLIENT_ID, GT_API_REDDIT_CLIENT_SECRET, GT_API_REDDIT_USERNAME, GT_API_REDDIT_USER_AGENT, GT_API_REDDIT_PASSWORD, GT_API_TWITTER_KEY, GT_API_TWITTER_SECRET_KEY, GT_API_TWITTER_BEARER_TOKEN, GT_API_POLYGON_KEY, GT_FRED_API_KEY, GT_API_NEWS_TOKEN, GT_OANDA_TOKEN, GT_OANDA_ACCOUNT, GT_TRADIER_TOKEN, GT_CMC_API_KEY.
Alternatively, you can also set them to the following environment variables: GT_API_KEY_ALPHAVANTAGE, GT_API_KEY_FINANCIALMODELINGPREP,
GT_API_KEY_QUANDL, GT_API_REDDIT_CLIENT_ID, GT_API_REDDIT_CLIENT_SECRET, GT_API_REDDIT_USERNAME, GT_API_REDDIT_USER_AGENT, GT_API_REDDIT_PASSWORD,
GT_API_TWITTER_KEY, GT_API_TWITTER_SECRET_KEY, GT_API_TWITTER_BEARER_TOKEN, GT_API_POLYGON_KEY, GT_FRED_API_KEY,
GT_API_NEWS_TOKEN, GT_OANDA_TOKEN, GT_OANDA_ACCOUNT, GT_TRADIER_TOKEN, GT_CMC_API_KEY, GT_BINANCE_API_KEY, GT_BINANCE_SECRET_KEY.
Example:
```

View File

@@ -3,21 +3,84 @@ __docformat__ = "numpy"
import argparse
from typing import List
import matplotlib.pyplot as plt
import numpy as np
from binance.client import Client
from gamestonk_terminal.main_helper import parse_known_args_and_warn
from gamestonk_terminal.config_terminal import BINANCE_API_KEY, BINANCE_SECRET_KEY
from gamestonk_terminal.cryptocurrency.binance_view import plot_order_book
def order_book(coin:str, other_args:List[str]):
"""Get order book for currency"""
pass
def recent_trades(coin:str, other_args:List[str]):
"""Get recent trades for currency"""
pass
def order_book(coin: str, other_args: List[str]):
"""
Get order book for currency
Parameters
----------
coin: str
Coin to get order book for
other_args: List[str]
Argparse arguments
Returns
-------
"""
client = Client(BINANCE_API_KEY, BINANCE_SECRET_KEY)
order_book = client.get_order_book(symbol=coin)
bids = np.asarray(order_book["bids"], dtype=float)
asks = np.asarray(order_book["asks"], dtype=float)
bids = np.insert(bids, 2, bids[:, 1].cumsum(), axis=1)
asks = np.insert(asks, 2, np.flipud(asks[:, 1]).cumsum(), axis=1)
plot_order_book(bids, asks, coin)
def recent_trades(coin: str, other_args: List[str]):
"""
Get recent trades for currency
Parameters
----------
coin: str
Coin to get recent trades for
other_args: List[str]
Argparse arguments
Returns
-------
"""
def candles(coin:str, other_args:List[str]):
"""Get order book for currency"""
pass
def balance(coin:str, other_args:List[str]):
"""Get order book for currency"""
pass
def candles(coin: str, other_args: List[str]):
"""
Get klines/candles for coin
Parameters
----------
coin: str
Coin to get symbol of
other_args: List[str]
Argparse arguments
Returns
-------
"""
pass
def balance(coin: str, other_args: List[str]):
"""
Get accont holdings for asset
Parameters
----------
coin: str
Coin to get holdings of
other_args : List[str]
Argparse arguments
Returns
-------
"""
pass

View File

@@ -0,0 +1,43 @@
"""Binance view functions"""
__docformat__ = "numpy"
import numpy as np
import matplotlib.pyplot as plt
from gamestonk_terminal.main_helper import plot_autoscale
from gamestonk_terminal.config_plot import PLOT_DPI
from gamestonk_terminal.feature_flags import USE_ION as ion
def plot_order_book(bids: np.array, asks: np.array, coin: str):
"""
Plots Bid/Ask
Parameters
----------
bids : np.array
array of bids with columns: price, size, cumulative size
asks : np.array
array of asks with columns: price, size, cumulative size
coin : str
Coin being plotted
Returns
-------
"""
_, ax = plt.subplots(figsize=plot_autoscale(), dpi=PLOT_DPI)
ax.plot(bids[:, 0], bids[:, 2], "g", label="bids")
ax.fill_between(bids[:, 0], bids[:, 2], color="g", alpha=0.4)
ax.plot(asks[:, 0], asks[:, 2], "r", label="asks")
ax.fill_between(asks[:, 0], asks[:, 2], color="r", alpha=0.4)
plt.grid(b=True, which="major", color="#666666", linestyle="-")
plt.minorticks_on()
plt.grid(b=True, which="minor", color="#999999", linestyle="-", alpha=0.2)
plt.legend(loc=0)
plt.xlabel("Price")
plt.ylabel("Size (Coins) ")
plt.title(f"Order Book for {coin}")
# if ion:
# plt.ion()
plt.show()
print("")

View File

@@ -29,6 +29,7 @@ class CryptoController:
"trades",
"candle",
"balance",
"add",
]
def __init__(self):
@@ -57,6 +58,7 @@ class CryptoController:
print(" top view top coins from coinmarketcap")
print("")
print("Binance:")
print(" add add coin as current")
print(" book get order book")
print(" trades get recent trades")
print(" candle get klines/candles and plot")
@@ -92,9 +94,11 @@ class CryptoController:
return True
def call_load(self, other_args):
"""Load command - get df from gecko"""
self.current_coin, self.current_df = pycoingecko_view.load(other_args)
def call_view(self, other_args):
"""View command - plot loaded coin"""
if self.current_coin:
pycoingecko_view.view(self.current_coin, self.current_df, other_args)
@@ -103,13 +107,32 @@ class CryptoController:
print("")
def call_trend(self, _):
"""Trend command - show top 7 gecko coins"""
pycoingecko_view.trend()
def call_top(self, other_args):
"""Top command - get top n coins from coinmarketcap"""
cmc_view.get_cmc_top_n(other_args)
def call_book(self,other_args):
binance_model.order_book(other_args)
def call_book(self, other_args):
"""Book command - get order book from binance"""
binance_model.order_book(self.current_coin, other_args)
def call_trades(self, other_args):
"""Trades command - get recent trades from binance"""
binance_model.recent_trades(self.current_coin, other_args)
def call_candle(self, other_args):
"""Candle command - show candle chart from binance"""
binance_model.candles(self.current_coin, other_args)
def call_balance(self, other_args):
"""Balance command - check current holdings of coin in binance"""
binance_model.balance(self.current_coin, other_args)
def call_add(self, _):
self.current_coin = input("Coin?").upper()
def menu():
crypto_controller = CryptoController()

View File

@@ -137,22 +137,31 @@ def view(coin: str, prices: pd.DataFrame, other_args: List[str]):
print(e)
print("")
def trend():
"""Prints top 7 coins from pycoingecko"""
cg = CoinGeckoAPI()
trending = cg.get_search_trending()["coins"]
name, symbol, price, rank = [], [], [], []
for coin in trending:
name.append( coin["item"]["name"] )
symbol.append( coin["item"]["symbol"] )
name.append(coin["item"]["name"])
symbol.append(coin["item"]["symbol"])
coin_id = coin["item"]["id"]
price.append( cg.get_price(coin_id, vs_currencies="USD")[coin_id]["usd"])
rank.append( coin["item"]["market_cap_rank"] )
price.append(cg.get_price(coin_id, vs_currencies="USD")[coin_id]["usd"])
rank.append(coin["item"]["market_cap_rank"])
df = pd.DataFrame()
df["name"]= name
df["name"] = name
df["symbol"] = symbol
df["last_price"] = price
df["market_cap_rank"] = rank
print( tabulate(df, headers=df.columns, floatfmt = ".2f", showindex=False, tablefmt="fancy_grid"))
print("")
print(
tabulate(
df,
headers=df.columns,
floatfmt=".2f",
showindex=False,
tablefmt="fancy_grid",
)
)
print("")