온체인 청산: Aave와 Compound의 메커니즘, 그리고 그 주변에서 돌아가는 봇 비즈니스
Aave에서의 청산은 상시 열려 있는 공개 제안이다. 다른 사람의 부채를 대신 갚아주면 그 담보를 5~15% 할인된 가격에 받을 수 있다. 이 제안은 불변의 컨트랙트에 새겨져 있으며, 별도의 허가도 KYC도 프로토콜과의 관계도 필요 없다. 필요한 건 오직 포지션이 기준선을 넘는 블록에서 가장 먼저 liquidationCall()을 호출하는 주소가 되는 것뿐이다. 이는 크립토에서 가장 순수한 형태의 경주다. 상금은 센트 단위까지 정해져 있고, 트리거는 (대체로) 예측 가능하며, 유일한 관건은 자신의 인프라가 다른 누구보다 먼저 그곳에 도달할 수 있느냐다.
이 글에서는 이 기계 장치를 처음부터 끝까지 해부한다. 포지션이 청산 가능 상태가 되는 정확한 조건을 정의하는 수식, Chainlink 오라클 메커니즘이 청산을 반응적인 것이 아니라 예측 가능하게 만드는 이유, 경쟁력 있는 청산 봇이 실제로 무엇으로 구성되는지, 그리고 이 경주의 경제성이 압축된 나머지 이제 보너스 대부분이 블록 빌더에게, 나아가 점점 더 프로토콜 자체로 흘러가게 된 이유를 살펴본다. 마지막으로 이를 GMX, Hyperliquid 같은 퍼프-DEX 청산과 대비해본다. 겉으로는 비슷해 보이지만 완전히 다른 게임이다.
메커니즘: 헬스팩터, 임계값, 보너스
LTV 대 청산 임계값
Aave v3의 모든 담보 자산에는 두 가지 뚜렷한 리스크 파라미터가 있는데, 이 둘을 혼동하는 것이 차입자들이 가장 흔히 저지르는 실수다.
- LTV(loan-to-value, 담보인정비율) — 대출 개설 시점에 해당 자산을 담보로 빌릴 수 있는 최대 금액. Aave v3 메인넷의 WETH는 약 80%다.
- 청산 임계값(liquidation threshold) — 포지션이 청산 가능 상태가 되는 담보 비율. WETH의 경우 약 83%다.
이 둘 사이의 간격은 의도적인 완충 장치다. 개설하자마자 바로 청산 가능한 포지션은 만들 수 없다는 뜻이다. 하지만 그 여유는 얇다. 불리한 가격 변동이 몇 퍼센트만 발생해도 "최대한도로 빌린 상태"와 "누구나 가져갈 수 있는 상태" 사이의 경계를 넘는다.
**헬스팩터(health factor)**는 모든 것을 하나의 숫자로 종합한다.
여기서 는 담보 자산 의 수량, 는 그 오라클 가격, 는 청산 임계값, 는 각 부채 포지션의 가치다. 이 되면 누구든 청산할 수 있다. 유예 기간도, 마진콜도, 알림도 없다. 이 조건은 지연 평가된다. 누군가 함수를 호출하기 전까지는 아무 일도 일어나지 않는다.

