見出し画像

【実践型】python逆引き時系列データ加工&可視化(pandas/numpy)

これまでのBOT制作、データ検証、バックテストなどで扱ってきた時系列データ(約定履歴やOHLCVなど)加工可視化(テーブルやチャート表示)を様々なケース別に紹介します。

各ケース毎に
■【処理概要】
■ [tips] コード内で使用している主要なライブラリ/関数

■ Jupyter Notebook(nbviewer)のコードリンク
■ サンプル画像
という形式でまとめてあります。

処理概要から要件に合う処理を確認したり、キーワードで関数の使用法を検索したり、目的に合わせて自由にご利用ください。

本noteは過去にTwitter( Nagi )で紹介してきたコードサンプルのサマリーになります。(ツイートは散在して分かりにくいため、まとめました。)

全て無料パートで公開していますので、購入しなくても全編閲覧可能です。
もし、有益と感じて投げ銭してくださる方は購入して頂けると嬉しいです。

あまり影響ないとは思いますが、本noteやプログラムコードの利用により被る損失や被害について、筆者は一切の責任を負うことはできません。

【datetime相互変換】

■ datetime、UnixTime、日付文字列相互変換
◆ [tips] datetime.timestamp, datetime.strftime, datetime.strptime, timezone
nbviewer コードリンク

画像1

【文字列補間】

■ %/formatによる文字列補間
■ list/dictなどの要素で補間
■ 補間時の書式設定(桁合わせ、左右寄せ、カンマ区切り、小数点桁数、日付etc.)
◆ [tips] str.format
nbviewer コードリンク

画像2

【OHLCVデータをリストやDataFrameで操作】

■ BitMEX OHLCV取得
■ リスト内包表記によるOHLCV二次元リスト作成
■ リスト操作(抽出、絞り込み、反転etc.)
■ リスト⇔Series⇒ndarray変換
■ DataFrame操作
(index設定、行追加・削除、列追加・削除、列並び替え、列名変更、行反転、列反転etc.)
◆ [tips] リスト内包表記, zip, OrderedDict, pandas, Series, numpy, ndarray,
    pd.to_datetime, DataFrame.set_index, DataFrame.reset_index,
    DataFrame.append, DataFrame.drop, DataFrame.rename,
    DataFrame.iloc
nbviewer コードリンク

画像3

【OHLCVを取得し、DataFrameからjson形式で保存】

■ BitMEX OHLCVを取得し、DataFrame化
■ DataFrame列の型確認(Series/ndarray/list)
■ OHLCVそれぞれの列を辞書型に変換
■ dictをjson形式で保存
◆ [tips] json, pandas, numpy, DataFrame, ndarray
nbviewer コードリンク

画像4

【Step by StepでEMAを作成】

■ BitMEX OHLCVの終値リストを取得し、EMAを算出
■ 自力でEMAを計算、pandasを使用して計算の比較
◆ [tips] pandas, Series.ewm, Series.mean
nbviewer コードリンク

画像5

【BitMEX約定履歴からOHLCVを作成】

■ 約定履歴から1秒足OHLCVを作成
■ 1秒足OHLCVを1分足OHLCVに集計
◆ [tips] pandas, DataFrame.resample
nbviewer コードリンク

画像6

【約定履歴からOHLCV作成で売買別出来高集計】

■ BitMEX約定履歴を取得し、OHLCV+統計情報を集計
■ DataFrameによるcsv保存/読み込み
■ datetime変換(タイムゾーン設定/変更)
■ Buy/Sell別出来高集計
■ リサンプリングによる集計、欠損補間
■ Buy/Sell別出来高の件数/合計/平均を算出
◆ [tips] pandas, DataFrame.to_csv, DataFrame.read_csv, Series.where,
    DataFrame.resample, DataFrame.ffill, DataFrame.rename, numpy,
    ndarray.where
nbviewer コードリンク

画像7

【板情報を価格帯でグループ化し、統計情報を算出】

■ bitFlyer オーダーブックを取得し、bids/asksをDataFrame化
■ 100円単位にグループ化し、並び替え
■ 集計した統計情報を算出(合計, カウント, 最大値, 最小値, 平均)
■ 列名変更
■ 各集計内の最大/最小サイズとその価格を取得
■ 各集計毎の平均価格を算出
◆ [tips] pandas, DataFrame.agg, DataFrame.sort_index, DataFrame.groupby,
    DataFrame.apply
