Type/to search
2
Follow
484
Followers
99명의 트레이더 경험을 하나의 전략으로 증류: KOL 증류 합의의 발명자 상의 구현 아이디어
Discussions
Created 2026-04-30 14:07:08  Updated 2026-05-09 10:24:15
 0
 305

img

최근 들어 ‘증류(distillation)’라는 단어가 점점 더 자주 사용되고 있습니다. AI 분야에서 이는 일반적으로 복잡한 능력을 더 간결하고 재사용 가능한 구조로 정제하는 것을 의미합니다. 이를 전략 연구에 적용해도 마찬가지입니다. 더 직설적으로 말하자면, 원래 분산되어 있고 모호하며 주관적 경험에 의존하던 지식을 계산 가능하고, 검증 가능하며, 지속적으로 수정할 수 있는 시스템으로 정리하는 것입니다.

crypto-kol-quant 프로젝트가 최근 큰 인기를 끌고 있는데, 정말 흥미로운 점은 단순히 얼마나 많은 KOL을 수집했는지, LLM을 사용했는지가 아니라, 퀀트 연구에서는 흔치 않은 시도를 하고 있다는 점입니다. 바로 트레이더의 경험을 계산 가능한 능력 요소(capability factor)로 증류하고, 이를 다시 집계하여 합의 신호(consensus signal)로 만드는 것입니다. 이 문제 자체는 진지하게 다룰 가치가 있습니다. 오랜 기간 활동하며 안정적인 스타일을 가진 트레이더들이 시장에서 각자의 인지 프레임워크를 형성했다면, 이론적으로 이 프레임워크들은 트윗, 차트, 몇 마디 말 속에만 존재해서는 안 되며, 추출되고 정리되어 실행 가능한 전략 체인에 포함될 기회를 가져야 하기 때문입니다.

img

이러한 생각을 바탕으로, 우리는 발명자(FMZ) 퀀트 환경에서 초기 구현을 진행했습니다. 중요한 점은 단순히 프로젝트를 ‘그대로 가져오는’ 것이 아니라, 가장 핵심적인 로직을 실제로 연결하는 것입니다. 먼저 시장 데이터를 가져오고, 시장을 구조화된 상태로 변환합니다. 그런 다음 이러한 상태를 기반으로 어떤 거래 능력이 트리거되고 있는지 판단합니다. 이후 이러한 능력을 트레이더의 프로필에 매핑하고, 마지막으로 여러 트레이더의 개별 판단을 가중치가 적용된 합의 신호로 집계합니다. 물론 아직 완성된 거래 시스템은 아니지만, 적어도 한 가지 중요한 일을 해냈습니다. 즉, 트레이더의 경험이 실제로 압축되고 구조화되어 전략 판단 프로세스에 진입할 수 있음을 증명한 것입니다.

증류의 대상은 의견이 아니라 거래 능력입니다.

많은 사람들이 이런 유형의 프로젝트를 처음 접했을 때 ‘KOL 감성 전략’으로 이해하기 쉽습니다. 하지만 이는 정확하지 않습니다. 원래 프로젝트가 실제로 하는 일은 누가 오늘 더 낙관적인지 단순히 판단하거나, 누가 매수/매도를 외쳤는지 통계를 내는 것이 아닙니다. 더 나아가 묻습니다: 이 트레이더는 시장을 어떻게 이해하는가? 어떤 구조에서 매수 편향을 보이는가? 그는 추세, 위치, 패턴, 변동성, 거시 환경 중 무엇에 더 주목하는가? 이러한 판단 방식을 안정적인 능력 레이블로 정리할 수 있는가?

일단 이런 질문이 제기되면 전략의 무게 중심이 달라집니다. 시스템은 더 이상 특정 문장 하나에 관심을 두지 않고, 그 문장 뒤에 있는 방법론에 관심을 둡니다. 즉, 이 전략이 진정으로 증류하는 대상은 텍스트가 아니라 거래 지식 자체입니다. 원래 사람의 이해에 의존하던 주관적 경험을 프로그램이 인식하고 호출할 수 있는 규칙화된 능력으로 번역하려는 시도입니다. 이것이 일반적인 감성 모델과 가장 큰 차이점입니다. 시장 감성이 얼마나 뜨거운지 판단하는 것이 아니라, 현재 시장에서 다양한 거래 프레임워크가 반응하는 방식을 재구성하는 것입니다.

