この記事から分かること
- プライスインパクトの概要&対策
- スリッページの概要&対策
※本記事へのコメント・質問等は私のX(旧ツイッター)にDMで送っていただいても大丈夫です。丁寧に回答させていただきます。
この記事は以下の文献を参照し作成しています。
プライスインパクト(Price Impact)とは

プライスインパクトの概要
分散型取引所におけるプライスインパクト(Price Impact)とは、あなた自身のスワップによるスワップ価格の変化を表し、見積もりに表示されるパーセンテージ分だけ不利な価格で取引をする必要があります。
分散型取引所の取引対象は流動性プールとなっており、流動性プールの規模に対して大きすぎるスワップ取引を行うと、発生するプライスインパクトの割合が高くなります。
後半で詳しく解説していますが、これに対してスリッページはあなた以外の取引による価格変化を指し、スワップ見積もりでは予測されずに発生します。

プライスインパクトが大きすぎるとスワップ画面に「Price impact too high」や「価格への非常に大きな影響」といった警告が表示され、分散型取引所側スワップを行えないようにする場合もあります。

さとういつでも自由に好きなだけ仮想通貨を交換できる場所ではない訳です。
プライスインパクトが発生する仕組み
前提として分散型取引所で表示されている仮想通貨の価格は、各流動性プールの中の仮想通貨枚数の単純な割り算で機械的に価格は決まります。
USDT/BTCの価格は「BTC&USDTの流動性プール」で決まり、ETH/BTCの価格は「BTC&ETHの流動性プール」で計算されます。
※このように仮想通貨の価格が流動性プールにより機械的に定まる仕組みをAMM, Automated Market Makers)と呼びます。


従って、あなたの取引によって流動性プール内の仮想通貨の枚数が変わることで、仮想通貨の価格も変わります。


流動性プール内のそれぞれの仮想通貨の枚数をX,Yとすると、あなたのスワップによってXとYは次の式に従って変化するようにプログラムされています。
\(XY=k\)
※最も一般的なUniswap V2タイプの場合の式。XとYの掛け算であるkで流動性プール内の仮想通貨の枚数の変化の仕方が決まるので、Constant Product AMMと呼ばれることがあります。(直訳:定積AMM)
kの値は流動性プールに提供されている仮想通貨の枚数の掛け算で、運用目的で新しく流動性プールに追加で仮想通貨が提供されたり、削除されたりするまで変わりません。(スワップでは変わらない)
プライスインパクトの例①(流動性が少ない)



具体的な例を挙げてプライスインパクトを計算してみましょう。
分散型取引所に次の流動性プールがありました。
- USDT=40,000枚(USDTの流動性枚数をX)
- BTC=2枚(BTCの流動性枚数をY)
- AMM:XY=k=80,000
現在価格は流動性プールの単純な割り算で決まるので、BTCのUSDT価格は20,000USDT/BTCとなります。
kである80,000の値は変わりません。
あなたはこの流動性プールで、10,000USDTを使ってBTCにスワップしようとしました。



現在BTCは1枚20,000USDTのため、10,000USDTを使うと半分の0.5BTC分を買えるというのが直感だと思いますが少し違います。
スワップによって流動性プール内の仮想通貨の枚数はXY=kに従って、次のように変わります。
- まず変化後のXをAMMの式に入れる:(40,000+10,000)Y=80,000
- Yを計算する:Y=80,000÷50,000=1.6
あなたが10,000USDTを流動性プールに入れてスワップすることでXは50,000になり、それに対応するようにYが定まります。
Y=1.6となり、スワップ前に流動性プールの中にあったBTC2.0枚との差分0.4枚があなた受け取れるBTCです。
現時点の価格だと0.5枚受け取れる計算でしたが、実際に受け取れるのは0.1枚減った0.4枚となっており、この減った0.1枚分が「プライスインパクト」の影響です。
グラフだと次のように描画できます。


このように、スワップによって流動性プールの中の仮想通貨の枚数はXY=kに従って変わり、あなたが受け取れる仮想通貨の枚数は流動性プールの変化の差分になります。
今回はプライスインパクトが発生しやすいように流動性プール中の枚数を少なく設定しましたが、実際には流動性プールの中には膨大な枚数の仮想通貨が提供されているため、大規模なスワップでなければあまり変化しません。
特に今回例に挙げたビットコインとステーブルコインといったスワップで利用されやすい流動性プールでは、提供した側に発生する報酬の総量も多くなるので、自然と多くの流動性が集まります。
プライスインパクトの例②(流動性が多い)