클로즈 팩터와 청산 보너스
청산자가 무엇을 얻는지는 두 가지 파라미터가 추가로 결정한다.
- 클로즈 팩터(close factor) — 한 번의 청산으로 상환할 수 있는 부채의 비율. Aave v3의 기본값은 50%다. Aave v3.3부터는 일 때(
CLOSE_FACTOR_HF_THRESHOLD), 또는 포지션의 담보나 부채가 더스트 임계값(약 2,000달러) 미만일 때 클로즈 팩터가 100%로 뛴다. 소액 포지션에는 트랜잭션 두 번을 들일 가치가 없고, 남은 더스트는 배드 데트 회계 문제를 일으키기 때문이다. - 청산 보너스(liquidation bonus, 보는 입장에 따라 liquidation penalty라고도 부른다) — 청산자가 담보를 매입하는 할인율. Aave에서는 거버넌스가 자산별로 설정하는 고정 스프레드로, WETH와 주요 스테이블코인은 약 5%, 변동성이 큰 롱테일 담보는 최대 10~15%에 이른다.
Compound v2도 같은 방식으로 작동하지만 상수가 다르다. liquidateBorrow()는 클로즈 팩터 50%, 청산 인센티브 8%(압류되는 cToken 담보는 상환된 부채의 1.08배 가치를 지닌다)를 적용한다. Compound v3(Comet)는 흐름을 두 단계로 재설계했다. absorb()는 부실 포지션을 프로토콜 자체 대차대조표로 끌어들이고(부채는 준비금으로 사회화되고, 담보는 프로토콜의 자산이 된다), buyCollateral()은 누구든 그 담보를 기본 자산으로 지불하고 거버넌스가 설정한 할인가에 매입할 수 있게 한다. 실제로 청산자는 한 트랜잭션 안에서 둘 다 호출한다. absorb 자체는 아무 보상도 주지 않으며, 수익은 전적으로 할인된 buyCollateral에서 나온다.
구체적인 포지션을 단계별로 청산해보기
Aave v3 WETH의 대표적인 파라미터를 예로 들어보자. LTV 80%, 청산 임계값 83%, 청산 보너스 5%.
설정. 3,000달러짜리 WETH 10개(담보 30,000달러)를 예치하고 USDC 20,000개를 빌린다.
청산 가격. 담보 가치가 달러까지 떨어지면 이 된다. 즉 ETH가 2,410달러일 때다. 19.7% 하락이다. 안전해 보이지만 실제로는 그렇지 않다. ETH는 20% 하락쯤은 아침 식사거리로 여긴다.
하락. 오라클에 ETH 가격이 2,350달러로 찍힌다. 담보는 이제 23,500달러다.
이므로 50% 클로즈 팩터가 적용된다. 청산자가 부채 10,000 USDC를 상환하고 오라클 가격 기준으로 달러 상당의 담보를 압류한다.
청산자의 손익. 10,000달러를 쓰고 10,500달러 상당의 ETH를 받았다. 함수 호출 한 번에 총수익 500달러다. 가스비, ETH를 빠져나오기 위한 스왑 비용, 그리고 결정적으로 경주에서 이기기 위해 얼마를 입찰해야 했는지는 아직 반영하지 않은 수치다(자세한 내용은 아래에서 다룬다).
차입자의 손익. 부채는 10,000달러로 줄고, 담보는 5.532 WETH(13,000달러)로 줄었다. 새 헬스팩터는 다음과 같다.
여기서 불편한 사실 두 가지를 짚어야 한다. 첫째, 강제 디레버리징의 대가로 500달러를 지불한 셈이며, 이 보너스는 전적으로 차입자의 자기자본에서 나온다. 둘째, 새로운 HF 1.079는 간신히 수면 위에 떠 있는 수준이다. ETH가 7%만 더 하락하면 남은 절반에서 다시 청산이 트리거된다. 고정 스프레드 청산은 지급 능력만 회복시킬 뿐 안전을 회복시키지는 않는다. 이 "절반 청산, 여전히 취약, 다시 청산"이라는 패턴이 바로 캐스케이드 역학의 미시구조이며, 이는 자매편 글인 청산 캐스케이드를 트레이딩 신호로 활용하기에서 다룬다.
트리거: 청산은 반응적이지 않고 예측 가능하다
이 부분이 이 비즈니스를 이해하는 사람과 그렇지 못한 사람을 가르는 지점이다. Aave와 Compound에서 포지션은 시장 가격이 움직인다고 해서 청산 가능해지는 것이 아니다. 오라클이 업데이트될 때 청산 가능해진다.
두 프로토콜 모두 Chainlink 데이터 피드에서 가격을 읽어온다. 이더리움 메인넷의 Chainlink 피드는 다음 두 조건 중 하나가 충족되면 새로운 온체인 가격을 게시한다.
- 편차 임계값(deviation threshold) — 오프체인에서 집계된 가격이 마지막 온체인 값에서 일정 비율 이상 움직였을 때. 메인넷 ETH/USD는 0.5%, 대부분의 소형 피드는 1~2%다.
- 하트비트(heartbeat) — 편차와 무관하게 업데이트가 강제로 게시되는 최대 시간 간격(ETH/USD의 경우 3,600초).
여기서 중대한 결과가 따라온다. 업데이트와 업데이트 사이에는 온체인 가격이 구조적으로 낡은 값이다. 바이낸스에서 ETH가 0.6% 하락하는 동안 온체인 피드가 여전히 이전 가격을 보여주고 있다면, 정교한 참여자라면 누구나 오라클 업데이트 트랜잭션이 곧 온다는 것을 알고, 새 가격이 대략 어느 정도일지도 알며, 업데이트가 반영되기 전에 그 순간 어떤 포지션이 을 넘게 될지 정확히 계산해낼 수 있다.