1단계: 먼저 시장을 상태 변수로 변환합니다.

증류를 실제로 구현하려면 첫 번째 단계는 반드시 예측이 아니라 특성 엔지니어링(feature engineering)입니다. 이유는 간단합니다. 트레이더의 언어는 사람이 보기 위한 것이지 프로그램이 보기 위한 것이 아닙니다. 예를 들어 “가격이 중요한 이동평균선을 되돌아오며, 이는 좋은 두 번째 매수 기회다”라는 문장은 트레이더에게는 이해하기 쉽지만, 프로그램은 먼저 이를 분해해야 합니다: 중요한 이동평균선이 무엇인가, 50일인가 200일인가? 현재 가격이 이 이동평균선에 가까운가? 추세가 손상되었는가? 지지 신호가 나타났는가?

따라서 시스템이 가장 먼저 해야 할 일은 매수/매도 결론을 내리는 것이 아니라, 원시 시세를 일련의 구조화된 상태로 변환하는 것입니다. 가장 기본적인 계층은 가격을 사용하여 추세와 모멘텀 특성을 구축하는 것입니다. 이동평균, 지수 이동평균, RSI, MACD 등의 변수는 단순히 지표를 쌓기 위한 것이 아니라, 시장이 현재 대략 어떤 상태에 있는지라는 간단한 질문에 답하기 위함입니다.

img

핵심 코드는 다음과 같습니다.

python
# 다양한 기간의 이동평균으로 현재 가격의 추세 위치 설명 f['ma20'] = _sma(c,20) f['ma50'] = _sma(c,50) f['ma100'] = _sma(c,100) f['ma200'] = _sma(c,200) # 지수 이동평균은 최근 가격 변화에 더 민감 f['ema20'] = _ema(c,20) f['ema50'] = _ema(c,50) # RSI는 시장이 과매수/과매도 상태인지, 모멘텀이 감소하는지 판단 f['rsi14'] = _rsi(c,14) # MACD와 시그널선, 히스토그램으로 추세와 모멘텀 변화 관찰 ml, ms, mh = _macd(c) f['macd'] = ml f['macd_sig'] = ms f['macd_hist'] = mh

이 코드가 하는 일은 복잡하지 않습니다. 이동평균은 현재 가격이 장기 추세 대비 어디에 위치하는지 판단하는 데 도움을 주고, RSI와 MACD는 모멘텀이 강화되고 있는지 약화되고 있는지를 설명합니다. 아직 거래 판단에 들어간 것은 아니며, 단지 '시장 상태 설명' 계층을 구축하고 있는 것입니다.

다음으로 시스템은 변동성과 위치 관계도 추가합니다. 많은 거래 판단이 추세에만 의존하지 않고 “현재 변동성 수축기인가?” “가격이 구간 고점이나 저점에 가까운가?”에도 의존하기 때문입니다.

해당 코드는 다음과 같습니다.

python
# 로그 수익률은 변동성 계산의 기초 logr = np.log(c / c.shift(1)) # 최근 30일 연간 변동성, 현재 시장 변동성 수준 측정 f['rv30'] = logr.rolling(30, min_periods=10).std() * np.sqrt(365) # 최근 20일 및 50일 고점/저점, 가격 위치 판단 f['high_20d'] = h.rolling(20, min_periods=1).max() f['low_20d'] = l.rolling(20, min_periods=1).min() f['high_50d'] = h.rolling(50, min_periods=1).max() f['low_50d'] = l.rolling(50, min_periods=1).min()

