주문
주문 생성
오더북에 새 주문을 생성합니다.
인증
모든 주문 작업은 x-api-key 헤더에 API 키를 사용한 인증이 필요합니다:
x-api-key: YOUR_API_KEY
일괄 주문 생성
주문 취소
기존의 미체결 주문을 취소합니다.
일괄 주문 생성
단일 요청으로 여러 주문을 생성하여 성능을 향상시킵니다.
주문 취소
기존의 미체결 주문을 취소합니다.
전체 주문 취소
특정 마켓의 모든 미체결 주문을 취소합니다.
일괄 주문 취소
단일 요청으로 주문 ID를 사용하여 여러 주문을 취소합니다.
내 주문 조회
페이지네이션 및 필터링 옵션으로 주문을 조회합니다.
마켓 주문 조회
특정 마켓의 모든 주문을 상태별로 필터링하고 페이지네이션하여 조회합니다.
주문 유형
지정가 주문
- 특정 가격 또는 그보다 유리한 가격에 체결
- 즉시 체결되지 않을 수 있음
- 마켓에 유동성을 제공
시장가 주문
- 최적의 가용 가격으로 즉시 체결
- 유동성이 있는 경우 체결이 보장됨
- 마켓에서 유동성을 소모
주문 상태
주문은 다음과 같은 상태를 가질 수 있습니다:
| 상태 | 설명 |
|---|---|
| open | 주문이 활성 상태이며 체결 대기 중 |
| partially_filled | 일부 수량이 체결됨 |
| filled | 주문이 완전히 체결됨 |
| cancelled | 사용자에 의해 주문이 취소됨 |
| expired | expiredAt 시간에 따라 주문이 만료됨 |
코드 예제
지정가 주문 생성
const API_KEY = 'YOUR_API_KEY';
const BASE_URL = 'https://engine.xmarket.app/openapi/v1';
async function createLimitOrder(outcomeId, side, price, quantity) {
const orderData = {
outcomeId: outcomeId,
side: side, // 'buy' or 'sell'
type: 'limit',
price: price, // Between 0 and 1
quantity: quantity
};
const response = await fetch(
`${BASE_URL}/order`,
{
method: 'POST',
headers: {
'x-api-key': API_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify(orderData)
}
);
if (!response.ok) {
throw new Error(`Order creation failed: ${response.status}`);
}
return await response.json();
}
// Example: Buy 100 shares at 0.65 price
const order = await createLimitOrder('outcome-uuid', 'buy', 0.65, 100);
console.log(`Order created: ${order.id}`);
일괄 주문 생성
async function batchCreateOrders(orders) {
const response = await fetch(
`${BASE_URL}/order/batch`,
{
method: 'POST',
headers: {
'x-api-key': API_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify({ orders })
}
);
if (!response.ok) {
throw new Error(`Batch order creation failed: ${response.status}`);
}
return await response.json();
}
// Create multiple orders at once
const orders = [
{ outcomeId: 'outcome-1', side: 'buy', type: 'limit', price: 0.60, quantity: 50 },
{ outcomeId: 'outcome-2', side: 'buy', type: 'limit', price: 0.45, quantity: 75 },
{ outcomeId: 'outcome-3', side: 'sell', type: 'limit', price: 0.80, quantity: 100 }
];
const result = await batchCreateOrders(orders);
console.log(`Created ${result.orders.length} orders`);
복수 주문 취소
async function batchCancelOrders(orderIds) {
const response = await fetch(
`${BASE_URL}/order/cancel-batch`,
{
method: 'POST',
headers: {
'x-api-key': API_KEY,
'Content-Type': 'application/json'
},
body: JSON.stringify({ orderIds })
}
);
if (!response.ok) {
throw new Error(`Batch cancel failed: ${response.status}`);
}
return await response.json();
}
// Cancel multiple orders at once
const orderIdsToCancel = ['order-id-1', 'order-id-2', 'order-id-3'];
await batchCancelOrders(orderIdsToCancel);
console.log('Orders cancelled successfully');
마켓 주문 조회
async function getMarketOrders(marketId, status = 'open') {
const response = await fetch(
`${BASE_URL}/order/market/${marketId}?status=${status}&page=1&pageSize=100`,
{
headers: {
'x-api-key': API_KEY,
'Content-Type': 'application/json'
}
}
);
const data = await response.json();
return data.items;
}
// Get all open orders for a specific market
const marketOrders = await getMarketOrders('market-uuid', 'open');
console.log(`Found ${marketOrders.length} open orders in market`);
Python 예제 - 주문 생성 및 모니터링
import requests
import time
API_KEY = 'YOUR_API_KEY'
BASE_URL = 'https://engine.xmarket.app/openapi/v1'
def create_order(outcome_id, side, price, quantity, order_type='limit'):
headers = {
'x-api-key': API_KEY,
'Content-Type': 'application/json'
}
order_data = {
'outcomeId': outcome_id,
'side': side,
'type': order_type,
'price': price,
'quantity': quantity
}
response = requests.post(
f'{BASE_URL}/order',
headers=headers,
json=order_data
)
response.raise_for_status()
return response.json()
def get_my_orders(status='all', page=1, page_size=50):
headers = {
'x-api-key': API_KEY,
'Content-Type': 'application/json'
}
params = {
'status': status,
'page': page,
'pageSize': page_size
}
response = requests.get(
f'{BASE_URL}/order/my-orders',
headers=headers,
params=params
)
response.raise_for_status()
return response.json()
# Create order
order = create_order('outcome-uuid', 'buy', 0.65, 100)
print(f"Order created: {order['id']}")
# Monitor order status
time.sleep(2)
orders = get_my_orders(status='open')
print(f"Open orders: {orders['total']}")
모범 사례
- 주문 검증: 제출 전에 항상 주문 매개변수를 검증하세요
- 일괄 작업: 여러 주문을 생성/취소할 때는 일괄 엔드포인트를 사용하세요
- 에러 처리: 모든 API 호출에 강력한 에러 처리를 구현하세요
- 요청 제한: 스로틀링을 피하기 위해 API 요청 제한을 준수하세요
- 주문 관리: 미체결 주문을 추적하고 오래된 주문은 취소하세요
- 가격 확인: 가격이 유효 범위(0 < price < 1) 내에 있는지 확인하세요
- 서명 보안: 개인 키를 노출하지 말고 안전하게 주문에 서명하세요
- 멱등성: 중복 방지를 위해 주문 생성에 멱등성을 구현하는 것을 고려하세요
성능 최적화
- 여러 주문을 넣을 때 API 호출을 줄이기 위해 일괄 생성을 사용하세요
- 여러 포지션을 효율적으로 청산하기 위해 일괄 취소를 사용하세요
- 개별 주문 상태 확인 대신 my-orders 엔드포인트를 폴링하세요
- 제출 전 주문을 검증하기 위해 마켓 데이터를 캐싱하세요
관련 문서
- 빠른 시작 - API 시작하기
- Markets API - 주문 전 마켓 정보 조회
- Orderbook API - 주문 전 현재 가격 확인
- Positions API - 주문 체결 후 포지션 추적