pythonで仮想通貨の三点アービトラージ

概要

一般にアービトラージ戦略といえば、取引所Aと取引所Bで発生する価格差があるとき、高いほうで売り注文、安いほうで買い注文を約定させることで、その差額を利益として確定させる投資手法です。

アービトラージには他にTriangular arbitrage/三点アービトラージ・取引所内アービトラージと呼ばれる手法があって、こちらは同じ取引所において、三つの通貨を順番に交換することによって利益を生み出すアルゴリズムです。

ここからは三点アービトラージについて、具体例を使って説明します。

具体例

簡単のため、取引所Binance内部での、Bitcoin, Ethereum, Ripple (BTC, ETH, XRP)の相場について考えてみましょう。 この三つの通貨を相互に取引できる市場は、

ETH / BTC板
XRP / ETH板
XRP / BTC板
の三つです。 ここで、

ETH / BTC板 で ETH を BTC で購入
XRP / ETH板 で XRP を ETH で購入
XRP / BTC板 で XRP を売却して BTC にする
という一連の取引を行うことで、BTC→ETH→XRP→BTC、という流れで通貨が交換され、もとのBTCに帰ってきます。(逆ルートである BTC→XRP→ETH→BTC も同様です)。

たとえば板を見て、

0.05BTC で 1ETH 買える
0.001ETH で 1XRP 買える
1XRP が 0.000051BTC で売れる
という状況があったとき、0.05BTC→1ETH→1000XRP→0.0505BTC と交換することで0.0005BTC増える、というのが具体的な三点アービトラージの流れです。

要するに

BTCで(ETHを介して)XRPを購入
する価格より

BTCでXRPを売却
する価格のほうが高い、という状況を裁定機会として捉え、取引を行うことになります。

この場合は売値0.0000505/買値(0.05 × 0.001) = 1.01 なので、利益は1%、またBinanceの場合は手数料が0.05%のため、0.05 × 3(取引回数)=0.15%を引いた、0.85%が正味の利益ということになります。
実際の市場は1%が拾えるほど大きく歪むことは少なく、小数点以下の期待値の取引を繰り返して利益を生み出していくことになります。

また、BTC・ETH・XRPのようなメジャーな通貨間では板が厚く、歪みが手数料のレンジを超えることはほとんどありません。たとえばBinanceだと、選べる基軸通貨(BTC, BNB, ETH, USDT)の中から二つ選ぶほかは、板が薄めの適当な仮想通貨を選んでくることをおすすめします。

三点アービトラージの注意点

三点アービトラージに重要になってくるのが、取引手数料とサーバーの反応にかかる時間です。板が薄いために比較的大きな歪みが生じやすい一方で、一回の手続きでの取引回数が通常のアービトラージの3倍のため、通常のアービトラージ以上に手数料の安さが重要になってきます。

また、取引所の板は刻一刻と変化するため、スリッページを避けるためなるべく「直前の」データを得たうえで「瞬時に」注文を行う必要があります。そのため、レスポンスの速い取引所を選ぶことも重要です。

裁定機会の検出

3points_arbを使用して、BinanceでBTC・BNB・LSKの組み合わせを対象に三点アービトラージの機会を検出してみました。
0.15%の手数料に0.05%を上乗せした、利益率0.20%を超える機会を検出してみます。

結果、約12時間の間にあった23回の裁定機会のうち、10回は即座に解消されていたものの、13回については歪みがなくなるまで0.2〜4.0秒程度の猶予期間があることが検出されました。さらに、この13回のうち9回は1.0秒以上の猶予期間を持っていました。 (板の取得中に既に取得した板が変動することを考えると、10回の中には誤検出も含まれていると考えられます)

取引三つ(BTC→BNB→LSK→BTC or BTC→LSK→BNB→BTC)を行うのに0.2秒かかると考えると、利益率が閾値を上回った0.2秒後に新たに取得した板でも利益率が大きいまま(猶予期間内にある)なら、取引が可能だった、と判断できることになります。

今回のコードでは自動取引までは実装していませんが、条件をうまく設定することでプラスを出すことは十分可能かと思います。

shin3をフォローする
System trading topics
タイトルとURLをコピーしました