nbviewer コードリンク

画像8

【約定履歴のサイズを時間/価格別にクロス集計】

■ 約定履歴のtimestampを1m単位に丸め
■ Sellのサイズをマイナス化
■ 丸めた1m timestampと価格でサイズをクロス集計
■ X:timestamp/Y:価格/Z:サイズの3Dバーチャートを表示
◆ [tips] pandas, numpy, ndarray.map, np.where, DataFrame.pivot_table,
    DataFrame.to_csv, matplotlib
nbviewer コードリンク

画像9

【Upsampleを利用したMTFチャート】

■ BitMEX 1m/5m/1hのOHLCVを取得し、それぞれEMAを算出
■ リサンプリングで1m足単位に5m/1hをアップサンプリング
■ 期間始まり/終わり価格で欠損補間、線形補間
■ マルチタイムフレームチャート表示(ChartCreator使用)
◆ [tips] OrderedDict, pandas, DataFrame.to_datetime, Series.ewm,
    Series.mean, DataFrame.resample, DataFrame.pad, DataFrame.bfill,
    DataFrame.interpolate
nbviewer コードリンク

画像10

【時系列データの汎用的な簡易バックテスト】

■ テスト対象期間のデータを取得
■ テストパラメータ組み合わせ作成
■ テストするストラテジー定義
■ テスト実行
■ 各パラメータ別のテスト結果表示
■ 最大パフォーマンスの損益推移を表示
◆ [tips] pandas, numpy, itertools.product, DataFrame.reset_index,
    DataFrame.apply, Series.rolling, Series.mean, matplotlib, np.cumsum
nbviewer コードリンク

画像11

【Jupyter Notebookインタラクティブチャート表示】

■ BitMEX OHLCVをAPIで取得
■ ローソク足、SMA(×3)、RCIのチャートを作成
■ ウィジェット操作
 (ローソクバー数変更、ローソク足/平均足切替、各SMA期間変更)
◆ [tips] matplotlib, ipywidgets
nbviewer コードリンク

画像12

【Jupyter NotebookリアルタイムTickチャート表示】

■ bitFlyer WebSocketのTickerデータを取得
■ WSデータ取得(受信)とチャート更新(animation)を非同期処理
◆ [tips] matplotlib, matplotlib.animation, asyncio, deque, WebSocket
nbviewer コードリンク

画像13

【BitMEX Maker/Taker Trade Feeの損益分岐線】

■ Taker Fee:0.075%、Maker Fee:-0.025%
■ エントリー&イグジットのMaker/Taker組み合わせ
■ BTC価格別の損益分岐線をインタラクティブチャート化
◆ [tips] plotly
nbviewer コードリンク

画像14

【profiling(処理速度計測)】

■ line_profilerを使用して各行毎の処理時間を可視化
■ 処理中のボトルネックを特定
◆ [tips] line_profiler
nbviewer コードリンク

画像15

【matplotlibチャート描画&ファイル保存を並列化して連続処理】

■ matplotlibチャート画像保存
■ Poolで並列化
nbviewer コードリンク

【SMA/EMA MTFをまとめて取得】

■ OHLCVを基に複数時間足のSMA/EMAを計算
■ pandas rolling, ema, mean etc.
nbviewer コードリンク

画像16

【Data Classes基本的な使い方】

■ data classを用いて時系列データを保持
■ listやdict変換、pickle保存/復元、jsonシリアライズ etc.
nbviewer コードリンク

画像17

【オブジェクトチェック用 整形出力関数 [chk_print]】

■ Debug時などに変数やlist, dict, DataFrameなどを見やすく整形して出力
nbviewer コードリンク

画像18


〈おわりに〉
最後までお読みいただき、ありがとうございました。

本noteやサンプルコードなどが、「参考になった」「有益だった」と感じて頂けましたら、サポートやスキ、コメントなど頂けるとうれしいです。

BTCでのサポートも歓迎しております。
どんなに少額でもとても励みになりますので、よろしければお願いします。
17N6P9eGs5Y2nyeZJxNzefKxMwKWwZZkkF

今後も役に立つツールや有益な解説記事などを提供していきたいと考えておりますので、興味があればチェックして頂けると幸いです。

ここから先は

73字

¥ 500

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