여기서 rv30은 최근 30일의 연간 변동성 수준을 나타내고, 구간 고점/저점은 시스템이 현재 가격이 최근 가격 구조 내에서 정확히 어디에 있는지 판단하는 데 도움을 줍니다. 이 외에도 거시적 배경도 상태 공간에 함께 포함됩니다. 코인 가격 자체만 보지 않고 달러 지수, 미국 주식 위험 선호도, 금리 환경을 함께 관찰하는 유형의 트레이더가 있기 때문입니다. 코드에서의 처리 방식은 먼저 이러한 변수들을 일일 단위로 정렬한 다음, 읽을 수 있는 상태로 변환하는 것입니다.

python
# DXY는 달러 강세/약세의 배경 변수 if 'DXY' in macro: dxy = _align(macro['DXY']) f['dxy_ret_20d'] = dxy.pct_change(20) f['dxy_trend_down'] = (dxy.pct_change(20) < -0.01).astype(int) # SPX는 위험 선호도 배경 변수 if 'SPX' in macro: spx = _align(macro['SPX']) f['spx_ret_20d'] = spx.pct_change(20) f['spx_trend_up'] = (spx.pct_change(20) > 0).astype(int)

이 단계의 의미는 한 문장으로 요약할 수 있습니다. 먼저 “시장이 지금 어떤지”를 기계가 지속적으로 읽을 수 있는 구조화된 상태로 번역하는 것입니다. 이 층이 없다면 이후의 증류는 불가능합니다.

2단계: 주관적 경험을 능력 요소로 작성합니다.

특성만으로는 충분하지 않습니다. 특성은 단지 시장을 설명할 뿐, “이 상태가 무엇을 의미하는지” 직접적으로 표현하지 않습니다. 다음 단계는 반드시 트레이더의 경험을 규칙으로 작성하는 것입니다. 즉, 현재 이러한 상태 변수에 기반하여 어떤 거래 능력이 트리거되고 있는지 판단하는 것입니다.

이 단계는 전체 전략에서 증류의 느낌이 가장 강한 부분입니다. 여기서는 더 이상 추상적으로 “어떤 프레임워크가 중요하다”고 말하는 것이 아니라, 실제로 프로그램 조건으로 작성합니다. 현재 구현에 포함된 능력 요소는 형태, 구조, 지표, 주기, 거시적 측면을 포괄합니다. 예를 들어 일부 능력은 패턴 인식(황소 깃발, 곰 깃발, 이중 천장/바닥, 머리-어깨 구조, 삼각형)에서 비롯되고, 일부는 구조 분석(Wyckoff, SMC, ICT 등 프레임워크)에서, 일부는 지표 자체(RSI 다이버전스, 이동평균 골든크로스/데드크로스, 볼린저 밴드 압축 돌파)에서, 또 일부는 주기 및 거시 환경(반감기 주기, 추세장/횡보장 전환, DXY 하락, 위험 선호도 회복 등)에서 비롯됩니다.

매우 전형적인 예는 “추세 되돌림 지속”입니다. 많은 트레이더가 비슷한 경험을 공유합니다. 큰 추세가 여전히 상승 중이고, 가격이 중요한 이동평균선을 되돌아오며, 현재 캔들에 지지가 나타난다면, 이는 종종 추세 지속을 의미합니다. 프로그램의 표현은 매우 직접적입니다.

python
# 현재 가격이 50일 이동평균선에 근접한지 판단 near_ma50 = abs(close - ma50_v) / close < 0.02 if close > 0 else False # 50일 이동평균선이 여전히 200일 이동평균선 위에 있고, 되돌아온 후 양봉 지지가 나타나면 # 추세 지속 능력 신호로 기록 s['cap_014_trend_pullback_continuation'] = 0.6 if (ma50_gt and near_ma50 and is_green) else 0.0

여기에는 신비로운 점이 없습니다. 단지 인간의 언어를 기계가 하나씩 판단할 수 있는 조건들로 분해한 것입니다. 또 다른 예는 “볼린저 밴드 압축 돌파”입니다. 많은 트레이더에게 변동성이 장기간 수축된 후 갑자기 위나 아래로 확장되는 것은 종종 새로운 방향 선택을 의미합니다. 해당 규칙의 작성 방식은 다음과 같습니다.

