年末年始休暇の間勉強する
しばらくの間bot開発から離れていましたが、
「仮想通貨botter Advent Calendar 2021」
を見て、再びやる気が出てきました。
冬期休暇で時間があるので、勉強をします!
ただ、時間が有り余っているわけでもないので、やりたいことのリストアップと優先順位付けをしていきます。
やりたいこと・優先度
基礎知識強化(機械学習)
基礎知識強化(プログラミング)
richimanbtcさんのチュートリアルを理解
機械学習bot作成
アドベントカレンダー全部読む
noteやtwitterで有用な情報を集め、まとめる
Dexを利用したBot作成(やるとしたら最初はアビトラ?)
AxieInfinity支払い自動化コードの作成
(公開されているものはあるけど、自分で作ってみたい)
4.機械学習Bot作成がメイン目標です。
リストを作成して思ったけど、1~4/5,6/7,8で分類できるな。
1~4を進めながら、5,6は同時進行、7,8はその後かな。
いかに1~3を効率よくこなせるかが大事そうです。
ちなみに、機械学習botに興味を持ったきっかけは、richmanbtcさんの書籍です。
公開されているチュートリアルを理解して使いこなすことができれば,
強力な機械学習botを作ることができるだろうと考えています。
21年9月頃にもチュートリアルを軽く覗いていたのですが、理解不能すぎて見なかったことにしていました()
1.基礎知識強化(機械学習)
黒枝さんがrichmanさんのチュートリアルを詳しく読み解いているnoteを公開されています。非常に詳しく解説されており勉強になるのですが、機械学習に関する知見が一切ない自分にはまだ難しかったです。
そこで、「機械学習とは何か、どういうことをするのか、どうやって学習し予測するのか」という基礎を学びながら、機械学習の知見を少しづつ広げていこうと思います。
最初に選んだ教材は書籍ではなく、動画です。
Umedyという学習教材を提供するサイトでセールになっていたので購入しましたが、非常に丁寧に解説されていて分かりやすいです。
購入したのは【キカガク流】:初級編・中級編・アルゴリズム論前編です。
単回帰分析編
21/12/30
・1つの入力変数xが出力変数yに対してどの程度相関があるかを確認できる
・ICの計算は単回帰分析でやるっぽい
さきやまさんのnoteを解読してみた
重回帰分析編
22/1/1
・複数の入力変数xnが出力変数yに対してどの程度相関があるかを確認できる
・正規分布や中央値などを用いてデータの外れ値を対処し、予測精度を上げる
・データの標準化(StandardScaling)
スケールを統一し、各入力変数の重要度が分かるようにする
from sklearn.preprocessing import StandardScaler
# scalerの宣言
# 入力変数群:X
scaler = StandardScaler()
Xs = pd.DataFrame(scaler.fit_transform(X_train),columns=X_train.columns)
アルゴリズム編
2.基礎知識強化(プログラミング)
プログラミングに関する基礎知識強化というのは、”何を対象にするか”を決めるのが非常に難しいです(まだ定まっていない
まず大事だと思ったのはコーディング環境です。
”botの大工事を行ったらバグが出たけど、保存してしまって元のコードを蘇生できなくなった”
みたいなアホ丸出しなことをよくやっていたので、バージョン管理ができるようにgitを使うようにしました。
最初はリポジトリとかブランチとかコミットとか、わけわかめ状態でしたが、なんとかなりました。プライベートリポジトリ便利です。
あとはJupyterを使うようにしました。
最近知ったんですが、jupyterってチェックポイントという機能があって、プログラムの実行を途中保存できるんですね。。。
大変感動したのですがコーディングはしづらかったので、VScodeからjupyterを使うようにしました。
コーディングに関しては、人のコードをパクりながら頑張って上達していこうと思います。
asyncioの理解とかも進めないといけないな~
3.richimanbtcさんのチュートリアルを理解
このために、1.を実施しています。
手を動かしながら進めるのが一番効率が良いので、1.チュートリアルを読み進める ⇒ 2.分からないところを調べる のサイクルで進めます。
3-1.特徴量エンジニアリング
talibでローソク足からテクニカル指標を作成したり、OIやliquidationを特徴量にして試してみる。
⇒Liquidation使いたいけど、wsでデータ貯めないといけないのかな
3-2.richman non-stationarity score
21/12/29
キーワード
CV(CrossVaridation)
⇒交差検証。データをn個に分割して学習⇒検証を行う
参考:https://www.varista.ai/knowledge/cross-validation/KFold
⇒データをk個に分け,n個を訓練用,k-n個をテスト用として使う.
分けられたn個のデータがテスト用として必ず1回使われるようにn回検定する.
参考:https://qiita.com/chorome/items/54e99093050a9473a189
CrossVaridationの方法の1つとしてKFoldがあるらしいmodel.fit(df[features], np.arange(df.shape[0]))
model.fitって何をやっている?importance
重要度が高い=特徴量分布の定常性の度合いが低い?定常性
⇒ランダムかどうか汎化性
⇒汎用性が高いか低いかr2
⇒決定係数
高いほど予測精度が高い
(richman non-stationarity scoreでは高いほど汎化性能が低い)
参考:https://aizine.ai/r2-score0411/#toc1
3-3.目的変数の計算
⇒コスト込みのリターンを目的変数とすることで、
後からコスト削減について検討する必要がなくなるっぽい
高頻度系ならN秒後、N分後の価格を予測するとかでもいいみたい
3-4.モデル学習とOOS予測値計算
⇒モデルにはlightGBMというものを使用している
XGBoostの上位互換?計算が早くて良いらしい
KFoldでデータを分割し、学習と予測値算出を行う
3-5.バックテストと検定
3-6.実運用
4.機械学習bot作成
がんばります
5.アドベントカレンダーの記事を読む
実施中
6.有用な情報をまとめる
※メモ コメントを追記する
6-1.環境構築
まだCloud9使ってるの?
まちゅけんさん環境構築note
丁寧に解説されていて、環境構築はこれだけ見れば完結しそう。Visual Studio CodeでJupyter Notebookを使う方法
VScode-Jupyterのセットアップ方法VSCodeでGit・GitHubを使う方法を解説する【2021最新】
VScode-GitHubのセットアップ方法
6-2.HFT(MMbot)関連
暗号通貨HFTのススメ
HohetoさんによるHFT関連マガジン
概念や対策すべき事項などが解説されている。2週間で利回り4000%超を達成したトレーディングbot構築の考え方
UKIさんによるHFTの利益最大化note
利益最大化のための具体的な方法が記載されているPython3 MarketMaker(MM)BOTのサンプルロジックとソースコード
最強プログラマーmagitoさんによるmmbotサンプルコード
様々な言語を使いこなしており、既ににDEXbotをいくつも放流している模様。すごい。。Liquid高頻度取引ボット構築の指南書
Hohetoさんによるmmbot指南書【bitFlyer - LightningFX】アルゴリズム高頻度取引mmbotの作り方,考え方,サンプルコード紹介
mmbotxxxさんによるmmbotサンプルコード【Liquid by Quoine用】過去半月で収益率463%をたたき出したロジック概要と自動売買Botの公開
ドースーさんのmmbotサンプルコード
無料部分にロジックが書いてあり、参考になります。
6-3.アービトラージ関連
6-4.ML関連
richmanbtc/mlbot_tutorial
最強botter richmanbtcさんのmlbotチュートリアル
勉強中です。Machine Learning For Algorithmic Trading 解説リンクまとめ
カナヲさんによるML勉強リンクj26さんのnote
MLによるHFTbot作成ロードマップって感じ。めちゃくちゃ参考になります。richmanbtcさんのnote
最強botter richmanbtcさんのnote。
mlのみならずbotの参考になることしか書いてない。richmanbtcさんのチュートリアルをじっくり読んでみた
黒枝さんによるrichmanbtcさんのチュートリアル解読
神note!!機械学習を用いたロジック(の説明書だけ公開)
くもすけさんによるMLbotの作り方説明書。
すごくわかりやすい。