그래서 지배적인 전략은 "헬스팩터를 지켜보다가 반응한다"가 아니라 오라클 업데이트를 백런(backrun)하는 것이다. 즉 자신의 liquidationCall()이 Chainlink의 전송 트랜잭션 바로 뒤, 같은 블록 안에서 실행되도록 번들을 구성하는 것이다. 오라클 업데이트는 출발 신호탄이고, 스타터가 권총을 들어 올리는 모습은 누구나 볼 수 있다. 번들 메커니즘 — 블록 빌더에 대한 비공개 제출, 원자적 순서 보장 — 은 샌드위치 공격과 멤풀 프런트러닝을 다룬 글에서 살펴본 것과 동일한 장치다. 청산은 그저 그 장치를 가장 정당하게 활용하는 사례일 뿐이다.
실전에서 중요한 두 가지 세부 사항이 있다.
- 멤풀에서 전송 트랜잭션을 직접 볼 필요조차 없다. 오프체인 집계 과정은 관측 가능하므로(CEX 피드에서 동일한 가격 계산을 직접 돌려볼 수 있다), 편차가 임계값을 넘으면 업데이트가 반드시 발생한다는 것을 예측할 수 있고, 가격이 오르는 경로와 내리는 경로 양쪽 모두에 대해 번들을 미리 만들어둘 수 있다.
- 하트비트 업데이트는 예정된 유동성 이벤트다. 어떤 피드가 한 시간 동안 0.5% 편차를 넘지 않았다면 그래도 업데이트는 발생하며, 만약 가격이 근처에 몰려 있는 포지션들에 불리한 방향으로 0.4% 표류했다면, 그 "무해해 보이는" 하트비트가 바로 트리거가 된다. 경쟁력 있는 운영자들은 피드별 마지막 업데이트 이후 경과 시간을 1급 신호로 추적한다.
이러한 예측 가능성은 프로토콜들이 결국 그 가치를 되찾으려 나선 이유이기도 하다. 2025년 3월, Aave는 Chainlink SVR(Smart Value Recapture)을 통합했다. 참여 피드의 오라클 업데이트는 Flashbots MEV-Share를 통해 라우팅되고, 이를 백런할 권리는 경매에 부쳐지며, 낙찰가는 서처와 빌더에게 전부 새어나가는 대신 Aave DAO(65%)와 Chainlink(35%)가 나눠 갖는다. 몇 달 만에 이 시스템은 3,200만 달러 이상의 청산을 처리하고 110만 달러 이상을 회수했으며, 대상이 되는 청산 MEV의 80% 이상을 포착했다. 이를 하나의 시장 가격 신호로 읽어보자. 공개 경주가 너무나 효율적으로 변한 나머지 프로토콜이 결승선 자체를 경매에 부칠 수 있게 된 것이다.
봇 구축하기: 네 가지 서브시스템
경쟁력 있는 청산 봇은 단순한 스크립트가 아니다. 소규모 트레이딩 회사 하나 분량의 인프라다. 네 개의 서브시스템으로 구성되며 개별적으로는 단순하지만, 전체적으로는 모두 지연 시간에 민감하다.

