通貨×システム

FX、仮想通貨のシステムトレードなどについて書くブログ。

第一回天下一BOT会に参加して準優勝した話

f:id:topical-currency:20180627220158p:plain
セビル(@Seville1985)さん主催の最強の仮想通貨自動売買botを決める大会、「天下一BOT会」に参加しました。結果は……
参加者24名中第2位!!
優勝は逃しましたが、満足できる結果になりました。

ということで今回は大会期間中の出来事、準優勝した自動売買戦略の概要についてまとめました。

スポンサードリンク

第一回天下一BOT会のルール

大会期間は6月17日(日)0:00~6月24日(日)24:00までの8日間。期間中に仮想通貨の自動売買を行い、終了時残高÷開始時残高が大きい人の勝ち!というルールでした。
最初は優勝しても何もない予定でしたが、後にスポンサーとしてUKI(@blog_uki)さん、AKAGAMI(@akagami_v2)さんがそれぞれ5万円相当のBTCを優勝者に提供!というやる気がアップする展開になりました。


大会

スタート


私は5,000円からスタートしました。
他の参加者は4,000円、1万円、504万円など様々でした。

1日目


1日目で+223%!これは勝った!と思ったのですが……



さらに強い人がいました!

2日目


2日目も安定的に増加!




みなさん調子が良い様子です。

3日目





みなさん儲かっていたり損していたり様々な模様。

控え室も盛り上がっていました。


4日目




ついに退場者が出ました。ハイレバはこわいですね。

5日目




トレンドがはっきりしない微妙な雰囲気の中……



二人目の退場者が……😱

6日目




みなさんのbotが頑張っているようですが……



セビルさん……😭

7日目


ラストスパートです!


8日目


まさおbotは無事に完走!

そして参加者の方々から最終報告が!












続々と結果が報告される中……


最後の最後に主催者のセビルさんが退場……😱

最終結果


私は2位にランクイン!

1位のらっちょ(@rc_uni0907)さんはなんと10107%!!!
かなり資金効率が良かったみたいです。

まさおbotの戦略

私が本大会で使用したbotはMM(マーケットメイカー)系に分類されるものです。何かしらの指標を見ながら高頻度で指値を置き、主にスプレッドを収益源としています。

MM戦略に関してはUKIさんのブログが良くまとまっていてオススメです。

MMbotは運用資金が少ない場合は非常に良い利回りを見せます。そのため、今回のような増加率での勝負では極めて有利であることが事前に予想できました。他にMMbot使用者がいなければ優勝できると思っていたのですが、優勝者のらっちょさんも(おそらく)同様の戦略だったため性能の差で私は負けてしまいました。

ロジックは載せられないので、ある日の取引についての分析結果を書きます。
bitFlyerの取引履歴をCSVに変換した後、次のPythonプログラムを用いて分析を行いました。

import csv

L_win = 0
L_lose = 0
L_profit = 0
L_loss = 0
S_win = 0
S_lose = 0
S_profit = 0
S_loss = 0
position = 0
price = 0

with open('book.csv', 'r') as f:
    
    reader = csv.reader(f)
    
    try:
        for row in list(reader)[:0:-1]:
            position = round(float(position),8)
            executed_size = round(float(row[5]),8)
            executed_price = int(row[7])
            if row[4] == "買い":
                # 新規買い
                if position >= 0:
                    position += executed_size
                    price -= executed_size * executed_price

                # 決済買い
                elif position < 0:
                    if position + executed_size >= 0:
                        price += position * executed_price
                        # win
                        if price >= 0:
                            S_win += 1
                            S_profit += price
                        # lose
                        else:
                            S_lose += 1
                            S_loss += price
                        position += executed_size
                        price = -position * executed_price
                    else:
                        position += executed_size
                        price -= executed_size * executed_price

            elif row[4] == "売り":
                # 新規売り
                if position <= 0:
                    position -= executed_size
                    price += executed_size * executed_price

                # 決済売り
                elif position > 0:
                    if position - executed_size <= 0:
                        price += position * executed_price
                        # win
                        if price >= 0:
                            L_win += 1
                            L_profit += price
                        # lose
                        else:
                            L_lose += 1
                            L_loss += price
                        position -= executed_size
                        price = -position * executed_price
                    else:
                        position -= executed_size
                        price += executed_size * executed_price
    except Exception as e:
        print(e)

    print("Long:")
    print("profit:",int(L_profit)," loss:",int(L_loss)," win:",L_win," lose:",L_lose," winning rate:",round(L_win/(L_win+L_lose),3))
    print("Short:")
    print("profit:",int(S_profit)," loss:",int(S_loss)," win:",S_win," lose:",S_lose," winning rate:",round(S_win/(S_win+S_lose),3))
    print("total:",int(L_profit+S_profit+L_loss+S_loss))

出力

Long:
profit: 128509  loss: -87159  win: 739  lose: 532  winning rate: 0.581
Short:
profit: 146468  loss: -78540  win: 731  lose: 485  winning rate: 0.601
total: 109278

勝率が6割、PFが1.66、取引回数が約2500回です。手動では難しい数の取引をしています。

まとめ

第一回天下一BOT会ではMMbotを使用して準優勝しました!

また、自分のbotがどの程度の強さなのかを認識すること、多くのbot運用者と交流をすることもできました。参加して得られたものはお金だけではありませんでした。

参加者の皆さん、そして主催のセビルさんに感謝です!