← 記事一覧に戻る
July 18, 2026
読了時間: 5分

クオンツのためのUniswap v3: 第一原理から理解するConcentrated LiquidityとTick数学

クオンツのためのUniswap v3: 第一原理から理解するConcentrated LiquidityとTick数学
#Uniswap
#DeFi
#AMM
#集中リクイディティ
#マーケットメイキング
#LVR
#クオンツ
#Ethereum

Uniswap v3のLPポジションは、実は指値注文板のレンジオーダーである。2つの価格の間にリクイディティをデポジットするということは、レンジ内で価格が下がる過程で資産を買い、上がる過程で売ることにコミットするということだ——これはCLOB上の指値注文グリッドがやっていることと全く同じである。しかしコントラクト自体は価格も数量も注文板も保存していない。保存しているのはたった3つの数値だけだ: Q64.96固定小数点形式の価格の平方根、整数のティックインデックス、そして集約リクイディティ値LLである。v3ポジションをマーケットメイキングモデルにおけるクオート——在庫、約定価格、逆選択——と同じように考えたいなら、これらのオンチェーン・プリミティブとそれが表現するトレーディング概念との間を翻訳できなければならない。本稿はUniswap v3のホワイトペーパー(Adams, Zinsmeister, Salem, Keefer, Robinson, 2021)とコアコントラクトに沿って、その翻訳を第一原理から構築し、今やあらゆる真剣なLP議論の出発点となっているLoss-Versus-Rebalancing(LVR)で締めくくる。

x·y = kから仮想リザーブへ

Uniswap v2はconstant productマーケットメーカーである。プールはtoken0のリザーブxxとtoken1のリザーブyyを保持し、すべてのスワップにおいて

xy=kx \cdot y = k

を強制する。token1建てのtoken0の限界価格はP=y/xP = y/xであり、リクイディティは価格軸(0,)(0, \infty)全体に一様に分散される。これは極端に資本効率が悪い。0.999から1.001の間で取引されるステーブルコインペアは、資本の99%以上を決して約定しない価格帯に配置していることになる。

v3の着想は、各LPが自分の資本をレンジ[pa,pb][p_a, p_b]に制限できるようにすることだ。レンジ内部では、そのポジションはv2プールとまったく同じように振る舞わなければならない——同じボンディングカーブ、同じ限界価格付け——ただしそのレンジをカバーするのに必要な分のリザーブだけを使う。ホワイトペーパーはこれを仮想リザーブとして定式化している。ポジションはあたかも曲線xvyv=L2x_v \cdot y_v = L^2上にあるv2型のリザーブ(xv,yv)(x_v, y_v)を保持しているかのように振る舞う一方、実際のリザーブは仮想リザーブからレンジ境界でポジションが保持するであろう分を差し引いたものになる。

(x+Lpb)(y+Lpa)=L2\left(x + \frac{L}{\sqrt{p_b}}\right)\left(y + L\sqrt{p_a}\right) = L^2

これはホワイトペーパーの式2.2であり、v3において最も重要な単一の式だ。この変換された曲線は軸に接している。P=pbP = p_bでは実際のxxリザーブがゼロになり(ポジションは100% token1)、P=paP = p_aでは実際のyyリザーブがゼロになる(100% token0)。レンジの外側ではポジションは不活性になる——一方のトークンだけの固定された袋になり、何も稼がない。

Uniswap v2のconstant product曲線とv3の変換曲線、仮想リザーブと実リザーブを示す図

リクイディティと呼ばれるパラメータLLは、kkに代わる不変量である。L=kL = \sqrt{k}と定義され、ホワイトペーパーが明示している通り明快な解釈を持つ——リクイディティとは「価格の平方根の単位あたりの仮想リザーブ」である。レンジ内の任意の価格PPにおいて、仮想リザーブは

xv=LP,yv=LPx_v = \frac{L}{\sqrt{P}}, \qquad y_v = L\sqrt{P}