今度はあなたのスワップに対する流動性が十分に大きい流動性プールをイメージしてみましょう。
- USDT=20,000,000枚(USDTの流動性枚数をX)
- BTC=1000枚(BTCの流動性枚数をY)
- AMM:XY=20,000,000,000
ビットコインの価格は同じように1枚20,000USDTになります。(20,000,000÷1000)
kである20,000,000,000値はずっと変わりません。
あなたはこの流動性プールで10,000USDTを使ってビットコインを購入しました。



BTCの価格は1枚20,000USDTのため、プライスインパクト無視で直感で考えると半分の0.5枚分をスワップで受け取れる計算になります。
この時、流動性プール内のそれぞれの仮想通貨の枚数はXY=kに従って次のように変わります。
- 変化後のXを式に入れる:(20.000,000+10,000)Y=20,000,000,000
- Yを計算する:Y=20,000,000,000÷20,010,000=999.5002…
Yの値はほぼ999.5になり、スワップ前に流動性プール内にあったBTC1000枚との差分0.5枚があなたが受け取れるBTCとなり、プライスインパクトがほとんど発生していないことが分かります。
このように、あなたのスワップが流動性プールに対して十分小さいときプライスインパクトは発生しません。
このように、XYを掛けたkの大きさ(流動性プールの大きさ)によって、プール内の仮想通貨のスワップ効率に違いが出ることが分かります。
- XY=kが小さい:Price Impactが起きやすい
- XY=kが大きい:Price Impactが起きにくい
下のグラフを見るとイメージがしやすいです。XY=80000とXY=2000000の比較です。


このようにXY=kの値が大きいとき、Price Impactが起きにくいという結論を数学的に考えてみます。
先程と同じように以下の流動性プールをイメージします
- USDT=20,000,000枚(USDTの流動性枚数をX)
- BTC=1000枚(BTCの流動性枚数をY)
- AMM:XY=20,000,000,000
このとき10000USDTをBTCにスワップしようとしても、下のように変化はほとんどグラフ上では表現されません
10000USDTという取引量が流動性プール全体に対して小さすぎるからです。


拡大すると下のグラフのようにほぼ直線になっており(右に10000動かすと下に0.5動く直線)、0.5BTC分をスワップで受け取れることが分かります。(Price Impactはほぼなし)


このように、流動性プールが十分大きい場合、少量のスワップを行ってもXとYの動きはグラフ上では小さくなることが分かります。
そして、取引量が流動性プールに対して十分に小さい場合、スワップによる流動性プール内の仮想通貨の枚数の変化の仕方は、現在の流動性プールを表す点の接線の傾きと同じになります。
XY=kのグラフの接線の傾きは、以下のようにXY=kを微分することで求められます。
\(XY=k\)
\(Y=k/X\)
\(Y=kX^{-1}\)
\(Y’=-kX^{-2}\)
\(Y’=-k/X^2\)



今回の例では、傾きが-1/20000になります。
傾きの動き方は、現在の流動性プールの価格と同じです。
つまり、流動性プールに対して取引量が小さいとき、ほぼ現在価格通りに取引ができることを意味しています。(プライスインパクトが発生しない)


ちなみに、このAMMの計算過程で「価格」の考え方は実は一切出てきませんでした。
使った考え方は流動性プールの枚数とXY=kだけです。
しかし、XY=kを使うだけで需要が増えると価格が上がって取引しづらくなり、供給が増えると価格が下がって取引しやすくなる「需要と供給の法則」を表せており、AMMの仕組みが優れていることが分かります。
【補足】ステーブルコイン同士のスワップは例外
本記事で紹介したXY=kですが、ステーブルコイン同士のスワップでは例外的なルールを設けている分散型取引所がほとんどです。(USDTとUSDT、USDTとBUSDなど)
ステーブルコイン同士は価値が等しいため、XY=kに従ってプライスインパクトが発生して価格が変化すると実態と乖離してしまうからです。
そこで多くの分散型取引所では特別に「StableSwap AMM」を採用しています。
StableSwap AMMでは著しく流動性プール内の枚数に変化が起きない限り、プライスインパクトほぼゼロで同じ枚数同士でスワップされるAMMです。



