アルゴリズム取引を始めよう！　～イントロダクション～

## モチベーション
私のブログの方([Machine Learning For Algorithmic Trading 解説リンクまとめ](https://note.com/kanawoinvestment/n/n928f936d6bc1))で上級者向けに日本語でアルゴリズム取引に関する本を翻訳、解説しているのですが、いきなり始めるにはかなり難易度が高いと思いました。
そこで、アルゴリズム取引の目標や、どういった分野を勉強するのか、そして、どういった予備知識があれば良いのかについてここでは紹介したいと思います。
ここで書いてある技術的なことや細かい部分はブログでコード付きで紹介しているので、興味ある部分はブログの記事を直接参考にする等ご自由にご活用くださいませ。
**新しく始めたい方**や**既に始めているけど知識に穴がある方**の参考になれば幸いです。

## 1.1 目標: アルファを見つけよう！
投資の定量分析者の目標は、「**将来の価格変化率を説明出来る変数**=**新しいアルファを持つ変数**の探索」と「そのリターンをシステムトレーディングか執行インフラによって搾取すること」です。
アルファを見つけることは難しいです。なぜなら、それが一度発掘され、皆に認知されれば、将来の価格変化率との相関性が無くなってしまうからである。
ここでは、主に3つの数理モデルについて紹介します。**ベイズ統計**、**時系列分析**と**機械学習**です。
これらのモデルはアルファを見つけるのに役立ちます。
実際、これらのモデルは、世界最大級の資産運用会社やクオンツファンドでは既に使われています。

## 1.2 なぜベイズ統計、時系列分析、機械学習なのか？

ここ数年で技術は十分に進歩したおかげで、私たちは所謂「ビッグデータ」を呼ばれる類のデータに対しても統計的分析を行うことが可能となりました。
これらのソフトウェアはほとんどがオープンソースで無料で尚且つちゃんとテストされていて、使い方も簡単です。
フリーソフトの流行と共に主にYahoo Finance, Google Finance, QuandleやDTN IQ Feed等のサービスによるファイナンスデータへのアクセスも増えました。
個人がクオンツトレーダーになることを決めた要因の一つにファイナンスデータへのアクセスのしやすさも挙げられると思います。
しかし、これらへのリソースにアクセス出来ただけでは、所謂「テクニカル分析」という領域に踏み込むことは出来ません。
投資における重要なトピックである**リスク管理**,**ポートフォリオ構築**,**アルゴリズム執行**の分野は専門的で難しく、避けられやすい分野でもあります。
つまり、ここでは、**ネクスト・ステップ**として、既にクオンツトレーダーとしてのキャリアを歩んだ方やより専門的な方法に挑戦したい方向けの内容となっております。
定量分析における主要研究分野は厳密な統計的分析です。これは、少々つまらない話題に聞こえるかもしれませんが、これは実世界のデータに応用できるだけでなく、不確実な将来への投資手法やアプローチに対する考え方である**精神的なフレームワーク**も提供してくれます。
統計的分析は学術的にかなり大きな分野になっており、ここではそのほんの一部を紹介します。
一部の選定も難しいのですが、ここでは、**ベイズ統計**、**時系列分析**と**機械学習**の３つの分野が今最も界隈で使われているアプローチであると思うため、これらについて少しだけ紹介したいと思います。

**1.2.1 ベイズ統計**

ベイズ統計は確率について考えるときの代替的手法です。どういうことかと言いますと、伝統的な**頻度主義的アプローチ**では、沢山の試行後の結果について確率を考えておりました。例えば、コインの表が出る確率は、コインを投げ続けて測定していたのです。
ベイズ統計は違うアプローチを取ります。ベイズ統計では、コインの表が恐らくこういう分布に従っているであろうという**確率分布を推定するアプローチ**です。
これはとても主観的に聞こえますが、実務上では極めて効率的であることが往々にしてあります。
データが更新されたときは、有名なベイズの定理を用いれば、分布を更新することが出来ます。
ベイズ統計は、様々な分野でも良く使われる上に、投資の定量的な問題に対しても極めて有効性が高いです。
ベイズ推定はベイズ統計の応用の一つで、データから推定を行い、予測します。
一つの目標としては、将来の株価を予測することや変化した原因を理解するために用いることでしょう。
ベイズ統計によるフレームワークは、このような目標に対して、現代的で、洗練された数学的なツールです。
時系列データ分析や機械学習モデルのアルゴリズムでは、ベイズ統計は恐ろしく使用する為、まずベイズ統計から議論を始めることがとても大事です。
プログラミングでベイズ推定を行うことを*probabilistic programming*と呼ぶのですが、PythonではPyMC3という便利なライブラリがあります。[PyMC3の公式リンク](https://docs.pymc.io/)

**1.2.2 時系列データ分析**

時系列データ分析は金融時系列データを分析するための*働き者*の技術を提供してくれます。
ほとんどのクオンツも時系列データの基本的な分析から始まります。
時系列データ分析のためのツールを応用することによって、金融資産の振る舞いを評価することが可能です。
重要な考え方は、系列の相関性です。簡潔に言えば、株価の日次データに対して、系列相関は「今日の価格」が「昨日の価格」に対してどれくらい相関していたのかを表します。
時系列データ分析は、*テクニカル分析*よりも株価データの振る舞いを理解するためのより厳密なアプローチです。
テクニカル分析では、トレンドや平均回帰性、ボラティリティのための*インジケーター*で分析する一方で、時系列データ分析は統計的推論を用いて分析します。
これは仮説検証、適合具合とモデル選定も含まれます。これらは、リスク資産の振る舞いを厳密に決めるのに役立ち、結果的にシステムトレーディング戦略の利益を増加させます。
トレンドや季節性分析、長期メモリー効果やボラティリティクラスタリングはより詳しく市場を理解するのに役立ちます。

**1.2.3 機械学習**

機械学習は、膨大なデータの中から時間的な要素が存在しているかどうかを検証するための現代的な統計モデルです。
また、機械学習は、広義の*データサイエンス*の一部です。根本的には、厳密な確率的フレームワーク(主に最適化のための技術)の計算方法の集合体です。これは**データから学習すること**を提供してくれます。
機械学習は一般的に3つのカテゴリに分けられます。**教師あり学習(Supervised Learning)**,**教師なし学習(Unsupervised Learning)**,**強化学習(Reinforcement Learning)**です。
・**教師あり学習**は*訓練データ*を用いてモデルを訓練、または学習をし、データの中にあるパターンを検知しようとします。
教師なし学習はこれとは異なり、訓練データという概念がありません。
・**教師なし学習**のアルゴリズムは正解ラベルに対するペナルティーや報酬無しでデータを単独学習します。
実は、一見便利で簡単そうに見えて、これは投資の定量分析において問題を遥かに難しくさせます。
・**強化学習**はGoogle DeepMindが主催したAlpha GoやAtari 2600 videogames等のコンテストによってかなり有名になり、人気になりました。しかし、強化学習は学術研究においてはかなり広範囲であり、残念ながらこの記事では紹介しません。

Pythonで機械学習を実行するためには、Sckit-LearnやPandasのライブラリが便利です。

## 1.3 ベイズ統計、時系列分析、機械学習の主な学習分野

**ベイズ統計**
・事前分布とマルコフ連鎖モンテカルロ法(MCMC)によるサンプリング

**時系列データ分析**
・系列相関の概念から始まり、ホワイトノイズやランダムウォーク等の単純なモデルへと応用します。
・ここから、ARIMA系等のより洗練された線形モデルを学びます。
・その後、GARCHモデルを学びます。
・これらの線形モデルを学んだら、共和分(ペアトレーディングでかなり使われます)を学びます。
共和分に関しては、こちら([◆時系列データ分析、定常性マスター編　～平均回帰性を見つけよう～◆](https://qiita.com/kanawoinvest/items/1035a2e5d1b58d81dae8))でも解説しました。

**機械学習**
・まずは線形モデルについて学び、機械学習のアイデアについて理解を深めます。
・そこから、決定木、SVMやランダムフォレスト等の非線形モデルについて学びます。
・K-Meansクラスタリング等の教師なし学習についても学びます(すみません、ここは、まだ更新してません...)

## 1.4 必要な予備知識

いきなりアルゴリズム取引を始めるにしても、全く数学やプログラミングが出来ないと正直理解が厳しいと思います。
ここでは、どういった予備知識が必要なのかについてまとめたいと思います。

**1.4.1 数学**

・数学の基礎(集合と位相)、線形代数、微積分、確率統計
名前を聞いただけでもゾッとするかもしれませんが、特に線形代数は学んだ方が良いです。
線形代数は機械学習をやっていたら、本当に当たり前のように出ます。

有名なオンライン教材を紹介します。

・ **Khan Academy** - https://www.khanacademy.org
・ **MIT Open Courseware** - https://ocw.mit.edu/index.html
・ **Coursera** - https://www.coursera.org
・ **Udemy** - https://www.udemy.com

**分野別**:
・**Linear Algebra** by Gilbert Strang - http://ocw.mit.edu/courses/mathematics/18-06sclinear-algebra-fall-2011/index.htm
・**Single Variable Calculus** by David Jerison - http://ocw.mit.edu/courses/mathematics/18-
01-single-variable-calculus-fall-2006
・**Multivariable Calculus** by Denis Auroux - http://ocw.mit.edu/courses/mathematics/18-
02-multivariable-calculus-fall-2007
・**Probability** by Santosh Venkatesh - https://www.coursera.org/course/probability

**1.4.2 プログラミング**

主にPythonを使います。有名コンテンツを下に添付致します。無料なので、是非ご活用ください。

・**Programming for Everybody** - https://www.coursera.org/learn/python

## 参考文献

・*Advanced Algorithmic Trading, by Michael L.Halls-Moore*
・*Machine Learning for Algorithmic Trading: Predictive models to extract signals from market and alternative data for systematic trading strategies with Python, 2nd Edition, by Stefan Jansen*