なぜ状態変数は√Pなのか

v3のコアは価格を直接追跡しない。P\sqrt{P}sqrtPriceX96として追跡する。これは符号なしQ64.96固定小数点数である。

sqrtPriceX96=P296\texttt{sqrtPriceX96} = \sqrt{P} \cdot 2^{96}

ここでPP生の価格、つまりtoken0の基本単位あたりのtoken1の基本単位(小数点桁数を含む、詳細は後述)である。平方根を使う理由はガス代の節約のためではなく、代数的な必然性による。仮想リザーブの恒等式を微分すると、SqrtPriceMathライブラリに実装されている2つの基本的なスワップ方程式が得られる。

Δy=LΔP,Δx=LΔ ⁣(1P)\Delta y = L \cdot \Delta\sqrt{P}, \qquad \Delta x = L \cdot \Delta\!\left(\frac{1}{\sqrt{P}}\right)

どちらのトークン差分も、価格の平方根(またはその逆数)に対して線形であり、LLが比例定数となる。したがって1つのティック内でのスワップには曲線の反転もニュートン法の反復も不要で、P\sqrt{P}を動かすための1回の乗算と、数量を計算するための2回の乗算だけで済む。スワップが十分大きく価格が初期化済みティックを越える場合、プールはそのティックを通過し、そこで参照されている純リクイディティ(liquidityNet)を加算または減算し、新しい集約LLで処理を続ける。全体として見ると、プールは区分的constant product AMMである。初期化済みティックの間ではLLは一定であり、ティックでジャンプする。

マーケットメーカーにとって、これが正しいメンタルモデルだ。プールの集約L(P)L(P)プロファイルは、DEXにおける板の厚みの等価物である。CLOBの板の厚みが価格レベルごとの数量で示されるのに対し、AMMの厚みはティックごとのLLであり、その変換はまさに上記のΔy=LΔP\Delta y = L\Delta\sqrt{P}の恒等式そのものだ。

ティック: 対数間隔の価格グリッド

レンジは任意の価格で開始・終了することはできず、ティックにスナップしなければならない。ティックiiは次の価格に対応する。

p(i)=1.0001ip(i)=1.0001i/2p(i) = 1.0001^i \quad\Longrightarrow\quad \sqrt{p(i)} = 1.0001^{i/2}

つまり各ティックは隣接するティックから絶対値ではなく相対値で1ベーシスポイント離れている。この対数間隔は意図的なものだ。固定加算グリッドでは、$0.0001で取引されるトークンに対しては粗すぎ、$100,000で取引されるトークンに対しては細かすぎることになるが、幾何グリッドならどの価格スケールでも均一な1bpの分解能が得られる。TickMathライブラリはgetSqrtRatioAtTickgetTickAtSqrtRatioという双方向の変換関数を持ち、指数関数を呼び出す代わりに事前計算された定数に対するビット操作を使う。ティックインデックスはMIN_TICK = -887272MAX_TICK = 887272で境界づけられており、これは価格レンジ[2128,2128][2^{-128}, 2^{128}]をカバーする。uint256演算で存在しうるどんなトークンペアにも十分な広さである。

すべてのティックが使えるわけではない。各手数料ティアはティックスペーシングを課しており、ポジションはそれで割り切れるティックしか使用できない。

手数料ティア ティックスペーシング 最小レンジ幅 典型的な用途
0.01% 1 約1bp ステーブル/ステーブル
0.05% 10 約10bp ステーブルペア、ETH/ステーブル
0.30% 60 約60bp メジャー通貨ペア
1.00% 200 約2% エキゾチック/高ボラティリティ

0.05%/0.30%/1%のティアは2021年5月のローンチ時に導入され、0.01%ティアは2021年11月のガバナンス投票で追加された。高手数料プールでスペーシングを粗くすることで、通過しうるティック数を抑え、スワップのガスコストを一定の範囲に収めている。

