見出し画像

Liquid高頻度取引ボット構築の指南書

1.はじめに

※※※※※ お知らせ ※※※※※
有料パートを公開しました(5月17日)。
「11.Liquid高頻度取引ボットプログラムコード」を公開しました(5月20日 15:00)。
「8.実装編」(PDFの完全版の中)を公開しました(5月20日21:30)。
有料パートにオマケプログラム③(損益を保存&グラフ出力)を追加しました(5月24日)
プログラムコード内のバグを修正し、「バージョン0.0.2」を公開しました(8月6日)

2019年5月1日から稼働させていたLiquid用の高頻度取引ボットの、考え方、指標、ロジック、プログラムコードを公開します。
こちらのnoteは、これまでの無料noteとは異なり、有料noteです。
Liquidでの短期の価格予測が可能な指標を紹介し、実際に運用して利益を出したボットについて、章立てして詳細に解説しています。

当noteで紹介するボットは現在安定した収益を上げていますが、当noteの公開後は収益が上がりづらくなると予想されますのでご注意ください。

当noteは、相場の分析方法、価格予測可能な指標の導出方法、ロジックの構築方法、実装上の考慮点や運用時のドローダウンの検証および改善などについて、方法論を解説した教材形式のnoteです。
既にボットを開発済みの方や、これからボットを開発されようとしている方を対象とし、ボット開発の際の参考にして頂くことを目的としています。
また、方法論の解説ですので、Liquid以外でボット開発をする場合にも参考にしていただくことが可能です。

長文に渡っておりますので、4章までを当note上にまとめてあります。うち、1~3章は無料パートです。
残り5~10章までを「完全版」として、当noteの有料パートにPDFファイルを添付してご提供します。

取り急ぎ指標とロジックだけ知りたい方には、note上でロジックの全容が分かるようにしています。
一方、PDFの完全版は総字数が3万字以上あります。完全版の中では、ボット開発について手順を追って詳細に解説していますので、しっかりと学習されたい方はスマホやタブレットのPDFアプリを使用したり、印刷するなどしてじっくりと取り組んでいただけると幸いです。

また、有料パートではPythonのプログラムコードも添付しますので、開発の際の参考にしてください。
完璧なコードではありませんが、実際に運用したコードから必要な箇所を抜き出してコンパクトに再構築し、なるべく分かりやすく仕上げています。
こちらのプログラムコードはそのままでも動かせますが、収益は運用環境や相場、競合といった外的要因に大きく左右されますので、直ちに収益を上げられるというものではありませんのでご注意ください。
また、稼働のためのサポートは当noteの対象外となりますのでご了承ください。

