見出し画像

Bokehではじめるデータビジュアライゼーション(仮想通貨取引データ分析編)

先日、MarketTech Meetup #2でこちらのLT発表をさせていただきました。

MarketTech MeetupはAIによるマーケット予測サービスを展開しているAlapaca Japanさんが主催されており、これまで発表されている内容は控えめに言ってかなり濃いミートアップだと思います(おすすめ)。

今回のLT発表では仮想通貨取引データを用いたデータビジュアライゼーションについてお話させていただきました。この記事ではプレゼンテーションの内容をおさらいしたいと思います。次回、実装内容の解説をします。

テーマ

今回のテーマは「仮想通貨取引の探索的データ解析」になります。

探索的データ解析とは

データの構造を探り、潜在的なパターンを発見し、モデルに対するアイデアを得るために行うもので、モデル作りをする前にデータを正しく把握して、そのデ―タにどのような特徴があるのかを探る段階で行います。

探索的データ解析の主なポイント

1.抵抗性・頑健性のある(要は外れ値に強い)統計量で分析する
2.残差の分析を注意深く行う(data = fit + residual)
3.再表現(データ変換)をして隠れた特徴を見つける(例えば対数変換やべき乗変換だったり、あるいは移動平均などデータのならしを行う)
4.可視化してみて気づきを得る(今回はここをBokehを使ってやります)

Bokeh(ボケ)とは

Pythonで対話的(インタラクティブ)な描画を行うライブラリで実装は比較的簡単で、Matplotlibなどに慣れている方であればそれほど抵抗なく書けると思います。ちなみに、昔は提供されていた高レベルAPI(箱ひげ図やヒートマップ等)は最近廃止になり、その代わりHoloViewsでカバーされるようになっています。ちなみに由来は写真用語のピンボケのボケからきているみたいです。

本日使用するデータ

まず板情報ですが、板には板に注文を置く人(マーケットメイカー)と板の注文を取る人(マーケットテイカー)がいます。マーケットメイカーは指値注文により、自身の希望する価格に指定した数量の注文を行います。一方でマーケットテイカーは成行注文により指定した数量を満たすまで板にある指値注文と対当して約定していきます。

約定情報ですが、ここで示される売買区分はマーケットテイカーが買ったのか売ったのかが示されます。追って再度説明しますが、成行注文の売買が市場における売買の強さを表すためです。

約定情報の可視化

約定情報の可視化において最もよく利用されるのはローソク足になります。ローソク足は指定された間隔(1分、5分、1時間、1日、等)における
O(Open):始値
H(High):高値
L(Low):安値
C(Close):終値
を箱と上下のひげで表現しています。Open > Closeの場合は陰線(上記のうす緑)で箱の上限がOpen、下限がClose、Open < Closeの場合は陽線(上記の赤)で箱の上限がClose、下限がOpenです。また、陽線陰線いずれも上ひげの頂点がHigh、下ひげの頂点がLowです。

このデータの再表現により、酒田五法やプライスアクションなどの手法がローソク足のパターンにより生み出されています。

ではこのデータをそのままプロットしてみましょう。

ちょっとこれではあまり面白みがないですね。売買で色分けしてみると…

まぁこんな感じですね。では約定数量でプロットの大きさのサイズ指定をしてみると…

明らかにこの辺(⇗)で何かが起こっていますね。それではこのあと実際に何が起こっていたのかを見ていきたいと思います。

約定情報と板情報を見る際のポイント

1.板情報の気配に偏りがある場合は、厚い(気配が多い)方が優勢
2.板情報の変化は、気配が増えたら優勢、減ったら弱い
3.約定成立した場合は、その成行注文の売買が優勢

1 < 2 < 3の順で優勢になります。それでは、デモを見ていきましょう。

まず各描画内容について説明します。左上段のTrade Feedは、直近のスライドでご紹介した約定情報、左中段はのCandlestickはローソク足、左下段はTrade Feedの約定数量(横軸)のヒストグラムで縦軸は件数です。またこのデータはTrade Feedの描画における左端から真ん中にある線までの間のデータを抽出しています。追ってアニメーション機能が出てきますが、その際に要は真ん中の線が現在時点だとした場合の直近データの分布になります。右上段のOrder BookはTrade Feedの真ん中の線時点におけるその瞬間の板情報で横軸が気配数量、縦軸はプライスでTrade Feedの縦軸とリンクしています。また、緑が買い気配、赤が売り気配です。右中段のTrade Feed(名前が紛らわしくてごめんなさい)は左上段のTrade Feedにおける左端から真ん中の線におけるデータの縦軸がプライス、横軸が約定数量になっています。右下段のBuy Sell (Trade Feed)は、元データは右中段と同じで、それの売買数量でドーナツチャートを描画しています。

任意の注目したい部分を拡大して、ドラッグしながら何が起こっていたのかを確認していきます。そうすると、大きな赤い丸(売り約定)が発生する手前あたりからOrder Bookに大きな売りの気配があることがわかります。これはマーケットメイカーが売り気配を出したものになります。つまり単純に考えればマーケットメイカーは売りたがっていると考えられます(もちろんその限りではありません)。その後、Trade Feedの横軸が40分手前あたりで大きくプライスが下落して、大きな売りの約定(ヒストグラムを見ると42BTC程度であることがわかります)が成立しています。その後、大きな買いの約定(40BTC程度)が成立する直前ぐらいからまた大きな売りの気配が出始めて、その後プライスが下がっていく様子がわかります。

また、画面の左下に「▶︎Play」ボタンがありますが、こちらを押すとアニメーションとして再生することもでき、これもBokehの標準機能で備わっているものです。このようにして、描画しただけでは気づけないこともアニメーションとして流しながら見ていると気づけることもあるかもしれません。

まとめ

このようにBokehのようなインタラクティブな描画ライブラリを利用して可視化して動かしてみると得られる気づきがあったり、高頻度取引データのように時間に対して非常に高解像度なデータを可視化する際には、Bokehはデータの変化をインタラクティブに確認ができて非常に効果的だったりします。仮に、Matplotlibなどで毎秒のデータ眺めようと思ったら1時間で3600枚とか描画しないといけません(そんなことはしないと思いますが)。

というわけでBokehを使って高頻度取引データの可視化を行って気づきを得たらそれをトレーディングに役立てみたり、時系列分析やモデリング等に入る前にどのような特徴を見つけ出して分析してみるのかを吟味してみたりしてみていただくと良いかもしれません。

次回は実装内容の解説をしたいと思います。そちらもよろしくお願いします。

参考文献

『金融市場の高頻度データ分析 ーデータ処理・モデリング・実証分析ー(ファイナンス・ライブラリー13)』 林高樹/佐藤彰洋 2016年

『探索的データ解析入門ー出0たの構造を探る(統計ライブラリー)』 渡辺洋/鈴木規夫/山田文康/大塚雄作 1985年

『PythonユーザのためのJupyter[実践]入門』 池内孝啓/片柳薫子/岩尾エマはるか/@driller 2017年

『Hands-On Data Visualization with Bokeh: Interactive web plotting for Python using Bokeh』 Kevin Jolly 2018年

『アルゴリズム取引の正体』 NTTデータ・フィナンシャル・ソリューションズ先端金融工学センター 2018年

『投資家心理を読み切る板読みデイトレード術』 けむ。(上山健司) 2010年

この記事が気に入ったらサポートをしてみませんか?