誰もが一度はハマる小数点桁数の罠がある。オンチェーンの生の価格は基本単位におけるtoken0あたりのtoken1である。メインネットのUSDC/WETHプールでは、token0はUSDC(6桁)、token1はWETH(18桁)なので、人間にとっての価格1ETHあたり$3,000は、生の価格でいうと1 USDC単位あたり1012/30003.333×10810^{12}/3000 \approx 3.333 \times 10^{8} WETH-weiに相当し、これは以下のティックに位置する。

i=log1.0001 ⁣(3.333×108)=196,256i = \left\lfloor \log_{1.0001}\!\left(3.333\times10^{8}\right) \right\rfloor = 196{,}256

その時のsqrtPriceX961.4465×1033\texttt{sqrtPriceX96} \approx 1.4465 \times 10^{33}である。もしあなたのモニタリングダッシュボードがUSDC/WETHで196k付近のティックを表示していたら、その理由がこれで分かるはずだ。そして人間にとっての価格は(sqrtPriceX96/296)210dec0dec1\left(\texttt{sqrtPriceX96}/2^{96}\right)^2 \cdot 10^{\,\text{dec}_0 - \text{dec}_1}を必要に応じて逆数化したものになる。

(L, 価格レンジ)からトークン数量を求める: 正確な公式

この節の核心的な成果はこれだ——レンジ[pa,pb][p_a, p_b]上にリクイディティLLを持つポジションが、現在価格PPにおいてどれだけのトークンを保有しているか。スワップ方程式をレンジ全体にわたって積分すると、3つのケースが得られる。

価格がレンジ以下(PpaP \le p_a)——ポジションは100% token0:

x=L(1pa1pb),y=0x = L\left(\frac{1}{\sqrt{p_a}} - \frac{1}{\sqrt{p_b}}\right), \qquad y = 0

価格がレンジ以上(PpbP \ge p_b)——ポジションは100% token1:

x=0,y=L(pbpa)x = 0, \qquad y = L\left(\sqrt{p_b} - \sqrt{p_a}\right)

価格がレンジ内(pa<P<pbp_a < P < p_b):

x=L(1P1pb),y=L(Ppa)x = L\left(\frac{1}{\sqrt{P}} - \frac{1}{\sqrt{p_b}}\right), \qquad y = L\left(\sqrt{P} - \sqrt{p_a}\right)

これらはまさにSqrtPriceMath.getAmount0DeltagetAmount1Deltaが計算している内容だ(方向づけられた丸め処理付き——コントラクトは常にユーザーに不利な方向へ丸める。これはバックテスターでこの計算を再現する際、wei単位の食い違いに気づいて悩む場合に重要な詳細である)。

from math import sqrt

def position_amounts(L: float, pa: float, pb: float, P: float):
    """Token amounts held by a v3 position (float model; core uses Q96 ints)."""
    sa, sb, sp = sqrt(pa), sqrt(pb), sqrt(P)
    if P <= pa:
        return L * (1/sa - 1/sb), 0.0
    if P >= pb:
        return 0.0, L * (sb - sa)
    return L * (1/sp - 1/sb), L * (sp - sa)

数値例: ETH/USDC、レンジ[2500, 3500]

ETHがP=3000P = 3000 USDCで取引されているとして、レンジ[2500,3500][2500, 3500]1 ETHをデポジットしたいとする。平方根は2500=50\sqrt{2500} = 503000=54.7723\sqrt{3000} = 54.77233500=59.1608\sqrt{3500} = 59.1608である。

ETHの側からLLが決まる。

L=xPpbpbP=1×54.7723×59.160859.160854.7723=738.37L = \frac{x \cdot \sqrt{P}\,\sqrt{p_b}}{\sqrt{p_b} - \sqrt{P}} = \frac{1 \times 54.7723 \times 59.1608}{59.1608 - 54.7723} = 738.37

USDCの側はそこから導かれる。

