반응형
이전 포스팅으로 API 연동을 진행하였고, 오늘은 코인 매수,매도하는 방법 관련하여 포스팅 해보도록 하겠습니다.
또, 코인 매수,매도할 때에는 시장가와 지정가를 이용하여 수수료를 부가합니다. 대부분의 코인 마켓에서는 시장가와 지정가의 수수료가 다르지만, 업비트는 동일하더라고요! 참고 하시면 좋을 것 같습니다.
사전준비
1. 기본코드는 필수로 준비해두고 사용하겠습니다.
# =========================================
# Upbit API 키 정보 읽기
# -----------------------------------------
# key.txt 파일에 첫 줄: Access Key
# 둘째 줄: Secret Key
with open("ApiKey.txt", "r") as f:
access_key = f.readline().strip()
secret_key = f.readline().strip()
# =========================================
# Upbit 인스턴스 생성
upbit = pyupbit.Upbit(access_key, secret_key)
# =========================================
# 사용할 코인 티커 지정
# 예) "KRW-BTC", "KRW-XRP", "KRW-ETH" 등
coin = "KRW-BTC"
1. 시장가 매수 주문
시장가 매수 : 현재 마켓에서 거래되고 있는 가격으로 매수하는 주문
# =========================================
# 시장가 매수 함수
# - 현재 체결 가능한 시장가로 즉시 매수
def order_buy_market(ticker: str, buy_amount: float):
"""
:param ticker: 코인 티커 (예: "KRW-BTC")
:param buy_amount: 매수 금액 (KRW 기준, 예: 10000.0)
"""
if buy_amount < 5000:
print("[order_buy_market] 최소 매수 금액은 5000원 이상입니.")
return None
try:
print(f"[order_buy_market] {ticker} 시장가 매수 요청 - 금액: {buy_amount}")
res = upbit.buy_market_order(ticker, buy_amount)
# 정상 응답 여부 확인
if not res or 'error' in res:
print("[order_buy_market] 매수 주문 실패:", res)
return None
print("[order_buy_market] 매수 주문 성공:", res)
return res
except Exception as e:
print("[order_buy_market] 에러 발생:", e)
return None
2. 시장가 매도 주문
시장가 매도 : 현재 마켓에서 거래되고 있는 가격으로 매도하는 주문
# =========================================
# 시장가 매도 함수
# - 현재 체결 가능한 시장가로 즉시 매도
def order_sell_market(ticker: str, volume: float):
"""
:param ticker: 코인 티커 (예: "KRW-BTC")
:param volume: 매도할 코인 수량 (예: 0.001)
"""
try:
print(f"[order_sell_market] {ticker} 시장가 매도 요청 - 수량: {volume}")
res = upbit.sell_market_order(ticker, volume)
if not res or 'error' in res:
print("[order_sell_market] 매도 주문 실패:", res)
return None
print("[order_sell_market] 매도 주문 성공:", res)
return res
except Exception as e:
print("[order_sell_market] 에러 발생:", e)
return None
3. 지정가 매수 주문
지정가 매수 : 이용자가 코인 희망가격을 설정하여 매수하는 방법
# =========================================
# 지정가 매수 함수
def order_buy_limit(ticker: str, price: float, volume: float):
"""
:param ticker: 코인 티커 (예: "KRW-BTC")
:param price: 매수 희망 가격
:param volume: 매수 수량
"""
try:
print(f"[order_buy_limit] {ticker} 지정가 매수 요청 - 가격: {price}, 수량: {volume}")
res = upbit.buy_limit_order(ticker, price, volume)
if not res or 'error' in res:
print("[order_buy_limit] 지정가 매수 주문 실패:", res)
return None
print("[order_buy_limit] 지정가 매수 주문 성공:", res)
return res
except Exception as e:
print("[order_buy_limit] 에러 발생:", e)
return None
4. 지정가 매도 주문
지정가 매도 : 이용자가 코인 희망가격을 설정하여 매도하는 방법
# =========================================
# 지정가 매도 함수
def order_sell_limit(ticker: str, price: float, volume: float):
"""
:param ticker: 코인 티커 (예: "KRW-BTC")
:param price: 매도 희망 가격
:param volume: 매도 수량
"""
try:
print(f"[order_sell_limit] {ticker} 지정가 매도 요청 - 가격: {price}, 수량: {volume}")
res = upbit.sell_limit_order(ticker, price, volume)
if not res or 'error' in res:
print("[order_sell_limit] 지정가 매도 주문 실패:", res)
return None
print("[order_sell_limit] 지정가 매도 주문 성공:", res)
return res
except Exception as e:
print("[order_sell_limit] 에러 발생:", e)
return None
5. 미체결 주문 목록 조회 (참고)
# =========================================
# 미체결 주문 목록 조회 (참고용)
def get_open_orders(ticker: str = ""):
"""
:param ticker: 코인 티커 (예: "KRW-BTC"), 없으면 모든 미체결 주문 조회
:return: 미체결 주문 목록(list)
"""
try:
orders = upbit.get_order(ticker)
return orders
except Exception as e:
print("[get_open_orders] 에러 발생:", e)
return []
6. 미체결 주문 취소 함수
# =========================================
# 주문 취소 함수
# - 미체결 상태의 주문(wait)만 취소 가능
def order_cancel(uuid_val: str):
"""
:param uuid_val: 주문 시 반환되는 uuid (문자열)
"""
try:
print(f"[order_cancel] 주문 취소 요청 - UUID: {uuid_val}")
res = upbit.cancel_order(uuid_val)
if not res or 'error' in res:
print("[order_cancel] 주문 취소 실패:", res)
return None
print("[order_cancel] 주문 취소 성공:", res)
return res
except Exception as e:
print("[order_cancel] 에러 발생:", e)
return None
7. 테스트
- 시장가 매수, 매도, 지정가 매수 매도 등 사용하고자 하는 부분 이외의 코드는 주석 처리하며, 사용할 부분만 주석 해제
# =========================================
# 테스트 (직접 실행 시 주석 해제 후 사용)
if __name__ == "__main__":
# 1) 시장가 매수 (예: 10,000원)
order_buy_market(coin, 10000)
# 2) 시장가 매도 (예: 0.001 BTC)
#order_sell_market(coin, 0.001)
# 3) 지정가 매수 (예: BTC를 1000만원에 0.001개 걸기)
#order_buy_limit("KRW-BTC", 10000000, 0.001)
# 4) 지정가 매도 (예: BTC를 5000만원에 0.001개 걸기)
#order_sell_limit("KRW-BTC", 50000000, 0.001)
# 5) 미체결 주문 목록 조회 (BTC에 대해)
open_orders = get_open_orders("KRW-BTC")
print("미체결 주문 목록:", open_orders)
# 6) 주문 취소 예시
# if open_orders:
# recent_uuid = open_orders[0]['uuid']
# order_cancel(recent_uuid)
참조
https://mcc96.tistory.com/26
반응형
'프로그래밍 > Python' 카테고리의 다른 글
[Python] 4. 업비트 자동매매 프로그램 만들기 - 코드 합치기 (0) | 2025.01.13 |
---|---|
[Python] 2. 업비트 자동매매 프로그램 만들기 - 업비트 API 연동 (자산 및 코인 조회, 티커 csv생성) (2) | 2024.12.28 |
[Python] 1. 업비트 자동매매 프로그램 만들기 - 환경구성 (1) | 2024.12.26 |
[Python] 파이썬 시작 및 파이썬 환경 구축 (14) | 2024.11.13 |