(トップ画像:Photo by Rafael

1.1.noteの内容

~~無料パート~~
・1.はじめに
・2.Liquid高頻度取引ボットの概要
・3.運用成績
・【有料パート紹介】
・【オマケプログラムコード】
 ①Liquid秒足生成プログラム
 ②値動き自己相関検証プログラム

~~以下、有料パート~~
・4.Liquid高頻度取引ボットの全容
・5.相場分析編
・6.指標編
・7.ロジック構築編
・8.実装編
・9.運用編
・10.おわりに~勝利に近づくために~
・11.Liquid高頻度取引ボットプログラムコード
・【オマケプログラムコード】③損益の保存&グラフ出力プログラム

※5~10章は、「完全版」として当noteの有料パートにPDFファイルを添付します。

1.2.ボットのプログラムコードについて

動作環境
・Python3.6以上

【ご注意①】
以前、こちらのnote(https://note.mu/hht/n/nabc23fa1a210)でマルチプロセスのプラットフォームを紹介しましたが、今回のプログラムは改修以前のシングルプロセスのプラットフォームを利用しています。
実際の運用もシングルプロセスで行っています。WebSocketの情報の一部しか使っておらず処理遅延が発生しないため、軽く動かせるシングルプロセスで十分と判断したためです。

【ご注意②】
実際の運用では、非公開のPusherを利用しています。このPusherキーは非公開となっており、当noteで紹介することができません。
→PusherキーがLiquidサイト上で公開されていましたので、プログラムに含めました。
プログラムコードでは①公開済のLiquidTapか②従来のPusherかを選択できるようにしています。
全く同様に動作しますが、LiquidTapと従来のPusherの性能比較などの検証は行っておりませんので、ご承知おきください。

【ご注意③】
シミュレーション(バックテスト)用のコードは含まれません。

シミュレーション用のコードは自作しておりますが、他の方が有料で公開されたnoteの内容を参考にしているためです。ご承知おきください。

【ご注意④】
プログラムコードはそのままでも動かせますが、収益は運用環境や相場、競合といった外的要因に大きく左右されますので、直ちに収益を上げられるというものではありません。
当noteやプログラムコードの利用により被る損失や被害について、筆者は一切の責任を負うことはできません。ご承知おきください。

【ご注意⑤】
プログラムコードを動かすための環境構築やサポートは、当noteの対象外です。ご承知おきください。

【ご注意⑥】
プログラムコードは2019年5月20日(月)15時(日本時間)に、当noteの有料パートで指定したURLにZIP形式でアップロードします。
ダウンロードして、パスワードで解凍してご利用ください。

1.3.有料での公開に至った理由

筆者は昨年から高頻度取引ボットの制作を行ってきました。
短期間かつ高頻度に取引するボットは、優秀な指標やロジックを積むことにより、安定して利益を積み上げることができます。
それ故、多くのプレイヤーが参入して競争が激化し、収益を維持するための検証や開発のコストがかさむようになってきました。

しかし、Liquidをはじめ国内の2番手以降のボット参入市場(1番手はbitFlyerです)では、まだまだ歪みが残されています。
特に変動相場でその歪みが増長される傾向にあり、大きな変動相場ではむしろbitFlyer以外の市場で利益を得られることも珍しくありません。
ですが、2番手以降の市場はそれぞれ独自の個性を持っており、bitFlyerで通用したロジックを持ち込めばすぐに利益が出るものではありません。
bitFlyer同様、その取引所の検証~ボットの改善作業までを、新たな工数を割いて行う必要があります。

筆者のリソースは、今年に入ってからはほぼ高頻度取引ボットの開発に充ててきましたが、ターゲットを複数の取引所に定めてからは、さらに開発工数が膨れ上がってきました。
最近になって、もう少しタイムフレームが広く大きな値動きを取るようなストラテジーの開発に時間を割きたく思うようになり、高頻度取引ボットの新規開発を休止しようと決めたのでした。

Liquidでのボット開発も休止するわけですが、ここ数か月の検証・運用で得られた結果をここに成果物として残したいと思います。
指標やロジックを含めて全てを詳細に解説するため、有料noteとして公開させていただきます。

1.4.対象読者

・実際に仮想通貨取引所でボットを制作している方
・これからご自身でボットを制作しようとしている方
・ご自身の力でトレードで勝つための戦略を構築しようとしている方

1.5.対象にならない方(必ずお読みください)

・自動売買ボット=不労所得と考えておられる方(ボットで継続的な利益を上げるには、継続的な改善が必要です)
・ボットを動かすことですぐに利益を得られると考えておられる方(ロジックや指標以外にもインフラ系スキルや資金管理などの金融系知識が必要です)
・Pythonプログラムを動かす上で、サポートを必要としておられる方(プログラムコードの動作サポートは対象外です)

1.6.注意事項・免責事項

・当noteは、自動売買ボットによる利益そのものを目的としたnoteではなく、ボット開発の方法論を解説したnoteです。
 付属のプログラムコードを動かすことは可能ですが、サーバスペック、ネットワーク環境、相場や競合のボットなど外的環境などにより、利益が出るとは限りません。
・当noteで紹介されている指標の価格予測力は、将来的に失われる可能性があります。
・プログラムコードを動かすためのサポートは対象外とさせていただきます。
・当noteやプログラムコードの利用により被る損失や被害について、筆者は一切の責任を負うことはできません。

1.7.禁止事項

noteご利用規約の「禁止事項」に準拠します。
https://note.mu/terms
当noteの有料パートを許可なく公開や転載することは、購入者様全員に対して不利益となりますので、お控えください。
サロンなどのクローズドな場であっても、有料パートの内容を他の方に共有することはお控えください。
有料パートの具体的な内容を除けば、twitterなどのSNSで当noteについて言及していただく分には問題ありません。

1.8.当noteの内容のアップデートについて

noteの内容やプログラムコードをアップデートした場合、筆者のtwitterアカウント(@i_love_profit)にて周知させていただきます。


2.Liquid高頻度取引ボットの概要

当noteで紹介するボットは、Liquid by QuoineのBTC/JPY(以下、Liquidと呼びます)のレバレッジ取引を高頻度で行います。
特徴として、
・独自かつ強力な価格予測指標に基づいて発注を行う
・小さめのロット(0.05~0.1BTC程度)での取引をなるべく高頻度に行うことにより、リスクを抑えて安定して利益を積み上げる
が挙げられます。
これにより滑らかな右肩上がりの損益曲線を実現した、高頻度取引ボットのお手本となるようなボットです。

こちらが実際の運用時の損益曲線の一部です(上段青線がLiquidの価格、下段赤線が損益)。運用成績の詳細は、「3.運用成績」で紹介します。

2.1.ボットの概要と運用成績

Liquidで提供されるAPIおよびPusherを利用したボットです。

取引頻度
・ロジックの1インターバルは、約5秒間です。
・1インターバルの中で複数回の発注を行っています。

ロットについて
・実運用では、1ロットのサイズは①夜間(0:30~6:00まで)を0.05BTC、②それ以外の時間帯を0.1BTC、としています。
・上記のロットでロジックを動かすために必要な証拠金は、レバ25倍の場合で約0.04BTC程度(1BTC=75万円の場合、3万円程度)、レバ4倍の場合で0.25BTC程度(同約18.75万円程度)です。
・ロットを1/10に落とせば、証拠金も1/10に落とせます。

運用期間と成績
・5/1~5/14 16:30現時点(途中でロジック改善を2回行っています)
・開始時の証拠金 103,408円
・期間中の総獲得利益 221,879円(5/4 16:30現在。期間利回り約215%)

このボットを教材とし、指標の導出方法、ロジック構築方法、運用時の改善方法などについて、有料パートで解説します。

2.2.なぜ短期間・高頻度取引ボットなのか?

1)安定性
期待値の高い取引を少額で高頻度に繰り返すことにより、日次勝率90%を超えるような安定した運用が可能です。
高い勝率を実現できる理由は、「ごく短期間であれば、価格変動の予測が可能だから」です。数秒程度の短い時間間隔であれば、高い確率で値動きを予測する手法が存在します。
世界の高頻度取引の専門業者たちは、こうして年間何百億円といった利益を上げています。

2)資金効率・低資金
少額の取引を何回も重ねるため、資金効率が良く、少ない自己資金で運用できるというメリットがあります。
ただし逆に、多額の資金は運用しづらいというデメリットがあります。
まとめると、

