Type/to search
2
Follow
494
Followers
Polymarket 다중 역할 지능형 분석 거래 시스템 설계 및 구현
Discussions
Created 2026-04-03 17:54:27  Updated 2026-04-13 16:31:58
 0
 371

img

전략 배경

올해 초, 누군가 Polymarket에서 하룻밤 사이에 집 한 채를 벌었다는 소식이 커뮤니티에 널리 퍼졌습니다. 호기심에 구체적인 거래 프레임워크를 검색해봤지만, 모두 제목만 화려하고 코드는 한 줄도 없었습니다. 어쩔 수 없이 직접 만들기로 했습니다.

img

처음에는 막막했습니다. Polymarket은 현재 가장 큰 분산형 예측 시장 플랫폼으로, 정치, 스포츠, 거시경제 등 예측 가능한 거의 모든 이벤트를 다루는 6만 개 이상의 상품이 상장되어 있습니다. 각 상품은 본질적으로 바이너리 옵션 계약입니다. 결과가 발생하면 가격이 1로 수렴하고, 발생하지 않으면 0이 됩니다. 가장 돈이 되는 것은 당연히 내부 정보입니다. 하지만 일반인이 일론 머스크가 다음 주에 트윗을 몇 개 올릴지, 연준이 다음에 금리를 인하할지 알 수 없으며, 시장을 모니터링하고 분석하며 결정을 내릴 시간과 에너지도 부족합니다.

그래서 다른 접근 방식을 생각했습니다. 정보를 쫓지 말고 자금을 쫓자는 것입니다. 정보 우위를 가진 사람은 미리 포지션을 구축할 것이고, 매수 행동은 반드시 가격과 거래량에 흔적을 남깁니다. '내부 정보'를 몰라도 자금 흐름을 관찰함으로써 누군가 조용히 포지션을 쌓고 있는지 추론할 수 있습니다. 이 아이디어를 바탕으로 다중 역할 지능형 분석 거래 시스템을 구축하여, 캔들스틱 신호 탐지, 여론 검증, AI 판단, 자동 주문 및 리스크 관리를 하나의 완전한 파이프라인으로 연결했습니다.

img


시스템 아키텍처

전체 시스템은 FMZ 워크플로우에서 실행되며, 메인 라인과 서브 라인의 두 가지 병렬 스케줄링 경로로 구성되어 완전히 분리되어 서로를 차단하지 않습니다.

스케줄링 경로트리거 빈도담당 모듈핵심 작업
거래 메인 라인10분마다상품 필터링 → 루프 처리 → AI 에이전트 → 거래 실행기회 탐색, 주문 및 포지션 구축
거래 서브 라인30초마다이익 실현 및 손절포지션 모니터링, 트레일링 스탑로스, 만기 상환

메인 라인은 '기회 탐색 및 포지션 개설'을 담당하며, 각 실행 라운드는 4개의 직렬 단계로 구성됩니다: 초기 필터링 → 캔들스틱 이상 탐지 → 뉴스 검색 → AI 다중 역할 분석, 최종적으로 매수 신호를 출력하고 주문 실행 단계로 넘어갑니다. 서브 라인은 '기존 포지션 관리'만 담당하며 30초 주기로 지속적으로 실행됩니다. 메인 라인에 현재 진행 중인 작업이 있더라도 서브 라인은 멈추지 않습니다.

이러한 분리 설계는 실제 문제를 해결합니다. 예측 시장의 가격 변동은 연속적이지만, 종목 분석은 계산량이 많고 지연 시간이 깁니다. 손절 모니터링을 메인 라인에 포함시키면 AI 분석이 느릴 경우 손절 대응이 심각하게 지연될 수 있습니다. 독립적인 스케줄링은 필요한 엔지니어링적 절충안입니다.


각 모듈 세부 설명

초기 필터링: 우선 쓸모없는 상품 제거

6만 개의 상품을 하나씩 분석할 수 없습니다. 따라서 첫 번째 관문은 순수 규칙 기반 필터링입니다. 목표는 하나, 볼 가치가 없는 상품을 빠르게 걸러내고 후속 계산 리소스를 진정한 가치가 있는 상품에 집중하는 것입니다.