下の記事で仕組みと概要を詳しく解説しています。


プライスインパクトを抑える方法
発生するプライスインパクトの割合が高くなる要因は次の2つです。
- 流動性プールの提供量が少ない
- あなたの取引規模が大きい
プライスインパクトを抑える方法は次の3つです。
- 流動性が多い分散型取引所を見つける
- アグリゲーター型の分散型取引所を利用する
- 中央集権型取引所で取引する



まずは流動性が多い他の分散型取引所がないか調べましょう。
「CoinMarketCap」や「CoinGecko」といった仮想通貨市場の情報提供サイトでスワップしたい銘柄を検索し、取り扱いがある分散型取引所を調べることができます。
他にも「Dexscreener」と呼ばれるツールを利用すると全分散型取引所の流動性を一覧で表示し、どこの取引所の流動性が一番多いか確認できます。
また、プライスインパクトは1箇所の分散型取引所でスワップをすることでより大きくなるため、複数の分散型取引所で小分けにしてスワップすることで小さくできます。
この場合「1inch」といった複数の分散型取引所から見積もりを取得し、最もプライスインパクトを含めた損失を小さくできるスワップルートを検索できる「アグリゲーター型」の分散型取引所を利用するのがおすすめです。
複数の流動性を組み合わせたスワップルートを提案し、実行してくれます。
スリッページ(Slippage)とは


スリッページの概要
分散型取引所のスリッページはあなた以外の取引による全ての価格変化を指し、スワップ画面の見積もりでは予測されずに発生します。


前提として、あなたがスワップ見積もり取得し実行してから、実際にブロックチェーンでスワップ取引が完全に処理されるまでには次のような工程を踏む必要があり、多少の時間が掛かります。
- スワップ見積もりを取得
- 見積もりを確認して取引を送信
- 取引の待機場所「メンプール」で一時保管
- バリデーターが取引を取得&順序決め
- 取引をブロックに含めバリデーター全体で投票
- 2段階の投票を得てブロック内の取引を確定
※イーサリアムブロックチェーンの例
例えばスワップ見積もりを取得してから有効期限ギリギリまで確認してから実行した場合、見積もり確認中に他の人の取引が先に処理されやすくなり、実際の取引価格と見積もり価格が乖離しやすくなります。
また、ブロックチェーンの取引処理を行う「バリデーター」はガス代の優先手数料が多い取引を優先して処理したり、MEVを多く獲得できるように取引を順序付けて処理したりする権利があります。
※MEV(Maximal Extractable Value/最大抽出可能価値)とは、ブロックチェーン上の取引を処理・並べ替える際に、バリデータやマイナーが得られる追加利益のこと。ブロック提案者が取引の順序を操作できるため、特定の取引を先に処理したり、他人の取引の直前・直後に自分の取引を挟み込むことで利益を抽出する権利がある。



このように、見積りを取得した時点から価格が変わる要素は多く、これら全ての価格変化をまとめて「スリッページ」と呼びます。
プライスインパクトは見積り時点で表示され予測できるため、スリッページにはプライスインパクトの概念は含まれないものとされる場合が多いです。
スリッページを抑える方法
スリッページは外部要因なので基本的にスリッページ幅を小さくする方法はないですが、スリッページが大きい取引は自動キャンセルさせることができます。
分散型取引所ではスリッページ許容度(Slippage Tolerance)を設定でき、設定したパーセンテージ以上のスリッページが発生するスワップは自動でキャンセルされます。


価格が安定したスワップ(BTC&USDT)は、0.1%~0.5%程度に設定しておけば、想定外に大きいスリッページが発生する取引は弾けます。
マイナーな仮想通貨のスワップでは0.5%以下だと外部要因の価格変化が激しく、スワップが成立しない場合があるため、スワップが失敗するときは1%~5%程度に設定しましょう。



許容し過ぎると不利な価格で取引することになり、許容しなさ過ぎると取引が失敗してガス代が無駄になるので注意しましょう。
この記事は以下のUniswapの公式文献を参考に作成しました。





コメント