仮想通貨のトレードBOT開発記録

突然ですが、仮想通貨のトレードBOT開発記録を始めます。

スポンサーリンク

2018/06/12~2018/06-13の開発記録

node.js版が先ず目に入ったので、node.js版で注文出来るところまでを作ってみました。

環境構築はなんと、node.jsだけ。簡単過ぎる。

Node.jsのインストール by Windows8.1
Node.jsのインストールをしました。 環境は Windows8.1 になります。 Node.jsのインストール 推奨版...

インストールしてBOTを見よう見まねで作ったところまでは良かったのですが、進めていくうちにpythonの方が盛り上がっており、便利なライブラリとか多い感があったので、早くもnode.js版での開発をここでやめようと思います。

今回4時間 計4時間

2018/06/22の開発記録

python版にとりかかります。開発環境構築しました。簡単でした。

pythonのバージョンは3.6.5です。pythonだとこのコードはどう書くのかな?とか調べている時に結構3系から変わっているようなのでバージョンには注意が必要です。今のところ(2018/7/22時点)では3系にして良かったという感想です。

Python開発ツールAnacondaのインストール
Python開発ツールAnacondaのインストールをしましたので記録しておきます。 環境win8.1 64bit Anaconda...

今回2時間 計6時間

2018/06/23~2018/06/26の開発記録

bitFlyerのAPI、cryptowatchのAPIをテスト使用してみました。

ccxtというライブラリが優秀という事で早速試してみました。

https://github.com/ccxt/ccxt

APIを叩く為のパラメタ設定の定型文などまとまっているので、1行で注文出来たりします。作られたメソッドを呼ぶ形なので組み込みやすいですね。

pythonは初めてだったので勉強しながらで、まだ書き方・ぱっと見くらいですが、rubyに似ているような感じがします。

テストアルゴリズムで注文・キャンセル・決済を自動稼働するところまで動かしました。実際に注文出来るところまで来たので楽しいです。

基本的な操作は軽くですが触れられたので、次からはBOTの核となるトレードアルゴリズムやツール、内部インジケータの実装に入っていきたいと思います。

どういうBOTにしようかいくつか考えがあります。

  • レンジスキャ系BOT
  • 機械的スプレッドスキャ系BOT
  • 中長期での複合インジ系BOT
  • 裁量スキャサポートツール

たぶんコツがわかって作り始めたら開発時間は少ないはず。とりあえず全部作ってみます。

ここからが本当の始まりです。わくわく。

今回4時間 計10時間

2018/07/10~2018/07/21の開発記録

サンプルコードをベースにロジック部分だけの組み換えを行って、バックテストで収益がどうなるか色々試してみました。

当初やってみたかったEMA系から着手。EMAだけを見てエントリ・イグジットしてみるというもの。EMA指数を調整して試してみましたが、これだけでは当然勝てるわけがなく、2017年末のような一方向相場でない限りプラスにはならない…。そこからEMAと直近終値の乖離率をパラメータにしたり、利確・損切り幅をパラメータにしたり、色々パラメータが増えすぎた事により、パラメータの組み合わせで収益がどう変わるかを探す手間が増えてきました。そろそろパラメータ調査出来るように、バッチをパターン別に実行するバッチを作る事が必要になってきました。

matplotlib と pandas というライブラリを使って結果をグラフ化する事が出来ました。まだ全然改良の余地があり、これをベースに可視化しながら改良していきたいと思います。

ここまで、ちょっとずつ拾い物コードをベースに修正してきたのですが、その場しのぎのフラグ条件分岐なコードが増えてきました。今後の拡張性を考慮して、オブジェクト指向で一から作り直そうと思います。

他、バックテストを複数の足で測定出来るように過去データを集めるスクリプトを作りました。複数の処理をAnacondaで同時に走らせる為にマルチスレッドを実装しました。

マルチスレッドサンプルはこちらに追記

Python覚えた事・忘れそうな事を個人用にメモしていくページ
その名の通り「Python覚えた事・忘れそうな事を個人用にメモしていくページ」です。 随時更新中 if文を1行で書く result...

勝てるかどうか、とりあえずEMA系のBOTでプラス収益がバックテストで出てくるようになりました。一番大切なパラメータが何かという事もわかってきました。ただ、現状の作りではシンプルではないので、やはりフレームから作り直して、無駄な取引を排除してもっと利益を安定させる為に改善する必要があります。

試してみて感じた事ですが、相場環境の変化(トレンド転換だけでなく値動きの規則性の変化)が起きると、勝てるパターンも勝てなくなるという事が明らかになってきました。勝てるロジックが出てきたとすると、それを狩るような動きが出てくるように感じます。詳しくは書けませんが、他を見てもそれは当然の上で、みんな日々改良していっているようです。相場環境によってBOTを使い分けたりしているという話もありました。使い分ける判定もBOTに任せて1つのBOTに複数のロジックを組み込むという事も考えられます。どこからAIなのかというのもありますが、どんどんパターンが増えた先はAIという事なのだと思います。

ますます激化していくこの世界についていけるのかという不安もありますが、それよりも先ずは試してみたいという思いが今は強いです。バッチ処理なので画面とか気にせずゴリゴリ処理を書けるプログラムと結果が明確に出るのが楽しいからだと思います。いつまで持続するかわかりませんが…

直近課題

  • EMA系BOT(壁が見えるまで色々試してみる)
  • フレーム作り直し
  • グラフ改良
  • パラメータバリエーションテストバッチ

今後課題・やりたい事

  • リアルタイムAPI
  • MMBOT
  • SFDBOT

今回13時間 計23時間

2018/07/22~2018/07/30の開発記録

フレーム作り直しの為に、現状のメソッドと役割を整理して、あるべきメソッドを用意し直す事にしました。今後もパラメータを追加したり除外する事が頻繁に出てくるので、修正に耐えられるカスタマイズしやすい形にします。Pythonは初めてでフレームワークがあるのかもわからないのですが、先ずはモデルというか別ファイルにして切り分ける事にしました。グラフも少し使い方がわかってきて表示内容を整理しました。

ついでにクラスが使えたので使う事にしました。

「別ディレクトリ別ファイルのクラスを呼ぶ」を以下に追記しました。

Python覚えた事・忘れそうな事を個人用にメモしていくページ
その名の通り「Python覚えた事・忘れそうな事を個人用にメモしていくページ」です。 随時更新中 if文を1行で書く result...

参考中

https://it-engineer-lab.com/archives/68

パラメータ最適化バッチが出来たら、それを一定タイミングでチェックして自動的に反映する予定です。相場が変わると勝ち方が変わっている事がBOTの収益グラフから見れるのでそれを改善したいです。AI化へ歩みたい…

結局最適化バッチまではまだ出来ておらず、数千パターン分テストしてログを吐き出すところまでです。相場環境も日に日に変化するので、今はちょっとエクセルに集計して色々最適解を見ています。この方向で合ってそうだなって思えてきたら、パラメータ最適化算出バッチを作って、その値で1日回すとかになりそうです。完全自動化より1日毎に見直す方が現実的な感じがしてきました。

課題

  • 例外キャッチ
  • 売り買いでパラメータ分ける

今回19時間 計42時間

2018/08/08~の開発記録

先ず数千のパラメータからその日の最適化パラメータを算出するバッチを作ります。数千パターンで回すところまで出来ているので、ループ終了後にどの組み合わせが良かったか判定するところからです。