필터링 조건은 다음과 같습니다: 최소 유동성 (너무 낮으면 매매가 어려움), 24시간 거래량 최소치 (거래가 거의 없는 상품은 참고 가치 부족), 매수-매도 호가 스프레드 상한 (스프레드가 너무 크면 슬리피지 비용이 높음), 경쟁도 상한, 그리고 가격 범위 – 시장 내재 확률이 5% ~ 50% 사이인 상품에만 집중합니다. 너무 높은 상품은 이미 충분히 가격에 반영되어 상승 여력이 제한적입니다. 너무 낮은 상품은 신뢰도가 의심스러워 차익 거래 기회보다는 복권에 가깝습니다.

필터링을 통과하면, 동일한 이벤트에 대해 일반적으로 Yes와 No 두 방향이 동시에 상장되어 있습니다. 전략은 가격이 더 낮은 방향만 유지합니다. 저가 쪽의 배당률 탄력성이 더 크고 잠재적 수익이 더 높기 때문입니다.

javascript
let truePrice = parseFloat(outcomePrices[outcomeIndex] || 0) if (truePrice < CONFIG.MIN_TRUE_PRICE || truePrice > CONFIG.MAX_TRUE_PRICE) continue let isActive = ( info.active === true && info.approved === true && info.closed === false && info.archived === false && info.acceptingOrders === true && info.pendingDeployment === false ) if (!isActive) continue let spreadPct = (ask - bid) / ask if (spreadPct > CONFIG.MAX_SPREAD_PCT) continue // 동일 이벤트는 가격이 더 낮은 방향만 유지 if (!marketMap[baseSymbol]) { marketMap[baseSymbol] = entry } else if (truePrice < marketMap[baseSymbol].price) { marketMap[baseSymbol] = entry }

모든 필터링 임계값은 $vars 변수를 통해 외부 파라미터로 노출되어, 코드를 수정하지 않고도 자신의 위험 선호도와 자금 규모에 따라 자유롭게 조정할 수 있습니다.

img

캔들스틱 이상 탐지: 자금이 남긴 흔적 찾기

1차 필터링 후, 통과된 각 상품에 대해 60분봉 기준 최근 240개의 캔들스틱을 가져와 5가지 유형의 이상 탐지를 실행합니다. 이것이 전략의 핵심 신호 계층이자, 이 시스템이 '단순히 이벤트를 AI에 던져 분석하는 방식'과 가장 본질적으로 다른 점입니다. 우리는 이벤트 결과를 예측하는 것이 아니라, 자금의 움직임을 찾는 것입니다.

완만한 상승: 지난 120개의 캔들스틱 동안 총 상승률이 5%를 초과하지만, 단일 캔들의 최대 상승률은 1.5% 미만입니다. 이 특징은 자금이 의도적으로 속도를 조절하며 주의를 끌지 않으려는 포지션 구축 자세를 설명합니다.

거래량 선형 증가: 최근 60개 캔들의 거래량 시퀀스에 대해 선형 회귀를 수행하고, 기울기가 양수이고 R²가 0.5보다 크면 거래량이 지속적이고 안정적으로 증가하고 있음을 의미하며, 무작위적 급등이 아님을 나타냅니다. R²는 핵심이며, '단일 캔들에 폭발적 증가, 나머지는 침체'와 같은 노이즈 상황을 걸러냅니다.

되돌림 축소: 역사적 고점 이후 각 되돌림의 최대 깊이를 통계적으로 분석했을 때, 최근 평균 되돌림이 초기 대비 60% 미만이면 매도 압력이 줄어들고 포지션이 안정화되고 있으며 누군가 매수하고 있음을 의미합니다. 각 되돌림 기간 동안 지속적으로 최저가를 추적하여 완전한 되돌림 폭을 계산 기준으로 삼습니다.

