fintool — 金融取引スキル
複数の取引所に対応した、市場情報と取引のためのCLIツールスイートです。各取引所には個別のバイナリが用意されています。
ツール
| バイナリ | 目的 | パス |
|---|---|---|
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フィールドは不要: 各バイナリが1つの取引所を担当します。"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]に追加するよう指示する。
-
少なくとも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と同じ)を使用して予測市場取引 - 何も設定されていない場合: ユーザーにどの取引所を使いたいか尋ね、認証情報を要求する。
- 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 | — | — | — | — | — | +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エドガーデータベースの公開データを使用し、認証情報は不要。