Skip to main content

Pricehub: Unified Python Package for Collecting OHLC Prices from Binance, Bybit, and Coinbase APIs into a DataFrame

Project description

CI Pylint Coverage Black Python Versions License PyPI Downloads

PriceHub: Unified Python Package for Collecting OHLC Prices from Binance, Bybit, and Coinbase APIs into a DataFrame

It supports multiple markets, including spot and futures, and provides flexible timestamp inputs and a wide range of intervals.

Effective trading begins with thorough data analysis, visualization, and backtesting. This package simplifies access to such data, providing a unified solution for retrieving OHLC information across various broker APIs.

Contents

Supported Brokers

  • Binance Spot
  • Binance Futures
  • Bybit Spot
  • Bybit Linear (Futures)
  • Bybit Inverse
  • Coinbase Spot

Key Features

  • Unified Interface: Supports multiple brokers and markets (spot, futures) with a single interface.
  • Unified Intervals: Use the same interval format across all brokers.
  • Timestamp Flexibility: Accepts timestamps (start, end) in various formats (int, float, string, Arrow, pandas, datetime).
  • No Credential Requirement: Fetch public market data without authentication.
  • Extended Date Ranges: This package will paginate and collect all data across large date ranges.
  • All fields from official API: Retrieve all fields available in the official API (e.g., Number of trades, Taker buy base asset volume).

Supported Intervals

(depends on the broker)

  • Seconds: 1s
  • Minutes: 1m, 3m, 5m, 15m, 30m
  • Hours: 1h, 2h, 4h, 6h, 12h
  • Days: 1d, 3d
  • Weeks: 1w
  • Months: 1M

Installation

pip install pricehub

Function Reference

def get_ohlc(broker: SupportedBroker, symbol: str, interval: Interval, start: Timestamp, end: Timestamp) -> pd.DataFrame

Retrieves OHLC data for the specified broker, symbol, interval, and date range.

  • Parameters:

    • broker: The broker to fetch data from (e.g., binance_spot, bybit_spot).
    • symbol: The trading pair symbol (e.g., BTCUSDT).
    • interval: The interval for OHLC data (1m, 1h, 1d, etc.).
    • start: Start time of the data (supports various formats).
    • end: End time of the data (supports various formats).
  • Returns:

    • pandas.DataFrame: A DataFrame containing OHLC data.

Example Usage

Save data to CSV, Excel, Parquet files

from pricehub import get_ohlc
df = get_ohlc("binance_spot", "BTCUSDT", "1d", "2024-10-01", "2024-10-05")
df.to_csv("btcusdt_1d_2024-10-01_2024-10-05.csv") # Save to CSV
df.to_excel("btcusdt_1d_2024-10-01_2024-10-05.xlsx") # Save to Excel
df.to_parquet("btcusdt_1d_2024-10-01_2024-10-05.parquet") # Save to Parquet, requires 'pyarrow', 'fastparquet'

Retrieve OHLC data from Binance Spot for a 6-hour interval

from pricehub import get_ohlc

df = get_ohlc(
    broker="binance_spot",
    symbol="BTCUSDT",
    interval="6h",
    start="2024-10-01",
    end="2024-10-02"
)
print(df)
                        Open     High      Low    Close      Volume              Close time  Quote asset volume  Number of trades  Taker buy base asset volume  Taker buy quote asset volume  Ignore
Open time                                                                                                                                                                                           
2024-10-01 00:00:00  63309.0  63872.0  63000.0  63733.9   39397.714 2024-10-01 05:59:59.999        2.500830e+09          598784.0                    19410.785                  1.232417e+09     0.0
2024-10-01 06:00:00  63733.9  64092.6  63683.1  63699.9   32857.923 2024-10-01 11:59:59.999        2.100000e+09          446330.0                    15865.753                  1.014048e+09     0.0
2024-10-01 12:00:00  63700.0  63784.0  61100.0  62134.1  242613.990 2024-10-01 17:59:59.999        1.512287e+10         2583155.0                   112641.347                  7.022384e+09     0.0
2024-10-01 18:00:00  62134.1  62422.3  60128.2  60776.8  114948.208 2024-10-01 23:59:59.999        7.031801e+09         1461890.0                    54123.788                  3.312086e+09     0.0
2024-10-02 00:00:00  60776.7  61858.2  60703.3  61466.7   51046.012 2024-10-02 05:59:59.999        3.133969e+09          668558.0                    27191.919                  1.669187e+09     0.0

Retrieve OHLC data from Bybit Spot for a 1-day interval

from pricehub import get_ohlc

df = get_ohlc(
    broker="bybit_spot",
    symbol="ETHUSDT",
    interval="1d",
    start=1727740800.0, # Unix timestamp in seconds for "2024-10-01"
    end=1728086400000, # Unix timestamp in ms for "2024-10-05"
)
print(df)
               Open     High      Low    Close        Volume      Turnover
