Zaif内で完結する3通貨アービトラージは成り立たないと解りました

今日もPython。最終取引価格で考えてニヤニヤしていたら、スプレッドを理解してしょんぼりしました。

取引所間で動かさなくて良いというのが目玉の1つ。Zaif内で回せる組み合わせで計算してみたものの、基本的にマイナスにしかならなそうなことが分かったので記録。

アービトラージとは

裁定取引とも。
参考:裁定取引/アービトラージ│初めてでもわかりやすい用語集│SMBC日興証券

同一の価値を持つ商品の一時的な価格差(歪み)が生じた際に、割高なほうを売り、割安なほうを買い、その後、両者の価格差が縮小した時点でそれぞれの反対売買を行うことで利益を獲得しようとする取引のこと。

同じ価値のものに(1BTC)価格差が生じる歪んだ状態が発生した時に、

安い方を買って、高い方を売ると。

そうすると、所有在庫は相殺してゼロ、利益だけが残ると。

いやーこれ考えた人は天才だと思いましたね。絶対儲かるじゃん!! って思ってました。(←過去形) いや、今でも絶対儲かるとは思ってますが、考える範囲が狭かった話。

3通貨アービトラージとは

市場の歪みから差益を得ようとするのに違いはないのですが、
・対象が3通貨
・同時に2取引ではなく3取引
・取引前後で取引が偏らない

という違いがあります。

円、ビットコイン、NEMで資産を所持していたとして、

1万円分でビットコインを、1万円分のビットコインでNEMを、1万円分のビットコイン分のNEMで円を買います。

そうしてグルっとしたときに、残高の方よりは取引前と変わらず、いびつな市場の差額による利益が得られる、、、というのが理屈です。

いやこれも絶対儲かるって思いましたね。天才だって。ガッポガッポを夢見てプログラミングの勉強をし、まずはデータを取得しどれだけの機会が得られるかを分析しました。

まずは学びたてのPythonでデータ取得

https://platform.twitter.com/widgets.js

APIにデータを要求してCSVに吐き出すことが出来るようになりました。いやまじ感動ですわここまで来れたの。

で差額たくさん、市場歪みまくり、儲けられる!! って思ったんですよ。で、続いて3通貨アービトラージをZaifで取得して、何か20%の粗利出る!?うひょー! とか思ったわけです。おかしいですよね

スプレッドの理解が浅かった

さて前述の利益を算出している根拠した数字は最終取引価格でした。売りでも買いでもどちらでも、リクエストしたタイミングにおいて最後に約定した唯一の価格を引っ張っていました。

で、実際に利益を出すためには売ることと買うことが決まっていて最終取引価格ではなく、[買い注文価格]か[売り注文価格]で取引しなければならないわけです。板情報と呼ばれるやつの、

ここ

この瞬間、市場は拮抗して動いていないんですね。

で、結局この取引したいタイミングですぐに約定させたかったら、最終取引価格ではなくBID/ASKの待ち値をちゃんと見ないといけないと。

Zaif内で完結する3通貨アービトラージがどれくらい儲かるか判定するPythonコード

色々Excelとも試行錯誤しながらググりまくりながら以下のコードを書きました。ZaifのAPIの制限に引っ掛かるのか、5秒の待ちをちょこちょこ入れているのと、エラー回避を入れています。

import requests
import time
from pandas import DataFrame

#URLの共通部を指定
URL = "https://api.zaif.jp/api/1/ticker/"
CC = "btc"

#ビットコイン価格を取得
CC_j = requests.get(URL + CC + "_jpy")
btc_b = CC_j.json()["bid"]
btc_a = CC_j.json()["ask"]
print(btc_b)
print(btc_a)

#アルトコイン値 取得
data = []
head = ["CC", "BID/JPY", "ASK/JPY", "BID/BTC", "ASK/BTC"] # ←これ上手く入らなかった

#各アルトコインのコードを指定
CCs = ['eth', 'bch', 'mona', 'xem', 'bitcrystals', 'zaif', 'xcp', 'pepecash', 'sjcx', 'fscc', 'cicc', 'ncxc']

#繰り返し処理
for member in CCs:
    CC = member

    CC_j = requests.get(URL + CC + "_jpy")#   円価値取得
    CC_b = requests.get(URL + CC + "_btc")#   BTC価値取得

    try:
        ben1 = CC_j.json()["bid"] / btc_a / CC_b.json()["ask"] - 1#ここがキモ① ビットコイン先回りアービトラージ利益率
        ben2 = CC_b.json()["bid"] * btc_b / CC_j.json()["ask"] - 1#ここがキモ② ビットコイン後回りアービトラージ利益率
        data.append([str(CC), CC_j.json()["bid"], CC_j.json()["ask"], CC_b.json()["bid"], CC_b.json()["ask"], ben1, ben2])
    except:
        data.append([str(CC),"","","","","",""])#取得できなかったら空欄

    time.sleep(5)

#結果を書き出し
print(DataFrame(data))

これで以下の結果が出ます。

あまり望む整形結果では無いのですが、スピード重視であまり作り込まなかったっす。

ビットコインの売値/買値と、各アルトコインの売値/買値@円、売値/買値@BTC、3通貨アービトラージを行った場合の利益率が出ます。

3通貨でお金を回すと、方向が2つ出来ます。先述の図のように先にBTCを買う様に見えるパターンを「BTC先回り」と表現しました。でまぁほとんどマイナスなのがお分かり頂けるかと。ちょっと見栄え良くするためにExcelで編集しました。

全…滅…ッ!!!!! ある瞬間ですけど、最高で0.2%。1000円が1002円。1000万円が1002万円。。。億り人は遠い…

期待が大きかっただけにゲンナリなうです。アルトコインの市場がそんなに活発で無いために、スプレッドが広い(買値と売値の差が大きい)のですね。それが全ての諸悪の根源です。全然利益出せん。。。

ちなみにここまでに至る話は全て、【仮想通貨の3通貨間アービトラージ戦略って?裁定取引が出来るバイナンスで稼ぐ方法 | kazuの金融ブログ】に記載があります。事前にサラッと読んでいて、わざわざ円建てじゃないところでやらなくてもいいのにとか思ってました。もっと大きい取引所で市況も活発でスプレッドが小さい所でないと、と言うわけですな。。。納得です。

人の知識だけでなく、自分で手を動かしながら身につけられているとは思うので、もう少し考えていきます。まぁ基本的には先人の路をなぞりつつ、ある程度の理解を以て動かさないと制御下と言えないと思います。頑張ります。

その他参考リンク
BTC建てでアービトラージするにあたっての注意点 – 仮想通貨に全ツッパ
binanceの3点アビトラを行ってみました。 – Bitcoin 裁定取引と自動取引 abitra.netのブログ
仮想通貨自動売買入門 PythonでbitFlyerAPIてすと① | いろいろてすと中
自動でbitflyerのビットコイン価格データを取得する(python) | 独学部

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中