Slide 1

Slide 1 text

BitMech 探索的 トレーディングシステム

Slide 2

Slide 2 text

注意 本スライドは、投資勧誘や特定銘柄への投資を推奨するものではありません。投資に 関する最終決定はご自身の判断でなさるようお願いいたします。 本スライドの運用実績その他の情報は、今後の運用成果を予想または示唆するもので はなく、また、将来の運用成果をお約束するものでもありません。 投資は自己責任でね☆

Slide 3

Slide 3 text

目次 ベイズ最適化でトレーディングボットを最適化してみた https://github.com/mainyaa/gekkoJaponicus 強化学習でトレーディングボットを最適化してみた https://github.com/mainyaa/bitmech

Slide 4

Slide 4 text

ベイズ最適化でトレーディング ボット最適化してみた GekkoJaponicus

Slide 5

Slide 5 text

BitCoin市場の悪いところ BitCoinはハイリスクハイリターン。 そもそも金融商品じゃないため、国の保証はありません。 税金もそれなりにかかります。利益は雑所得。 個人だけじゃなく取引所自体もハッキングの被害にあっている。 まだまだ未熟な技術、コミュニティ

Slide 6

Slide 6 text

BitCoin市場のいいところ 取引手数料0.01%ぐらい。入金は100円ぐらいから出来る 取引所が山ほどある。パスポートがあれば外国の取引所でも取引できる 取引所が24時間空いている。ほぼすべての取引所がAPIとSDKがある ファンダメンタル要素がほとんど無い。テクニカルオンリーで行ける 取引の約定まで10分ほどかかる。超短期トレードがない。 常に成長しています。市場も資本も技術もコミュニティも。

Slide 7

Slide 7 text

BitCoinトレーディングボット 機械学習には、パラメーターが膨大な数がある。 グリッドサーチではとても効率が悪いが、ランダムサーチよりも早く結果を得たい。 →ベイズ最適化

Slide 8

Slide 8 text

ベイズ最適化 ある関数があるときに、そのパラメータが取りうる上限と下限を渡すだけで、なんども試 行して、探索的に最大の戻り値とそのパラメーターを探す pip install bayesian-optimization https://github.com/fmfn/BayesianOptimization ベイズ最適化の詳細はこちら! -> 機械学習のためのベイズ最適化入門

Slide 9

Slide 9 text

No content

Slide 10

Slide 10 text

ベイズ最適化 Gekkoというトレーディングボットがあったので、こいつのパラメータを最適化しようとした ら、同じようなことをGeneticProgrammingでやってる人が居たので、相乗りした https://github.com/mainyaa/gekkoJaponicus

Slide 11

Slide 11 text