횡보 돌파: MA60과 MA120의 편차가 2% 미만(횡보 상태)이고 현재 가격이 MA60을 3% 초과하면 이전 저항선 돌파로 판단합니다.

거래량 급증: 최근 5개 캔들의 평균 거래량이 지난 60개 캔들의 기준 거래량의 2.5배를 초과하면 자금 가속 유입으로 판단합니다.

javascript
function linearRegression(values) { let n = values.length let sumX = 0, sumY = 0, sumXY = 0, sumX2 = 0 for (let i = 0; i < n; i++) { sumX += i; sumY += values[i] sumXY += i * values[i]; sumX2 += i * i } let slope = (n * sumXY - sumX * sumY) / (n * sumX2 - sumX * sumX) let intercept = (sumY - slope * sumX) / n let meanY = sumY / n let ssTot = 0, ssRes = 0 for (let i = 0; i < n; i++) { ssTot += Math.pow(values[i] - meanY, 2) ssRes += Math.pow(values[i] - (slope * i + intercept), 2) } let r2 = ssTot === 0 ? 0 : 1 - ssRes / ssTot return { slope, intercept, r2 } } function detectAnomaly(closes, volumes) { if (closes.length < 60) return null let anomalies = [], score = 0 let slice120 = closes.slice(-Math.min(120, closes.length)) // ── 이상 1: 완만한 상승 ────────────────────────────────────── let totalChange = (slice120[slice120.length - 1] - slice120[0]) / slice120[0] let maxSingle = 0 for (let i = 1; i < slice120.length; i++) { let change = Math.abs(slice120[i] - slice120[i - 1]) / slice120[i - 1] if (change > maxSingle) maxSingle = change } if (totalChange > 0.05 && maxSingle < 0.015) { score++ anomalies.push(`완만한 상승 총 상승 ${(totalChange * 100).toFixed(1)}% 단일 최대 ${(maxSingle * 100).toFixed(2)}%`) } // ── 이상 2: 거래량 선형 증가 ───────────────────────────────── let volSlice = volumes.slice(-60) let volReg = linearRegression(volSlice) if (volReg.slope > 0 && volReg.r2 > 0.5) { score++ anomalies.push(`거래량 선형 증가 기울기 ${volReg.slope.toFixed(4)} R² ${volReg.r2.toFixed(2)}`) } // ── 이상 3: 조정 폭 축소 (각 조정 저점 추적, 전체 깊이 계산) ──── let pullbacks = [], localHigh = closes[0] let inPullback = false, pullbackLow = closes[0] for (let i = 1; i < slice120.length; i++) { if (closes[i] > localHigh) { if (inPullback) { pullbacks.push((localHigh - pullbackLow) / localHigh) inPullback = false } localHigh = closes[i] } else if (closes[i] < localHigh * 0.99) { if (!inPullback) { inPullback = true; pullbackLow = closes[i] } else if (closes[i] < pullbackLow) { pullbackLow = closes[i] } } } if (pullbacks.length >= 3) { let first = pullbacks.slice(0, Math.floor(pullbacks.length / 2)) let last = pullbacks.slice(Math.floor(pullbacks.length / 2)) let firstAvg = first.reduce((a, b) => a + b, 0) / first.length let lastAvg = last.reduce((a, b) => a + b, 0) / last.length if (lastAvg < firstAvg * 0.6) { score++ anomalies.push(`조정 폭 축소 초기 ${(firstAvg * 100).toFixed(2)}% 최근 ${(lastAvg * 100).toFixed(2)}%`) } } // ── 이상 4: 횡보 돌파 ─────────────────────────────────────── let ma60 = closes.slice(-60).reduce((a, b) => a + b, 0) / 60 let ma120 = closes.length >= 120 ? closes.slice(-120).reduce((a, b) => a + b, 0) / 120 : ma60 let currentPrice = closes[closes.length - 1] if (Math.abs(ma60 - ma120) / ma120 < 0.02 && currentPrice > ma60 * 1.03) { score++ anomalies.push(`횡보 돌파 MA60=${ma60.toFixed(3)} MA120=${ma120.toFixed(3)} 현재=${currentPrice.toFixed(3)}`) } // ── 이상 5: 거래량 급증 ───────────────────────────────────── let recentVol = volumes.slice(-5).reduce((a, b) => a + b, 0) / 5 let baseVol = volumes.slice(-65, -5).reduce((a, b) => a + b, 0) / 60 if (baseVol > 0 && recentVol > baseVol * 2.5) { score++ anomalies.push(`거래량 급증 최근 5개 평균량은 기준의 ${(recentVol / baseVol).toFixed(1)}배`) } return { score, anomalies } }

각 이상 패턴 하나가 적중하면 1점, 총점 5점 만점에 2점 이상일 때만 다음 단계로 넘어간다. 단일 신호는 랜덤 노이즈일 수 있지만, 여러 신호가 중첩되어야 자금 움직임에 어느 정도 신뢰도가 있다고 판단하는 것이 이 캔들스틱 탐지 로직의 핵심 가정이다.

뉴스 검색: 이상 징후에 대한 펀더멘털 설명 찾기

캔들스틱 신호는 '자금이 움직이고 있다'는 증거이지만, 자금이 왜 움직이는지, 그 움직임에 근거가 있는지는 정보 측면에서 검증이 필요하다. 이 단계에서는 각 캔들스틱 이상 징후 종목에 대해 뉴스를 검색하여 해당 이벤트를 뒷받침할 만한 내용이 있는지 확인한다.

여기서는 Brave Search API를 사용하며, 월 2000회 무료 할당량으로 10분마다 한 번씩 메인 라인 리듬을 따라가기에 대체로 충분하다. 검색 키워드는 symbol에서 추출하며, 방향 접미사와 구분 기호를 제거한 후 읽을 수 있는 이벤트 설명어로 복원한다.

javascript
const q = item.symbol .replace("_USDC.No", "") .replace("_USDC.Yes", "") .replace(/-/g, "+") const rawResponse = HttpQuery( "https://api.search.brave.com/res/v1/web/search?q=" + q, { method: "GET", headers: { "X-Subscription-Token": CONFIG.BRAVE_API_KEY } } ) // 모든 반환된 섹션(웹, 뉴스 등)을 순회하며 구조화된 필드를 통합 추출 Object.keys(data).forEach(key => { const section = data[key] if (section && section.results && Array.isArray(section.results)) { section.results.forEach(r => { news.push({ type: key, title: r.title, description: r.description, age: r.age }) }) } })

검색된 뉴스와 캔들 데이터를 함께 패키징하여 다음 단계인 AI 분석으로 전달합니다. 두 가지 정보선을 동시에 검증함으로써 한쪽만 보는 것보다 훨씬 신뢰도가 높습니다.

AI 다중 역할 분석: 네 가지 관점, 자기 확신 방지

데이터가 준비되면 AI 분석 노드로 진입하며, 모델은 필요에 따라 선택합니다. 프롬프트에는 네 개의 독립적인 역할이 정의되어 있으며, 이는 시스템 전체에서 가장 핵심적인 설계 결정이므로 따로 자세히 설명할 가치가 있습니다.

하나의 AI에게 캔들과 뉴스를 동시에 보게 하면, 두 데이터가 서로를 정당화하며 표면적으로는 합리적이지만 실제로는 독립적 검증이 부족한 결론을 도출하기 쉽습니다. 자금 신호로 뉴스를 뒷받침하고, 다시 뉴스로 자금 신호를 뒷받침하여 결국 '사는 게 좋을 것 같다'는 자기 강화 결과를 출력합니다. 역할 분리(role isolation)는 정보 출처의 독립성을 강제합니다. 각 역할은 자신의 데이터만 보고, 자신의 차원에 대한 결론만 출력하며, 최종 의사 결정 역할은 결론만 보고 과정은 보지 않습니다.

역할 1: 캔들 자금 분석가 – 뉴스는 보지 않고 가격과 거래량 이상 징후만 분석하여 실제 자금이 지속적으로 매수되고 있는지 판단하고, 자금 신호 강도(강/중/기준)를 출력합니다.

역할 2: 뉴스 여론 분석가 – 캔들은 보지 않고 정보 면만 평가하여 아직 시장에 가격에 반영되지 않은 긍정적 이벤트가 있는지 판단하고, 뉴스 지지 등급(강/약/없음)을 출력합니다.

역할 3: 가격 평가 분석가 – 앞선 두 역할의 결론을 종합하여 사건의 실제 확률 구간을 추정하고, 현재 시장 가격과 비교하여 저평가/적정/고평가를 평가합니다. 이 역할에는 만기일 가중치 규칙이 내장되어 있습니다. 만기가 7일 이상 남았으면 정상 추정, 3일 이내이고 시장 가격이 0.15 이상이면 강제로 확률 구간을 좁히고 '심각한 저평가' 출력을 금지합니다. 이유는 간단합니다. 만기가 다가올수록 시장 참여자가 보유한 실시간 정보가 AI의 학습 데이터보다 완전하기 때문에, 이때는 AI의 판단이 시장 가격에 양보해야 합니다.

역할 4: 최종 의사 결정 분석가 – 의사 결정 매트릭스에 따라 앞선 세 역할의 결론을 종합하여 최종 행동을 출력합니다. 매트릭스의 논리는 다음과 같습니다. 자금 신호는 전제 조건이고, 뉴스는 검증 수단이며, 둘이 함께 신뢰도를 결정합니다. 하지만 신뢰도가 아무리 높아도 가격 평가가 '저평가'에 도달하지 않으면 절대 매수하지 않습니다.

여기서 뉴스 검증은 단순히 정보를 추적하는 것이 아니라, 자금 움직임에 이미 기본적 뒷받침이 있는지 판단하기 위한 것입니다. 내부자 자금이 포지션을 구축할 때는 정보가 공개 뉴스에 나타나지 않지만, 자금 신호에 뉴스 지지가 더해지면 정보가 확산 중간 단계에 있고 시장 가격이 아직 완전히 반영되지 않았다는 의미입니다. 이것이 바로 전략이 실제로 포착하려는 기회의 창입니다.

자금 신호 \ 뉴스 지지강한 검증약한 검증검증 없음
강(score 4~5)매수, confidence=높음매수, confidence=중간미실시
중(score 3)매수, confidence=중간관망미실시
기준(score 2)관망미실시미실시

AI의 출력 형식은 엄격한 JSON이며, 각 역할의 결론, 실제 확률 구간, 가격 평가, 최종 결정, 신뢰도 및 위험 목록을 포함하여 하류 실행 노드에서 바로 사용할 수 있습니다.

거래 실행: 가장 좋은 하나만 매수

AI가 각 배치의 종목을 차례로 평가한 후, 실행 계층은 모든 매수 신호를 주문하지 않고 시스템에서 가장 높은 점수를 받은 하나만 선택합니다. 정렬 규칙은 다음과 같습니다. 신뢰도(높음 > 중간 > 낮음) → 가격 평가(심각한 저평가 > 저평가) → 실제 확률 구간 폭(좁을수록 판단이 확실함).

javascript
const buySignals = signals.filter(s => s.signal === 'buy') bestSignal = buySignals.sort((a, b) => { const confDiff = (confidenceRank[b.confidence] || 0) - (confidenceRank[a.confidence] || 0) if (confDiff !== 0) return confDiff const assessDiff = (assessmentRank[b.priceAssessment] || 0) - (assessmentRank[a.priceAssessment] || 0) if (assessDiff !== 0) return assessDiff // 구간이 좁을수록 확실하므로 좁은 것을 우선 const aWidth = (a.trueProb.max || 0) - (a.trueProb.min || 0) const bWidth = (b.trueProb.max || 0) - (b.trueProb.min || 0) return aWidth - bWidth })[0]

선정된 종목에 대해 실시간으로 호가창의 Ask 가격을 확인하고, 잔고가 충분한지 확인한 후 지정가 주문을 제출합니다. 주문 제출 후 상태를 폴링하며 최대 30초간 기다리고, 시간 초과 시 주문을 취소하여 미체결 주문이 쌓이지 않도록 합니다. 해당 라운드의 Ask 가격에 설정된 수량을 곱한 값이 최소 주문 금액인 1 USDC 미만이면 시스템이 자동으로 ceil(1/askPrice)를 계산하여 최소 체결 가능 수량으로 올림 처리합니다.

손절 모듈: 이동 손절 + 절대 하한선

보조 라인은 30초마다 실행되며, 로직은 두 단계로 나뉩니다. 먼저 만기 상환을 처리하고, 그 다음 활성 보유 포지션에 대해 이동 손절 검사를 수행합니다.

Polymarket에는 특별한 메커니즘이 있습니다. 계약이 만료되어도 자금이 자동으로 계좌로 돌아오지 않으며, 직접 redeem을 호출해야 합니다. 전략은 각 보조 라인 시작 시 상환 가능한 포지션을 일괄 스캔하여 자금을 한 번에 해제함으로써 장기간 자금이 묶이는 것을 방지합니다.

이동 손절의 핵심은 이중 손절선 설계입니다. 이동 손절선(역사적 최고 bid 가격 - 고정 하락폭 LOSS_AMOUNT)과 절대 하한선(진입 가격 × 50%)이며, 실제 손절 가격은 둘 중 더 큰 값을 취합니다.

javascript
function calcStopPrice(entryPrice, maxPrice) { const trailingStopPrice = maxPrice - CONFIG.LOSS_AMOUNT const absoluteStopPrice = entryPrice * CONFIG.FALLBACK_STOP_RATIO // 고정 0.50 const usingFallback = trailingStopPrice < absoluteStopPrice const effectiveStopPrice = usingFallback ? absoluteStopPrice : trailingStopPrice return { effectiveStopPrice, trailingStopPrice, absoluteStopPrice, usingFallback } }

이 이중 설계는 두 가지 전형적인 보유 시나리오에 대응합니다. 수익 단계에서는 이동 손절선이 가격 상승에 따라 올라가 미실현 이익을 고정시킵니다. 진입 즉시 손실인 경우 이동 손절선이 마이너스 또는 0에 가까워질 수 있으며, 이때 절대 하한선(진입가×50%)이 개입하여 포지션이 0이 될 때까지 하락하는 것을 방지합니다. 두 선은 각각의 역할을 수행하며 어느 하나라도 빠져서는 안 됩니다.

손절이 발동되면 시장가 매도 호출 후 해당 종목의 역사적 최고가 캐시를 삭제하고, 다음 진입 신호를 기다립니다. 대시보드는 각 보유 포지션의 손절선까지의 여유 공간을 실시간으로 표시하며, 색상으로 경계 수준을 구분하여 수동 검토를 용이하게 합니다.


주요 설계 결정

왜 여러 역할을 사용하고 하나의 통합 프롬프트를 사용하지 않나요? 이 질문은 앞서 분석 모듈에서 일부 언급했지만, 다시 한 번 명확히 할 가치가 있습니다. 단일 프롬프트의 문제는 '자기 확신'뿐만 아니라 더 은밀한 위험이 있습니다. AI가 캔들 데이터와 뉴스 텍스트를 동시에 처리할 때, 후자로 전자를 설명하는 경향이 있어 캔들의 이상 징후를 뉴스의 필연적 반영으로 '합리화'하고, 두 신호를 독립적으로 평가하지 않게 됩니다. 역할 분리의 본질은 두 개의 독립적인 정보 체인을 강제로 도입하여, 최종적으로 두 체인이 모두 같은 방향을 가리킬 때만 신뢰도가 진정한 의미를 갖도록 하는 것입니다.

왜 매 라운드마다 가장 좋은 하나만 매수하고 분산 보유하지 않나요? 분산 보유는 전통적인 금융에서 성숙한 이론적 뒷받침이 있지만, 예측 시장에서는 논리가 완전히 적용되지 않습니다. 예측 시장의 종목 결과는 이분법적이며, 0이 될 위험이 실제로 존재합니다. 세 개의 중간 신뢰도 종목을 동시에 보유할 때 두 개가 0이 되고 하나만 상승하면 전체적으로 원금을 회수하지 못할 수 있습니다. 현재 전략의 선택은 정확성에 집중하여 베팅하고, 질이 다른 신호를 수량으로 희석하지 않는 것입니다. 이 선택이 항상 최적은 아니지만 논리적으로는 일관성이 있습니다.

만기일 가중치 규칙을 왜 하드 제약 조건으로 만들었나요? 만기가 임박했을 때 시장 가격은 참여자의 실시간 기대를 반영하며, 이 참여자들 중 상당수는 AI의 학습 데이터보다 더 최신 정보를 보유하고 있습니다. 이때 AI가 여전히 '가격이 심각하게 저평가되었으니 매수해야 한다'고 출력한다면, 이는 AI의 정보가 이미 구식일 가능성이 높습니다. 이 규칙을 권고 사항이 아닌 제약 조건으로 만든 이유는 AI 스스로 '내 정보가 더 이상 충분히 새롭지 않다'는 것을 인식하는 것이 현실적이지 않기 때문에, 외부의 강제 개입이 필요하기 때문입니다.


실거래 관찰

从实际运行记录来看,策略的漏斗比例相当陡峭。某次运行 141 个初步筛选通过的标的,K 线异常检测后剩 3 个,最终只有 1 个资金信号、新闻支撑、价格评估三项同时满足而触发下单,其余两个分别因为价格评估「合理」和综合评分不足被跳过。这说明策略整体偏保守,宁可空仓也不降标。在行情平稳、舆情无明显事件的窗口期,系统可能整天不产生任何买入信号。这是设计取向,不是 bug。也遇到过 K 线异常但随后被证明是假突破的情况,资金短暂进场又撤出,移动止损介入出场。新闻分析同样存在噪音,相关事件的报道本身可能就是滞后的或有偏差的,单靠 AI 无法完全识别。

仪表板实时展示账户权益、持仓状态(当前 Bid/Ask、最高价、回撤距止损线距离、止损模式)和 AI 决策详情,便于人工复核。

img


마무리

솔직히 말해서, 이 시스템은 바로 사용할 수 있는 인쇄기라기보다는 실행 가능한 아이디어 프레임워크에 가깝습니다. 핵심 로직——자금 행동 추적, 여론 이중 검증, 다중 역할 AI 판단——은 개념적으로 어느 정도 합리적이지만, 실제 시장에서는 신호 품질이 들쭉날쭉하고 AI의 판단도 틀릴 수 있으며, 만기일이 가까워짐에 따른 가격 수렴 위험은 항상 존재합니다.

개선할 부분이 많습니다. 거래 종목을 자신이 잘 아는 분야에 더 집중할 수 있고, AI 프롬프트를 자신의 거래 스타일에 맞게 재설계할 수 있으며, 다섯 가지 캔들스틱 이상의 가중치와 임계값은 조정 여지가 있고, 손절 계수도 실제 포지션 성과에 따라 반복적으로 개선할 가치가 있습니다. 코드는 모두 오픈소스이니 가져가서 수정하셔도 좋습니다.

위험 고지

예측 시장 종목은 이진 결과 특성을 가지며, 포지션은 가치가 0이 될 위험이 있습니다. 캔들스틱 이상 신호 및 AI 분석 결론은 투자 조언을 구성하지 않으며, 과거 신호 성과가 미래 수익을 보장하지 않습니다. 전략은 장기간 실거래 검증을 거치지 않았으며, 매개변수 설정이 결과에 상당한 영향을 미칩니다. 본 전략을 실거래에 사용하기 전에 Polymarket 플랫폼 규칙, 계약 만기 메커니즘 및 유동성 위험을 충분히 이해하고, 원금 손실에 대한 감내 능력을 스스로 평가하시기 바랍니다.

전략 소스 코드: Polymarket 다중 역할 지능형 분석 거래 전략

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