専業システムトレーダーが学習するPython_なぜPythonなのか
ご無沙汰です!
普段からツイッターの書き込みはしているんですが、ブログを更新するのは久しぶりになってしまいました。。
4か月ほど前からプログラミング言語「Python」の学習をしていまして、日々Python! Python! と騒いでいるうちに周りのトレーダー仲間も興味を持ち始めていた様だったので、システムトレーダー視点でPythonの紹介記事を書いてみようと思います。
1、システムトレーダーがプログラミングを学ぶ経緯
そもそもなぜPythonなのかという話をする前に、システムトレーダーがプログラミング言語を学習する経緯について簡単に触れてみましょう。
私たちシステムトレーダーはそれぞれ異なる道を歩んでこの世界に入ってきたわけですが、シストレ環境を構築する言語の選択というのは、学生時代の専攻や職務経験から決定されるケースが多いように思います。
数理系の学部出身の方は「R」!
PG・SE等エンジニアとして働いてきた方は職務の中で使い慣れた言語、「Java」!「Ruby」!「PHP」!
といった具合に、過去にプログラミングに触れてきた方にとってはある程度選択肢が見えていて、各自のデータサイエンスを支える言語選択にはそれほど時間をかけて悩まないのかもしれません。
しかしながら、私のように門外漢の文系プレイヤーはどの言語を選択すればよいのでしょうか…。
もしシストレ初学者から言語選択の相談があった場合は、私は間違いなくExcelVBAを進めます。
学習コストの破格の小ささを考えれば、プログラミング門外漢が始めに学ぶべきはExcelVBAであると思うからです。
システムトレードで利益を出すためには最低でも
・証券(株式・市場・運用主体等)の知識 <-この学習に最も時間を割く必要がある(重要)
・統計解析技術(時系列分析、因子分析、システム評価等)
・プログラミング技術(データマイニング処理、情報収集等)
といった項目の学習が必要であり、それらの能力を身に着けるためにはそれなりの時間が必要となります。
能力の高いPG・SEはこの世に数多いれどトレーディングエッジがこの世から消えない理由の一つは、上記のようにシステムトレードの学習項目の多さが一因であり、まして何の技能も持たない門外漢が業火の熱意でもって高級言語のオブジェクト指向設計の習得に取り組んでも、ポリモーフィズムを理解する頃には自ら遠ざけたゴールまでの距離を垣間見、絶望することでしょう。
収益システムが完成する前に疲弊・消沈、シストレの森で遭難すること間違いなし。
門外漢がシステムトレーダーを志すならば、初動の学習欲求をグッと抑えつつも、まずはその熱意を学習コストの低いExcelVBAにぶつけることをお勧め致します。
(ExcelVBAでも一応、オブジェクト指向設計はできるようですし、ブックベースではなくコードベースの設計を心掛ければ、他の言語を学ぶ際にも役立つ技術的資産になると思います。)
繰り返しになりますがこのExcelというやつは学習コストに対するパフォーマンスが凄まじく、VBAを用いれば多少の学習で大抵の検証はできるようになります。
多少高度な作業も、「頑張れば」、ほぼなんでもいける。
私も2011年の震災の後からシストレ・ExcelVBAを学習し始め、そんな「何でも」できるツールを、今では不自由なく扱える様になりました。
しかしながら、それにも関わらず今では夢中になってPythonを学んでいるわけですね。
というわけで、その辺の事情に触れていきましょう。
2、なぜPythonなのか(なぜExcelではいけないのか)
なぜPythonなのか。
それはExcelVBAが苦手とする部分がネックになったからです。
「頑張れば」なんでもいけるExcelVBAにもやはり苦手なことがあり、ことシストレにおいては以下の点が「ExcelVBAの弱点」といえるポイントかと思います。
シストレにおけるExcelVBAの弱点はこんなところ。
1、情報収集に弱い
2、データ処理の量的際限が低い
3、処理が遅い
4、システムの再利用性に関しての問題
まず第一に、情報収集が苦手という点。
ExcelVBAでの情報収集はブラウザIEを操作することで行います。
これがまあコードは嵩張るし、ブラウザ更新待ちの制御しないといけないし、そもそもIEなぞいまさらインストールしたくないわけですよね。
ExcelVBAしか使わない方はこれを避けようが無い宿命だと信じ、この苦行を甘んじて受け入れているわけなのですが、これ、解消されます。
スクレイピングに関しては後々触れる予定ですが、Pythonを使うことで情報収集が超絶楽ちんになります。
第二に、データ処理の量的際限が低い。
第三に、処理が遅い。
この2つは両者近しい問題ですね。
最新のExcelシートの行上限は100万行程度だったと思いますが、この行数では日足までの検証が現実的には限度ですし、そもそもシートをフルに使う時点で処理速度が絶望的に遅くなってしまいます。
DataBaseを駆使したりデータ読み込み処理を分割したりと苦しい対策もありますが、Excelシートから解脱しなければ問題は根本的に解決しないものと考えていいでしょう。
ExcelVBAにはそういった「データ処理の量と速度」の枷がかかっていますので、ご自身の取り組みに対して前述の際限が枷となるようでしたら、Pythonの学習を検討すべきかもしれません。
第四に、システムの再利用性に関する問題。
みなさん、ExcelVBAで築いたシステム、再利用してますか?
検証したシステム(ブック)どこかで迷子になってません?
見つかった頃にはソースコードが理解不能になってませんか?
プログラミング初学者がシストレを始めたら、大抵経験する問題かと思います。
これには理由があり、ExcelVBAからプログラミングを学んだ人間は、目先の逐次処理をコーディングすることばかりに力を注ぎ、巨視的なコード設計思想の学習に時間を掛けないため、前述のような問題が起きてしまうわけです。
私たちのようなプログラミング門外漢がPythonを学習し始めると、まずソースコードの管理方法を考える必要があります。
必然的にExcelブックベースの管理ではなく、コードベースの管理・運用を考えるため、システム(コード)の再利用性は劇的に向上するはずです。
しかしながら、そのようなコードベースの設計というのはExcelでもできることですので、プログラミングへ取り組む意識さえ変えればこの問題の大部分は解決するはずです。
以上のようなExcelVBAの苦手部分を克服でき、かつ数値処理に強い言語を考慮すると、主要な言語では「Python」か「R」が候補に挙がることでしょう。
どちらもシストレに向いている言語ではあるのですが、WEB上や書籍の情報量を考慮すると「Python」の方が学習しやすい環境であると感じます。
ちなみに昨今、囲碁・将棋のAI戦に見られるように機械学習のブームが到来しており、その実装言語としてPythonに注目が集まっているという事情があります。
そんな事情から、日本語でのPythonのWEB情報や書籍が近年爆発的に増えているわけですね。
3、Pythonを学習する際のネック
一方で、シストレにおけるPythonが孕む弱点やリスクにも触れておきましょう。
大体こんなところでしょうか。
1、学習コストがExcelよりも大きい
2、環境構築の手間がある
3、「ちょっとした検証」にあまり向かない
4、言語周辺の開発が下火になるリスク
時間の経過とともに日本でのPython学習の敷居はどんどんと低くなってきていますが、それでもExcelと比べれば学習時間がかかってしまうことは事実です。
環境構築も多少考える必要がありますし、ちょっとした演算をしたい場合もExcelのほうが小回りが利きます。
(運用上でExcelの方が都合が良さそうなら、ケースに応じてExcelを使えば良いだけなんですけどね。)
サラリーマンのように時間に制限がある方は、ある程度初期学習に腰を据えて向き合う必要がありそうです。
と、以上のようなPythonの学習事情を踏まえたうえ、Pythonを学習してみたいという方に向けて、次回はシステムトレーダーが学ぶPythonの初期学習環境をご紹介します!
書籍の紹介も併せて書いていますので、いましばしお待ちを!
Miuraさん
Pythonの記事ありがとうございます。
学習コストは高いかもしれませんが、
毎日データを収集する時間コストを考えると長期的にはお得ですし、仮に言語開発が下火になったとしても今できることができなくなるわけではないので学んどくことはプラスだと思います。
次回の記事も楽しみにしております。
追記
来週の懇親会よろしくお願いします。
データ収集に用いるのはとてもコスパ良さそうですね。
科学技術計算に向いた言語は、どの時代にもデファクトスタンダードとなるものが必ず存在するようで、現在のそれはオープンソースのものではPythonとRみたいですね。
「次の世代」なんて言われているJulia言語のコードを少しだけ覗いたことがあるんですが、Pythonから乗り換えるのはそれほど大変ではなさそうに感じました。
プログラムの設計(思想)部分を押さえておけば、言語の開発が下火になることはそれほど大きなリスクではないかもしれませんね。
こちらこそ、懇親会楽しみにしています!