본문으로 건너뛰기

주문

주문 생성

오더북에 새 주문을 생성합니다.

OpenAPI xmarket-openapi

OpenAPI xmarket-openapi

인증

모든 주문 작업은 x-api-key 헤더에 API 키를 사용한 인증이 필요합니다:

x-api-key: YOUR_API_KEY

일괄 주문 생성

OpenAPI xmarket-openapi

주문 취소

기존의 미체결 주문을 취소합니다.

OpenAPI xmarket-openapi

일괄 주문 생성

단일 요청으로 여러 주문을 생성하여 성능을 향상시킵니다.

OpenAPI xmarket-openapi

주문 취소

기존의 미체결 주문을 취소합니다.

OpenAPI xmarket-openapi

전체 주문 취소

특정 마켓의 모든 미체결 주문을 취소합니다.

OpenAPI xmarket-openapi

일괄 주문 취소

단일 요청으로 주문 ID를 사용하여 여러 주문을 취소합니다.

OpenAPI xmarket-openapi

내 주문 조회

페이지네이션 및 필터링 옵션으로 주문을 조회합니다.

OpenAPI xmarket-openapi

마켓 주문 조회

특정 마켓의 모든 주문을 상태별로 필터링하고 페이지네이션하여 조회합니다.

OpenAPI xmarket-openapi

주문 유형

지정가 주문

  • 특정 가격 또는 그보다 유리한 가격에 체결
  • 즉시 체결되지 않을 수 있음
  • 마켓에 유동성을 제공

시장가 주문

  • 최적의 가용 가격으로 즉시 체결
  • 유동성이 있는 경우 체결이 보장됨
  • 마켓에서 유동성을 소모

주문 상태

주문은 다음과 같은 상태를 가질 수 있습니다:

상태설명
open주문이 활성 상태이며 체결 대기 중
partially_filled일부 수량이 체결됨
filled주문이 완전히 체결됨
cancelled사용자에 의해 주문이 취소됨
expiredexpiredAt 시간에 따라 주문이 만료됨

코드 예제

지정가 주문 생성

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']}")

모범 사례

  1. 주문 검증: 제출 전에 항상 주문 매개변수를 검증하세요
  2. 일괄 작업: 여러 주문을 생성/취소할 때는 일괄 엔드포인트를 사용하세요
  3. 에러 처리: 모든 API 호출에 강력한 에러 처리를 구현하세요
  4. 요청 제한: 스로틀링을 피하기 위해 API 요청 제한을 준수하세요
  5. 주문 관리: 미체결 주문을 추적하고 오래된 주문은 취소하세요
  6. 가격 확인: 가격이 유효 범위(0 < price < 1) 내에 있는지 확인하세요
  7. 서명 보안: 개인 키를 노출하지 말고 안전하게 주문에 서명하세요
  8. 멱등성: 중복 방지를 위해 주문 생성에 멱등성을 구현하는 것을 고려하세요

성능 최적화

  • 여러 주문을 넣을 때 API 호출을 줄이기 위해 일괄 생성을 사용하세요
  • 여러 포지션을 효율적으로 청산하기 위해 일괄 취소를 사용하세요
  • 개별 주문 상태 확인 대신 my-orders 엔드포인트를 폴링하세요
  • 제출 전 주문을 검증하기 위해 마켓 데이터를 캐싱하세요

관련 문서