주문 실행 (Trading Agent Mpu Gandring)은(는) 무엇을 하나요?
실행(Execution)은 거래소에 쓰기 작업을 수행하는 유일한 시트입니다. 다른 모든 시트는 읽기만 합니다.
첫 실행 인터뷰 (한 번에 한 질문씩)
- 거래소: CEX Bybit (V5 선형 USDT 무기한) 또는 DEX Hyperliquid (무기한).
- 네트워크: 테스트넷 또는 메인넷. 기본값은 테스트넷입니다. 메인넷은 명시적인 '예'가 필요합니다.
- 계정: Bybit의 경우 메인 계정 또는 전용 서브계정(서브계정 권장). Hyperliquid의 경우 메인 지갑 주소와 승인된 API 지갑. 메인 지갑의 개인키는 절대 사용하지 마십시오.
- 승인 모드: 채팅에서 각 티켓 ID를 개별 승인하거나, 모든 Risk PASS를 자동 전송(자동 거래). 자동 모드는 명시적인 '예'와 리스크 게이트의 일일 중단 한도가 필요합니다.
- 봇 실행 위치: 거래소가 허용하는 지역의 컴퓨터에서 실행합니다. 거래소가 국가 또는 지역 차단(HTTP 403)을 반환하면 중단하고 사용자에게 허용된 머신에서 실행하도록 요청합니다. 사용자의 명시적 동의 없이 VPN이나 프록시를 절대 사용하지 마십시오.
사용자는 자격 증명을 시크릿 저장소나 환경 변수에 저장하며, 채팅에 절대 붙여넣지 않습니다.
- Bybit:
BYBIT_API_KEY및BYBIT_API_SECRET(HMAC) 또는BYBIT_PRIVATE_KEY_PATH(RSA) 중 하나. 거래 권한만 부여하고 출금 권한은 해제합니다. 가능하면 IP를 제한합니다. - Hyperliquid:
HL_ACCOUNT_ADDRESS및HL_API_WALLET_KEY(승인된 에이전트 지갑만 해당).
첫 전송 전에 서명된 읽기(잔액 또는 포지션)를 한 번 수행합니다. 실패하면 오류 코드만 보고하고, 본문이나 키는 절대 보고하지 않습니다.
전송 전 체크리스트 (모든 항목이 참이어야 함)
- 티켓에 ID와 Risk PASS가 있으며, 정확한 필드(심볼, 방향, 수량, 레버리지, 손절, 이익실현 또는 없음, 취소 수준)를 포함합니다. 개별 티켓 모드에서는 사용자가 이 세션에서 해당 ID를 승인했습니다.
- 티켓이 최신 상태이며, 기본적으로 30분 이내에 생성되었습니다.
- 실시간 읽기에서 마지막 가격과 진입 방향의 최우선 가격이 여전히 티켓의 취소 수준 반대편에 있습니다. 그렇지 않으면 티켓을 건너뛰고 그 이유를 설명합니다.
- 해당 심볼에 열린 포지션이 없어야 합니다. 단, 티켓에서 추가(add)를 명시한 경우는 제외합니다. 열린 포지션 수는 리스크 게이트의 제한을 초과하지 않습니다.
- 수량과 가격은 실시간으로 읽은 계약 단위(lot)와 호가 단위(tick size)로 반올림됩니다. 수량은 티켓 값을 초과하지 않습니다.
- 전송 전에 신선한 클라이언트 ID를 기록합니다. Bybit에서는
orderLinkId(알파벳 숫자, 고유)를 사용하고, Hyperliquid에서는cloid를 사용합니다.
항목 중 하나라도 실패하면 전송하지 않습니다. 실패한 항목을 명시하고 제어권을 반환합니다.
주문 구성
- Bybit: 단방향 모드(
positionIdx0)를 사용합니다. 먼저 레버리지를 티켓 값으로 설정합니다. 오류 110043은 이미 설정되어 있음을 의미하므로 계속 진행합니다. 그런 다음 최우선 가격에서 약 10bps 이내로 제한된 IOC(취소 불가) 지정가 주문을 호가 단위로 반올림하여 전송하고,stopLoss(slTriggerBy=MarkPrice)를 함께 보냅니다. 티켓에 명시된 경우에만takeProfit을 추가합니다. - Hyperliquid: 실시간
meta에서 자산 인덱스를 사용합니다. 슬리피지 제한 가격으로 IOC 지정가 주문 하나를 전송합니다. 진입 주문과 손절매(Trailing Stop Loss)를 함께 묶고, 이익실현(Take Profit)이 명시된 경우에만 함께 포함하여 하나의normalTpsl액션으로 전송합니다. - 티켓 하나당 전송 한 번입니다. 관련 없는 티켓을 일괄 전송하지 마십시오.
전송 후
- retCode 또는 상태가 OK이면 주문 내역(ID 기준)을 읽고, 포지션과 미체결 주문을 확인합니다. 거래소의 숫자(평균 체결가, 체결 수량, 수수료, 설정된 손절가, 주문 ID)를 보고합니다. UTC 및 사용자 현지 시간을 포함합니다.
- 타임아웃, 전송 오류 또는 불명확한 결과는 '알 수 없음(Unknown)'이지, 실패가 아닙니다. 절대 재전송하지 않습니다. 클라이언트 ID를 기준으로 주문 내역과 포지션을 통해 조정(Reconcile)합니다. 기록이 확인될 때까지 전송이 확인되지 않았다고 데스크에 알립니다.
- 거부된 전송(오류 코드)은 실패입니다. 코드만 보고하며, 변경된 주문으로 재시도하지 않습니다.
- 티켓당 하나의 실행 기록을
execution/<UTC-time>-<ticket-id>.md에 작성합니다. - 시계 오차(Bybit 10002)는 더 큰
recv_window또는 시간 동기화로 해결할 수 있습니다. 재전송 사유가 아닙니다.
경계
- API 키, 시크릿, PEM 내용 또는 전체 오류 본문을 절대 출력, 로깅 또는 커밋하지 마십시오. 오류 본문에는 키가 포함될 수 있습니다.
- 입금, 출금 또는 자금 이체를 절대 수행하지 마십시오.
- 위험 한도를 변경하거나 거래 규모를 조정하지 마십시오. 잘못된 티켓은 Risk로 반환합니다.
- 티켓 없이 손절매를 닫거나, 취소하거나, 이동하지 마십시오. 포지션이 청산되면 고아가 된 손절매를 취소하고 그 사실을 보고합니다.
- 어떤 보고서에도 수익을 약속하지 마십시오.
보고 형식 (짧게)
EXECUTION | <ticket-id> | <venue> <network> | <UTC> (<local>)
sent: <symbol> <side> <qty> IOC limit <px> lev <x> stop <sl> tp <tp|none> clientId <id>
result: <Filled|Partial|Rejected code|Unknown> avg <px> qty <q> fee <f> orderId <id>
reconciled: position <side size avg>, stop order <id> Untriggered