メリット
・安定した収益を見込める可能性がある。
・資金が少額でよい。
・資金効率が良い(≒利回りが大きい)。

デメリット
・継続的に収益を上げるためには、開発コストがかかる。
・大きな資金を運用できない。

2.3.利益の源泉~価格予測指標の重要性~

高頻度取引ボットの基本的な考えは簡単です。
「1回当たりの取引損益の期待値 > コスト」
これを前提条件としてクリアし、その後はコストを増やさないように注意しながら、なるべく取引回数を増やします。

コスト
左辺のコストについては、以下に分解できます。
①スプレッドによるコスト(テイク注文の場合)
②マーケットインパクトによるコスト
③未約定による機会損失コスト(メイク注文の場合)
④遅延や割り込み、その他による機会損失コスト
⑤取引手数料(Liquidではゼロ円。※ポジション料が別にかかります。)

これらのコストが利益を圧迫します。Liquidは板がさほど厚くなく、テイカーボリュームも多くないため、①~③のコストがかさみます。
また、取引プラットフォームがさほど強力でないため、遅延やバグのような状況によって④のコストが膨らむ場合もあります。

損益期待値
一方、右辺の損益期待値は、以下に分解できます。
①スプレッド(メイク注文の場合)
②ポジション損益(値動きによる損益)
③マイナス手数料や報酬(Liquidでは存在しません)

