Communitygithub.com

fintool — 금융 거래 스킬

여러 거래소(바이낸스, 코인베이스, OKX, 하이퍼리퀴드)의 현물 및 무기한 선물 거래, Polymarket 예측 시장, 입출금, 시장 데이터 조회, 뉴스/SEC 공시 확인, 과거 백테스팅 및 전진 PnL 분석을 지원하는 CLI 도구 모음입니다.

fintool — 금융 거래 스킬란 무엇인가요?

fintool은 다중 거래소 및 금융 데이터 소스를 지원하는 포괄적인 금융 거래 CLI 스킬입니다. 사용자는 바이낸스(Binance), 코인베이스(Coinbase), OKX, 하이퍼리퀴드(Hyperliquid)에서 현물 및 무기한 선물 거래를 실행하고, Polymarket에서 예측 시장에 참여할 수 있습니다. 또한 체인 간 자산 이전, 시장 데이터 조회(호가, 뉴스, SEC 공시), OpenAI API를 활용한 LLM 기반 추세/모멘텀 분석이 포함된 강화된 시세 조회를 제공합니다. 특히 별도의 API 키나 지갑이 필요 없는 백테스트 도구를 통해 과거 데이터로 거래 전략을 시뮬레이션하고 1, 2, 4, 7일 후의 전진 PnL을 분석할 수 있어, 전략 검증에 매우 유용합니다. 모든 도구는 JSON 기반 입력/출력을 사용하며, 각 거래소별로 전용 바이너리가 있어 사용법이 명확하고 일관됩니다. 설정은 `~/.fintool/config.toml` 파일에서 관리하며, OpenAI API 키와 각 거래소 자격 증명을 필요에 따라 구성합니다.

지원 대상~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/second-state/fintool/tree/HEAD/skills

즐겨 사용하는 AI에게 물어보기

이 에이전트 스킬이 미리 로드된 새 채팅을 엽니다.

문서

fintool — 금융 거래 스킬은(는) 무엇을 하나요?

여러 거래소에서 시장 정보 및 거래를 위한 CLI 도구 모음입니다. 각 거래소는 고유한 바이너리를 가지고 있습니다.

도구

바이너리(binary)용도경로
fintool시장 정보 (호가, 뉴스, SEC 공시){baseDir}/scripts/fintool
hyperliquidHyperliquid 거래 (현물, 선물, HIP-3, 입금){baseDir}/scripts/hyperliquid
binanceBinance 거래 (현물, 선물, 입금){baseDir}/scripts/binance
coinbaseCoinbase 거래 (현물, 입금){baseDir}/scripts/coinbase
okxOKX 거래 (현물, 선물, 입금, 출금){baseDir}/scripts/okx
polymarketPolymarket 예측 시장{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"}'

다음 요구 사항을 확인하세요:

  1. OpenAI API 키 — 강화된 호가(추세/모멘텀 분석)에 필요합니다.

    • 확인: [api_keys] 섹션에서 openai_api_key = "sk-..." (주석 해제됨) 찾기
    • 없는 경우: 사용자에게 OpenAI API 키를 요청하거나 ~/.fintool/config.toml의 [api_keys] 섹션에 추가하도록 안내합니다.
  2. 최소 하나의 거래소 — 거래 명령어에 필요합니다.

    • 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와 동일)
    • 설정된 것이 없으면: 사용자에게 사용할 거래소를 묻고 자격 증명을 요청합니다.

예외 — backtest: 백테스트 바이너리는 설정이 필요 없습니다 — API 키, 지갑이 없습니다. 공개 Yahoo Finance 및 CoinGecko 데이터를 사용합니다. 즉시 사용할 수 있습니다.

사용자가 자격 증명을 제공하면, ~/.fintool/config.toml을 직접 편집하여 추가합니다.

거래소 기능

기능hyperliquidbinancecoinbaseokxpolymarketbacktest
현물 주문매수, 매도매수, 매도매수, 매도매수, 매도—시뮬레이션 매수/매도
선물 주문선물 매수/매도선물 매수/매도—선물 매수/매도—시뮬레이션 선물 매수/매도
예측 시장————매수, 매도, 목록, 호가—
호가창현물 + 선물현물 + 선물현물현물 + 선물——
입금Unit + AcrossAPIAPIAPI브리지—
출금Bridge2 + Unit + AcrossAPIAPIAPI브리지—
전송현물 ↔ 선물 ↔ 덱스(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에 의존하며, 필요한 모든 자격 증명이 설정되었는지 확인하기 위해 엄격한 사전 명령 확인을 요구합니다. 이 설계는 일관성, 견고성 및 사용자 자산의 보안을 보장합니다.

관련 스킬