Communitygithub.com

second-state/fintool

金融取引CLIツール — Hyperliquid、Binance、Coinbase、OKXでのスポット・証拠金取引、Polymarket予測市場、チェーン間の預入・引出、LLM強化価格表示とトレンド分析、ニュース・SEC提出書類、過去バックテストと将来PnL分析に対応。

fintool とは?

fintool は、複数の取引所での市場分析と取引を統合したCLIツールスイートです。各取引所(Hyperliquid、Binance、Coinbase、OKX)に専用バイナリが用意されており、Polymarketの予測市場取引や、Yahoo Finance・CoinGeckoのデータを使ったバックテスト機能も備えています。LLM(OpenAI API)と連携することで、価格見積もりにトレンド・モメンタム分析を追加した「強化価格表示」が可能です。すべての入出力はJSON形式で統一されており、設定は`~/.fintool/config.toml`で管理します。また、バックテストはAPIキーやウォレット不要で即座に利用できるため、戦略検証に最適です。SEC提出書類の取得や履歴ニュースの確認もでき、投資判断の材料を幅広くカバーします。

対応~Claude Code✓Codex CLI~Cursor
npx skills add https://github.com/second-state/fintool/tree/HEAD/skills

お気に入りのAIに質問する

このエージェントスキルを事前に読み込んだ状態で新しいチャットを開きます。

ドキュメント

fintool — 金融取引スキル

複数の取引所に対応した、市場情報と取引のためのCLIツールスイートです。各取引所には個別のバイナリが用意されています。

ツール

バイナリ目的パス
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フィールドは不要: 各バイナリが1つの取引所を担当します。"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. 少なくとも1つの取引所 — 取引コマンドに必須。

    • 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—————+1日/+2日/+4日/+7日
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"}

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 の両方が必要です。

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..."}

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 値には、list で取得したマーケットスラグまたは条件IDを使用します。

バックテスト(backtest)

重要: backtest バイナリには、CLIフラグ(JSON本文内ではなく)として --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。

ワークフロー

ワークフロー1: スポット取引

目標: シンボルを調査し、スポット取引を実行する。

ステップ1 — 分析付き価格表示:

{baseDir}/scripts/fintool --json '{"command":"quote","symbol":"BTC"}'

返される内容: 価格、24時間/7日/30日変化、トレンド(強気/弱気/中立)、モメンタム、出来高分析、サマリー。

ステップ1b — オーダーブックの厚みとスプレッドを確認:

{baseDir}/scripts/hyperliquid --json '{"command":"orderbook","symbol":"BTC"}'

返される内容: bid、ask、スプレッド、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 — レバレッジ設定:

{baseDir}/scripts/hyperliquid --json '{"command":"perp_leverage","symbol":"ETH","leverage":5,"cross":true}'

ステップ5 — 取引を実行:

# ETHのロング(買い)ポジション
{baseDir}/scripts/hyperliquid --json '{"command":"perp_buy","symbol":"ETH","amount":0.5,"price":3800}'

# またはBTCのショート(売り)ポジション
{baseDir}/scripts/hyperliquid --json '{"command":"perp_sell","symbol":"BTC","amount":0.01,"price":100000}'

# ポジションのクローズ
{baseDir}/scripts/hyperliquid --json '{"command":"perp_buy","symbol":"ETH","amount":0.5,"price":3900,"close":true}'

ステップ6 — ポジションとPnLを確認:

{baseDir}/scripts/hyperliquid --json '{"command":"positions"}'
{baseDir}/scripts/hyperliquid --json '{"command":"balance"}'

ワークフロー3: 予測市場

目標: Polymarketで予測市場を調査し、取引する。

ステップ1 — マーケットを一覧表示:

{baseDir}/scripts/polymarket --json '{"command":"list","query":"will-solana-exceed-500"}'

ステップ2 — 特定のマーケットのオッズを確認:

{baseDir}/scripts/polymarket --json '{"command":"quote","market":"will-solana-exceed-500"}'

ステップ3 — 口座残高を確認:

{baseDir}/scripts/polymarket --json '{"command":"balance"}'

ステップ4 — ポジションを取る:

{baseDir}/scripts/polymarket --json '{"command":"buy","market":"will-solana-exceed-500","outcome":"yes","amount":25,"price":0.45}'

ワークフロー4: バックテスト戦略

目標: 履歴日付を指定して取引戦略をシミュレートする。

ステップ1 — 市場データを確認:

{baseDir}/scripts/backtest --at 2025-01-15 --json '{"command":"quote","symbol":"AAPL"}'

ステップ2 — レバレッジを設定(証拠金シミュレーション用):

{baseDir}/scripts/backtest --at 2025-01-15 --json '{"command":"perp_leverage","symbol":"ETH","leverage":3}'

ステップ3 — 取引をシミュレート:

{baseDir}/scripts/backtest --at 2025-01-15 --json '{"command":"buy","symbol":"AAPL","amount":10}'

ステップ4 — 将来PnLを確認:

{baseDir}/scripts/backtest --at 2025-01-15 --json '{"command":"positions"}'

ステップ5 — シミュレーションをリセット:

{baseDir}/scripts/backtest --at 2025-01-15 --json '{"command":"reset"}'

ワークフロー5: SEC提出書類の調査

目標: 特定企業のSEC提出書類を取得する。

ステップ1 — 利用可能なレポートを一覧表示:

{baseDir}/scripts/fintool --json '{"command":"report_list","symbol":"AAPL","limit":5}'

ステップ2 — 特定の報告書を取得:

# 年次報告書
{baseDir}/scripts/fintool --json '{"command":"report_annual","symbol":"TSLA"}'

# 四半期報告書
{baseDir}/scripts/fintool --json '{"command":"report_quarterly","symbol":"AAPL"}'

# アクセッション番号で報告書を取得(report_listの出力から)
{baseDir}/scripts/fintool --json '{"command":"report_get","symbol":"AAPL","accession":"0000320193-24-000123"}'

備考:

  • report_get の accession 番号は report_list の出力から取得します。
  • SECエドガーデータベースの公開データを使用し、認証情報は不要。

関連スキル