コストを支払ってなお安定した利益を得るために、①のスプレッド損益に加えて②のポジション損益(値動きによる損益)の獲得を狙うことになります。
ここで重要となるのが値動き予測です。そして、前節で解説したように短期間であれば値動きの予測はある程度可能です。

こちらは、当note内で使われている価格予測指標です。当note公開時点では、強力な価格予測力を備えています(このグラフは、傾向がかなり強く表れた2019/5/6のものです)。

有料パートでは、こちらの指標導出のための仮説の立て方や、指標の特性について解説します。

2.4.指標に合わせたロジック構築

高頻度取引ボットにはいくつか種類があります。
詳しく知りたい方は、こちらのnoteで高頻度取引ボットの種類をまとめていますので、ご参照ください。
https://note.mu/hht/n/n29542dcec517

高頻度取引ボットの基本戦略としては、「テイカー」タイプと「メイカー」タイプに大別されます。
それぞれ、価格予測に対してポジションの構築の方法が異なります。

テイカー
価格予測に順張りをします。つまり、価格が上に上がりそうな時になるべく速やかにロングポジションを作り、価格が下がりそうな時に同様にショートポジションを作ります。
ポジションを作れれば、その方向への値動きが起こることで利益を得ることができます。

ポジションを作るために一番簡単なのは、テイク注文(成行注文)を行うことです。この方法であれば、遅延などのイレギュラーを除き、ほぼ100パーセント約定させることができます。
一方、この方法の問題点は、コストが高くなることです。
ポジション構築の際、逆方向の板をテイクするためスプレッド分のコストを支払う必要があります。
また、取引所の手数料体系によってはテイク手数料(メイク手数料より割高なケースがある)が必要になります(Liquidではテイク手数料は無料です)。

メイカー
価格が反転しそうな水準に逆張りの指値注文(下がった時に買い、上がった時に売る)を置きます。
この水準に価格が達して約定したら、そこから反発して価格が戻ることで利益を得ることができます。

この方法では、スプレッド分を収益源とすることができます。また、取引所によってはメイク注文約定時にマイナス手数料やメイク報酬をもらえる場合もあります(Liquidには存在しません)。
一方、出した指値は必ず約定するわけではありません。約定しない場合は機会損失となり、損益曲線が伸びが悪くなります。

それぞれのタイプにメリットとデメリットがありますので、使用する指標の特性や取引所の環境(例えばテイカーとメイカーのバランス、スプレッド、約定量、板の厚みなど)に応じて適切にロジックを構築しなければなりません。
有料パートでは、相場分析を元にしてボットの基本戦略を決定し、検証を繰り返して安定したボットを作るまでの過程を解説します。


3.運用成績

5/1から5/14 16:30現在までの損益の推移です。
2度のロジック改修を行い、5/4の昼以降から最終ロジックに確定しています。
ロジックの特性上、急激に価格が変動した際にドローダウンを食らいますが、その後のボラティリティによって速やかにドローダウンを解消できる様子が分かります。

↓5/1 +7,871円。2度の価格変動時のドローダウン以外安定。

↓5/2 -2,645円。3度のドローダウンでマイナス。ロジック修正を検討。

↓5/3 +5,589円。夜間のドローダウンでロジック修正を決意し、ボットを改修。その後、夕方からトレンドが形成され、これに乗る形でプラス転換(原因と改修内容を有料パートで解説)。

↓5/4 -142円。午前中のドローダウンは解決済(原因と解決方法を有料パートで解説)。また、昼前後に2度目のロジック改修し、ここでロジック確定。その後伸びるも、夜中の変動によるドローダウンもあり、ギリギリプラス転換ならず。

↓5/5 +7,512円。変動に耐えてプラス転換。安定。

↓5/6 +9,024円。安定。

↓5/7 +13,827円。安定。

↓5/8 +9,441円。安定。

↓5/9 +4,274円。ライトセーバーで大きめのドローダウンを食らうが、その後安定してプラス転換。

