You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

6.9 KiB

Cash Parking

2026-03-30 기준 정리 문서. 이 문서는 현재 실전/비교 대상으로 유지하는 cash parking preset만 다룬다.

Cash parking은 이벤트 엔진이 쓰지 않는 유휴 현금을 장마감 기준으로 별도 sleeve에 파킹하는 기능이다. 현재 추천 구성은 레버리지를 쓰지 않고 QQQMSGOV만 사용한다.

목적

  • 이벤트 포지션이 비어 있는 시간의 idle cash를 활용한다.
  • 본체 이벤트 전략의 DD를 크게 해치지 않으면서 전체 수익을 높인다.
  • 과적합을 피하기 위해 전략 하나가 아니라 여러 return_max_long_* 전략에 교차검증한 규칙만 유지한다.

현재 유지 preset

qqqm_low_dd

공용 기본 preset.

  • risk asset: QQQM
  • defensive sleeve: SGOV
  • gate: volatility
  • 주요 조건
    • vol_20 < 27.5%
    • temperature <= 1.2
    • entropy_20 <= 1.45
    • mom_20 > 0 기반 trend 유지
    • re-entry margin 0.1%
    • autocorr_20 >= 0
  • top-up 규칙
    • 기존 QQQM parking sleeve가 진입 후 고점 대비 2% 이상 밀리면 새 idle cash를 더 얹지 않음
    • 막힌 top-up 금액은 SGOV로 보냄

qqqm_low_dd_risk25

qqqm_low_dd의 optional 변형.

  • 기본 규칙은 동일
  • 추가 규칙
    • 기존 QQQM parking sleeve가 고점 대비 밀린 구간에서 새 top-up을 하려 할 때
    • composite parking risk score가 25를 넘으면 top-up 차단

이 preset은 일부 전략에서 수익과 2026 DD를 같이 개선했지만, 모든 전략에서 일관되지는 않았다. 그래서 기본값이 아니라 비교용 optional preset으로만 남긴다.

사용법

experiment config의 overrides.risk에 preset 이름만 넣으면 된다.

{
  "overrides": {
    "risk": {
      "cash_parking_preset": "qqqm_low_dd"
    }
  }
}

optional variant를 쓰려면:

{
  "overrides": {
    "risk": {
      "cash_parking_preset": "qqqm_low_dd_risk25"
    }
  }
}

CLI 예시:

fithia2 paper backtest --config 1099 --parking qqqm_low_dd --capital 10000 --start 2022 --end 2026

현재 결론

  • 기본 추천: qqqm_low_dd
  • 비교 실험용: qqqm_low_dd_risk25
  • 최근에 만든 alias와 실험용 preset은 정리했다.
  • 옛 이름 qqqm_v275_t12_e145_ac0_r001, peak020, peak010, tu005 등은 더 이상 preset registry에 없다.

대표 검증 결과

아래 수치는 2022-01-01 ~ 2026-03-24 전체 구간, 2026-01-01 ~ 2026-03-24 서브구간 기준이다.

전략 preset 전체 수익률 전체 DD 2026 수익률 2026 DD
return_max_long_v7.70 qqqm_low_dd 1033.65% 5.57% 33.55% 1.73%
return_max_long_v7.70 qqqm_low_dd_risk25 1033.74% 5.57% 33.55% 1.73%
return_max_long_v11.49 qqqm_low_dd 1254.18% 5.56% 39.56% 2.90%
return_max_long_v11.49 qqqm_low_dd_risk25 1255.34% 5.56% 39.53% 2.69%
return_max_long_v12.13 qqqm_low_dd 1329.09% 5.56% 40.02% 2.69%
return_max_long_v12.13 qqqm_low_dd_risk25 1332.39% 5.56% 40.00% 2.90%

교차검증 요약

대표 13개 전략 v7.40, v7.70, v7.98, v8.4, v8.33, v9.2, v9.5, v10.31, v11.41, v11.49, v11.61, v12.13, v12.19 에 대해 검증했다.

  • qqqm_low_dd_risk2513개 중 11개에서 전체 수익률이 개선되거나 동일
  • 13개 중 10개에서 2026 DD가 개선되거나 동일
  • 평균 변화
    • 전체 수익률 +0.74%p
    • 2026 DD -0.073%p
  • 하지만 v12.13, v12.19에서는 2026 DD가 2.69% -> 2.90%로 나빠졌다

