본문으로 건너뛰기

© 2026 Molayo

Dev.to헤드라인2026. 06. 18. 02:18

Scarab 진단 현장 테스트 #032 — QuantConnect Lean 옵션 타겟 호가 측면 가격 경계 (Option Target

요약

QuantConnect/Lean 엔진에서 옵션 포트폴리오 타겟 사이징 시 발생하는 버그를 진단하고 분석한 사례입니다. 매수/매도 스프레드(bid/ask spread)를 고려하지 않은 가격 산출로 인해 타겟 비중을 초과하는 포지션이 체결되는 문제를 다룹니다.

핵심 포인트

  • 옵션 타겟 수량 계산 시 호가(bid/ask) 측면 선택 오류 확인
  • 포트폴리오 구성 시 리스크 계약 관점의 정확한 사이징 중요성
  • 단순 수학적 오류가 아닌 실행 계층의 가격 경계 문제
  • 수정 범위(repair surface)를 좁게 유지하는 진단 접근법 제시

대상: QuantConnect/Lean

이슈: QuantConnect/Lean#6360

PR: QuantConnect/Lean#9539

현장 연구소 (Field Lab): https://github.com/scarab-systems/scarab-field-lab

이번 현장 테스트는 QuantConnect Lean의 옵션 포트폴리오 타겟 사이징 (target sizing) 버그를 대상으로 했습니다.

이 이슈는 요청된 포트폴리오 백분율로부터 타겟 수량을 계산하는 데 사용되는 PortfolioTarget.Percent와 관련이 있었습니다.

가시적인 실패 사례는 옵션 전략에 있어 심각했습니다:

  • 사용자가 옵션 포지션에 대한 타겟 백분율을 요청함
  • Lean이 타겟 수량을 계산함
  • 최종 체결된 포지션이 요청된 타겟 비중을 초과할 수 있음
  • 이 불일치는 옵션 매수/매도 스프레드 (bid/ask spread)와 연관됨
  • 실행 가능한 매수 측 가격은 매도 호가 (ask)임에도 불구하고, 롱 옵션 (long option) 타겟이 중간가/최근가 (mid/last price)를 기준으로 사이징될 수 있음

이는 단순히 작은 수학적 불일치가 아닙니다.

포트폴리오 구성 (portfolio construction)에 있어, 타겟 사이징은 리스크 계약 (risk contract)의 일부입니다.

사용자가 10%의 옵션 타겟을 요청했지만, 사이징 경로가 잘못된 호가 측면을 사용하여 최종 체결된 포지션이 해당 타겟을 실질적으로 초과할 수 있다면, 엔진은 실제 경계를 넘어선 것입니다.

진단 질문은 다음과 같지 않았습니다:

모든 자산의 타겟 사이징이 매수 호가 (bid)와 매도 호가 (ask)를 사용하게 하려면 어떻게 해야 하는가?

더 나은 질문은 다음과 같았습니다:

Lean은 타겟 수량 계산을 위해 옵션 프리미엄/증거금 (premium/margin) 가격을 어디에서 산출하며, 호가가 제공될 때 해당 옵션 전용 경로는 어떤 호가 측면을 사용해야 하는가?

현장 연구소 기록

이 현장 테스트에 대한 공개 사례 기록은 Scarab Field Lab에서 확인할 수 있습니다:

https://github.com/scarab-systems/scarab-field-lab

SDS 결과

이 현장 테스트는 QuantConnect Lean에 대한 진단-증명-수리 (diagnostic-proof-and-repair) 사례로 기록되었습니다.

유용한 결과는 경계가 설정된 가격 경계 (bounded pricing boundary)였습니다.

실패는 몇 가지 유혹적인 영역을 건드렸습니다:

  • 포트폴리오 구성 (portfolio construction)
  • PortfolioTarget.Percent
  • 매수력 계산 (buying power calculation)
  • 옵션 증거금 가격 책정 (option margin pricing)
  • 호가 데이터 (quote data)
  • 매수/매도 스프레드 (bid/ask spread)
  • 주문 체결 동작 (order fill behavior)
  • 최종 포트폴리오 비중 (final portfolio weight)

이것은 바로 수정 작업이 표류(drift)할 수 있는 종류의 버그입니다.

패치는 포트폴리오 구성 (portfolio construction)을 광범위하게 변경하려고 시도할 수 있습니다.