python
# 이전 캔들의 볼린저 밴드 폭이 압축 임계값보다 낮으면 변동성 수축으로 간주 squeezed = bb_w_p1 < bb_w20_p1 if bb_w20_p1 > 0 else False # 수축 후 상단 밴드 돌파 시 양방향 신호, 하단 밴드 하향 돌파 시 음방향 신호 s['cap_021_bollinger_squeeze_breakout'] = ( 0.6 if (squeezed and close > bb_u) else -0.6 if (squeezed and close < bb_l) else 0.0 )

거시적 요소도 동일한 방식으로 처리됩니다. 더 거시적인 유형의 트레이더에게 BTC는 완전히 고립된 가격 시퀀스가 아니며, 달러, 주식시장, 금리 환경의 영향을 받습니다. 따라서 이러한 이해도 능력 판단으로 작성됩니다.

python
# DXY 回落通常被视为对 BTC 偏正面的背景 s['cap_027_dxy_inverse_btc'] = 0.4 if (not _nm(dxy_r20) and dxy_r20 < -0.01) else 0.0 # 标普上涨可视为风险偏好改善 s['cap_028_spx_risk_on_off'] = 0.4 if (not _nm(spx_r20) and spx_r20 > 0.02) else 0.0 # 短端利率回落可视为流动性边际改善 s['cap_029_yields_liquidity'] = 0.4 if (not _nm(y_r20) and y_r20 < -0.02) else 0.0

이 계층에서 진정으로 중요한 것은 규칙을 얼마나 많이 작성했는가가 아니라, 증류(distillation)의 가장 핵심적인 단계를 완료했다는 점입니다: 원래는 주관적인 이해에만 의존해야 했던 판단을 계산 가능한 조건으로 압축한 것입니다. 아울러 언급하자면, 현재 버전의 대부분 능력 팩터는 여전히 조건 트리거 방식이며 연속 점수 방식이 아닙니다. 이는 시스템이 모든 미세한 변동에 대해 지속적으로 재평가하기보다는 어떤 구조가 성립하는지 판단하는 것에 가깝다는 것을 의미합니다. 또한 이로 인해 현재는 고주파 거래보다는 일봉 또는 중저빈도 판단에 더 적합합니다.

3단계: 팩터를 직접 합산하지 않고 먼저 트레이더 프로필로 매핑한다

img

전략이 팩터 수준까지만 수행된다면 여전히 평범한 규칙 시스템에 불과합니다. 원본 프로젝트의 더 특별한 점은 여기서 멈추지 않고 한 걸음 더 나아갔다는 것입니다: 팩터가 방향을 직접 결정하지 않고 먼저 트레이더 프로필로 매핑됩니다.

이 점은 매우 중요합니다. 왜냐하면 현실의 트레이더는 '모든 능력을 평균적으로 사용'하지 않기 때문입니다. 어떤 사람은 추세에 치우치고, 어떤 사람은 구조에, 어떤 사람은 주기에, 어떤 사람은 거시경제에 치우칩니다. 동일한 시장 상태에 직면하더라도 사람마다 집중하는 포인트가 완전히 다릅니다. 따라서 시스템은 모든 팩터를 단순히 평균내지 않고, 먼저 각 트레이더의 능력 선호도를 읽은 후 현재 팩터 상태에 따라 그를 위한 개인 신호를 계산합니다.

해당 프로필 읽기 로직은 다음과 같습니다:

python
# 读取每位交易员在画像中使用的能力因子及其权重 caps = {c['id']: float(c.get('weight', 0.5)) for c in p.get('capabilities_used', [])} profiles.append({ 'handle': p.get('handle', item['name'][:-5]), 'caps': caps })

각 프로필은 본질적으로 하나의 질문에 답합니다: 이 트레이더가 어떤 능력 팩터에 더 의존하는지, 그리고 이러한 능력이 그의 프레임워크에서 얼마나 큰 가중치를 가지는지입니다. 이 프로필이 있으면 시스템은 각 트레이더의 현재 시장에서의 '개인 신호'를 계산합니다:

