2026년 11월 3일 · 체결

베이시스 거래를 페이퍼 트레이딩했다. 레그 1개만 체결됐다.

베이시스 거래를 페이퍼 트레이딩했다. 레그 1개만 체결됐다.

함수 이름은 enter_pack였다. 그게 경고였어야 했다. 리서치 에이전트가 BTC 캐시앤캐리를 짜 놓았다. 퍼페추얼이 현물보다 8 bps 이상 비싸게 거래되면 현물을 사고, 퍼프를 숏하고, 가만히 앉아 있으면 된다. 펀딩과 베이시스가 나머지를 해 줄 테니까. 백테스트는 양쪽 레그를 같은 밀리초에, 미드에, 예의 바른 틱 1개를 얹어 체결했다. 자산곡선은 계단이었다. 재미있다고 할 사람은 없다. 그게 셀링 포인트였다.

우리는 월요일에 페이퍼로 승격시켰다.

월요일: 언제나 체결되던 팩

첫 시그널은 11:17 UTC에 들어왔다. 화면의 베이시스는 9.4 bps, 퍼프가 비쌌다. 백테스트에서 enter_pack는 체결 2건과 잔여 0을 돌려줬다. 페이퍼에서는 매도호가에 0.40 BTC 현물 체결과, 체결되지 않고 대기 중인 퍼프 숏을 돌려줬다.

현물은 taker 수수료 4 bp와 스프레드 약 1 bp를 냈다. 원하던 퍼프 가격은 호가창에 있다가, 이내 없었다. 20초 뒤 호가 베이시스는 5 bps였다. 우리가 방금 현물을 리프트했기 때문이다. 40초 뒤 퍼프가 체결됐다, 움직인 다음에. 팩이 됐다. 들어가고 나오는 비용을 더 이상 감당하지 못하는 베이시스에서 팩이 됐다.

백테스트라면 "+9.4 bps 캐리, 잔여 0"으로 잡았을 것이다. 블로터에는 현물 taker 비용 4 bps, 40초간의 비가드 롱, 약 5의 진입 갭이 있었다. 나는 표본 1개를 갖고 있었고, 그래도 계단을 너무 믿었다.

화요일: 함수를 열어 봤다

enter_pack는 레그 리스트와 목표 미드를 받았다. 루프를 돌며 각 레그를 mid * (1 ± slip)에 체결하고, 포트폴리오 행을 1개 썼다. 2번째 타임스탬프는 없었다. 레그 2가 존재하지 않는 분기도 없었다. 유닛 테스트는 residual == 0를 단언했다.

어른이 된 기분이 드는 테스트다. 절대 실패하지 않는다.

팩을 각자 상태를 가진 주문 2개로 쪼갰다. 제출됨, 부분 체결, 체결됨, 취소됨. Incomplete는 일급 객체가 됐다. 히스토리컬 리플레이에는 여전히 실제 호가창이 없어서, 우리는 꼼수를 썼다. 2번째 체결을 월요일 대기 시간에서 뽑은 값만큼 늦추고 (평균 26초, 내가 마음에 들어 하지 않은 꼬리가 있었다), 그 창에서 현물이 움직인 만큼 가격을 드리프트했다. 조잡했지만, 점심 전에 계단에 홈이 생겼다. 3 bps에 진입한 팩, 끝내 팩이 되지 못한 팩.

수요일: 3초, 그다음 던진다

2번째 레그가 3초 안에 안 들어가면 첫 번째를 청산한다. 거기서 시작했어야 했다. 보수적으로 들리지만, 중단 비용을 매겨 보면 다르다. 청산은 들어가려고 현물을 크로스했고 나가려고 또 크로스한다는 뜻이다. taker 수수료 2번, 스프레드 2번, 캐리 없음, 펀딩 없음. 다시 짠 리플레이에서 그런 중단은 드물지 않았다. 베이시스가 가장 "진짜"로 보이던 봉에 몰렸고, 그건 보통 현물을 이미 무언가가 관통하고 있는 봉이다.

수요일 밤이 되자 맞설 페이퍼 시그널이 17개 있었다.