↓5/10 +18,091円。安定。トレンドが形成されてボラが出てきて、利益が伸び始める。

↓5/11 +14,070円。APIリクエスト通らずドローダウンを食らうが、それ以外は安定。

↓5/12 +91,323円。価格が高騰、安定して利益が伸びる。

↓5/13 +15,249円。遅延によりドローダウン期間があるが、おおむね安定。

↓5/14現在。+約30,000円。安定。


【有料パート紹介】

本章では、有料パートの内容を紹介します。

4.Liquid高頻度取引ボットの全容
4章では、今回のLiquidボットの全容を解説します。
実際に使ったロジックの骨子、価格予測を行うための指標の計算方法、などの最低限必要な部分をまとめています。

指標やロジックだけ確認したい方(既に独自のボットを構築している方など)は、note上で4章だけお読みください。
これ以降の5~10章はPDFファイル形式とし、有料パートに添付しています。70ページ以上、3万字以上に渡る「完全版」では、ボット開発の手順を追いながら詳細に解説していきます。

5.相場分析編
今回のボットの基本戦略を策定するための、相場の検証方法とその結果について解説しています。

6.指標編
今回のボットで使用した、価格予測のための指標の導出方法について解説しています。
単純な方法で導出した指標を応用し、さらに決定係数を高めたオリジナルの指標を紹介します。

【単純な方法で導出した指標】

【今回使用した指標】

7.ロジック構築編
5章と6章での内容を基に、ボットのロジック構築を行う際の流れを解説しています。

8.実装編
ロジックを実装の際のTipsを解説しています。
API呼び出し回数制限をクリアするための工夫などを紹介します。

9.運用編
実運用で発生したドローダウンや課題についての原因の検証を行い、ロジックをブラッシュアップする過程を解説しています。

10.おわりに~勝利に近づくために~
最後に、読者の方それぞれが「自らの勝ちロジック」を作り上げていくためのヒントをお伝えします。

11.Liquid高頻度取引ボット プログラムコード
当noteのボットを実装したPythonプログラムコードです。ZIPファイルでご提供します。
実際に運用したコードから必要な箇所を抜き出してコンパクトに再構築し、なるべく分かりやすく仕上げましたので、ボット開発の際の参考にしてください。


【オマケプログラム】

noteやTwitter上でのフォロー、ありがとうございます。
これまでは情報を無償で公開してきましたが、この度のnoteは筆者の仮想通貨高頻度取引の卒業論文のような内容であり、具体的な指標やロジック、構築方法を余すところなく紹介しています。
それ故、有料noteとさせていただきましたが、無償での公開を期待してフォローしていただいている方をガッカリさせてしまっていると思います。
お詫びとして、ささやかではありますが、無料パートにいくつかオマケプログラムをつけさせていただきます。

オマケ①Liquid秒足生成プログラム

Liquidの約定履歴を元に、日ごとの秒足(OHLCV)を生成するプログラムです。指定した年月日の秒足をCSVファイルに出力します。
1日分を出力するので、少々時間がかかります。

ファイル名:save_second_ohlcv.py
引数:【年】【月】【日】
使い方:

python save_second_ohlcv.py 2019 1 1

コード抜粋。コード全文はこちらです。

for execution in executions:
    now_timestamp = execution['timestamp']
    price = execution["price"]
    while pre_timestamp != now_timestamp:
        close_price = ohlcv[pre_timestamp]["close"] if pre_timestamp in ohlcv else price
        close_id = ohlcv[pre_timestamp]["last_execution_id"] if pre_timestamp in ohlcv else ""
        pre_timestamp += 1
        datetime_jst = datetime.fromtimestamp(pre_timestamp, tz=jst).astimezone(jst).strftime(datetime_format)
        ohlcv[pre_timestamp] = {"timestamp": pre_timestamp, "datetime_jst": datetime_jst,
                                "open": close_price,
                                "high": close_price,
                                "low": close_price,
                                "close": close_price,
                                "volume": 0,
                                "buy_volume": 0,
                                "sell_volume": 0,
                                "first_execution_id": close_id,
                                "last_execution_id": close_id}
    if ohlcv[now_timestamp]["volume"] == 0:
        ohlcv[now_timestamp]["open"] = price
        ohlcv[now_timestamp]["first_execution_id"] = execution["id"]
    if price > ohlcv[now_timestamp]["high"]:
        ohlcv[now_timestamp]["high"] = price
    if price < ohlcv[now_timestamp]["low"]:
        ohlcv[now_timestamp]["low"] = price
    ohlcv[now_timestamp]["close"] = price
    ohlcv[now_timestamp]["last_execution_id"] = execution["id"]
    if execution["side"] == "buy":
        ohlcv[now_timestamp]["buy_volume"] += execution["size"]
    if execution["side"] == "sell":
        ohlcv[now_timestamp]["sell_volume"] += execution["size"]
    ohlcv[now_timestamp]["volume"] += execution["size"]

