🖊なぜ仮想通貨botをPythonではなくClojureで書くのか

🖊なぜ仮想通貨botをPythonではなくClojureで書くのか

August 3, 2022

システムトレードのヒカキンになりたい人生だった #

2014年にFXのシステムトレードをPythonでやっていた #

2015年夏, 今から7年前にわたしがFXのシステムトレードをPythonでやろうとしたとき, Pythonでシステムトレードをしている人がとても少なかった.

夏休みの自由研究 は OANDA APIを利用して FX システムトレード | Futurismo

日本語で情報を探すとほとんど情報がないかもしくはtickを取得してみた系の入門記事のみ. Pythonでシステムトレードを組む情報は英語しかなかった. わたしは3万円くらいの怪しい英語の情報商材を購入してそのサンプルコードで勉強した.

システムトレードが日本で全くなかったわけではなく, MT4が主流だった. そして大事なことは, 2015年はPythonはまだ人気ではなかった. Rubyのほうが圧倒的な人気で, さらにいえば統計処理をするならばRだった. 記憶だと, この翌年に機械学習ブームがきてPythonの人気がでて, さらにそのあとビットコインが人気になる.

わたしが2015年にPythonでFXシステムトレードをやろうとした理由は, Rubyではじめるシステムトレードという本を2014/10に購入し, さらに2014/11にcourseraでシステムトレードの授業を受け, そこで使われていたのがPythonだったから. わたしのPythonデビューはcourseraの講義だった.

未来はわからないのでワクワク感を基軸にしてClojureを選択する #

2014年から8年の月日がながれた. まさかPythonが人気言語になることも, AIブームが来ることもビットコインが人気になることも, 全く2014年の時点では見えなかった. そして, 気づけばPythonで仮想通貨のアルゴリズム取引をする人たちがたくさんいた. 2015年にわたしがやっていたときはネットで検索するかぎりPythonで日本人ではみつからなかった. MT4の人はいた, 外人はいた. この状況は驚きである. 飽きっぽい私が仮に継続していたならば先行者利益でヒカキンになっていたかもしれない.

しかしよくわからない状況のなか, マイナーにものが好きなわたしはPythonをやっていた. Pythonがメジャーになってしまった今, なんかメジャーな言語をつかうのが嫌なのだ.

そして2014年に未来が見えなかったということはこの先数年でClojureの人気が来るかもしれないがそれはわからないのだ. こういうときは, ワクワクすることを判断の基軸にする. Pythonは残念ながらワクワクしないのだ.

ClojureでBotを書くときの壁と乗り越え方 #

ccxtがないのは自作する #

Clojureでbotを書こうとしたときにまず現れる壁は取引所のAPIを叩くライブラリがないので自作しないといけない.

具体的にはPythonでいうccxtがない. Javaのライブラリを呼び出すという選択肢もあるものの, Clojureの強さはデータを言語組み込みのMapとして扱うことでオブジェクト指向の世界のようななんでもかんでもクラスを定義しまくる世界観から脱却することなので, Clojureで自分で書いたほうがいいと思った. さらにいえば, Clojureの世界においてAPIコールは関数呼び出しにすぎない(Remote procedure callのようなものだ). つまりライブラリやORマッパーがなくても素でマッチョなClojureは関数を書いてMapに格納すればいい.

そうはいっても, さっそくBitflyerのAPIを叩いたところ, 認証部分が少しむずかしかった. しかしそこを半日かけて突破したらClojureでAPIを扱えのようになり, 少なくともccxtがない課題は克服した.

Clojureのセールスポイントがデータ分析だった #

bot開発においてロジックを組むのは簡単で問題は戦略を考えることだ. それはPythonでFXをやっていたときにとても感じた. だからこそデータ分析につよいPythonが最強なのかもしれない.

しかしClojureのデータ分析に興味があるので, bot開発のモチベとしてClojureによるデータ分析をハックするのはとてもおもしろそうだ. なぜならば, Python前夜のClojureの誕生初期のセールスポイントはなんとデータ分析だったのだ!Clojureにとってのデータ分析はお笑い芸人の綿手のときに売れた一発ギャグなのである. オリエンタルラジオの武勇伝なのである.

この事実をきいたことだけあるものの, 実際のところどうだったのか, そして今の現状はどうなのかということにとても興味がある.

最終的にはPythonを書いてなんとかする #

それでもいろいろと壁にぶち当たったら最終的にはPythonを書いてなんとかする. Pythonは あきたから嫌いなのであって, それなりには書ける.

Clojureの力への意志 #

Clojureの可能性について述べておく. まだ実際にやりかけのため, これは単なる仮説にすぎないのだが.

REPL駆動開発の力 #

Clojureをよく書くようになり他の言語が書くのが嫌になった最大の理由はREPL開発ができるかどうかにある. これのためにClojureをやりいたし他の言語を今は触りたくない. そのくらいこの方法はプログラミングを書くことのパラダイムシフトだった.

APIをちょろっと叩くのだってそのデータを変数に格納して中身をゴニョゴニョするのだって, 簡単にできる. Cljureを書く時, 自由を感じる. 同じことはPythonでもJupyter Notebookでできる. しかしJupyter Notebookが好きならばREPL駆動開発はその10倍好きになる.

誰だって玄関開けて5秒で合体したいように, Clojureを書いて5秒で実行したいのだ.

強力な並行プログラミングと遅延シーケンスの力 #

Clojureの強さのひとつはcore.asyncによる並行プログラミングを書くことかなと期待している. 実際のところ, わたしはClojureでcore.asyncをあまり書いたことがないので, この実際のところはわからない.

しかしPytyonのような共有メモリ方式の並行プログラミングよりは書きやすそうという印象はある. そもそもPythonの並行プログラミングは並行なのか?

とりあえずPythonよりは速い #

ClojureはJVMで動くので一応Java程度の速度があり, Pythonよりは速い. Clojureが遅いのは起動の部分だがbotならば関係ない. 開発中ならばREPL起動しっぱなしなので問題ない.

ガチるならばC++やRustがいいのかもしれない. そのときはまたそのときである. わたしはC言語しか書いてこない人生だったのでRustは書けないが勉強してみたい.


Backlinks