y=L(Ppa)=738.37×(54.772350)=3,523.69 USDCy = L\left(\sqrt{P} - \sqrt{p_a}\right) = 738.37 \times (54.7723 - 50) = 3{,}523.69 \text{ USDC}

つまりこのポジションをミントするには1 ETH + 3,523.69 USDCが必要で、合計価値は$6,523.69になる。注目すべきは、この2つの側は50/50ではないということだ——その分割比率はPPがレンジ内のどこに位置するかに依存する(非対称なレンジこそが方向性のある見方を表現する方法であり、あるいは片方のトークンだけの純粋な「レンジオーダー」を配置する方法でもある)。

では価格を境界まで動かしてみよう。

  • P=2500P = 2500のとき、ポジションは完全にETHに転換している。x=738.37×(1/501/59.1608)=2.2867x = 738.37 \times (1/50 - 1/59.1608) = 2.2867 ETH、価値は$5,716.68。あなたは下落過程で1.2867 ETHを、リクイディティ加重平均価格3523.69 / 1.2867 \approx \2,739$で購入したことになる。
  • P=3500P = 3500のとき、ポジションは完全にUSDCに転換している。y=738.37×(59.160850)=6,764.06y = 738.37 \times (59.1608 - 50) = 6,764.06 USDC。あなたは上昇過程でETHを平均$3,240で売却したことになる。

これがレンジオーダーとしての解釈を具体化したものだ——このポジションは、3000から2500に向かう買い注文のはしごと、3000から3500に向かう売り注文のはしごをである、ティックあたりのサイズはLLに比例する。そして、支払われる対価こそが集中度なのだ。同じ$6,523.69の資本でフルレンジのv2型ポジションを作った場合、Lv2=V/(2P)=59.55L_{v2} = V/(2\sqrt{P}) = 59.55となる——集中ポジションはティックあたり12.4倍の厚みを提示し、(レンジ内にある間は)資本1ドルあたり12.4倍のレートで手数料を稼ぐ。

手数料の会計: feeGrowthGlobalとfeeGrowthInside

v3の手数料はポジションに複利で組み込まれない(これはv2からの意図的な決別で、v2では手数料がk\sqrt{k}に再投資されていた)。手数料はトークンごとに並行して蓄積され、その会計処理はO(1)の帳簿管理の小さな傑作であり、すべてのLP分析パイプラインがこれを再実装しているので理解する価値がある。

プールは2つのグローバルアキュムレータ、feeGrowthGlobal0X128feeGrowthGlobal1X128を維持している。これらはリクイディティ単位あたりの累積手数料を、プール発足以来Q128.128固定小数点で記録したものだ。各スワップにおいて、手数料額(入力トークンから徴収される)は現在レンジ内にあるLLで割られ、アキュムレータに加算される。この仕組みがv3経済学の鉄則の背後にある——手数料は、スワップが発生した瞬間にレンジ内にあったリクイディティにのみ発生する。レンジ外のポジションは単に不活性な在庫であるだけでなく、非アクティブな間はまさにゼロを稼ぐ。

グローバルな成長の正しいスライスを有限のレンジに帰属させるため、各初期化済みティックiifeeGrowthOutside0/1X128を保持する。これは現在価格から見てティックの反対側で発生した手数料の成長分である(この値の解釈はティックが通過されるたびに反転し、これがO(1)の仕組みを可能にしている)。そこで、レンジ[i,iu][i_\ell, i_u]上にあり現在ティックがici_cであるポジションについて、