python
for p in profiles: sig = 0.0 wt = 0.0 # 遍历该交易员关注的所有能力因子 for cap_id, w in p['caps'].items(): score = factor_scores.get(cap_id, 0.0) # 当前因子得分乘以交易员对该因子的偏好权重 sig += w * score wt += abs(w) # 归一化后得到该交易员在当前市场下的个人信号 trader_raw = sig / wt if wt > 0 else 0.0

여기까지 보면 이 시스템의 느낌이 이미 상당히 다르다는 것을 알 수 있습니다. 더 이상 '어떤 팩터가 켜졌는가'만 보는 것이 아니라, 한 가지를 거의 재구성하고 있습니다: 오늘의 시장을 이 99명의 트레이더에게 맡긴다면 그들은 각각 어떻게 판단할 것인가.

4단계: 개인 신호에서 가중치 합의로

img

각 트레이더의 개인 신호가 모두 계산된 후에야 시스템은 진정한 합의 계층으로 들어갑니다. 여기서의 '합의'는 단순한 투표도 아니고, 누가 목소리가 더 크다고 결정되는 것도 아니며, 역사적 유효성을 추가로 고려합니다.

현재 코드에서 가장 중요한 두 결과는 ic_weightedtrust_adjusted입니다. 해당 핵심 로직은 다음과 같습니다:

python
# 先对正 IC 的交易员做正向加权,得到 ic_weighted pos_w = sum(max(t['ic'], 0) for t in trader_signals) ic_wt = ( sum(t['signal'] * max(t['ic'], 0) for t in trader_signals) / pos_w if pos_w > 0 else 0.0 ) # trust_adjusted 更进一步: # 正 IC 顺向使用,负 IC 反向使用,再按绝对 IC 大小加权 abs_w = sum(abs(t['ic']) for t in trader_signals) trust = ( sum((t['signal'] if t['ic'] >= 0 else -t['signal']) * abs(t['ic']) for t in trader_signals) / abs_w if abs_w > 0 else 0.0 )

이 코드는 두 가지 매우 단순하지만 중요한 원칙을 표현합니다. 첫째, 역사적으로 더 효과적인 트레이더가 오늘날 더 큰 가중치를 가집니다. 둘째, 역사적 성과가 음수 IC인 트레이더도 버려지지 않고 오히려 역지표로 사용될 수 있습니다. 따라서 최종 출력된 trust_adjusted는 단순한 '모두가 어떻게 생각하는가'가 아니라 '누가 어떻게 보는가, 그리고 누가 더 신뢰할 만한가'입니다.

이것이 이 시스템이 일반적인 감정 모델과 다른 이유이기도 합니다. 목소리의 수를 집계하는 것이 아니라 역사적 검증을 포함한 인지 집계를 수행하는 것입니다. 전체 방법을 한 문장으로 압축하면 다음과 같습니다: 먼저 시장을 상태 변수로 변환하고, 상태 변수를 능력 팩터로 매핑하며, 능력 팩터를 트레이더 개인 신호로 매핑하고, 마지막으로 이 개인 신호들을 역사적 유효성에 따라 합의 판단으로 집계합니다.

img

img

'발명자' 상의 구현이 실제로 무엇을 작동시켰는가

만약 연구 프로젝트에만 머물러 있다면 이 시스템은 '합의 분석기'에 가깝습니다. 그러나 '발명자' 상의 구현은 전체 링크를 실제로 연결하여 지속적으로 작동할 수 있게 하는 데 중점을 둡니다. 가장 핵심적인 코드는 사실 세 줄뿐입니다:

python
# 第一步:把原始行情和宏观变量转成结构化状态 feat_df = build_features(records, macro if macro else None) # 第二步:根据状态变量评估当前哪些能力因子被触发 factor_scores = evaluate_factors(feat_df) # 第三步:把能力因子映射回交易员画像,并聚合成共识结果 consensus = compute_consensus(factor_scores)

