株のシステムトレードをしよう - 1から始める株自動取引システムの作り方

株式をコンピュータに売買させる仕組みを少しずつ作っていきます。できあがってから公開ではなく、書いたら途中でも記事として即掲載して、後から固定ページにして体裁を整える方式で進めていきます。

バックテスト環境の構築の前に、OSSにおけるライセンスの話、GPLv3の解釈の難しさ

A Bold GNU Head
"A Bold GNU Head" by Aurelio A. HeckertCC BY-SA 2.0

TL; DR

あるフレームワークを導入しようとしたら、 GPLv3 がライセンスとして採用されていた。自分のやろうとしていることが公開義務に引っかかるのか、そもそも派生的著作物とは何か、集めた情報を元に解釈し、方針としてどうするかを限られた時間(2時間1)の中でできるだけピックアップして記す。

はじめに

ここからはガチぶっつけで構築していく。書き溜めやストックは一切無く、予めうまく行くかの検証はしていない。なので、失敗したらその結果も載せるし、何故失敗したか、どうすれば良かったかも見ていくことになる。とある1人の開発者がどのように考えてどのようにたどっていったか、その軌跡も含めて誰かの参考になれば幸いである。

結論からいうと、80:20の割合で、今のところは backtrader を使うことを検討2している。一度 zipline を使うことも考えていたが、リアルタイムトレード周りで躓きそうな兆候があったため、最後の目的である自動取引の達成までを視野に入れるなら、少なくとも現時点でOANDA 等に公式対応している backtrader を使う方がベターだろうと考えた。

はじめに選択したのは backtrader だった

まず、当初は github: momentum/backtrader [official] を使うことを考えていた。著者が過去に使ったことがあるので、ある程度勝手を知っているというのもあるし、コミュニティもあるため、万一困ったら駆け込むことができると考えていたためである。

github.comwww.backtrader.com

また、日本語の解説記事もいくつか見つけられる。情報量として申し分ないと思った。

backtrader のライセンスは GPLv3 だった

しかし、実は私は backtrader の採用を断念しようとしていた。最大の理由は、ライセンスである。backtrader には GPLv3 がライセンスとして提供されているため、derivative work(派生的著作物)には公開の義務が生じる場合がある(と思われる3)。

どこまでが「派生的著作物」になるのかは、参考にする文献によりまちまちでいまいち要領を得ない。ライブラリの動的リンク・静的リンクで扱いが変わる4とする見解もあるし、本質的にはどちらも同じく派生的著作物であるとする見解5もある。「GNUが公式で言っているから正しい」と鵜呑みにするのは個人的には危険だと感じており、自分なりに納得できる情報を集め、自己の責任に於いて判断すべきと考える。もし、どうしても白黒はっきりさせたいなら裁判するしかないが、それをするモチベーションは今のところ無い。

GPLv3による負の影響、それの回避のための別プロダクトとしての zipline

もし、「僕が考えた最強のアルゴリズム」を使ってめちゃくちゃ儲けることができたとして、そのアルゴリズムを backtrader の上で動かすと、そのピカピカアルゴリズムは GPLv3 の派生的著作物として公開義務が発生するのか。明確な答えは定かではない6。法律や契約事の素人ではどうにも判断しにくい部分で、どう考えても本質ではない部分で要らぬ時間を浪費してしまうことになりそうな気配がしていた。

だったら、初めからそんな心配のないライセンスを謳うプロダクトへ乗り換えてしまおうということで、探し始めて見つかったのが github: quantopian/ziplineである。

github.com

スターの数も 12k=12,0004.8k=4,800 だった backtrader より多い7。また、コミュニティも用意されているので、こちらも詰まったら頼れそうである。

これが良さそうだと思ったし、実際にこれを採用しようと思った。その証拠に、目次のページにはその名残が残っている。しかし、最後の最後で断念した。理由は前述したが、リアルタイムトレードに難がありそうだったためである。