fbelow(i)={fo(i)icifgfo(i)ic<ifabove(iu)={fo(iu)ic<iufgfo(iu)iciuf_{\text{below}}(i_\ell) = \begin{cases} f_o(i_\ell) & i_c \ge i_\ell \\ f_g - f_o(i_\ell) & i_c < i_\ell \end{cases} \qquad f_{\text{above}}(i_u) = \begin{cases} f_o(i_u) & i_c < i_u \\ f_g - f_o(i_u) & i_c \ge i_u \end{cases} finside=fgfbelow(i)fabove(iu)f_{\text{inside}} = f_g - f_{\text{below}}(i_\ell) - f_{\text{above}}(i_u)

各ポジションはスナップショットfeeGrowthInsideLastを保持しており、未回収の手数料は単純に

fees owed=Lfinsidenowfinsidelast2128\text{fees owed} = L \cdot \frac{f_{\text{inside}}^{\text{now}} - f_{\text{inside}}^{\text{last}}}{2^{128}}

であり、ポジションが操作されるたびに遅延更新される。実務上の帰結は2つある。第一に、feeGrowthInsideの差分こそが、ポジションの手数料収入を測る唯一の正直な方法である——プールレベルの取引量をサンプリングしてTVLに占める自分のシェアで按分するやり方は、価格がレンジ境界付近をうろつくたびに誤差を生む。第二に、手数料は複利化されずtokensOwedとして滞留するため、実現LPリターンにはv2にはなかったキャッシュドラッグ項が生じる。自動複利化ボールトが存在するのはまさにこれを裁定するためだ(ただし自身の手数料は差し引かれる)。

feeGrowthGlobal、レンジ境界ティックにおけるfeeGrowthOutside、feeGrowthInsideの減算を示す図

ペイオフ: 対価をもらいながら保有するショートストラドル(かもしれない)

レンジ内において、価格の関数としてのポジション価値は

V(P)=x(P)P+y(P)=L(2PpaPpb)V(P) = x(P) \cdot P + y(P) = L\left(2\sqrt{P} - \sqrt{p_a} - \frac{P}{\sqrt{p_b}}\right)

PPに対して凹関数である——2LP2L\sqrt{P}の項がすべてを物語っている。レンジの外側では線形になる。下側の傾きはx(pa)x(p_a)(固定量のETHをロングしている状態)、上側の傾きは0(USDCでフラットな状態)。先ほどの数値例をレンジ全体にわたって計算し、デポジットしたトークンを単純に保有し続けた場合(HODL)と比較してみよう。

PP (USDC/ETH) LP価値 HODL価値 乖離
2500 5,716.68 6,023.69 −307.02
2750 6,200.4 6,273.69 −73.3
3000 6,523.69 6,523.69 0
3250 6,706.3 6,773.69 −67.4
3500 6,764.06 7,023.69 −259.63

LPは両方向ともHODLに劣後し、ミント時の価格でのみ一致する。上値は頭打ちで下値の参加は増幅される、ストライクにおいて相対価値が最大になる——これはショートストラドルのペイオフである(より正確には、線形の裾野をHODLベンチマークに対してネットした後は、[pa,pb][p_a, p_b]にまたがるストライクを持つオプションのストリップのショートポジションだ)。手数料収入はそのプレミアムに相当する。レンジを狭めるということは、よりタイトなストライクを選ぶということだ——レンジ内にいる間は単位時間あたりのプレミアムが増える一方、価格が動いたときの乖離はより速く、より深くなる。すべてのv3のLPは、それを選んだかどうかにかかわらずショートボラティリティのトレーダーである——これはオーダーブック型マーケットメーカーのためにAvellaneda–Stoikovが定式化した在庫リスクのトレードオフの、オンチェーン版の兄弟にあたる。レンジの幅がクオートするスプレッドの役割を果たしている。

価格レンジ全体にわたるLPポジション価値とHODLの比較、凹型のショートストラドル的なペイオフを示す図

この表におけるギャップの伝統的な呼び名はインパーマネント(ダイバージェンス)ロスだが、IL対HODLは欠陥のあるベンチマークである。それはリクイディティプロバイダーとして被った損失と、いずれにせよ抱えていたであろう市場リスクを混同している。より鋭い分解は、Milionis、Moallemi、Roughgarden、Zhang(2022)による"Automated Market Making and Loss-Versus-Rebalancing"(arXiv:2208.06046)からもたらされる。LPをHODLではなく、常にプールと同じトークン数量を保有しながら、しかしアービトラージャーではなく摩擦のない外部市場価格で取引するリバランシングポートフォリオと比較するのだ。その差分がLVR("lever"と発音)であり、LP損益のうち純粋な逆選択の成分——各価格変動の後にAMMの古いクオートを狩るアービトラージャーに支払われる部分——である。ボラティリティσ\sigmaの幾何ブラウン運動の価格の下で、LVRは瞬間的なレートで蓄積する。

(σ,P)=σ2P22x(P)\ell(\sigma, P) = \frac{\sigma^2 P^2}{2}\,|x'(P)|

著者たちの言葉を借りれば、これは「AMMのためのブラック・ショールズ公式」であり、x(P)|x'(P)|は現在価格におけるプールの限界的な厚みである。フルレンジのconstant productプールの場合、これは単位時間あたりプール価値の有名なσ28\frac{\sigma^2}{8}に帰着する。日次ボラティリティ5%であれば、手数料の有無にかかわらず、プールの約3.1bpが毎日アービトラージャーへと流出していく。集中度はx(P)|x'(P)|を増幅させる——先ほどの12.4倍の厚みの例は、レンジ内にいる間は約12.4倍のLVRマシンでもある。手数料がこの流出を上回らなければポジションは期待値プラスにならない。そしてLVRは("IL"とは異なり)ヘッジ可能で予測可能なランニングコストであり、これこそがLVRを正しい会計単位たらしめている。手数料APR対LVR対実現ボラティリティ、いつLPがデルタヘッジされたショートオプションを上回るかという完全な収益性の計算は、近日公開予定のインパーマネントロスとLVRの深掘り記事のテーマであり、ヘッジのメカニクスについてはv3 LP戦略とヘッジで個別に扱う。

もう一つ、一段深いところにあるコストがある。AMMのクオートは誰かが取引したときにしか更新されないため、すべてのLPポジションは、その取引の周囲でメンプール上で繰り広げられるゲームにもさらされている——あなたの手数料を支払うスワッパーに対するサンドイッチ攻撃、そしてブロック単位であなたのLVRを実現させるアービトラージ・バンドルだ。そのエコシステムについてはMEVとサンドイッチ攻撃の記事でマッピングしている。

オンチェーンでプール状態を読む

これまで述べてきたことはすべて、プールコントラクトに対する3つの安価な呼び出しから観測可能だ。

**slot0()sqrtPriceX96、現在のtick、オラクル観測インデックス、プロトコル手数料/ロックフラグといったホットな状態を1つのストレージスロットにまとめている。liquidity()は現在レンジ内にある集約LLを返す——これはTVLではないことに注意。これは現在のティックでアクティブな厚みパラメータであり、価格が初期化済みティックを越えると不連続にジャンプする。ticks(int24)**はティックごとの状態を返す。liquidityGross(そのティックを参照している総LL)、liquidityNet(左から右へ通過するときに加算される符号付きLL)、そしてfeeGrowthOutsideアキュムレータだ。初期化済みティックにわたってliquidityNetを反復すること(tickBitmapは170万個すべてをスキャンせずにどのティックが存在するかを教えてくれる)で、厚みプロファイルL(i)L(i)の全体——つまりあなたの注文板のスナップショット——を再構築できる。

from web3 import Web3

w3 = Web3(Web3.HTTPProvider(RPC_URL))
pool = w3.eth.contract(address=POOL, abi=POOL_ABI)  # USDC/WETH 0.05%

sqrt_price_x96, tick, *_ = pool.functions.slot0().call()
L = pool.functions.liquidity().call()

raw_price = (sqrt_price_x96 / 2**96) ** 2          # token1/token0, base units
eth_usdc  = 1 / (raw_price * 10**(18 - 6))          # human USDC per ETH
depth_1tick = L * (1.0001**0.5 - 1) * (sqrt_price_x96 / 2**96)

ポジション自体は2つの場所に存在する。コアプールは(owner, tickLower, tickUpper)でポジションをキー管理する——オーナー・レンジの組ごとに1つの集約スロットだ。リテールとほとんどのファンドは代わりに周辺コントラクトのNonfungiblePositionManager(メインネット: 0xC36442b4a4522E871399CD717aBDD847Ab11FE88)を通してミントする。これは各ポジションをERC-721 NFTでラップし、positions(tokenId)が完全なタプル——トークン、手数料ティア、レンジ、LLfeeGrowthInsideLasttokensOwed——を返す。ポートフォリオモニタリングにおいては、この1回の呼び出しに加えてプールの現在のfeeGrowthInside(前節と同様にticks()から再計算)があれば、インデクサーに触れることなく時価評価と未収手数料を得られる。もっとも、履歴的なものが必要な場合はスワップイベントのリプレイかサブグラフが必要になる。なぜなら手数料の成長は経路依存であり、チェーンは現在のアキュムレータしか保存していないからだ。

資本を投入する前に内面化しておくべき運用上の詳細が2つある。第一に、ティックスペーシングはあなたの戦略空間を量子化する。0.05%ティアでは10bp幅のレンジを配置でき、真の指値注文に近いものを運用できる(スポットのすぐ上/下でミントし、手数料を回収し、価格が通過した後にバーンする——ホワイトペーパーはこの「レンジオーダー」のユースケースを明示的に想定している)一方、1%ティアでは最小レンジが約2%幅になり、LOBの類推は粗くなる。第二に、レンジオーダーはキャンセル優先権を持たない指値注文である。価格があなたのレンジを越えて、また戻ってくると、あなたは在庫を往復させ(手数料は保持したまま)エッジを失うことになる。パッシブなレンジは撤回できないクオートなのであり、まさにそれゆえリバランシング頻度の問題と、それに答えるためのLVRのレンズが、これほど重要になるのだ。

ここから何が見えてくるか

v3のスタックを圧縮すると: 価格は1.0001の幾何グリッド上のティックであり、厚みはLLであって平方根の差以外の何物でもない計算でトークン数量に変換でき、手数料はレンジ境界間で差分を取る単位LLあたりのアキュムレータであり、そして結果として得られるポジションは、名前と公式とarXiv番号を持つランニングコストを抱えたショートボラティリティのレンジオーダーである。これらのプリミティブが手元にあれば、興味深い問いは定量的なものになる——どれくらいの幅にすべきか、どれくらいの頻度でリバランスすべきか、そして与えられたプールとレジームにおいて手数料がLVRを上回るかどうか。これこそが本シリーズが次に向かう先である。

参考文献

  • Adams, H., Zinsmeister, N., Salem, M., Keefer, R., Robinson, D. (2021). Uniswap v3 Core (whitepaper).
  • Uniswap v3 core libraries: TickMath.sol, SqrtPriceMath.sol, Position.sol, Tick.sol.
  • Milionis, J., Moallemi, C., Roughgarden, T., Zhang, A. L. (2022). Automated Market Making and Loss-Versus-Rebalancing. arXiv:2208.06046.
blog.disclaimer

Authors

Eugen Soloviov
Eugen Soloviov

Trading-systems engineer

Trading-systems engineer building bots since 2017: cross-exchange arbitrage (connected up to 30 venues), cointegration-based pairs arbitrage across spot and futures, scalping, news and sentiment-driven strategies, trend algorithms, and portfolio management and balancing algorithms. Also builds sub-millisecond order execution, big-data warehouses, backtesting engines, AI agents, and trading interfaces (incl. open-source profitmaker.cc). Stack: JS/TS, Python, Rust/Zig/Go, DevOps, backend, frontend, architecture.

Newsletter

市場の先を行く

ニュースレターを購読して、独占的なAI取引の洞察、市場分析、プラットフォームの更新情報を受け取りましょう。

プライバシーを尊重します。いつでも配信停止可能です。