이 세 줄은 거의 전체 전략의 가장 중요한 세 가지 추상화 계층입니다. 첫 번째 계층은 시장 상태를 담당하고, 두 번째 계층은 능력 판단을, 세 번째 계층은 트레이더 합의를 담당합니다. 물론 그 뒤에는 실행 계층, 위험 관리 계층, 상태 표시가 따르지만 연구 논리 측면에서 가장 중요한 부분은 이미 완전히 성립되었습니다. 즉, 이 구현의 가장 중요한 의미는 실행 세부 사항이 얼마나 많아졌는가가 아니라, 원본 프로젝트의 능력 프로필이 더 이상 정적 파일이 아니고, 팩터가 더 이상 연구 출력물이 아니며, 합의가 더 이상 보고서의 숫자가 아니라 지속적으로 작동하는 판단 프로세스에 연결되었다는 점입니다.

왜 여전히 프로토타입에 불과한가

물론 이 구현은 최종 버전이 아닙니다. 현재 코드는 BTC 일봉 프레임워크를 사용하므로 고주파 거래 시스템보다는 중저빈도 합의 판단에 더 적합합니다. 핵심은 여전히 일봉 구조, 주기 위치, 거시적 배경 및 트레이더 능력 선호도를 중심으로 이루어집니다. 또한 트레이더 프로필과 IC는 현재 정적 입력 상태이며 아직 온라인 진화 단계에 진입하지 않았습니다. 즉, 시스템이 '지식 증류'의 첫 단계를 완료했지만 '증류된 지식의 지속적인 자기 수정'까지는 완전히 이루어지지 않았습니다.

그러나 이것이 이미 매우 중요한 한 가지를 입증했다는 점을 방해하지는 않습니다: 트레이더의 경험은 계층별로 압축되고 구조화되어 실제로 전략 체인에 진입할 수 있다는 것입니다. 그 가치는 이미 안정적인 수익을 창출했다는 데 있는 것이 아니라, 원래 개념 수준에 머물러 있던 연구 경로를 실행 가능한 단계로 끌어올렸다는 데 있습니다. 이러한 능력 팩터가 어떻게 진화해야 하는지, 트레이더 가중치가 어떻게 업데이트되어야 하는지, 합의가 실제 시장에서 어떻게 지속적으로 보정되어야 하는지는 여전히 더 많은 운영 데이터를 통해 답해야 할 문제입니다.

결론

crypto-kol-quant이 진정으로 시사점을 주는 부분은 얼마나 많은 유행 개념을 사용했는가가 아니라, 시스템화하기 어려운 한 가지를 실제로 한 걸음 더 앞으로 나아가게 했다는 점입니다: 트레이더의 경험을 표현에서 능력으로, 능력에서 팩터로, 팩터에서 합의로 변환한 것입니다. 그리고 '발명자' 상의 이 구현은 바로 이 증류 체인을 실제로 작동시키는 일을 해냈습니다. 그것은 자신이 이미 최종 단계라고 과장하지 않았으며, 여전히 초기 프로토타입에 불과하다는 사실을 숨기려 하지 않았습니다. 그러나 적어도 트레이딩 경험이 반드시 차트와 언어에만 머물러야 하는 것이 아니라, 증류되고 구조화되어 실행될 수 있으며, 심지어 시장을 지속적으로 판단하는 시스템에 포함될 수 있다는 것을 증명했습니다.

전통적인 퀀트가 가격 시퀀스에서 패턴을 찾는 데 능숙하다면, 이러한 유형의 전략이 진정으로 계속 추진할 가치가 있는 방향은 아마도 인간의 인지에서 패턴을 추출하고, 이 패턴이 다시 시장에 참여하도록 하는 것일 것입니다. 그리고 이것이 바로 전략 연구에서 '증류'가 가장 주목할 만한 부분일 수 있습니다.

원본 프로젝트: 锁妖塔 Skill — 炼化99个加密交易员

특히 사용자 'GiantBin'님이 제공한 아이디어와 생각에 감사드립니다. 좋은 아이디어와 생각이 있으시면 언제든지 공유해 주시기 바랍니다.

Comment
All comments (0)
No data
No data
  • 1
iPhone Download
Forums
PINE Language
© 2015 - ∞ INVENTOR PTE LTD (SG)