まず、zipline を提供する Quantopiankaggle のようにオンラインでエディタと実行環境を提供し、そこでスポンサー付きのコンテストを開催したり、企業向けサービスでバックテストを実行やデータの提供を行うことで収益を得ているようである。つまり、リアルタイムトレードはこのプロダクトのスコープに入っていないのではないか、というのが著者の考えである。そうだとすると、過去に zipline をリアルタイムトレードにも使えるようにするプロジェクトが3本も立ち上がっては消えを繰り返すほどリアルタイムトレードに需要があったにもかかわらず、未だに公式でのサポートが無い8のは、ある程度納得というか仕方ないよねという気持ちになる9

backtrader の GPLv3 ライセンスにどうケリを付けるか

となると、 backtrader を使うことを検討することに戻ってくる。そこで、いろいろな情報を集めつつこの記事を書いている。結局、下記のように折り合いを付けることにした。

  • GPLv3 は「個人的/社内的に使う分には公開の対象ではない10(著者意訳)」という公式の発表を信じて、仮にすごいアルゴリズムを思いついたとしても、個人利用なので公開する義務は無いと判断する。
    • 公開しても良いが、公開する場合は、コピーレフト条項により必ずGPLv3にする必要がある。
  • ブログの記事に書くアルゴリズムの解説は、判断が分かれるところ11を含む可能性があるので、明らかに backtrader が関わっていないと解説できない部分については GPLv3 にて公開する。
  • ブログの記事に書く・ブログの記事で解説するスクリプトのうち、 backtrader と不可分12のものは、基本的には GPLv3 にて公開する。

これで進めていこうと思う。あまり最初で立ち止まってしまって、途中で挫折、という事にはしたくないので、万が一上記で法的に問題がある可能性がわかったら、できる限り柔軟に対応したい。

おわりに

上記の方針で決めたので、一晩置いて考えて問題なさそうなら、いつものように朝8時にこの記事は投稿される。その頃には80:20のつもりで書き始めたこの記事は100:0で backtrader の使用を決定しているであろう。

もしこの記事を見た人の中で「ここの解釈がおかしいよ」と気付いた人がいれば、コメント欄かtwitter、はてブ等で教えていただけると助かる。


  1. 00:03から書き始めて、26:04 に終わった。

  2. 後述するが、初めはGNUv3の汚染を恐れて backtrader ではなく zipline を使うことを考えていた。

  3. 著者は法律や契約の専門家ではないので、断定や助言を避ける。

  4. wikipedia, stackoverflow

  5. GNU公式, ある弁護士の先生の見解1, 2, 3

  6. 社内的や個人的にGPLv3のプロダクトやライブラリを使用する場合、公開の義務は無いように読める。GNU公式, 日経XTECH, ある弁護士の先生の見解

  7. 2020年10月15日現在。ただし、スターの数が多いから良い、少ないから悪いというわけではもちろんない。あくまでどれくらいの規模の人が関心を持っているかの目安にしかならない。

  8. 引用: shlomikushchi, “shlomikushchi/zipline-trader: Zipline, a Pythonic Algorithmic Trading Library with broker integration”, “zipline-trader is based on: zipline project. zipline-live project. zipline-live2 project.”, https://github.com/shlomikushchi/zipline-trader, アクセス日:2020年10月16日

  9. 責めているわけではなく、「限られたリソースの中で最大限の効果・実績を出そうとすると、最重要でない部分の優先度は下がるのは避けられないよね」というだけのことである。著者も毎日これを感じるので、リソースの配分の難しさはよくわかる。

  10. Frequently Asked Questions about the GNU Licenses - GNU Project - Free Software Foundation

  11. 例えば、単純移動平均線 (SMA; Simple Moving Average) の説明をするだけなら、 backtrader は関係ないので GPLv3 にする必要はないと判断した。この場合、他者にライセンスを認めない(=コピーして自由に使える人は著者のみ)ので、No License になると考える。

  12. backtrader が無いと実行できないスクリプト、要するに backtrader を import しているスクリプト。

(C) 2020 dogwood008 禁無断転載 不許複製 Reprinting, reproducing are prohibited.