그래서 qqqm_low_dd_risk25는 기본값으로 승격하지 않았다.

최근 수정 사항

의미 없는 일별 churn 버그 수정

이전에는 같은 날짜 안에서 parking target 판정이 두 번 다르게 나와서, 다른 이벤트가 없어도 QQQM을 종가에 팔고 다음 날 다시 사는 식의 무의미한 parking 거래가 반복될 수 있었다.

이 문제는 수정되었고, 현재는 같은 날짜 target이 일관되게 유지된다.

falling sleeve top-up 억제

현재는 기존 QQQM parking sleeve가 자기 고점에서 의미 있게 밀린 상태라면 새 idle cash를 무조건 계속 얹지 않는다. 이 규칙이 없을 때보다 과도한 averaging-in이 줄었다.

아직 남아 있는 한계

  • parking만으로 1100%대 수익과 7%대 DD를 동시에 안정적으로 만들지는 못했다.
  • return_max_long_v11.49에서 보였던 2025-12-09 -> 2025-12-18 큰 parking 손실은 qqqm_low_dd_risk25로도 직접 해소되지는 않았다.
  • risk25는 top-up behavior를 다듬는 규칙이지, 모든 single worst parking trade를 없애는 규칙은 아니다.

과적합 원칙

  • 전략 하나에만 좋아지는 규칙은 기본값으로 채택하지 않는다.
  • peak010, tu005, blocked top-up split, risk-score 발동 보조조건 같은 시도는 일부 전략엔 좋아 보여도 교차검증에서 일관되지 않아 버렸다.
  • 현재 유지하는 로직은 여러 전략에 대해 다시 돌려도 수치가 재현되는 규칙만 남긴 결과다.

수동 설정

preset 대신 직접 설정하려면 아래가 현재 qqqm_low_dd와 같은 값이다.

{
  "overrides": {
    "risk": {
      "cash_parking_enabled": true,
      "cash_parking_symbol": "qqqm",
      "cash_parking_gate_mode": "volatility",
      "cash_parking_gate_vol_lookback": 20,
      "cash_parking_gate_vol_threshold": 0.275,
      "cash_parking_temperature_threshold": 1.2,
      "cash_parking_entropy_lookback": 20,
      "cash_parking_entropy_threshold": 1.45,
      "cash_parking_require_trend": true,
      "cash_parking_trend_mode": "momentum",
      "cash_parking_trend_sma_period": 20,
      "cash_parking_trend_reentry_pct": 0.001,
      "cash_parking_autocorr_threshold": 0.0,
      "cash_parking_topup_max_peak_drawdown_pct": 0.02,
      "cash_parking_reserve_pct": 0.0
    }
  }
}

qqqm_low_dd_risk25는 여기에 아래 한 줄만 추가하면 된다.

"cash_parking_topup_risk_score_max": 25.0

동작 방식

백테스터

매일 다음 순서로 동작한다.

  1. 아침: parking gate를 확인하고 필요하면 기존 parking sleeve를 청산한다.
  2. 이벤트 EXIT 처리로 현금이 생긴다.
  3. 이벤트 ENTRY 처리 중 현금이 부족하면 parking이 자동 청산될 수 있다.
  4. 저녁: 남은 idle cash를 target symbol에 parking한다.
  5. 기존과 같은 symbol의 parking sleeve가 있으면 top-up 규칙을 먼저 검사한다.
  6. top-up이 막히면 그 금액은 SGOV로 간다.

실전/구현 파일

파일 역할
libs/backtest/domain.py RiskConfig와 cash parking preset 정의
apps/backtester/run.py parking gate, top-up, 매수/매도, trade 기록
libs/backtest/snapshot_store.py vol, momentum, entropy, autocorr 등 macro signal 제공
apps/paper_trader/engine.py 실전/paper trading parking 실행