패치는 모든 보안 유형(security type)에 대해 일반적인 매수력 (buying power) 동작을 변경하려고 시도할 수 있습니다.

패치는 체결 후 보상하려고 시도할 수 있습니다.

패치는 실행 계층 (execution layer)에서 목표 수량을 조정하려고 시도할 수 있습니다.

하지만 소유한 수정 범위 (repair surface)는 더 좁았습니다.

옵션의 경우, 목표 규모 (target sizing)는 매수력 모델 (buying power model)의 초기 증거금 요구 사항에 달려 있습니다. 해당 옵션 특화 증거금 경로 (option-specific margin path)는 security.Price를 사용하고 있었는데, 이는 호가의 실행 가능한 측면 (executable side) 대신 마지막 가격 (last), 평가 가격 (mark), 또는 중간 가격 (mid)과 유사한 값을 반영할 수 있습니다.

롱 옵션 (long option) 목표의 경우, 매도 호가 (ask)가 존재할 때 실행 가능한 매수 측면은 ask입니다.

숏 옵션 (short option) 목표의 경우, 매수 호가 (bid)가 존재할 때 실행 가능한 매도 측면은 bid입니다.

이것이 수정 경계 (repair boundary)입니다.

실패 형태 (Failure shape)

실패 형태는 호가 측면의 불일치 (quote-side mismatch)였습니다.

사용자는 목표 백분율 (target percentage)을 요청했습니다.

Lean은 옵션 증거금 가격 책정 (option margin pricing) 경로를 사용하여 수량을 계산했습니다.

해당 경로는 security.Price를 사용했습니다.

하지만 옵션의 경우, 마지막 가격 (last)이나 평가 가격 (mark)은 ask 또는 bid와 실질적으로 다를 수 있습니다.

따라서 롱 옵션 목표는 옵션을 구매하는 데 실제로 필요한 가격보다 옵션 비용이 더 저렴한 것처럼 규모가 산정될 수 있습니다.

그 후, 주문이 ask에 더 가깝게 체결되면, 최종 보유 자산 비용이 요청된 목표 비중을 초과할 수 있습니다.

쉬운 말로 설명하자면:

목표 계산에 실행 가능한 매수 측면 가격 (executable buy-side price)이 아닌 가격을 사용했습니다.

이것이 오류가 bid/ask 스프레드에 따라 규모가 커진 이유입니다.

스프레드가 넓을수록, 규모 산정 가격 (sizing price)과 실제 체결 측면 가격 (actual fill-side price) 사이의 격차가 커질 수 있습니다.

이는 단순한 미관상의 가격 책정 문제가 아니라, 금융 엔진의 정확성 (correctness) 문제입니다.

경계 (Boundary)

여기서의 경계는 다음과 같습니다:

옵션 목표 증거금 가격 책정 (option target margin pricing) 대 일반적인 보안 가격 동작 (generic security price behavior)

Lean은 이 케이스를 처리하기 위해 모든 보안 유형(security type)에 대해 PortfolioTarget.Percent를 다시 작성할 필요가 없어야 합니다.

모든 자산에 대해 일반적인 매수력 (buying power) 동작을 변경할 필요도 없어야 합니다.

모든 타겟 사이징 (target sizing)이 보편적으로 호가 측 (quote-side) 로직을 사용하도록 강제할 필요도 없습니다.

하지만 옵션은 특정한 가격 책정 현실을 가지고 있습니다.

옵션 수량이 양수(+)일 때, 타겟은 롱 노출 (long exposure)을 늘리거나 프리미엄 (premium)을 매수하는 것입니다. 만약 매도 호가 (ask)가 가능하다면, 매도 호가가 관련 실행 가능한 측 (executable side) 입니다.

옵션 수량이 음수(-)일 때, 타겟은 반대 측에서 매도하거나 줄이는 것입니다. 만약 매수 호가 (bid)가 가능하다면, 매수 호가가 관련 실행 가능한 측 (executable side) 입니다.

호가 (quotes)를 사용할 수 없는 경우, Lean은 기존의 폴백 (fallback) 동작을 유지해야 합니다.

