市場の売買状況によっては,(best_ask + best_bid) / 2 で注文しても通らない場合がある 逆に,もっと有利な価格で提示できる場合もある. このときに適切な価格で注文できれば,機会損失を防ぐことができる.
アルゴリズムの案として,
- 直近の売買サイズを計算
- 売買に偏りがあり,自分が市場と同様の行動をとるならば,成行注文
- そうでなければ,平均値より自分に有利な価格側に傾けた指値注文(best_xxxの内側を前提)
また,板にたまっている(特にbest_xxx付近の)サイズも見て決める必要がある
15分で考えていたが,平均値との乖離が大きすぎるため,5分足を適用 精度に問題なし どちらにしろ平均値との乖離問題はあとで考える必要がある
5分足(というか任意のn)を適用できるように修正 注文周りのエラーハンドリング強化したけど,ガチガチのbitflyer向けになってしまった
価格・情報量を考慮してConoHa VPSの利用を視野に
zaifの申請が終わらないので,coincheckで行う予定に変更 取引手数料無料がいつまで続くか...
様々なモデルで実験中 モデル・特徴量によって,10%もの精度差がある dropoutはたぶん有効 学習期間から遠くなるほど,学習結果が有効でなくなる可能性があり,定期的に機械学習を回す必要があるかも 学習期間外でも3択を今度こそ50+%で当てられるようになったので,実働に十分使えそう
DataMining周りのバグ修正 長期間稼働し続ける系システムの安定性を出すのは難しい
TODO: アカウント申請通過後,api周りを整備
15分足データをHistory15minとしてセット DataMining最中に定期的に実行
MySQLへの移行完了 sqliteからMySQLへ大量のデータを移行する場合,dumpよりpython+pandas+driverのほうが速い (チューニングによって解決する可能性はあるが手間:dump)
DBに15分足の価格データ(できればindicator)を入れる必要がある 定期的に(というかTraderがactiveになったときに)入れる
移行が済んだので,リアルタイムシミュレーションを稼働再開(bitflyer) 機械学習による学習結果を利用 何日か動かしていい感じなら実費で稼働 TODO: 取引成功率上昇方策の実装,失敗時のリカバリ TODO: slack(か何か)によるインターフェース -> 売買の停止/再開 強制実行
正解ラベルが正しくなかったことが判明 修正して学習させているが,精度が全く上がらない...
30分足で作成したモデルを,30分単位よりも15分単位で取引したほうがうまくいった(テスト範囲小) 3択から4択以上に変更すると,学習が進まない
予測がいい感じになったので,実際にモデルを取引に適用していく 手数料の関係で,bitflyer -> zaif に変更予定 :requirements <- zaifapi 取引量によっては再変更あり
sqliteだと同時アクセスに耐えられないためMySQLに変更予定
強化学習はいったん保留で機械学習(ディープラーニング)による推定 15分後の価格上中下3択を5割+で当てるモデルができたのでまずまず しかも上下逆にはずす確率は1割未満 モデル作成は適当なので改良すればいい感じになるかも?
機械学習の結果と合わせていい戦略をとれるように学習させるという方法はあるかもしれない 現状単体だとうまく学習させることができない
強化学習がうまくいっていなかったことが判明 カリキュラム学習の導入 + モデルや報酬の調整
chainerrlによる強化学習の導入 参考:https://launchpad.ai/blog/trading-bitcoin 総合するとプラスに見えるがどうか
強化学習による結果を用いるように改良中
- [解決]前のrや行動を保持しないといけない問題(実装の話なので時間の問題)
- [解決]最新のデータが格納されていない問題(最初にDataMiningを走らせることで解決予定)
- [解決]時系列でデータを取得しないといけない問題(see_dbで取得実験は完了)
- [解決]データの取得・加工に時間がかかりそう問題(index作成を試す予定)
save point法
テストケース: 現状のデータセットを複数期間に区切って評価
window幅 取引期間単位 購入・売却時の平均との乖離度(直近の分散に応じて)
移動平均との乖離は直後n日のmax/minに影響するか問題 なんとなく傾向はありそうだけど偶然ともいえそう(データセット不足)
直後1時間で今の値段が最高になりうるかどうか 注文が通ってなかったらどうするか問題
- border周りを変更したためその調整が必要
実行の流れ(30秒おきに実行)
- 直近100件のデータを取得し,売買ラインを決定
- 現在の注文状況・資産状況の取得
- 板情報を見て,売買ラインをこえていたら注文を出す
- 取引BTC0.01以上
- 29秒を期限に設定
- とりあえず中間価格で新規注文を出す
- そのうち既存注文を使えるようにしたい
CSVシミュレーションが注文更新まで実装 動作未確認のためテストの必要はあり 次はエージェントの作成か
csvでのシミュレーションがとりあえず動いたので、 csvで売買シミュレーションをできるようにしたい
テクニカル分析は統計的有意性がないので、基本あてにしない とりあえずの目安として利用する 適当にやった場合に勝率5割として、手数料分マイナス これを、儲かるまで待つとすることで期待値は上がるはず
holoviews
一定期間の
マーチンゲール法(倍プッシュ) ケリーの公式
https://www.slideshare.net/amedama/ss-72296136
エラーが起こるとロールバックする仕組みなので, 買って売っての繰り返しになって差額で死ぬ -> 失敗がある量を超えたら停止
手数料の壁 手数料込で儲かるかしっかり計算する
API結果と実際の取引所結果の差「実は売れ(買え)ていた」 購入結果は後からくることを知っておく
バックテストはあくまで理論検証 実地でうまくいかないことが圧倒的に多い
サーバにのっけた場合はセキュリティ
「素人でも「統計学」である程度の相場予想はできる!」 https://zuuonline.com/archives/92772
日本銀行公開の過去の金融データ https://www.stat-search.boj.or.jp/