API키를 발급 받은 상태여야 합니다.
API키 발급 방법은 바이낸스 API키 발급 참조
1. 시장가 주문
import ccxt
import time
with open("D:/코인/binance key.txt") as f:
lines = f.readlines()
api_key = lines[0].strip()
secret_key = lines[1].strip()
Futures_binance = ccxt.binance({
'apiKey': api_key,
'secret': secret_key,
'enableRateLimit': True,
'options': {
'defaultType': 'future',
'adjustForTimeDifference': True,
}
})
# 시장가 주문
def MARKET_order(symbol, side, positionSide, amount):
try:
order = Futures_binance.create_order(
symbol=symbol,
type='market',
side=side,
amount=amount,
params={
'positionSide': positionSide
}
)
print(f"Order Market placed: {order['info']['symbol']}, {order['info']['price']}, {order['info']['origQty']}")
# print(f"Order Limit placed: {order}")
except Exception as e:
print(f"MARKET_order Error: {e}")
symbol = 'ETHUSDT' # 종목 이름
side = 'BUY' # 'SELL'
positionSide = 'LONG' # 'SHORT'
amount = 0.01 # 주문할 수량
price = 3000 # 주문할 가격
MARKET_order(symbol, side, positionSide, amount)
Market_order 함수는 시장가에 주문을 넣습니다.
시장가는 주문하는 가격을 정하는게 아니라
당장 거래할 수 있는 빠른 가격에 바로 체결됩니다.
그래서 아래의 지정가와 달리
MARKET_order 함수에는 price를 넣지 않습니다.
2. 지정가 주문
다음은 지정가 주문입니다. 사용하시려면
위의 코드블록에서 '# 시장가 주문' 밑의 전체 코드를 지우고
아래 코드블록의 '# 지정가 주문' 코드를 전부 넣으시면 됩니다.
# 지정가 주문
def LIMIT_order(symbol, side, positionSide, amount, price, Order_count):
try:
cp = 0.005 # 분할 간격 퍼센트. 0.005는 0.5%를 의미함.
price_multiplier = 1 - cp if positionSide == 'LONG' else 1 + cp
for i in range(Order_count):
adjusted_price = price * (price_multiplier ** i)
order = Futures_binance.create_order(
symbol=symbol,
type='limit',
side=side,
amount=amount,
price=adjusted_price,
params={
'positionSide': positionSide,
'timeInForce': 'GTC'
}
)
print(
f"Order Limit placed: {order['info']['symbol']}, {order['info']['price']}, {order['info']['origQty']}")
#print(f"Order Limit placed: {order}")
time.sleep(0.5)
except Exception as e:
print(f"LIMIT_order Error: {e}")
symbol = 'ETHUSDT' # 종목 이름
side = 'BUY' # 'SELL'
positionSide = 'LONG' # 'SHORT'
amount = 0.01 # 주문할 수량
price = 3000 # 주문할 가격
Order_count = 2 # 분할 주문 횟수
LIMIT_order(symbol, side, positionSide, amount, price, Order_count)
LIMIT_order 함수는 지정가를 시작으로 주문을 분할해서 넣도록 설계했습니다.
Order_count 변수의 숫자 만큼 분할 주문을 넣습니다.
cp 변수만큼의 간격으로 분할 주문을 넣습니다. 현재는 0.5% 간격 입니다.
예를들어 1% 간격으로 분할 넣고 싶다면 cp의 값을 0.01로 변경하면 됩니다.
숏 포지션 진입 주문을 넣는다면 아래와 같이 값을 변경하면 됩니다.
side = 'SELL'
positionSidt = 'SHORT'
다음은 지정가로 포지션을 정리하는 주문을 넣는 방법입니다.
예를들어 롱 포지션에 보유중인 ETH를 0.01개 만큼 정리할 경우
side = 'SELL'
positionSidt = 'LONG'
amount = 0.01 # 정리할 수량
price = 3000 # 원하는 가격으로 설정
LIMIT_order(symbol, side, positionSide, amount, price)
반대로 숏 포지션에 보유중인 ETH를 0.01개 만큼 정리할 경우
side = 'BUY'
positionSidt = 'SHORT'
amount = 0.01 # 정리할 수량
price = 3000 # 원하는 가격으로 설정
LIMIT_order(symbol, side, positionSide, amount, price)
정리하면
LONG : BUY = 포지션 진입, SELL = 포지션 정리
SHORT : SELL = 포지션 진입, BUY = 포지션 정리
3. 대기 주문 일괄취소
다음은 미체결된 대기중인 주문을 일괄 취소하는 방법입니다.
import ccxt
with open("D:/코인/binance key.txt") as f:
lines = f.readlines()
api_key = lines[0].strip()
secret_key = lines[1].strip()
Futures_binance = ccxt.binanceusdm({
'apiKey': api_key,
'secret': secret_key,
'enableRateLimit': True,
'options': {
'defaultType': 'future',
'adjustForTimeDifference': True,
}
})
# 포지션 정리 주문
def cancel_all_order(symbol):
try:
Futures_binance.cancel_all_orders(symbol)
return True
except Exception as e:
print(f'주문 취소 실패: {e}')
return False
symbol = 'ETHUSDT'
cancel_all_order(symbol)
전체 취소라고 하는데 막상 취고하고자 하는 종목의 이름을 넣어줘야 합니다.
'파이썬 > 바이낸스 선물 API' 카테고리의 다른 글
[선물 API] 미체결 주문 목록 가져오기 (0) | 2024.12.05 |
---|---|
[선물 API] 최소 주문 금액 계산하기 (0) | 2024.11.23 |
[선물 API] 바이낸스 선물 레버리지 배율 변경 (0) | 2024.11.21 |
[선물 API] 유통 공급량을 이용한 시총 계산 (0) | 2024.01.31 |
[선물API] 계좌 정보 불러오기 (0) | 2023.06.22 |