그것이 깔끔한 경계선입니다:

  • 양수 옵션 수량: 사용 가능한 경우 매도 호가 (ask) 사용
  • 음수 옵션 수량: 사용 가능한 경우 매수 호가 (bid) 사용
  • 사용 가능한 호가 없음: 기존의 마지막 가격/마크 가격 (last/mark) 동작으로 폴백
  • 변경 사항을 옵션 마진 가격 책정 (option margin pricing)에 국한하여 유지

이것이 수정 방향 (repair lane) 입니다.

변경 사항

이 PR은 타겟 옵션 수량이 사용 가능한 실행 가능한 호가 가격을 사용하도록 옵션 마진 가격 책정 (option margin pricing)을 업데이트합니다.

이 변경은 의도적으로 국소적입니다:

  • 양수 옵션 수량은 사용 가능한 경우 매도 호가 (ask) 가격을 사용합니다.
  • 음수 옵션 수량은 사용 가능한 경우 매수 호가 (bid) 가격을 사용합니다.
  • 호가를 사용할 수 없는 경우 기존의 마지막 가격/마크 가격 (last/mark price) 동작이 폴백으로 유지됩니다.

이는 이번 수정이 다른 보안 유형에 대한 일반적인 매수력 (buying power) 동작을 변경하지 않음을 의미합니다.

포트폴리오 타겟 구성 (portfolio target construction)을 다시 작성하지 않습니다.

실행 모델 (execution models)을 변경하지 않습니다.

타겟 옵션 수량에 대한 프리미엄/마진 가치 (premium/margin value)를 계산할 때 사용되는 옵션 특화 가격 책정 경로 (option-specific pricing path)를 수정합니다.

또한 이 패치는 옵션 호가 경계의 양쪽 모두에 대해 회귀 테스트 커버리지 (regression coverage)를 추가합니다:

  • 롱 옵션 매도 호가 (long-option ask) 가격 책정
  • 숏 옵션 매수 호가 (short-option bid) 가격 책정

이것이 중요한 이유는 버그가 단순히 "매도 호가 (ask)를 사용하라"는 것이 아니었기 때문입니다.

올바른 측은 타겟 수량의 부호 (sign)에 따라 달라집니다.

매수 측 (long-side) 타겟과 매도 측 (short-side) 타겟은 동일한 방식으로 가격이 책정되어서는 안 됩니다.

이것이 왜 일반적인 포트폴리오 구성 (portfolio construction) 수정 사항이 아니었는지

겉으로 드러난 증상은 PortfolioTarget.Percent를 통해 나타났습니다.

이 때문에 포트폴리오 구성 계층을 수정하고 싶은 유혹이 생길 수 있습니다.

하지만 PortfolioTarget.Percent가 실제 소유권의 표면 (ownership surface)은 아니었습니다.

타겟 헬퍼 (target helper)는 포트폴리오 백분율에 도달하는 데 필요한 수량을 계산하기 위해 증권 매수력 모델 (security buying power model)에 의존합니다.

옵션의 경우, 프리미엄/마진 (premium/margin) 가치가 가격 책정되는 곳은 매수력 모델의 초기 마진 경로 (initial margin path)입니다.

그곳에 호가 측 (quote-side) 불일치가 존재했습니다.

따라서 수정 작업은 그곳에 머물렀습니다.

이 점이 중요합니다.

포트폴리오 구성은 모든 옵션 매수/매도 호가 (bid/ask) 가격 책정 세부 사항을 알 필요가 없어야 합니다.

주문이 나가기 전에 이미 수량이 과소 또는 과다하게 산정된 것을 실행 (execution) 단계에서 수정할 책임이 있어서는 안 됩니다.

옵션 마진 모델이 이미 옵션 특유의 프리미엄/마진 가격 책정 권한을 가지고 있습니다.

패치는 바로 그곳에 적용되어야 합니다.

폴백 (fallback)이 중요했던 이유

폴백 동작은 중요합니다.

이 수정 사항은 매수 호가 (bid)와 매도 호가 (ask)가 항상 채워져 있다고 가정하지 않습니다.

시장 데이터는 불완전할 수 있습니다.

백테스트 (backtest)는 서로 다른 데이터 형태를 가질 수 있습니다.

일부 옵션 증권은 타겟 크기 조절 (target sizing)이 실행되는 정확한 시점에 최신 호가가 없을 수도 있습니다.