174일 동안의 페이퍼 시그널
7양쪽 레그가 체결된 팩
18 bps남은 롱을 역행한 이후 움직임
백테스트, 월요일 아침페이퍼, 수요일까지
진입양쪽 레그 미드, 타임스탬프 1개현물은 매도호가; 퍼프는 5–40초 뒤, 아니면 없음
잔여항상 017개 시그널 중 10개가 비가드
유효 거래의 수수료taker 2번taker 2번, 중단하면 4번
PnL 동인베이시스 + 펀딩기다리는 동안 현물이 한 일
팩은 양쪽 주문이 체결되면 완성되고, 그렇지 않으면 사이징하지 않은 방향성 포지션이다. 잔여가 존재하는 내내 실시간 호가창에 대해 마크하라. 마크할 수 없으면 전략을 돌릴 수 없다.

동료에게는 여전히 팩을 상장 상품인 BTC_CARRY처럼, 일률 2 bp "체결 세금"을 붙여 다루는 노트북이 있다. 그 노트북이 마음에 들었다. 에이전트가 만든 것과 같은 계단을 뽑았다. 세금은 평균이다. 고아는 분포다. 평균은 유동성이 얇은 1시간에 깔리지 않는다. 남은 현물 0.40 BTC는 깔릴 수 있다.

목요일: 남은 포지션, 그다음 커피

3초 규칙은 큐까지 기다리게 되자 거의 전부를 중단시켰다. 페이퍼를 15초로 느슨하게 풀었다. 목요일 02:11 UTC, 현물은 체결되고 퍼프는 아니었다. 커피를 내리러 갈 때 나는 아직 "쉴 거다, 리프트될 거다"라는 애도 단계에 있었다.

02:11:08 체결 BTCUSDT 0.40 매수
02:11:08 제출 BTCUSDT-PERP 0.40 매도, post-only
02:11:41 아직 대기 중
02:26:00 잔여 마크 −18.1 bps

BTC가 조용한 창에서 18 bps 밀렸다. 잔여가 거래의 전부였다. 펀딩이 찍혔을 때, 우리가 갖고 있지 않은 퍼프에 크레딧이 달렸다. 현물은 그냥 롱인 채로 앉아 있었다. 원래 백테스트의 오버나이트 경로에는 한쪽 레그 포지션이 전혀 없어서, 다른 모든 북에 던지는 질문을 한 적이 없었다. 이 남은 포지션이 찍을 수 있는 최악의 봉은 무엇인가, 들고 있을 생각이 없었던 포지션의 스톱은 어디에 있는가?

완성된 팩 7개도 영웅은 아니었다. 2번째 레그가 찍힐 때쯤이면 우리 현물 리프트가 이미 지수를 밀어 놓았고, 진입 베이시스는 시그널을 쏜 스냅샷보다 3–5 bps 나빴다. 8bps 임계값은 화면에 관한 숫자였다.

다음에는 건너뛸 것

멀티레그를 단일 체결 함수로 내보내지 않을 것이다. 퍼프-현물 캐리든, 캘린더든, 에이전트가 지정가 2개로 넣고 둘 다 미드에서 "체결"됐다고 자축하는 콜 버티컬이든 같은 규칙이다.

  1. 레그별 주문 상태, 부분 체결 포함. 팩을 티켓 2개의 부모로 취급하라.
  2. 실제로 발동하는 최대 고아 타이머, 나가면서 스프레드 2개를 내는 청산 경로.
  3. 잔여에 대한 마크투북, 남은 포지션에 맞춘 스톱. 팩 순포지션은 잘못된 노셔널이다.
  4. 양쪽 레그가 들어가기 전에는 캐리도 인정하지 않고, 펀딩도 쌓지 않는다. 미완은 미완이다.
  5. 티켓이 2개인 무엇에든 미드-온-미드를 기본값으로 쓰지 마라. 추정해야 한다면, 얇은 레그는 더 나쁘게, 2번째 체결은 더 늦게 추정하라.

그리고 test_pack_is_atomic를 레포에 들이지 않을 것이다. Atomic은 매칭 엔진의 속성이지, 헬퍼 함수의 속성이 아니다. BTC 현물과 BTC 퍼페추얼은 가끔 각운이 맞는 호가창 2개다. 페이퍼는 그 각운이 끝나는 곳이고, 계단이 흥미로웠던 유일한 이유다.

백테스팅캐시앤캐리체결페이퍼 트레이딩암호화폐 선물
← 전체 글