1. 포지션 인덱싱
실시간으로 유지되는 전체 차입자 목록과 그들의 잔액이 필요하다. 부트스트랩 단계는 이벤트 백필이다. 프로토콜 배포 이후의 모든 Supply, Borrow, Repay, Withdraw, LiquidationCall을 사용자별 현재 잔액으로 접어 넣은 뒤, 새 로그에 대한 웹소켓 구독으로 실시간 상태를 유지한다. Aave의 getUserAccountData(address)는 헬스팩터를 직접 반환하지만, 10만 명이 넘는 차입자에 대해 블록마다 사용자별로 이를 호출하는 것은 가망이 없다. 진지한 운영자들은 프로토콜의 회계 로직을 (부채가 매초 증가하므로 이자율 인덱스 계산까지 포함해) 로컬에서 복제하고, RPC 호출은 검증용으로만 남겨둔다.
2. 오라클 시뮬레이션을 곁들인 헬스팩터 모니터링
핵심 루프는 "현재 오라클 가격으로 HF를 계산한다"가 아니다. "오라클이 곧 게시할 가격으로 HF를 계산한다"이다.
def liquidatable_at(positions, feed, candidate_price):
"""Positions that cross HF < 1 if `feed` updates to candidate_price."""
out = []
for pos in positions.borrowers_exposed_to(feed):
hf = pos.health_factor(price_override={feed: candidate_price})
if hf < 1.0:
close_factor = 1.0 if hf < 0.95 else 0.5
repay = pos.debt_value * close_factor
seized = repay * (1 + pos.liq_bonus)
gross = seized - repay # the prize, pre-costs
out.append((pos, repay, gross))
return sorted(out, key=lambda x: -x[2])
deviation = abs(offchain_px - onchain_px) / onchain_px
if deviation > FEED_DEVIATION_THRESHOLD * 0.8: # update imminent
targets = liquidatable_at(positions, feed, offchain_px)
for pos, repay, gross in targets:
prepare_bundle(pos, repay, max_bid=gross - costs(pos))
포지션을 에 대한 근접도로 정렬해두면(각 포지션을 트리거할 가격을 키로 삼은 우선순위 큐) 활성 집합을 작게 유지할 수 있다. 0.8이라는 계수가 이 게임의 전부다. 업데이트가 확정되기 전에 번들을 구성하고 제출해두고 싶은 것이지, 확정된 후에는 늦다.
3. 플래시론으로 자금을 조달하는 실행
청산에는 자본이 필요 없다. 필요한 것은 약 200밀리초의 블록 타임뿐이다. 정석적인 실행 컨트랙트는 다음을 원자적으로 수행한다.
- 부채 자산을 플래시론으로 빌린다(Balancer는 수수료 0bp, 혹은 Aave 자체는 약 5bp — 플래시론을 이용한 아토믹 차익거래에서 다뤘던 것과 동일한 기본 요소다).
liquidationCall(collateral, debtAsset, user, repayAmount, false)를 호출한다. 여기서false는 aToken이 아니라 기초 담보 자산을 직접 받는다는 의미다.- 압류한 담보를 가장 좋은 호가를 제시하는 곳(Uniswap v3/v4, 1inch 라우트, 또는 비공개 체결)에서 부채 자산으로 다시 스왑한다.
- 플래시론을 상환한다. 나머지가 수익이며,
require(profit >= minProfit)으로 검증해 낡은 시뮬레이션이 손실을 보며 실행되는 대신 되돌려지도록(revert) 한다.
허술한 봇이 죽는 지점은 바로 이 스왑 단계다. 10,500달러 상당의 롱테일 토큰을 압류한다는 것은 그 토큰의 DEX 유동성을 그대로 소진해야 한다는 뜻이고, 빠져나올 때의 가격 충격이 청산 보너스를 초과할 수도 있다. 경쟁력 있는 운영자들은 청산 후 빠져나가는 스왑까지 포함한 전체 왕복 과정을 시뮬레이션하고, 순이익이 마이너스인 청산은 건너뛰거나, 담보를 그대로 보유한 채 시장에 덤핑하는 대신 퍼프로 헤지한다.
4. 번들 제출
최종 트랜잭션은 공개 멤풀 근처에도 가지 않는다. 블록 빌더(또는 해당되는 경우 SVR/OEV 경매)에 번들 형태로 제출되며, 내용은 이렇다. "이 오라클 전송 직후에 내 청산을 배치해달라. 여기 팁을 준비했다." 이 팁은 동일한 시뮬레이션을 돌린 다른 모든 봇과 겨루는, 지면 아무것도 못 받는 경매에서의 입찰가다. 여기서 불편한 경제학 이야기로 넘어간다.
경쟁: 보너스는 실제로 어디로 가는가
학술적 기준선은 Qin, Zhou, Gamito, Jovanovic, Gervais의 "An Empirical Study of DeFi Liquidations: Incentives, Risks, and Instabilities"(2021)이다. 이 논문은 2019년 4월부터 2021년 4월까지 Aave, Compound, MakerDAO, dYdX 전반의 청산을 측정했다. 총 28,138건의 청산, 8억 700만 달러 규모, 청산자들의 합산 수익은 6,360만 달러였다. 이 논문은 또한 고정 스프레드 청산의 구조적 비효율성도 기록했다. 이 할인율은 무딘 도구로, 경매였다면 부과됐을 수준보다 차입자에게 상습적으로 과도한 페널티를 물리며, 순진한 전략을 쓰는 청산자들이 상당한 돈을 테이블 위에 남겨두는 모습도 보여줬다.
그 시절의 수익성은 세 가지 요인이 겹치며 재현되지 않고 있다.
가스 경매가 빌더 경매로 바뀌었다. 2019~2020년에는 청산자들이 공개 멤풀에서 프라이오리티 가스 경매로 경쟁했다. 승자는 가스비를 과다 지불했고, 패자는 되돌려졌으며, 보너스 중 상당 부분이 청산자에게 남았다. MEV-부스트 이후에는 경쟁이 봉인된 빌더 경매 안에서 일어난다. N개의 봇이 동일한 결정론적 기회를 동일한 수익 수치로 시뮬레이션하면, 입찰은 상금 전액을 향해 수렴한다. 승리하는 번들은 통상적으로 총수익의 90% 이상을 빌더/검증자에게 팁으로 지불한다. 청산자의 우위는 누가 조금이라도 더 나은 청산 가격에 빠져나갈 수 있는지, 누가 조금이라도 비용이 낮은지, 남들이 놓친 기회를 누가 포착했는지로 축소된다.
오라클 백런이 지배하며, 그마저도 울타리에 갇히고 있다. 사실상 모든 머니마켓 청산이 오라클 업데이트에 의해 트리거되므로, 수익성 있는 전략의 공간은 단 하나의 지점, 즉 전송 직후 슬롯을 차지하는 것으로 압축되었다. SVR 방식의 메커니즘은 이를 공식화한다. 프로토콜이 그 슬롯을 경매에 부치고 수익 대부분을 가져간다. 서처의 몫은 "보너스에서 가스비를 뺀 것"에서 "경매 낙찰자의 마진"으로 줄어들고, 경쟁적인 입찰은 이를 다시 0에 가깝게 밀어붙인다.
남은 것은 롱테일이다. 2026년 신규 진입자에게 현실적으로 남은 틈새는 다음과 같다. 빌더 시장이 아직 미성숙한 체인과 L2, 보너스 파라미터가 잘못 책정된 롱테일 렌딩 포크에서 경쟁 봇이 적은 경우, 이색적인 담보를 가진 포지션으로 청산 후 스왑 시뮬레이션이 진짜로 어려운 경우(지연 속도가 아니라 더 나은 체결로 우위를 만드는 경우), 그리고 가스비가 치솟고 RPC가 장애를 일으켜 한계선상의 운영자들이 나가떨어지는 스트레스 이벤트. MakerDAO의 블랙 서스데이(2020년 3월)는 제로 입찰 경매 덕분에 청산자들이 사실상 공짜로 830만 달러 상당의 담보를 가져갈 수 있었던, 다른 누구의 인프라도 제대로 작동하지 않던 사례다. 이는 이 경주가 가장 힘들 때 가장 큰 보상을 준다는 것을 보여주는 정석적인 사례로 남아 있다.
정직한 기대치를 가늠해보자. 이제 이것은 노드, 빌더와의 관계, 십여 개 배포 환경에 대한 모니터링 같은 실질적인 고정비용을 짊어진 채, 크게 리베이트된 상금 풀을 놓고 경쟁하는 비즈니스다. EVM 내부 구조, 오라클, MEV 배관 구조를 어떤 강좌보다도 깊이 배울 수 있는 좋은 방법이긴 하다. 다만 이걸로 생계를 유지하는 건 쉽지 않은 길이다.
퍼프-DEX 청산: 같은 단어, 다른 게임
퍼페추얼 DEX들도 "청산"을 한다고 말하며, 헤드라인 숫자는 더 크다. 하지만 메커니즘, 그리고 그에 따른 기회 구조는 근본적으로 다르다.
GMX(v2): 포지션은 오라클 가격(Chainlink의 저지연 Data Streams)으로 유동성 풀을 상대로 거래된다. 청산은 담보에서 손실과 수수료를 뺀 값이 유지증거금 요건 아래로 떨어질 때 발동하며, 이를 실행하는 것은 키퍼(keeper) — 오라클이 서명한 가격에 따라 작동하는 지정된 인프라이지, 공개 경주가 아니다. 가장 먼저 호출하는 사람에게 5% 보너스를 지급하는 공개 함수 같은 것은 없다. 남은 담보는 프로토콜 규칙에 따라 풀로 흘러간다. 서처의 관점에서 보면 딸 수 있는 것이 아무것도 없다.
Hyperliquid: 청산은 L1 자체의 매칭 엔진 내부에서 실행된다. 계정 자기자본이 유지증거금 아래로 떨어지면(위에서 설명한 오라클 게임을 막기 위해 정확히 CEX 피드와 오더북을 혼합한 마크 가격으로 평가된다), 엔진은 청산 시장가 주문을 오더북으로 보낸다. 대규모 포지션은 영향을 줄이기 위해 부분적으로 나뉘어 처리된다. 자기자본이 유지증거금의 3분의 2 아래로 계속 떨어지면, 프로토콜이 커뮤니티 소유로 운영하는 마켓메이킹 볼트인 HLP 내부의 한 전략인 백스톱 청산자 볼트가 마크 가격으로 포지션을 인수하며, 자동 디레버리징이 최후의 계층으로 작동한다. 청산 손익은 HLP 예치자들에게 귀속된다. "청산자 수익"은 개별 이벤트마다 경주로 다투는 것이 아니라 누구나 참여할 수 있는 볼트로 사회화된다.
트레이더 입장에서 결론은 이렇다. 머니마켓에서는 게임이 청산자가 되는 것, 즉 고정 스프레드를 놓고 벌이는 인프라 경주다. 퍼프 DEX에서는 청산자 역할이 닫혀 있으므로 게임은 청산을 둘러싸고 트레이딩하는 것으로 옮겨간다. 청산 가격은 공개 포지션으로부터 계산 가능하고, 강제 청산 물량은 눈에 보이는 오더북을 강타하며, 몰려 있는 청산 레벨은 가격 변동의 자석이자 연료가 된다. 이는 CEX 청산 캐스케이드를 트레이딩 가능하게 만드는 것과 같은 논리다. 이 역학은 펀딩비가 레버리지를 갉아먹는다(레버리지 비용이 포지션을 절벽 쪽으로 밀어붙인다)와 잡코인 펌프 앤 덤프 메커니즘(청산 클러스터를 향한 의도적인 밀어붙이기)에서 다룬 바 있다. 캐스케이드를 하나의 신호로 온전히 다루는 이야기 — 형성되는 과정을 포착하고, 그 연료를 측정하고, 오버슈트를 트레이딩하는 방법 — 은 이 시리즈의 다음 글에서 다룬다.
정리하며
머니마켓 청산은 크립토에서 보기 드물게 모든 것이 명료한 영역이다. 트리거 조건은 수식이고, 상금은 거버넌스가 정한 상수이며, 출발 신호탄은 미리 볼 수 있는 오라클 트랜잭션이다. 이 명료함 덕분에 2019~2021년에는 진정으로 열려 있는 비즈니스가 만들어졌고, 그러다가 — 바로 그 명료함 때문에 — 경쟁이 우위를 인프라 품질 수준까지 깎아내렸고 나머지는 프로토콜에 다시 경매로 돌려주게 되었다. 그럼에도 이 메커니즘은 여전히 필수적으로 알아야 할 지식이다. 온체인에서 대출을 받는다면 이 수식이 당신의 리스크 모델이고, 강제 청산 물량을 둘러싸고 트레이딩한다면 오라클 주기와 클로즈 팩터가 언제, 얼마나 큰 규모로 일어날지 알려준다. 그리고 그럼에도 봇을 만들겠다면, 적어도 그 돈이 실제로 어디로 흘러가는지는 알고 만들자.
Authors
Trading-systems engineer
Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.