따라서 이 패치는 사용 가능한 경우 실행 가능한 호가 가격을 사용하되, 호가를 사용할 수 없는 경우에는 기존의 마지막 가격/마크 가격 (last/mark) 동작을 유지합니다.

이를 통해 수정 범위를 좁게 유지하면서 호환성을 확보합니다.

이는 호가 데이터가 채워져 있지 않은 경우의 기존 동작을 깨뜨리지 않으면서, 호가 데이터가 존재하는 경우를 개선합니다.

이것이 올바른 종류의 플랫폼 패치입니다:

엔진이 더 나은 진실을 가지고 있을 때는 그것을 사용하고, 그렇지 않을 때는 기존 경로를 보존하는 것

진단 결과가 중요했던 이유

이 사례는 매우 중요한 금융 계산 내부에 위치하기 때문에 유용합니다.

타겟 백분율은 단순한 표시 값이 아닙니다.

그것은 알고리즘의 리스크 표현 (risk expression)의 일부입니다.

만약 엔진이 해당 타겟으로부터 잘못된 수량 (quantity)을 계산한다면, 알고리즘은 요청된 것보다 더 많은 노출 (exposure)을 가질 수 있습니다.

이는 특히 옵션 (options)의 경우 매우 중요한데, 스프레드 (spreads)가 넓을 수 있고, 가격이 빠르게 변동할 수 있으며, 실행 가능한 호가 측 가격 (executable quote-side pricing)이 직전 가격 (last) 또는 평가 가격 (mark values)과 유의미하게 다를 수 있기 때문입니다.

진단적 태도 (diagnostic posture) 덕분에 수정 작업이 실제 계약 (contract)을 중심으로 프레임화될 수 있었습니다:

  • 사용자가 타겟 비중 (target weight)을 표현함
  • Lean이 타겟 수량 (target quantity)을 계산함
  • 옵션 증거금 경로 (option margin path)가 해당 수량의 가격을 책정함
  • 사용 가능한 호가 데이터 (quote data)가 해당 가격을 실행 가능한 측 (executable side)과 일치시켜야 함
  • 최종 포지션 (position)은 사이즈 결정 (sizing) 시 오래된 가격이나 실행 불가능한 가격을 사용했다는 이유로 요청된 타겟을 초과해서는 안 됨

이러한 프레임워크 덕분에 패치 (patch) 규모를 작게 유지할 수 있었습니다.

광범위한 포트폴리오 구성 (portfolio construction)의 재작성을 피했습니다.

실행 계층 (execution-layer)의 보상을 피했습니다.

일반적인 증권 동작 (generic security behavior)을 변경하는 것을 피했습니다.

옵션 특화 증거금 가격 책정 경계 (option-specific margin pricing boundary)를 수리했습니다.

검증 (Validation)

검증은 QuantConnect의 파운데이션 컨테이너 (foundation container)에서 완료되었습니다.

릴리스 빌드 (release build)를 통과했습니다.

집중된 옵션 증거금 테스트 (option-margin tests)를 통과했습니다:

41/41

새로운 회귀 테스트 커버리지 (regression coverage)에는 다음이 포함됩니다:

  • 롱 옵션 매도 호가 (long-option ask) 가격 책정
  • 숏 옵션 매수 호가 (short-option bid) 가격 책정

전체 로컬 arm64 스위트 (suite) 실행 시 두 건의 관련 없는 실패가 발생했습니다.

두 실패 모두 동일한 파운데이션 컨테이너 환경의 변경되지 않은 업스트림 마스터 (upstream master)에서 재현되었으므로, 브랜치 실패로 주장하는 대신 PR에 문서화되었습니다.

이것이 올바른 검증 태도 (validation posture)입니다.

집중된 옵션 증거금 커버리지는 통과했고, 릴리스 빌드도 통과했으며, 관련 없는 로컬 전체 스위트 실패는 숨기거나 잘못 표현되지 않았습니다.

이 보고서 작성 시점에 PR은 다시 열렸으며 리뷰 준비 완료(ready for review)로 표시되었습니다.

현장 테스트 결과 (Field test result)

이것은 QuantConnect Lean을 위한 제한된 옵션 증거금 가격 책정 수정 후보였습니다.