Open time                                                                 
2024-10-01  2602.00  2659.31  2413.15  2447.95  376729.77293  9.623060e+08
2024-10-02  2447.95  2499.82  2351.53  2364.01  242498.88477  5.914189e+08
2024-10-03  2364.01  2403.50  2309.75  2349.91  242598.38255  5.716546e+08
2024-10-04  2349.91  2441.82  2339.15  2414.67  178050.43782  4.254225e+08
2024-10-05  2414.67  2428.69  2389.83  2414.54  106665.69595  2.573030e+08

Plot Close 1d data with matplotlib: BTCUSDT Futures on Binance for the last year

from datetime import datetime, timedelta

import matplotlib.pyplot as plt
from pricehub import get_ohlc

now = datetime.now()
df = get_ohlc("binance_futures", "BTCUSDT", "1d", now - timedelta(days=365), now)
df["Close"].plot()
plt.show()

binance_btcusdt_futures.png

Plot OHLC 1w data with plotly: BTCUSDT Spot on Binance for the last five years

from datetime import datetime, timedelta
import plotly.graph_objects as go
from pricehub import get_ohlc

now = datetime.now()
df = get_ohlc("binance_spot", "BTCUSDT", "1w", now - timedelta(days=365 * 5), now)

fig = go.Figure(data=go.Candlestick(x=df.index, open=df['Open'], high=df['High'], low=df['Low'], close=df['Close']))

fig.update_layout()
fig.show()

binance_btc_usdt_spot_1w_5_years.png

Create custom intervals 10m for SOLUSDT Spot on Bybit for the last month

from datetime import datetime, timedelta
from pricehub import get_ohlc
now = datetime.now()
df = get_ohlc("bybit_spot", "SOLUSDT", "5m", now - timedelta(days=31), now)
df_10m = (
    df.resample(
        "10min",
    ).agg(
        {
            "Open": "first",
            "High": "max",
            "Low": "min",
            "Close": "last",
            "Volume": "sum",
        }
    )
)
print(df.head())
print(df_10m.head())
#5m
                      Open    High     Low   Close    Volume      Turnover
Open time                                                                  
2024-11-07 17:40:00  194.13  194.66  194.03  194.54  3391.378  6.592576e+05
2024-11-07 17:45:00  194.54  195.48  194.44  195.41  6075.927  1.184312e+06
2024-11-07 17:50:00  195.41  195.71  195.06  195.69  4073.276  7.961276e+05
2024-11-07 17:55:00  195.69  196.16  195.59  195.93  8774.224  1.719060e+06
2024-11-07 18:00:00  195.93  196.83  195.73  196.34  5075.807  9.973238e+05

#10m
                       Open    High     Low   Close     Volume
Open time                                                     
2024-11-07 17:40:00  194.13  195.48  194.03  195.41   9467.305
2024-11-07 17:50:00  195.41  196.16  195.06  195.93  12847.500
2024-11-07 18:00:00  195.93  196.83  194.66  195.29  12506.671
2024-11-07 18:10:00  195.29  196.13  194.70  195.58  20437.030
2024-11-07 18:20:00  195.58  196.00  194.84  195.81  16388.688

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pricehub-0.0.3.10.tar.gz (17.5 kB view details)

Uploaded Source

Built Distribution

pricehub-0.0.3.10-py3-none-any.whl (18.0 kB view details)

Uploaded Python 3

File details

Details for the file pricehub-0.0.3.10.tar.gz.

File metadata

  • Download URL: pricehub-0.0.3.10.tar.gz
  • Upload date:
  • Size: 17.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.10

File hashes

Hashes for pricehub-0.0.3.10.tar.gz
Algorithm Hash digest
SHA256 e8e5dbfc20fd0dd6926c5150d254329e4a850f0e72a822f65ecae7b780d6ed37
MD5 1d9f17c3b93f610068359b49da6ecd37
BLAKE2b-256 f89ccd079779c14e085fbdac46e0debc6ae0e35755de4dd51057c07524ba5b6a

See more details on using hashes here.

File details

Details for the file pricehub-0.0.3.10-py3-none-any.whl.

File metadata

  • Download URL: pricehub-0.0.3.10-py3-none-any.whl
  • Upload date:
  • Size: 18.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.11.10

File hashes

Hashes for pricehub-0.0.3.10-py3-none-any.whl
Algorithm Hash digest
SHA256 5065e05fe17744afebc584f9e14006cf2719888100824e3c9128c4558adffb75
MD5 9ca6748f531d4f4d42c690496d8d025e
BLAKE2b-256 7c314186ae035db828f24c133c3c70b6af378fd49995054695401bd9cff2acbb

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page