ベイズ最適化 "MACD":{ "candleSize":(1,60), # tick per minute "historySize":(1,60), "short": (0.1,30), # short EMA "longWeight": (1.,5.), # long EMA(short*longWeight) "signal": (1,18), # shortEMA - longEMA diff "thresholds.down": (-5.,0.), # trend thresholds "thresholds.up": (0.,5.), # trend thresholds "thresholds.persistence": (0,100), # trend duration(count up by tick) thresholds }

Slide 12

Slide 12 text

ベイズ最適化 bo = BayesianOptimization(gekko_search, settings[Strategy]) bo.maximize(init_points=100, n_iter=500) max_val = bo.res['max']['max_val'] max_params = bo.res['max']['max_params'] ※gekko_searchは、BTC_USDTの365日の履歴から、ランダムに開始日付を決 め、そこから21日間を使用してBacktestを行う。それを100回繰り返し、利回りの平均 を戻り値とする ※評価フェーズでは訓練に使用した365日以外の直近21日をテストデータとする

Slide 13

Slide 13 text

結果

Slide 14

Slide 14 text

ベイズ最適化 "MACD": { "candleSize": 50.37603262287613, "historySize": 49.11385249240558, "short": 11.190538130227413, "long": 31.9361776661688, "signal": 8.345598472515947, "thresholds": { "down": -2.647355926611602, "up": 4.830104575041095, "persistence": 25 } },

Slide 15

Slide 15 text

"report": { "currency": "USDT", "asset": "BTC", "startTime": "2017-06-17 07:35:00", "endTime": "2017-09-15 07:35:00", "timespan": "3 months", "market": 27.596381454724337, "balance": 3131.48495283, "profit": 576.0583990200003, "relativeProfit": 22.54255353812181, "yearlyProfit": "2336.23684047", "relativeYearlyProfit": "91.42257824", "startPrice": 2455.42655381, "endPrice": 3133.03543194, "trades": 11, "startBalance": 2555.42655381, "sharpe": 3.4588682678334988, "alpha": 548.4620175652759 }

Slide 16

Slide 16 text

小数 最適化で得られる数は小数である。 人間のトレーダーは見ているトレーディングプログラムのせいで知らないうちに整数とい う制約を課されている。 キャンドルサイズ、EMAの数値など、あらゆるものは小数を使うことでより細かくなる

Slide 17

Slide 17 text

No content

Slide 18

Slide 18 text

No content

Slide 19

Slide 19 text

No content

Slide 20

Slide 20 text

// MACD Settings // 1st Evaluate: // count: 20.000 // mean: 1.956 // std: 8.047 // min: -11.649 // 25%: -3.180 // 50%: 0.989 // 75%: 4.577 // max: 19.710 // 2nd Evaluate: // count: 20.000 // mean: -1.209 // std: 7.454 // min: -13.935 // 25%: -6.069 // 50%: -1.290 // 75%: 4.532 // max: 15.764 // 3rd Evaluate nearest date: 2017-08-04 01:17:00 to 2017-08-07 01:17:00 // Evaluted Score: 15.179254 // Realtime Score: 19.415671644

Slide 21

Slide 21 text

voting 複数指標をまとめたトレーディングシステムを作りたい 利回りr、n個の指標 w=r/nを指標のウェイトとしてBUYの指標の合計が0.5を超えたらBUYする →うまく行かなかった。AND条件になるため、売買回数が少なくなる

Slide 22

Slide 22 text

Gekkoの限界にぶち当たる 単一指標しか動かない JavaScriptじゃなくてPythonで書きたい Gekkoのソース読んだらすごいシンプル。これなら自分でかけるんじゃない? フルスクラッチでPythonで書きました!→ BitMech https://github.com/mainyaa/bitmech

Slide 23

Slide 23 text

強化学習でトレーディングボッ ト最適化してみた BitMech

Slide 24

Slide 24 text

強化学習 AlphaGoで有名な手法 探索的に 強化学習の詳細はこちら! -> ゼロからDeepまで学ぶ強化学習

Slide 25

Slide 25 text

強化学習 試行錯誤を通じて与えられた「環境」における「価値を最大化するような行動」をエージェ ントに学習させる手法 pip install keras-rl git clone https://github.com/matthiasplappert/keras-rl python examples/dqn_cartpole.py 強化学習の詳細はこちら! -> ゼロからDeepまで学ぶ強化学習

Slide 26

Slide 26 text

強化学習 BTC_JPYのOHLCデータと、PPO, RSI, STOCHRSIのデータが環境 BUY, SELL, HOLDの3アクション keras-rl を使ってDQNで学習させてみた https://github.com/mainyaa/bitmech/blob/master/bitmech/dqn_backtest.py

Slide 27

Slide 27 text

Layer (type) Output Shape Param # ============================================================= dense_1 (Dense) (None, 4, 4320, 16) 128 activation_1 (Activation) (None, 4, 4320, 16) 0 dense_2 (Dense) (None, 4, 4320, 16) 272 activation_2 (Activation) (None, 4, 4320, 16) 0 dense_3 (Dense) (None, 4, 4320, 16) 272 activation_3 (Activation) (None, 4, 4320, 16) 0 flatten_1 (Flatten) (None, 276480) 0 dense_4 (Dense) (None, 3) 829443 activation_4 (Activation) (None, 3) 0 ============================================================= Total params: 830,115 Trainable params: 830,115 Non-trainable params: 0

Slide 28

Slide 28 text

No content

Slide 29

Slide 29 text

強化学習 memory = SequentialMemory(limit=100000, window_length=WINDOW_LENGTH) policy = BoltzmannQPolicy() dqn = DQNAgent(model=model, nb_actions=nb_actions, memory=memory, nb_steps_warmup=10, target_model_update=1e-2, policy=policy) dqn.compile(Adam(lr=1e-3), metrics=['mae'])

Slide 30

Slide 30 text

結果

Slide 31

Slide 31 text

{ "startTime": "2017-09-16 21:20:00", "endTime": "2017-10-16 21:10:00", "timespan": "30 days +00:10:00", "market": 57.54195628060023, "profit": 211503.88575317, "relative_profit": 52.47206769719335, "relativeYearlyProfit": 667.1723099962994, "trades": 7, "alpha": -5.069888583406879, "vol": 14.58040336060525, "beta": 8.57450862367706, "hpm(0.0)_1": 10.57393540908159, "lpm(0.0)_1": 0.20543805133434886, "VaR(0.05)": 0.741872972377621, "CVaR(0.05)": Infinity, "Drawdown(5)": 0.741872972377621, "Max Drawdown": 0.9931148851914983, "Treynor Ratio": 1.2092024461391673, "Sharpe Ratio": 0.7111131664714991, "Information Ratio": 6.059422344061186, "Excess VaR": 13.975865395072118, "Conditional Sharpe Ratio": 0.0, "Omega Ratio": 50.46931050430054, "Sortino Ratio": 29.168212961815183, "Kappa 3 Ratio": 23.461701486849886, "Gain Loss Ratio": 51.470189385084225, "Upside Potential Ratio": 29.746660498584962, "Calmar Ratio": 10.440198769342185, "Sterling Ratio": 15.433829081932238, "Burke Ratio": 13.578582235419699, }

Slide 32

Slide 32 text

トレード情報: currency, asset, startTime, endTime, timespan, market, balance, profit, relativeProfit, startPrice, endPrice, trades, startBalance, alpha リスク指標: volatility, beta, hpm(0.0)_1, lpm(0.0)_1, VaR(0.05), CVaR(0.05), Drawdown(5), Max Drawdown リスク調整済み指標: Treynor Ratio, Sharpe Ratio, Information Ratio VaR調整済み指標: Excess VaR, Conditional Sharpe Ratio 下方部分積率リスク調整済み指標: Omega Ratio, Sortino Ratio, Kappa 3 Ratio, Gain Loss Ratio, Upside Potential Ratio ドローダウンリスク調整済み指標: Calmar Ratio, Sterling Ratio, Burke Ratio

Slide 33

Slide 33 text

BitMechで出来ること Backtest機能、realtime取引機能、realtime dry-run機能 Import機能:poloniexとbitflyerのOHLC, volume, trade数取得 hyperoptによるベイズ最適化 レポート機能:モダンポートフォリオ理論、ポストモダンポートフォリオ理論、CAPMなどに 使われる各種リスク調整済み指標が20個ぐらい(ただし、比較対象となるベンチマーク は今のところマーケットそのもの) DQNによる複数指標込みの学習

Slide 34

Slide 34 text

BitMechの今後 複数の通貨ペアでの最適ポートフォリオ探索(ブラックリッターマンモデル、モーメンタ ム、バリュー、グロース) マーケットニュートラル、ストップロス最適化、Exit戦略、ヘッジ最適化、日次で学習&最 適化 注文時にorderbook/spreadを見て、t分以内で約定しそうな価格の上限下限の推測 現在は現物だけなので他のものも:レバレッジ、オプション、先物、裁定 しばらくやらないこと:ICO、Windows対応、WebUI

Slide 35

Slide 35 text

No content

Slide 36

Slide 36 text

まとめ BitCoinいいよ ベイズ最適化いいよ 強化学習いいよ BitMechちゃんをよろしくお願いします。