fintool — 금융 거래 스킬은(는) 무엇을 하나요?
여러 거래소에서 시장 정보 및 거래를 위한 CLI 도구 모음입니다. 각 거래소는 고유한 바이너리를 가지고 있습니다.
도구
| 바이너리(binary) | 용도 | 경로 |
|---|---|---|
fintool | 시장 정보 (호가, 뉴스, SEC 공시) | {baseDir}/scripts/fintool |
hyperliquid | Hyperliquid 거래 (현물, 선물, HIP-3, 입금) | {baseDir}/scripts/hyperliquid |
binance | Binance 거래 (현물, 선물, 입금) | {baseDir}/scripts/binance |
coinbase | Coinbase 거래 (현물, 입금) | {baseDir}/scripts/coinbase |
okx | OKX 거래 (현물, 선물, 입금, 출금) | {baseDir}/scripts/okx |
polymarket | Polymarket 예측 시장 | {baseDir}/scripts/polymarket |
backtest | 과거 시뮬레이션 + 전진 PnL (키 불필요) | {baseDir}/scripts/backtest |
- 설정:
~/.fintool/config.toml - 모드: 항상 JSON 모드 사용 —
<binary> --json '<JSON>'. 모든 입력과 출력은 구조화된 JSON입니다. exchange필드 없음: 각 바이너리는 하나의 거래소만 처리합니다."exchange"파라미터가 필요하지 않습니다.
설정 확인 (필수 — 먼저 수행)
명령어를 실행하기 전에 사용자 설정을 확인하세요:
cat ~/.fintool/config.toml 2>/dev/null
파일이 존재하지 않는 경우, 다음을 실행하세요:
{baseDir}/scripts/fintool --json '{"command":"init"}'
다음 요구 사항을 확인하세요:
-
OpenAI API 키 — 강화된 호가(추세/모멘텀 분석)에 필요합니다.
- 확인:
[api_keys]섹션에서openai_api_key = "sk-..."(주석 해제됨) 찾기 - 없는 경우: 사용자에게 OpenAI API 키를 요청하거나
~/.fintool/config.toml의[api_keys]섹션에 추가하도록 안내합니다.
- 확인:
-
최소 하나의 거래소 — 거래 명령어에 필요합니다.
- Hyperliquid:
[wallet]섹션의private_key또는wallet_json+wallet_passcode(현물 + 선물) - Binance:
[api_keys]섹션의binance_api_key+binance_api_secret(현물 + 선물) - Coinbase:
[api_keys]섹션의coinbase_api_key+coinbase_api_secret(현물만) - OKX:
[api_keys]섹션의okx_api_key+okx_secret_key+okx_passphrase(현물 + 선물) - Polymarket: 예측 시장 거래에
wallet.private_key사용 (Hyperliquid와 동일) - 설정된 것이 없으면: 사용자에게 사용할 거래소를 묻고 자격 증명을 요청합니다.
- Hyperliquid:
예외 — backtest: 백테스트 바이너리는 설정이 필요 없습니다 — API 키, 지갑이 없습니다. 공개 Yahoo Finance 및 CoinGecko 데이터를 사용합니다. 즉시 사용할 수 있습니다.
사용자가 자격 증명을 제공하면, ~/.fintool/config.toml을 직접 편집하여 추가합니다.
거래소 기능
| 기능 | hyperliquid | binance | coinbase | okx | polymarket | backtest |
|---|---|---|---|---|---|---|
| 현물 주문 | 매수, 매도 | 매수, 매도 | 매수, 매도 | 매수, 매도 | — | 시뮬레이션 매수/매도 |
| 선물 주문 | 선물 매수/매도 | 선물 매수/매도 | — | 선물 매수/매도 | — | 시뮬레이션 선물 매수/매도 |
| 예측 시장 | — | — | — | — | 매수, 매도, 목록, 호가 | — |
| 호가창 | 현물 + 선물 | 현물 + 선물 | 현물 | 현물 + 선물 | — | — |
| 입금 | Unit + Across | API | API | API | 브리지 | — |
| 출금 | Bridge2 + Unit + Across | API | API | API | 브리지 | — |
| 전송 | 현물 ↔ 선물 ↔ 덱스(DeX) | 현물 ↔ 선물 | — | 자금 ↔ 거래 | — | — |
| 잔고 | 잔고 | 잔고 | 잔고 | 잔고 | 잔고 | 시뮬레이션 |
| 미체결 주문 | 주문 | 주문 | 주문 | 주문 | — | — |
| 취소 | 취소 | 취소 | 취소 | 취소 | — | — |
| 포지션 | 포지션 | 포지션 | — | 포지션 | 포지션 | 시뮬레이션 |
| 자금 조달 비율 | — | — | — | 선물 funding_rate | — | — |
| 과거 호가 | — | — | — | — | — | 호가 |
| 전진 PnL | — | — | — | — | — | +1d/+2d/+4d/+7d |
| SEC 공시 (날짜별) | — | — | — | — | — | 보고서 목록/연간/분기별 |
오류 처리
- 모든 오류는
{"error": "..."}형식으로 반환됩니다. 모든 응답에서error키가 있는지 확인하세요. - 명령어가 잔고 부족 또는 유효하지 않은 심볼로 실패하면, 오류를 명확히 전달합니다.
- 거래소가 설정되지 않은 경우, 사용자에게 필요한 자격 증명을 알리고 설정에 추가하겠다고 제안합니다.
JSON 명령어 참조
시장 데이터 (fintool)
// fintool --json '<JSON>'
{"command": "quote", "symbol": "BTC"}
{"command": "news", "symbol": "AAPL"}
{"command": "report_list", "symbol": "AAPL", "limit": 5}
{"command": "report_annual", "symbol": "AAPL"}
{"command": "report_quarterly", "symbol": "AAPL"}
{"command": "report_get", "symbol": "AAPL", "accession": "0000320193-24-000123"}
Hyperliquid 거래 (hyperliquid)
// hyperliquid --json '<JSON>'
{"command": "address"}
{"command": "buy", "symbol": "ETH", "amount": 0.1, "price": 3800}
{"command": "sell", "symbol": "ETH", "amount": 0.1, "price": 4000}
{"command": "orderbook", "symbol": "HYPE"}
{"command": "orderbook", "symbol": "BTC", "levels": 10}
{"command": "quote", "symbol": "ETH"}
{"command": "perp_orderbook", "symbol": "BTC"}
{"command": "perp_buy", "symbol": "ETH", "amount": 0.5, "price": 3800}
{"command": "perp_sell", "symbol": "BTC", "amount": 0.01, "price": 100000}
{"command": "perp_buy", "symbol": "ETH", "amount": 0.5, "price": 3900, "close": true}
{"command": "perp_sell", "symbol": "BTC", "amount": 0.01, "price": 95000, "close": true}
{"command": "perp_leverage", "symbol": "ETH", "leverage": 5, "cross": true}
{"command": "perp_set_mode", "mode": "unified"}
{"command": "balance"}
{"command": "positions"}
{"command": "orders"}
{"command": "orders", "symbol": "BTC"}
{"command": "cancel", "order_id": "BTC:91490942"}
{"command": "deposit", "asset": "ETH", "amount": 0.01}
{"command": "deposit", "asset": "ETH", "amount": 0.05, "dry_run": true}
{"command": "deposit", "asset": "BTC", "amount": 0.001}
{"command": "deposit", "asset": "USDC", "amount": 100, "from": "base"}
{"command": "deposit", "asset": "USDC", "amount": 100, "from": "ethereum", "dry_run": true}
{"command": "withdraw", "asset": "USDC", "amount": 100}
{"command": "withdraw", "asset": "USDC", "amount": 100, "to": "base"}
{"command": "withdraw", "asset": "ETH", "amount": 0.5}
{"command": "transfer", "asset": "USDT0", "amount": 50, "from": "spot", "to": "cash"}
{"command": "transfer", "asset": "USDT0", "amount": 50, "from": "cash", "to": "spot"}
{"command": "bridge_status"}
Binance 거래 (binance)
// binance --json '<JSON>'
{"command": "buy", "symbol": "BTC", "amount": 0.01, "price": 95000}
{"command": "sell", "symbol": "BTC", "amount": 0.01, "price": 100000}
{"command": "orderbook", "symbol": "BTC"}
{"command": "perp_buy", "symbol": "ETH", "amount": 0.5, "price": 3800}
{"command": "perp_sell", "symbol": "ETH", "amount": 0.5, "price": 4000, "close": true}
{"command": "perp_leverage", "symbol": "ETH", "leverage": 5}
{"command": "balance"}
{"command": "positions"}
{"command": "orders"}
{"command": "cancel", "order_id": "binance_spot:BTCUSDT:123"}
{"command": "deposit", "asset": "USDC", "from": "ethereum"}
{"command": "withdraw", "asset": "USDC", "amount": 100, "to": "0x...", "network": "ethereum"}
Coinbase 거래 (coinbase)
// coinbase --json '<JSON>'
{"command": "buy", "symbol": "ETH", "amount": 0.1, "price": 3800}
{"command": "sell", "symbol": "ETH", "amount": 0.1, "price": 4000}
{"command": "orderbook", "symbol": "BTC"}
{"command": "balance"}
{"command": "orders"}
{"command": "cancel", "order_id": "coinbase:uuid-here"}
{"command": "deposit", "asset": "ETH"}
{"command": "withdraw", "asset": "USDC", "amount": 100, "to": "0x..."}
OKX 거래 (okx)
// okx --json '<JSON>'
{"command": "quote", "symbol": "BTC"}
{"command": "buy", "symbol": "ETH", "amount": 0.01, "price": 2000}
{"command": "sell", "symbol": "ETH", "amount": 0.01, "price": 2100}
{"command": "orderbook", "symbol": "BTC"}
{"command": "perp_orderbook", "symbol": "ETH"}
{"command": "perp_buy", "symbol": "ETH", "amount": 0.1, "price": 2000}
{"command": "perp_sell", "symbol": "ETH", "amount": 0.1, "price": 2100, "close": true}
{"command": "perp_leverage", "symbol": "ETH", "leverage": 5, "cross": true}
{"command": "perp_funding_rate", "symbol": "BTC"}
{"command": "balance"}
{"command": "positions"}
{"command": "orders"}
{"command": "cancel", "inst_id": "BTC-USDT", "order_id": "12345"}
{"command": "deposit", "asset": "USDC", "network": "base"}
{"command": "deposit", "asset": "ETH", "network": "ethereum"}
{"command": "withdraw", "asset": "USDC", "amount": 100, "network": "base"}
{"command": "withdraw", "asset": "USDC", "amount": 100, "to": "0x...", "network": "ethereum"}
{"command": "transfer", "asset": "USDT", "amount": 100, "from": "funding", "to": "trading"}
{"command": "transfer", "asset": "USDT", "amount": 100, "from": "trading", "to": "funding"}
OKX 참고:
quote및orderbook은 공용 엔드포인트입니다 — API 키가 필요하지 않습니다.- OKX는 상품 ID를 사용합니다: 현물 =
BTC-USDT, 선물 =BTC-USDT-SWAP. CLI가 심볼에서 자동으로 형식을 지정합니다. - OKX는
funding(입금/출금용) 및trading(통합) 계정이 있습니다.transfer를 사용하여 계정 간 자금을 이동합니다. --fee가 지정되지 않으면 출금 수수료가 자동으로 가져와집니다.- 취소하려면
inst_id(예:BTC-USDT)와order_id가 모두 필요합니다.
Polymarket 예측 시장 (polymarket)
// polymarket --json '<JSON>'
{"command": "list", "query": "bitcoin"}
{"command": "list", "query": "election", "limit": 5}
{"command": "list", "query": "bitcoin", "min_end_days": 7}
{"command": "list", "query": "bitcoin", "min_end_days": 0}
{"command": "quote", "market": "will-bitcoin-hit-100k"}
{"command": "buy", "market": "will-bitcoin-hit-100k", "outcome": "yes", "amount": 10, "price": 0.65}
{"command": "sell", "market": "will-bitcoin-hit-100k", "outcome": "yes", "amount": 10, "price": 0.70}
{"command": "positions"}
{"command": "balance"}
{"command": "deposit", "amount": 100, "from": "base"}
{"command": "withdraw", "amount": 50}
참고:
list는 기본적으로min_end_days: 3으로 설정되어 3일 이내에 마감되는 시장을 필터링합니다 (종종 배당률이 1:0에 가깝습니다). 모든 시장을 보려면0으로 설정하세요.list및quote는 읽기 전용이며 Polymarket 자격 증명이 필요하지 않습니다.- 거래 명령어 (
buy,sell,deposit,withdraw)는 설정에wallet.private_key가 필요합니다. market값으로 시장 슬러그(slug) (list에서 가져옴) 또는 조건 ID를 사용합니다.
백테스팅 (backtest)
중요: backtest 바이너리는 JSON 본문이 아닌 CLI 플래그로 --at YYYY-MM-DD가 필요합니다. API 키나 지갑이 필요하지 않습니다.
# backtest --at <DATE> --json '<JSON>'
// 과거 가격
{"command": "quote", "symbol": "BTC"}
{"command": "quote", "symbol": "AAPL"}
{"command": "quote", "symbol": "GOLD"}
// 시뮬레이션된 현물 거래 — +1/+2/+4/+7일 후의 전진 PnL 반환
{"command": "buy", "symbol": "ETH", "amount": 0.5}
{"command": "buy", "symbol": "AAPL", "amount": 10, "price": 237}
{"command": "sell", "symbol": "BTC", "amount": 0.01, "price": 105000}
// 시뮬레이션된 선물 거래 — 레버리지 전진 PnL 반환
{"command": "perp_leverage", "symbol": "ETH", "leverage": 5}
{"command": "perp_buy", "symbol": "ETH", "amount": 0.5, "price": 3300}
{"command": "perp_sell", "symbol": "BTC", "amount": 0.01, "price": 100000}
// 날짜별로 필터링된 SEC 공시
{"command": "report_list", "symbol": "AAPL", "limit": 5}
{"command": "report_annual", "symbol": "TSLA"}
{"command": "report_quarterly", "symbol": "AAPL"}
// 포트폴리오 관리
{"command": "balance"}
{"command": "positions"}
{"command": "reset"}
// 뉴스 스텁 (과거 뉴스는 제공되지 않음)
{"command": "news", "symbol": "BTC"}
참고:
- 매수/매도 시
price가 생략되면--at날짜의 과거 종가가 자동으로 사용됩니다. - 포트폴리오 상태는
~/.fintool/backtest_portfolio.json에 유지됩니다.reset을 사용하여 초기화합니다. balance는cashBalance(현물 거래만),positions,totalTrades,leverageSettings를 반환합니다.- 거래 출력에는 각 오프셋에서의 전진 가격, 달러 PnL 및 백분율 PnL이 포함된
pnl배열이 포함됩니다. - 데이터 소스: Yahoo Finance (주식, 암호화폐, 상품, 지수)와 암호화폐용 CoinGecko 폴백(fallback).
워크플로우
워크플로우 1: 현물 거래
목표: 심볼 조사 후 현물 거래 실행.
1단계 — 분석과 함께 호가 확인:
{baseDir}/scripts/fintool --json '{"command":"quote","symbol":"BTC"}'
반환: 가격, 24시간/7일/30일 변동, 추세 (강세/약세/중립), 모멘텀, 거래량 분석, 요약.
1b단계 — 호가창 깊이 및 스프레드 확인:
{baseDir}/scripts/hyperliquid --json '{"command":"orderbook","symbol":"BTC"}'
반환: 매수호가, 매도호가, 스프레드, spreadPct, midPrice. 거래 전 유동성을 평가하는 데 사용합니다.
2단계 — 최신 뉴스 확인:
{baseDir}/scripts/fintool --json '{"command":"news","symbol":"BTC"}'
3단계 — 거래 실행:
# Hyperliquid에서 0.01 BTC 최대 $95,000에 매수
{baseDir}/scripts/hyperliquid --json '{"command":"buy","symbol":"BTC","amount":0.01,"price":95000}'
# 또는 Binance에서
{baseDir}/scripts/binance --json '{"command":"buy","symbol":"BTC","amount":0.01,"price":95000}'
# 또는 Coinbase에서
{baseDir}/scripts/coinbase --json '{"command":"buy","symbol":"BTC","amount":0.01,"price":95000}'
# 또는 OKX에서
{baseDir}/scripts/okx --json '{"command":"buy","symbol":"BTC","amount":0.01,"price":95000}'
4단계 — 확인:
{baseDir}/scripts/hyperliquid --json '{"command":"orders"}'
{baseDir}/scripts/hyperliquid --json '{"command":"balance"}'
워크플로우 2: 무기한 선물 거래
목표: 조사 후 무기한 선물을 통한 레버리지 포지션 진입.
1단계 — 자금 조달/미결제약정(OI)과 함께 호가 확인:
{baseDir}/scripts/hyperliquid --json '{"command":"quote","symbol":"ETH"}'
1b단계 — 선물 호가창 깊이 및 스프레드 확인:
{baseDir}/scripts/hyperliquid --json '{"command":"perp_orderbook","symbol":"ETH"}'
2단계 — 컨텍스트를 위해 현물 가격 확인:
{baseDir}/scripts/fintool --json '{"command":"quote","symbol":"ETH"}'
3단계 — 뉴스 확인:
{baseDir}/scripts/fintool --json '{"command":"news","symbol":"ETH"}'
4단계 — 선물 거래 실행:
# Hyperliquid에서 ETH 무기한 선물 5배 레버리지로 0.5 ETH 매수
{baseDir}/scripts/hyperliquid --json '{"command":"perp_leverage","symbol":"ETH","leverage":5,"cross":true}'
{baseDir}/scripts/hyperliquid --json '{"command":"perp_buy","symbol":"ETH","amount":0.5,"price":3800}'
5단계 — 확인:
{baseDir}/scripts/hyperliquid --json '{"command":"positions"}'
{baseDir}/scripts/hyperliquid --json '{"command":"balance"}'
워크플로우 3: 예측 시장
목표: Polymarket에서 시장 찾기 및 거래.
1단계 — 시장 검색:
{baseDir}/scripts/polymarket --json '{"command":"list","query":"bitcoin"}'
2단계 — 특정 시장의 배당률 확인:
{baseDir}/scripts/polymarket --json '{"command":"quote","market":"will-bitcoin-hit-100k"}'
3단계 — 시장에 배팅 (예: "yes" 결과 10주, 주당 $0.65):
{baseDir}/scripts/polymarket --json '{"command":"buy","market":"will-bitcoin-hit-100k","outcome":"yes","amount":10,"price":0.65}'
**참고:**
- 모든 시장 검색 및 호가는 공용이며 지갑이 필요하지 않습니다.
- 거래 명령어 (`buy`, `sell`, `deposit`, `withdraw`)는 `~/.fintool/config.toml`에 설정된 지갑 개인 키가 필요합니다.
### 워크플로우 4: 과거 백테스팅
**목표**: 별도의 자격 증명 없이 과거 데이터로 거래 전략 시뮬레이션.
**1단계 — 과거 조회:**
```bash
{baseDir}/scripts/backtest --at 2024-03-15 --json '{"command":"quote","symbol":"AAPL"}'
{baseDir}/scripts/backtest --at 2024-03-15 --json '{"command":"report_list","symbol":"AAPL","limit":3}'
2단계 — 거래 및 PnL 확인:
{baseDir}/scripts/backtest --at 2024-03-15 --json '{"command":"buy","symbol":"AAPL","amount":10}'
{baseDir}/scripts/backtest --at 2024-03-15 --json '{"command":"buy","symbol":"AAPL","amount":10,"price":237}'
출력: 지정가 주문, 전진 가격, +1/+2/+4/+7일 후 전진 PnL.
3단계 — 시뮬레이션된 선물 시도:
{baseDir}/scripts/backtest --at 2024-03-15 --json '{"command":"perp_leverage","symbol":"ETH","leverage":5}'
{baseDir}/scripts/backtest --at 2024-03-15 --json '{"command":"perp_buy","symbol":"ETH","amount":0.5,"price":3300}'
4단계 — 포트폴리오 확인:
{baseDir}/scripts/backtest --at 2024-03-15 --json '{"command":"balance"}'
{baseDir}/scripts/backtest --at 2024-03-15 --json '{"command":"positions"}'
5단계 — 초기화 (새 전략을 위해):
{baseDir}/scripts/backtest --at 2024-03-15 --json '{"command":"reset"}'
마무리
fintool 스킬은 AI 에이전트가 사용자의 명령에 따라 여러 금융 플랫폼에 걸쳐 시장 조사, 거래, 전략 백테스팅을 실행할 수 있게 해줍니다. 모든 데이터 교환을 위해 구조화된 JSON을 사용하고, 설정을 위해 ~/.fintool/config.toml에 의존하며, 필요한 모든 자격 증명이 설정되었는지 확인하기 위해 엄격한 사전 명령 확인을 요구합니다. 이 설계는 일관성, 견고성 및 사용자 자산의 보안을 보장합니다.