
※本記事にはアフィリエイト広告(プロモーション)が含まれています。
「この銘柄は流動性が低いから気をつけて」という言葉を見かけたことがある方は多いと思います。なんとなく「活発に取引されているかどうか」というイメージは持てても、ボットのロジックにどう落とし込めばいいのかは意外とわかりにくい概念です。この記事では、流動性という言葉を具体的な指標に分解し、ボット運用でなぜ重視すべきなのかを一般論として整理します。
流動性とは何か
流動性とは、**「売りたいとき・買いたいときに、価格をほとんど動かさずに取引を成立させられる度合い」**のことです。流動性が高い市場では、大きな注文を出しても価格がほとんど動かずに約定します。逆に流動性が低い市場では、少量の注文でも価格が大きく動いてしまいます。
これは抽象的な概念ですが、実際には次の3つの具体的な指標に分解して考えることができます。
流動性を測る3つの指標
1. スプレッド(気配値の差)
買いの最良気配値(best bid)と売りの最良気配値(best ask)の差が「スプレッド」です。スプレッドが狭いほど、今すぐ売買しても不利な価格にならずに済むため、流動性が高いと判断できます。スプレッドと板の読み方の基本は板情報(オーダーブック)の記事で詳しく解説しています。
2. デプス(板の厚み)
ある価格帯にどれだけの注文量が積まれているかが「デプス(厚み)」です。厚い板は、ある程度の注文量を飲み込んでも価格が動きにくいことを意味します。デプスが薄い状態で大きな注文を出すと、複数の価格帯をまたいで約定することになり、想定より不利な価格になりやすくなります。
3. 出来高(取引量)
一定期間にどれだけの取引が成立したかを示す「出来高」も、流動性の目安になります。出来高が多い銘柄・時間帯ほど、新しい注文が入ってもすぐに相手が見つかりやすく、板も厚く保たれやすい傾向があります。
スプレッドとデプスは「今この瞬間」の流動性を、出来高は「一定期間を通じた」流動性を表していると考えると整理しやすいです。
流動性が低いと何が起きるか
流動性が低い状態で取引すると、主に次のような問題が起きます。
- スリッページの拡大: 成行注文が薄い板を複数価格帯にわたって消費するため、想定より不利な価格で約定しやすくなります。仕組みの詳細はスリッページの記事で解説しています
- 指値が約定しない: 板が薄い銘柄では、指値を置いても対当する注文が現れず、いつまでも約定しないことがあります
- ポジションを閉じにくい: 保有しているポジションを決済したいときに、十分な流動性がないと想定した価格・タイミングで解消できない可能性があります
これらはいずれも、戦略のロジックそのものではなく「市場の状態」に起因する問題です。どれだけ優れたエントリー条件を組んでも、流動性を考慮しない設計では実運用で成績が崩れることがあります。
なぜボット運用で流動性チェックが重要なのか
裁量トレードであれば、人間が画面を見て「今日は板が薄いから注文を小さくしよう」と感覚的に判断できます。しかしボットは機械的に注文を出すため、流動性の良し悪しをロジックに組み込んでおかなければ、薄い市場でも平常時と同じサイズの注文を出し続けてしまいます。
特に注意したいのが、以下のような場面です。
- 複数銘柄を監視するボット: 銘柄ごとに流動性は大きく異なるため、同じ注文サイズのロジックをすべての銘柄に適用すると、流動性の低い銘柄だけ想定外のコストが発生します
- 大きめのポジションを取る戦略: ポジションサイズが大きいほど、板に対する注文の相対的な大きさも増すため、流動性チェックの重要性が上がります。サイズの決め方自体はポジションサイズの計算式の記事を参照してください
- 複数取引所を使う構成: 同じ銘柄でも取引所によって流動性は異なります。取引所をまたいでボットを運用する場合の設計上の注意点は複数取引所対応設計の記事にまとめています
ccxtで簡易的な流動性チェックを行う
板の厚みと出来高を組み合わせることで、簡易的な「流動性スコア」を計算できます。以下は一例です。
import ccxt
exchange = ccxt.mexc()
def check_liquidity(symbol: str, depth_levels: int = 5) -> dict:
"""スプレッド・板の厚み・24時間出来高から簡易的な流動性情報を取得する"""
book = exchange.fetch_order_book(symbol, limit=depth_levels)
ticker = exchange.fetch_ticker(symbol)
best_bid = book['bids'][0][0]
best_ask = book['asks'][0][0]
spread_pct = (best_ask - best_bid) / best_bid * 100
bid_depth = sum(amount for _, amount in book['bids'][:depth_levels])
ask_depth = sum(amount for _, amount in book['asks'][:depth_levels])
return {
'spread_pct': spread_pct,
'bid_depth': bid_depth,
'ask_depth': ask_depth,
'quote_volume_24h': ticker.get('quoteVolume'),
}
info = check_liquidity('BTC/USDT')
print(info)
この関数が返す spread_pct(スプレッドの割合)が大きすぎる、または bid_depth / ask_depth が注文サイズに対して小さすぎる場合は発注を見送る、といった判断ロジックに組み込むことができます。板情報の取得方法そのものについては板情報の記事でも実例を紹介しています。
流動性を見るときの注意点
流動性は固定の値ではなく、時間帯や相場状況によって常に変動します。主要市場の取引時間外や、大きなニュースの直後は普段より板が薄くなりやすい時間帯です。また、同じ銘柄であっても取引所ごとに流動性は異なるため、「どの取引所を使うか」自体が流動性対策の一部になります。取引所選びの観点は取引所の選び方の記事でも取り上げています。
※流動性の指標となる出来高やスプレッドの傾向は、銘柄・取引所・相場状況によって大きく変動します。この記事の内容は一般的な考え方の整理であり、実際の数値は必ず利用する取引所の公開情報で確認してください。
まとめ
- 流動性とは「価格をほとんど動かさずに取引を成立させられる度合い」のこと
- スプレッド・デプス(板の厚み)・出来高の3つの指標に分解して考えると扱いやすい
- 流動性が低いとスリッページの拡大・指値の未約定・ポジション解消の困難といった問題が起きる
- ボットは感覚的な調整ができないため、流動性チェックをロジックに明示的に組み込む必要がある
- 流動性は時間帯や取引所によって変動するため、固定の閾値ではなく継続的な監視が望ましい
流動性は派手な話題ではありませんが、どの戦略にも共通して影響する「土台」のような要素です。板情報やスリッページの記事と合わせて、自分のボットが扱う銘柄・取引所の流動性がどの程度かを一度確認してみることをお勧めします。