문제는 다음과 같이 요약됩니다:

  • PortfolioTarget.Percent는 요청된 포트폴리오 비율로부터 목표 수량 (target quantities)을 계산합니다.
  • 옵션 (options)의 경우, 해당 계산은 초기 증거금 가격 책정 (initial margin pricing)에 의존합니다.
  • 기존의 옵션 증거금 경로는 security.Price를 사용했습니다.
  • security.Price는 마지막 가격 (last), 평가 가격 (mark), 또는 중간 가격 (mid)과 유사한 가격을 반영할 수 있습니다.
  • 따라서 롱 옵션 (long option) 목표 수량이 실제 매도 호가 (ask-side) 비용보다 낮게 산정될 수 있습니다.
  • 결과적으로 최종 체결된 포지션 비중이 요청된 목표를 초과할 수 있습니다.
  • 이번 수정 사항은 가능한 경우 양(+)의 옵션 수량에는 매도 호가 (ask)를 사용합니다.
  • 가능한 경우 음(-)의 옵션 수량에는 매수 호가 (bid)를 사용합니다.
  • 호가 (quotes)를 사용할 수 없는 경우, 기존의 last/mark 동작이 폴백 (fallback)으로 유지됩니다.
  • 집중 테스트는 롱 매도 호가 (long ask) 가격 책정과 숏 매수 호가 (short bid) 가격 책정을 다룹니다.
  • 릴리스 빌드 (release build) 및 집중 옵션 증거금 검증을 통과했습니다.

이것이 수정 경로 (repair lane)입니다.

이 패치는 포트폴리오 구성 (portfolio construction)을 재설계한다고 주장하지 않습니다.

모든 보안 유형 (security types)에 대한 일반적인 매수력 (buying power) 동작을 변경한다고 주장하지 않습니다.

실행 모델 (execution models)을 변경한다고 주장하지 않습니다.

모든 체결 조건 하에서 정확한 최종 비중을 보장한다고 주장하지 않습니다.

이 패치는 호가가 사용 가능한 경우, 목표 수량 계산 시 호가의 실행 가능한 측 (executable side)을 사용해야 하는 옵션 특화 증거금 가격 책정 경계 (option-specific margin pricing boundary)를 수정합니다.

공식 주장 (Public claim)

이 필드 테스트 (field test)에 대한 올바른 주장은 다음과 같습니다:

Scarab/SDS는 QuantConnect/Lean#6360에 대한 경계가 설정된 수정 후보(bounded repair candidate)를 도출하는 데 기여했습니다. 해당 이슈에서는 PortfolioTarget.Percent가 호가(quote)의 체결 가능한 측면(executable side) 대신 security.Price를 사용하여 옵션 타겟의 규모를 결정할 수 있었습니다. 롱(long) 옵션 타겟의 경우, 매도 호가(ask)가 더 높을 때 비용을 과소평가할 수 있으며, 최종 포지션 비중이 요청된 타겟을 초과할 수 있는 문제가 있었습니다. 상위 PR(Pull Request)은 옵션 증거금 가격 책정(option margin pricing)을 업데이트하여, 양(+)의 옵션 수량은 사용 가능한 경우 매도 호가(ask price)를 사용하고, 음(-)의 옵션 수량은 사용 가능한 경우 매수 호가(bid price)를 사용하며, 호가를 사용할 수 없는 경우에는 기존의 마지막 가격(last)/시장가(mark) 동작을 폴백(fallback)으로 유지하도록 합니다. 릴리스 빌드 검증(Release build validation)을 통과했으며, 집중된 옵션 증거금 테스트(focused option-margin tests) 41개 중 41개를 모두 통과했습니다. 또한 새로운 회귀 테스트(regression tests)를 통해 롱 옵션의 매도 호가 가격 책정 및 숏 옵션의 매수 호가 가격 책정을 검증합니다. 이는 포트폴리오 구성이나 일반적인 매수력(buying power) 동작을 재설계한다는 주장이 아니며, 타겟 수량 계산 중에 사용되는 옵션 증거금 가격 책정 경계(option margin pricing boundary)를 수정하는 것입니다.

공개 사항(Disclosure): 이 필드 보고서는 본인의 필드 테스트 노트, 공개된 이슈 및 PR 기록, 검증 요약, 그리고 Field Lab 기록을 바탕으로 AI 보조 편집을 통해 작성되었습니다. 기술적 주장과 최종 문구는 발행 전 검토되었습니다.

AI 자동 생성 콘텐츠

본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.

원문 바로가기
0

댓글

0