phemexboy

Phemex API Wrapper in Python


License
MIT
Install
pip install phemexboy==2.0.0

Documentation

PhemexBoy

Phemex API Wrapper in Python

Notes

  • All spot symbols begin with a lowercase s and utilize USDT (ex. sBTCUSDT).
  • All future symbols are in the following format BTC/USD:USD, ETH/USD:USD, etc.
  • Use spot symbols for buy and sell and future symbols for long and short
  • Spot uses USDT and future uses USD
  • Currently future methods only work for USD future account
  • Contracts close by last price

Installation

pip install phemexboy

Usage

Instantiate PublicClient

Public methods include:

  • price(symbol)
  • currencies()
  • symbols()
  • future_symbols()
  • ohlcv(symbol, tf, since)
  • timeframes()
  • timestamp(date)
from phemexboy import PhemexBoy
pub_client = PhemexBoy()

Instantiate AuthClient with API Key and Secret obtained from Phemex

  • Use python-dotenv package for security
import os
from phemexboy import PhemexBoy
from dotenv import load_dotenv

load_dotenv()
client = PhemexBoy(os.getenv("KEY"), os.getenv("SECRET"))

Retrieve all currencies offered on Phemex

client.currencies()

Retrieve the price of a specific pairing

client.price(symbol='sBTCUSDT') # Spot price
client.price(symbol='BTC/USD:USD') # Future price

Retrieve all spot and future symbols

client.symbols() # Spot symbols
client.future_symbols() # Future symbols

Retrieve spot and future balances

  • Uses currencies instead of symbols
client.balance(of='USDT') # Spot balance
client.balance(of='USD') # Future balance

Convert percent of USDT account into crypto amount

  • Used for spot purchases, when selling crypto you do not need to use this method
# Buy BTC with 21% of full account
amt = client.usd_converter(symbol='sBTCUSDT', percent=21)
order_id = client.buy(symbol='sBTCUSDT', type='market', amt)

Buy/sell crypto on spot

# Limit Buy
amt = client.usd_converter(symbol='sBTCUSDT', percent=100) # Amount to purchase
price = client.price(symbol='sBTCUSDT') # Price to place limit order at
order_id = client.buy(symbol='sBTCUSDT', type='limit', amount=amt, price=price)

# Market Buy
amt = client.usd_converter(symbol='sBTCUSDT', percent=100)
order_id = client.buy(symbol='sBTCUSDT', type='market', amount=amt)

# Limit Sell
amt = client.balance(of='BTC') # Amount to sell
price = client.price(symbol='sBTCUSDT')
order_id = client.sell(symbol='sBTCUSDT', type='limit', amount=amt, price=price)

# Market Sell
amt = client.balance(of='BTC')
order_id = client.sell(symbol='sBTCUSDT', type='market', amount=amt)

# Cancel limit order
resp = client.cancel(id=order_id, symbol='sBTCUSDT')

# Cancel all orders
resp = client.cancel_all(symbol='sBTCUSDT')

Change leverage on future

client.leverage(amount=10, symbol='BTC/USD:USD')

Open a long/short position

  • Amount is in contracts
  • Stoploss (sl) and Takeprofit (tp) are not needed
# Limit Long
price = client.price('BTC/USD:USD')
sl = price - (price * 0.01) # 1% from current price
tp = price + (price * 0.02) # 2% above current price
order_id = client.long(symbol='BTC/USD:USD', type='limit', amount=1, price=price, sl=sl, tp=tp)

# Cancel order
client.cancel(id=order_id, symbol='BTC/USD:USD')

# Market Long
order_id = client.long(symbol='BTC/USD:USD', type='market', amount=1)

# Limit Short
price = client.price('BTC/USD:USD')
sl = price + (price * 0.01) # 1% above current price
tp = price - (price * 0.02) # 2% from current price
order_id = client.short(symbol='BTC/USD:USD', type='limit', amount=1, price=price, sl=sl, tp=tp)

# Market Short
order_id = client.short(symbol='BTC/USD:USD', type='market', amount=1)

# Close Position
client.close(symbol='BTC/USD:USD', amount=1)

Check Position Status

client.positions(symbol='BTC/USD:USD') # Returns position information
client.in_position(symbol='BTC/USD:USD') # Returns if in a position or not

Test

  • Runs the tests on the PhemexBoy module
  • Will require .env file with KEY={API_KEY} and SECRET={API_SECRET}
  • May want to modify, I included manual tests
make test

or

python3 test