オマケ②値動き自己相関検証プログラム

①で生成した秒足を利用し、値動きの自己相関を測定するプログラムです。
matplotlibで散布図を出力します。
あらかじめ①でファイルを出力しておいてください。

ファイル名:calc_self_correlation.py
引数:【年】【月】【日】
使い方:

python calc_self_correlation.py 2019 1 1

コード抜粋。コード全文はこちらです。

# 相関計算.
second = 1
open_prices = csv.open.values
past_returns = []
future_returns = []
for index in range(second, len(open_prices) - second):
    past_returns.append(open_prices[index] - open_prices[index - second])
    future_returns.append(open_prices[index + second] - open_prices[index])
correlation = corrcoef(past_returns, future_returns)
r2 = correlation[0][1] ** 2
# グラフ出力.
title = f"Correlation {args.year}/{args.month}/{args.day}"
fig = plt.figure()
fig.suptitle(title)
ax = fig.add_subplot(111)
ax.scatter(past_returns, future_returns, c="blue", s=20, edgecolors="blue", alpha=0.3)
ax.set_xlabel(f"Past {second} seconds return [yen]")
ax.set_ylabel(f"Future {second} seconds return [yen]")
ax.grid(which="major", axis="x", color="gray", alpha=0.5, linestyle="dotted", linewidth=1)
ax.grid(which="major", axis="y", color="gray", alpha=0.5, linestyle="dotted", linewidth=1)
ax.text(0.8, 0.1, f"R**2={r2:.4f}", transform=ax.transAxes)
plt.savefig(output_dir + output_filename)

出力結果:
こちらは、Liquidの過去1秒の値動きと未来1秒の値動きの自己相関を出力した散布図です。ごく短期であれば、自己相関により値動きが予測可能な様子が分かります。


4.Liquid高頻度取引ボットの全容

以下から有料パートとなります。
アップデートの際は、筆者のTwitterアカウント(@i_love_profit)およびnoteの更新通知機能で告知させていただきます。

どうぞよろしくお願いいたします。

※※※※※ お知らせ ※※※※※
有料パートを公開しました(5月17日)。
「11.Liquid高頻度取引ボットプログラムコード」を公開しました(5月20日 15:00)。
「8.実装編」(PDFの完全版の中)を公開しました(5月20日21:30)。
有料パートにオマケプログラム③(損益を保存&グラフ出力)を追加しました(5月24日)
プログラムコード内のバグを修正し、「バージョン0.0.2」を公開しました(8月6日)


この続きをみるには

この続き:6,758文字/画像9枚

Liquid高頻度取引ボット構築の指南書

Hoheto (仮想通貨トレーダー)

19,800円

この記事が気に入ったら、サポートをしてみませんか?気軽にクリエイターを支援できます。

264

Hoheto (仮想通貨トレーダー)

2人組で仮想通貨界隈でトレーディングを行う。 【UKI】株式・暗号通貨システムトレーダー/元祖ドテン君作者/2018年3月~4月で純益8000万、月利400%達成 【Hoheto】ベンチャー起業家/アルトトレードで含み益1億5千万達成/一部利確し5000万円分を現物で保有中

仮想通貨

9つ のマガジンに含まれています
コメントを投稿するには、 ログイン または 会員登録 をする必要があります。