アルゴリズムトレードの道具箱 | FX/CFD上級者向け書籍
お勧めポイント
サンプルを見る
アルゴリズムトレードの道具箱
VBA、Python、トレードステーション、アミブローカーを使いこなすために
アルゴリズムトレードシステムの構築方法
本書はトレードステーションのイージーランゲージやアミブローカーのAFL、Pythonなどの言語を使用したアルゴリズムトレードシステムの構築、PythonやExcelVBAを使ったバックテストなどを紹介しています。
FXで主に使用されているMT4で使用する言語とは異なりますが、システムトレード上級者の方であれば自動売買システム構築、バックテストのプロセス等は参考になる面も多いと思います。
アルゴリズムとは?
本書では「アルゴリズムとは有限個のステップで何かを成し遂げる、効果的な手順のことを言う」というデビッド・バーリンスキーの定義を用いて説明しています。
下記のアルゴリズムの条件を用いてロジックを組み立てていきます。
仕掛けのルール、決済のルール、資金管理のルールなどをどのように組み立てていくのかをいくつかの売買ルールを例に挙げて説明しています。 アルゴリズムの条件
1.入力・・・外部から提供されるゼロあるいはそれ以上の量がある。
2.出力・・・少なくとも1つの量が生成される。
3.明確性・・・各命令は明確で一義的でなければならない。
4.有限性・・・アルゴリズムの命令をなぞると、アルゴリズムは必ず有限数のステップで終了する。
5.有効性・・・各命令は鉛筆と紙だけを使って実行できる基本的なものでなければならない。各操作は上記3の明確性を持つだけでは不十分で、実行可能なものでなければならない。
豊富な巻末資料
本書では巻末に本書で紹介しているアミブローカーやトレードステーションに関する資料やエクセルVBAやPythonを使用したバックテスターのソースなどが紹介されています。
本ホームページに掲載されている事項は、投資判断の参考となる情報の提供を目的としたものであり、投資の勧誘を目的としたものではありません。投資方針、投資タイミング等は、ご自身の責任において判断してください。本サービスの情報に基づいて行った取引のいかなる損失についても、当社は一切の責を負いかねますのでご了承ください。また、当社は、当該情報の正確性および完全性を保証または約束するものでなく、今後、予告なしに内容を変更または廃止する場合があります。なお、当該情報の欠落・誤謬等につきましてもその責を負いかねますのでご了承ください。
アルゴリズムトレードの道具箱
VBA、Python、トレードステーション、アミブローカーを使いこなすために
■目次(本テキストは再校時のものです)
監修者まえがき
著者について
序論
第1章 トレード入門――アルゴリズムの開発
アルゴリズムとは何か
トレードアイデアを疑似コードに変換する方法
まとめ
第2章 ストキャスティックス、移動平均線、RSI! うわぁ、こんなにあるの!
オシレーター
価格ベースのインディケーター
まとめ
第3章 完全トレーディングアルゴリズム
トレンドトレードのバトルロワイヤル
ポートフォリオの構成
複数アルゴリズム戦略(MAS)
まとめ
第4章 アミブローカーのAFL入門
クイックスタート
価格足インターフェース
AFL配列プログラミング
シンタックス(文法)
AFLウィザード
アミブローカーのループプログラミング
まとめ
第5章 マイクロソフトエクセルを使ってアルゴリズムをバックテストする
VBA関数とサブルーティン
データ
ソフトウェアの構造
プログラミング環境
まとめ
第6章 Pythonを使ってアルゴリズムをバックテストする
なぜPythonなのか
Pythonのインストール
PSBのインストール
PSBの構造
本格的な作業の開始
まとめ
第7章 イージーランゲージ入門
トレードステーションのIDE
シンタックス
イージーランゲージの例
まとめ
第8章 遺伝的最適化、ウォークフォワード、モンテカルロスタートトレード分析
トレードステーションとアミブローカーの使用
コンピューター、進化、問題解決
人口(母集団)
VBAエクセルを使って最初の母集団を設定する
エクセルVBAを使って染色体の適合度を検証する
選択
繁殖
突然変異
トレードシステム開発で遺伝的アルゴリズムを使う
過剰カーブフィッティングを防ぐ
ウォークフォワード・オプティマイザー――余分な労力と時間を費やす価値のあるものなのか
モンテカルロ分析
スタートトレードドローダウン
まとめ
第9章 ポートフォリオマエストロ、マネーマネジメント、ポートフォリオ分析入門
固定比率
ポートフォリオマエストロ
まとめ
付録A アミブローカー
付録B エクセルシステムバックテスター
付録C Pythonシステムバックテスター
付録D トレードステーションとイージーランゲージ
付録E アルゴリズムトレーディングに関する必携書リスト
本書のウェブサイトについて
監修者まえがき
本書はフューチャーズ・トゥルースの研究責任者であるジョージ・プルートによる“The Ultimate Algorithmic Trading System Toolbox + Website : Using Today’s Technology To Help You Become A Better Trader”の邦訳である。アルゴリズムトレードはいまや個人投資家にとって参入障壁が低く、良好なリターンが期待できる代表的な投資手法の一つとなったが、それがなにより素晴らしいのは、優れた投資戦略を構築・実装するための学習プロセスのパスや、避けるべき陥穽が先人たちの経験によって明らかになっていることで、よほど天邪鬼な人でなければ、費やした努力や熱意に比例して上達が進むことになる。本書ではアルゴリズムトレードの基礎だけではなく、PythonやEasyLanguage、VBAといった身近な言語を使ったプログラミングの初歩を学ぶことができ、紹介されているコードはすべてウェブサイトからダウンロード可能である。これらのコードを流用することで、この分野に興味はあるがどこから手を付けてよいか迷っていた人でも無理なくスタートが切れると思う。
さて、ここで伝統的な投資手法とアルゴリズムトレードとのデザインの相違について書いておく。一般的な投資手法で使われる知識は、金融市場における個人の経験や洞察に基づいて、まず暗黙知として創造される。次にそれを出発点として思考や対話を行うことで演繹的に形式知が導出される。それを実装化したものが投資戦略である。このスタイルの特長は、「なぜこの戦略を使うのか?」における根拠がハッキリしていることである。一方でアルゴリズムトレードにおいては、知識はデータを分析することでまず情報の形で提示される。ここから仮説を立て、批判的合理主義に基づく検証を経て帰納的に形式知が抽出される。このデータドリブンのアプローチは、コンピューターやネットワーク、ビッグデータ解析、人工知能(AI)といった最新の技術と親和性が高く、近年注目を浴びることとなった。だがデータをマイニングしただけでは、その正当性は何も保証されない。したがって、金融市場の複雑性・ランダム性を克服して実践的な投資戦略を構築するには特有の手順が必要である。具体的には、本書にあるようなウォーク・フォワードテストや遺伝的アルゴリズムをはじめとして、アンサンブル学習やさらにはリバースエンジニアリングによるクローン作製などの方法によって再現性・妥当性を確保することになる。この工程の重要性はあまり強調されることがないが、アルゴリズムやAIを利用した運用の成否はこの要素にかかっている。ぜひ本書をはじめとした先行文献の解説を熟読玩味されたい。
最後に、翻訳にあたっては以下の方々に感謝の意を表したい。山下恵美子氏は正確な翻訳を行っていただいた。そして阿部達郎氏には丁寧な編集・校正を行っていただいた。また、本書が発行される機会を得たのは、パンローリング社の後藤康徳社長のおかげである。
2017年5月
長尾慎太郎
■序論
まず最初に断っておくが、略奪的トレード、ピンギング、PoP、流動性リベートといった特殊な注文の発注・変更アルゴリズムを使った高頻度トレードについて知りたい人には本書は向かない。本書は、トレードの意思決定をしたり、トレードサイズを決めたり、マネーマネジメントを行ったりするトレーデングアルゴリズムと、こうしたアルゴリズムを作成するソフトウェアについて学びたい人を読者対象とするものだ。
本書ではトレーディングアルゴリズムの開発・検証・最適化について学んでいく。本書のもう1つの目的は、読者にたくさんの検証プラットフォームやプログラミング言語に触れてもらうことである。プログラミングの経験がなくても心配することはない。あなた自身のトレードシステムが開発できるように細かく指導していく。ソースコードと説明はトレードステーションのイージーランゲージ、アミブローカーのAFL、そして私のPythonとエクセルの検証エンジン用のものが用意されている。これらのプラットフォームを選んだのは、異なるスクリプト言語と異なるトレーディングプラットフォームの概要を見るのに打ってつけと思ったからだ。これらとは異なる検証・トレーディングプラットフォームを使っている人は、私がこれらのプラットフォームを選んだことを批判するかもしれないが、イージーランゲージのソースコードはマルチチャートに簡単に移植することができ、アミブローカーの一種独特でパワフルなプラットフォームは完全トレーディングソリューションを提供してくれる。Pythonとエクセルのソフトウェアはソースコードも含めて関連ウェブサイトで見ることができる。このウェブサイトではほかのプラットフォーム用のイージーランゲージコードとAFLコードも提供している。物事はできるだけシンプルなほうがよい。だから、Pythonの数学関数ライブラリーのNumPyやSciPyは含んでいない。また、学習曲線を短縮するためにPythonの基本的な総合開発環境(IDLE)を使った。高度な総合開発環境を使って物事を複雑にすることなく、Pythonの必要最小限の要素だけを使いたかったからだ。
成功しているクオンツたちは統計解析用プログラミング言語のRを使う人が多いが、私は物事を簡単にするために学習しやすいPythonを選んだ。すべてとは言わないが、大部分のアルゴリズムはコモディティと先物データのみを使って検証したが、本書に登場するすべての検証プラットフォームは株式とETF(上場投信)を検証するのにも使うことができ、本書に含まれるすべてのトレーディングアルゴリズムもこれらのアセットに適用することができる。株式データとETFデータは取得がきわめて簡単だが、コモディティと先物データを簡単に使えるフォーマットで取得するのは少し難しい。しかし、コモディティと先物のヒストリカルデータはわずか100ドルでピナクルデータから取得することができる。私は1980年代の終わりからずっとCSIデータを使っているが、本書で行った検証の大部分でもこのデータを使った。データベースを毎日更新したい人は、ピナクルとCSIがお勧めだ。Quandlを知らない人は、ぜひ使ってみてほしい。Quandlは数値データの検索エンジンだ。Quandlで無料の先物つなぎ足のデータベース(Wiki Continuous Futures)を見つけたときは、驚きのあまりうれしくなった。ただし、このデータは無料なので、日付やデータポイントが欠損していたり、つなぎ足が各限月からのデータをつなぎ合わせただけのデータであったりといった具合に、CSIやピナクルといった高品質のデータほどは良くないことはご承知おき願いたい。
また各限月間のギャップが含まれているため、検証プラットフォームでは使えない。現実世界では、先物ポジションは「ロールオーバー」される。つまり、期近を清算して、2番月で同じポジションを取る。この「ロールオーバー」によってギャップは取り除かれる。Wiki先物データを取り込んでバックアジャストつなぎ足を作成するアプリケーションをPythonで書いたが、これはPythonシステムバックテスターとエクセルシステムバックテスターにインポートすることができる。検証のためのデータが必要だったので、関連ウェブサイトでは30以上の銘柄の10年分以上のASCIIバックアジャスト先物データベースも提供している。ソフトウェアの使い方とQuandlから先物データをダウンロードする方法も提示しているので、参考にしてもらいたい。
本書にどうしても含めたいものが1つあった。それはアルゴリズムトレードシステムの「聖杯」である。われこそは聖杯だと主張する多くのアルゴリズムを分析したが、厳密な検証を行うと、ブレークイーブンにさえならなかった。こうしたアルゴリズムはあなたのリストから消去しておこう。「聖杯」はあるのかないのか、あるとすればどれが聖杯なのかは分からないが、本書では次に挙げるようなものは学べるはずだ。
●トレーディングアルゴリズム開発をノンプログラマーと共にやってきた27年間の経験
●開発サイクルで最もよく使われるツールや基本要素
●一般公開されているトレードシステムの大部分をなすコアトレーディングモデル
●ノンクオンツをそれほどノンクオンツではない人に転換させる最も重要で最もシンプルなプログラミングテクニック
●ウォークフォワード、遺伝的最適化、モンテカルロシミュレーションといった複雑なトレードアイデアの簡単な例と説明
●アイデアからトレーダブルなソリューションに至るまでのアルゴリズム開発を手助けしてくれる完全ツールボックス
成功するトレーディングアルゴリズムのほとんどは定量分析(QA)を使う。定量分析は金融時系列に数学公式を適用することを言う。本書ではトレーディングアルゴリズムの設計にはこのタイプの分析のみを使う。多くのトレードプランに使われるファンダメンタル分析も使うが、これは簡単に消化できるデータフォーマットにまとめるにとどめた。ファンダメンタルデータは巨大で多様で、多くの場合は市場の動きは予想不可能な形でそれに反応する。私が長年にわたって扱ってきた例のなかでは、月次失業率が好例だ。本書執筆の時点では失業率は下降傾向にあり、これは株式市場が上昇することを示すサインになる。しかし、当時の金利はほぼ0%で、FRB(連邦準備制度理事会)が量的緩和を廃止したり、金利を上げないのではないかという不安から、市場は下落するかもしれない。このタイプのファンダメンタル分析は多くの入力量を必要とし、検証可能なものに集約するのはほぼ不可能だ。
一方、定量分析はチャートに含まれるデータのみを使って分析が行われる。値動きや価格の移動は簡単に定義でき、したがって検証することができる。トレーディングアルゴリズムを検証・評価することができる能力は偉大なツールになる。なぜなら、モデルがどのようにして市場の振る舞いを正確に描くことができるかを示すことができるからである。市場の振る舞いを解釈することができれば、市場の非効率を利用することができる。もしアルゴリズムがヒストリカルデータを基に市場の非効率を利用することができれば、将来的にも利用することができる可能性がある。将来的なパフォーマンスに対するこの希望こそが、アルゴリズムトレーダーの質を測る唯一の測度になる。ヒストリカルパフォーマンスは必ずしも将来的な結果のインディケーターにはならないことはみんな知っているが、ほかに何があるというのか。自分のシステムを急いで定義・検証し、ヒストリカルパフォーマンスが良いからと言って、すぐにリアルマネートレードに乗り出すアルゴリズムトレーダーは消える運命にある。これは、ヒストリカルパフォーマンスがシステムトレーダーの質を測る唯一の測度になると言ったことと矛盾してはしないだろうか。良いトレーディングアルゴリズムは利益が出ることを示すだけでなく、堅牢性も兼ね備えていなければならない。堅牢性とは、トレードシステムがさまざまな市場のさまざまな市場状態で高いパフォーマンスを上げることを言う。アルゴリズムは、トレーダーが最初の数回のトレードを自信を持って行えるだけでなく、連敗のあとでもトレードを続けられると感じるところまで改善することができる。アルゴリズムの改善は、ヒストリカルな結果が素晴らしく見えるまでいじる(これをカーブフィッティングと言う)ことではない。それは時間をかけて学び、トレーディングアルゴリズムを、失敗させるように設計されたツールを使って作業することである。実際のお金を使ってトレードする前にアルゴリズムを失敗させる。これがアルゴリズム改善の目的なのである。失敗しないということは成功することを意味する。あなたのアルゴリズムが徹底分析のむち打ちに耐えることができれば、勝利のアルゴリズムを手に入れたことになる。
本書の第1章ではアルゴリズムの定義と例を紹介する。トレードアイデアを書き出せない、疑似コードに書けない、実際のコンピューターコードに書けないというのは、自分のトレードアイデアを検証したいと思っているトレーダーにとって最大のネックとなる。1組の命令に還元することのできるトレーディングアルゴリズムは、2つのモデリング手法(パラダイム)を使って正しくプログラミングすることができる。これら2つのパラダイム――有限状態マシンとフローチャート――はこのあと詳しく議論するとともに、記述された説明文をまずは図表、そして次に疑似コードへと変換するのに使う。図表を使ったアプローチとアルゴリズムを定式化するシンプルな疑似コードについては本章でこのあと説明する。検証可能なアルゴリズムを定義できなければ、どんなに優れた高度な検証ソフトウェアがあってもムダでしかない。本章ではアルゴリズムの定義の仕方についても説明する。
第2章はトレーディングアルゴリズムやインディケーターの基本をよく分かっている人にとっては繰り返しになるかもしれないが、本章ではインディケーターの背景にあるロジックを説明するだけでなく、完全なる仕掛け・手仕舞いテクニックにインディケーターをどう組み込めばよいかについても説明する。本章でも図表や疑似コードが頻繁に登場するが、それは各インディケーター、その目的、トレーディングアルゴリズムへの組み込み方をよく理解できるようにするためだ。また、インディケーターベースのトレーディングアルゴリズムのパフォーマンスも提示する。
第3章は完全なるトレーディングアルゴリズムとそのヒストリカルパフォーマンスについて説明する。すべてとは言わないが、検証のほとんどはコモディティや先物のヒストリカルデータを使って行った。このデータは50年以上も前のシステマティックトレードの概念を彷彿させるものだ。でも、これはアイデアを株式市場に変換できないという意味ではない。ほとんどの場合は可能だ。しかし、私がコモディティデータにこだわったのは、私がコモディティに詳しいからである。これらのアルゴリズムの完全なる疑似コードと実際のコンピューターコードも提示する。アルゴリズムの堅牢性を決める主要な統計量についても説明する。これらの統計量はアルゴリズムの結果を評価するのに使う。
第4章ではアミブローカーと、トレーディングプラットフォームの最も重要な要素――統合開発環境と関連するスクリプトプログラミング言語、各市場とポートフォリオの検証、アルゴリズムパフォーマンスの統計量――について説明する。これらの要素は、第5章でエクセルVBAについて、第6章でPythonについて、そして第7章でトレードステーションについて詳しく説明する。
第8章では遺伝的最適化、ウォークフォワード最適化、ウォークフォワード分析、モンテカルロシミュレーションについて説明する。遺伝的オプティマイザーはVBAを使って構築し、バイオロジーとコンピューターの統合というアイデアを遺伝的オプティマイザーを使って説明する。また、遺伝的アルゴリズム、適合度、淘汰、繁殖、突然変異についても詳しく説明し、エクセルを使ったコード例を示す。人工知能もトレーディングアルゴリズムの研究には不可欠で、この章では人工知能の謎に包まれたベールをはがし、これらのツールを堅牢性を生みだすのにどう使うべきなのかについて説明する。こうした話のなかでぜひとも議論しなければならないのが機械学習についてである。機械学習は今日のトレードでは議論の的になっているトピックだ。最近では「ビッグデータ」が話題になっているが、これはかなり進んでおり、本書の枠を超えるので説明は割愛する。私はこれまでマシンオンリーの入力によって得られたアルゴリズムに取り組んできたが、これらのアルゴリズムは時の試練に耐えてきた。
トレーディングアルゴリズムは幅広い市場で機能してこそ、有用で堅牢性を持つと言うことができる。第9章ではトレードステーションとアミブローカーのポートフォリオレベルの検証能力を使って、いろいろなマネーマネジメントテクニックとポートフォリオマネジメントテクニックを紹介する。最も人気のある固定比率アプローチについても説明する。
Pythonシステムバックテスターの完全ソースコードはウェブサイトで見ることができる。Pythonは多くのクオンツたちが使っている新しい言語で、この言語を使ってシンプルでパワフルなバックテスターの開発方法を示していく。ASCIIファイルを開いたり、データをリストデータ構造にインポートしたり、クラスやモジュールを作成したり、データベース全体をループするのに使われる重要な言語概念やシンタックス(文法)についても説明する。検証プラットフォームの構築については、モンテカルロシミュレーションやスタートトレードドローダウンシミュレーションをはじめとするソースコードを参照してもらいたい。
ほとんどのトレーダーはエクセルを持っていると思う。VBAを使ったPythonバックテスターの簡易バージョンの完全コードもウェブサイトで見ることができる。
本書はトレードのためのツールボックスであり、ガイドであり、アルゴリズムトレーディングのいろいろな側面にも言及している。どういったツールボックスについても言えることだが、なかに入っているツールを使ってトレーダーのアイデアを検証・評価できるだけでなく、実装できる形で再現するのには時間と努力が必要であることは言うまでもない。
本ホームページに掲載されている事項は、投資判断の参考となる情報の提供を目的としたものであり、投資の勧誘を目的としたものではありません。投資方針、投資タイミング等は、ご自身の責任において判断してください。本サービスの情報に基づいて行った取引のいかなる損失についても、当社は一切の責を負いかねますのでご了承ください。また、当社は、当該情報の正確性および完全性を保証または約束するものでなく、今後、予告なしに内容を変更または廃止する場合があります。なお、当該情報の欠落・誤謬等につきましてもその責を負いかねますのでご了承ください。
監修者まえがき
著者について
序論
第1章 トレード入門――アルゴリズムの開発
アルゴリズムとは何か
トレードアイデアを疑似コードに変換する方法
まとめ
第2章 ストキャスティックス、移動平均線、RSI! うわぁ、こんなにあるの!
オシレーター
価格ベースのインディケーター
まとめ
第3章 完全トレーディングアルゴリズム
トレンドトレードのバトルロワイヤル
ポートフォリオの構成
複数アルゴリズム戦略(MAS)
まとめ
第4章 アミブローカーのAFL入門
クイックスタート
価格足インターフェース
AFL配列プログラミング
シンタックス(文法)
AFLウィザード
アミブローカーのループプログラミング
まとめ
第5章 マイクロソフトエクセルを使ってアルゴリズムをバックテストする
VBA関数とサブルーティン
データ
ソフトウェアの構造
プログラミング環境
まとめ
第6章 Pythonを使ってアルゴリズムをバックテストする
なぜPythonなのか
Pythonのインストール
PSBのインストール
PSBの構造
本格的な作業の開始
まとめ
第7章 イージーランゲージ入門
トレードステーションのIDE
シンタックス
イージーランゲージの例
まとめ
第8章 遺伝的最適化、ウォークフォワード、モンテカルロスタートトレード分析
トレードステーションとアミブローカーの使用
コンピューター、進化、問題解決
人口(母集団)
VBAエクセルを使って最初の母集団を設定する
エクセルVBAを使って染色体の適合度を検証する
選択
繁殖
突然変異
トレードシステム開発で遺伝的アルゴリズムを使う
過剰カーブフィッティングを防ぐ
ウォークフォワード・オプティマイザー――余分な労力と時間を費やす価値のあるものなのか
モンテカルロ分析
スタートトレードドローダウン
まとめ
第9章 ポートフォリオマエストロ、マネーマネジメント、ポートフォリオ分析入門
固定比率
ポートフォリオマエストロ
まとめ
付録A アミブローカー
付録B エクセルシステムバックテスター
付録C Pythonシステムバックテスター
付録D トレードステーションとイージーランゲージ
付録E アルゴリズムトレーディングに関する必携書リスト
本書のウェブサイトについて
監修者まえがき
本書はフューチャーズ・トゥルースの研究責任者であるジョージ・プルートによる“The Ultimate Algorithmic Trading System Toolbox + Website : Using Today’s Technology To Help You Become A Better Trader”の邦訳である。アルゴリズムトレードはいまや個人投資家にとって参入障壁が低く、良好なリターンが期待できる代表的な投資手法の一つとなったが、それがなにより素晴らしいのは、優れた投資戦略を構築・実装するための学習プロセスのパスや、避けるべき陥穽が先人たちの経験によって明らかになっていることで、よほど天邪鬼な人でなければ、費やした努力や熱意に比例して上達が進むことになる。本書ではアルゴリズムトレードの基礎だけではなく、PythonやEasyLanguage、VBAといった身近な言語を使ったプログラミングの初歩を学ぶことができ、紹介されているコードはすべてウェブサイトからダウンロード可能である。これらのコードを流用することで、この分野に興味はあるがどこから手を付けてよいか迷っていた人でも無理なくスタートが切れると思う。
さて、ここで伝統的な投資手法とアルゴリズムトレードとのデザインの相違について書いておく。一般的な投資手法で使われる知識は、金融市場における個人の経験や洞察に基づいて、まず暗黙知として創造される。次にそれを出発点として思考や対話を行うことで演繹的に形式知が導出される。それを実装化したものが投資戦略である。このスタイルの特長は、「なぜこの戦略を使うのか?」における根拠がハッキリしていることである。一方でアルゴリズムトレードにおいては、知識はデータを分析することでまず情報の形で提示される。ここから仮説を立て、批判的合理主義に基づく検証を経て帰納的に形式知が抽出される。このデータドリブンのアプローチは、コンピューターやネットワーク、ビッグデータ解析、人工知能(AI)といった最新の技術と親和性が高く、近年注目を浴びることとなった。だがデータをマイニングしただけでは、その正当性は何も保証されない。したがって、金融市場の複雑性・ランダム性を克服して実践的な投資戦略を構築するには特有の手順が必要である。具体的には、本書にあるようなウォーク・フォワードテストや遺伝的アルゴリズムをはじめとして、アンサンブル学習やさらにはリバースエンジニアリングによるクローン作製などの方法によって再現性・妥当性を確保することになる。この工程の重要性はあまり強調されることがないが、アルゴリズムやAIを利用した運用の成否はこの要素にかかっている。ぜひ本書をはじめとした先行文献の解説を熟読玩味されたい。
最後に、翻訳にあたっては以下の方々に感謝の意を表したい。山下恵美子氏は正確な翻訳を行っていただいた。そして阿部達郎氏には丁寧な編集・校正を行っていただいた。また、本書が発行される機会を得たのは、パンローリング社の後藤康徳社長のおかげである。
2017年5月
長尾慎太郎
■序論
まず最初に断っておくが、略奪的トレード、ピンギング、PoP、流動性リベートといった特殊な注文の発注・変更アルゴリズムを使った高頻度トレードについて知りたい人には本書は向かない。本書は、トレードの意思決定をしたり、トレードサイズを決めたり、マネーマネジメントを行ったりするトレーデングアルゴリズムと、こうしたアルゴリズムを作成するソフトウェアについて学びたい人を読者対象とするものだ。
本書ではトレーディングアルゴリズムの開発・検証・最適化について学んでいく。本書のもう1つの目的は、読者にたくさんの検証プラットフォームやプログラミング言語に触れてもらうことである。プログラミングの経験がなくても心配することはない。あなた自身のトレードシステムが開発できるように細かく指導していく。ソースコードと説明はトレードステーションのイージーランゲージ、アミブローカーのAFL、そして私のPythonとエクセルの検証エンジン用のものが用意されている。これらのプラットフォームを選んだのは、異なるスクリプト言語と異なるトレーディングプラットフォームの概要を見るのに打ってつけと思ったからだ。これらとは異なる検証・トレーディングプラットフォームを使っている人は、私がこれらのプラットフォームを選んだことを批判するかもしれないが、イージーランゲージのソースコードはマルチチャートに簡単に移植することができ、アミブローカーの一種独特でパワフルなプラットフォームは完全トレーディングソリューションを提供してくれる。Pythonとエクセルのソフトウェアはソースコードも含めて関連ウェブサイトで見ることができる。このウェブサイトではほかのプラットフォーム用のイージーランゲージコードとAFLコードも提供している。物事はできるだけシンプルなほうがよい。だから、Pythonの数学関数ライブラリーのNumPyやSciPyは含んでいない。また、学習曲線を短縮するためにPythonの基本的な総合開発環境(IDLE)を使った。高度な総合開発環境を使って物事を複雑にすることなく、Pythonの必要最小限の要素だけを使いたかったからだ。
成功しているクオンツたちは統計解析用プログラミング言語のRを使う人が多いが、私は物事を簡単にするために学習しやすいPythonを選んだ。すべてとは言わないが、大部分のアルゴリズムはコモディティと先物データのみを使って検証したが、本書に登場するすべての検証プラットフォームは株式とETF(上場投信)を検証するのにも使うことができ、本書に含まれるすべてのトレーディングアルゴリズムもこれらのアセットに適用することができる。株式データとETFデータは取得がきわめて簡単だが、コモディティと先物データを簡単に使えるフォーマットで取得するのは少し難しい。しかし、コモディティと先物のヒストリカルデータはわずか100ドルでピナクルデータから取得することができる。私は1980年代の終わりからずっとCSIデータを使っているが、本書で行った検証の大部分でもこのデータを使った。データベースを毎日更新したい人は、ピナクルとCSIがお勧めだ。Quandlを知らない人は、ぜひ使ってみてほしい。Quandlは数値データの検索エンジンだ。Quandlで無料の先物つなぎ足のデータベース(Wiki Continuous Futures)を見つけたときは、驚きのあまりうれしくなった。ただし、このデータは無料なので、日付やデータポイントが欠損していたり、つなぎ足が各限月からのデータをつなぎ合わせただけのデータであったりといった具合に、CSIやピナクルといった高品質のデータほどは良くないことはご承知おき願いたい。
また各限月間のギャップが含まれているため、検証プラットフォームでは使えない。現実世界では、先物ポジションは「ロールオーバー」される。つまり、期近を清算して、2番月で同じポジションを取る。この「ロールオーバー」によってギャップは取り除かれる。Wiki先物データを取り込んでバックアジャストつなぎ足を作成するアプリケーションをPythonで書いたが、これはPythonシステムバックテスターとエクセルシステムバックテスターにインポートすることができる。検証のためのデータが必要だったので、関連ウェブサイトでは30以上の銘柄の10年分以上のASCIIバックアジャスト先物データベースも提供している。ソフトウェアの使い方とQuandlから先物データをダウンロードする方法も提示しているので、参考にしてもらいたい。
本書にどうしても含めたいものが1つあった。それはアルゴリズムトレードシステムの「聖杯」である。われこそは聖杯だと主張する多くのアルゴリズムを分析したが、厳密な検証を行うと、ブレークイーブンにさえならなかった。こうしたアルゴリズムはあなたのリストから消去しておこう。「聖杯」はあるのかないのか、あるとすればどれが聖杯なのかは分からないが、本書では次に挙げるようなものは学べるはずだ。
●トレーディングアルゴリズム開発をノンプログラマーと共にやってきた27年間の経験
●開発サイクルで最もよく使われるツールや基本要素
●一般公開されているトレードシステムの大部分をなすコアトレーディングモデル
●ノンクオンツをそれほどノンクオンツではない人に転換させる最も重要で最もシンプルなプログラミングテクニック
●ウォークフォワード、遺伝的最適化、モンテカルロシミュレーションといった複雑なトレードアイデアの簡単な例と説明
●アイデアからトレーダブルなソリューションに至るまでのアルゴリズム開発を手助けしてくれる完全ツールボックス
成功するトレーディングアルゴリズムのほとんどは定量分析(QA)を使う。定量分析は金融時系列に数学公式を適用することを言う。本書ではトレーディングアルゴリズムの設計にはこのタイプの分析のみを使う。多くのトレードプランに使われるファンダメンタル分析も使うが、これは簡単に消化できるデータフォーマットにまとめるにとどめた。ファンダメンタルデータは巨大で多様で、多くの場合は市場の動きは予想不可能な形でそれに反応する。私が長年にわたって扱ってきた例のなかでは、月次失業率が好例だ。本書執筆の時点では失業率は下降傾向にあり、これは株式市場が上昇することを示すサインになる。しかし、当時の金利はほぼ0%で、FRB(連邦準備制度理事会)が量的緩和を廃止したり、金利を上げないのではないかという不安から、市場は下落するかもしれない。このタイプのファンダメンタル分析は多くの入力量を必要とし、検証可能なものに集約するのはほぼ不可能だ。
一方、定量分析はチャートに含まれるデータのみを使って分析が行われる。値動きや価格の移動は簡単に定義でき、したがって検証することができる。トレーディングアルゴリズムを検証・評価することができる能力は偉大なツールになる。なぜなら、モデルがどのようにして市場の振る舞いを正確に描くことができるかを示すことができるからである。市場の振る舞いを解釈することができれば、市場の非効率を利用することができる。もしアルゴリズムがヒストリカルデータを基に市場の非効率を利用することができれば、将来的にも利用することができる可能性がある。将来的なパフォーマンスに対するこの希望こそが、アルゴリズムトレーダーの質を測る唯一の測度になる。ヒストリカルパフォーマンスは必ずしも将来的な結果のインディケーターにはならないことはみんな知っているが、ほかに何があるというのか。自分のシステムを急いで定義・検証し、ヒストリカルパフォーマンスが良いからと言って、すぐにリアルマネートレードに乗り出すアルゴリズムトレーダーは消える運命にある。これは、ヒストリカルパフォーマンスがシステムトレーダーの質を測る唯一の測度になると言ったことと矛盾してはしないだろうか。良いトレーディングアルゴリズムは利益が出ることを示すだけでなく、堅牢性も兼ね備えていなければならない。堅牢性とは、トレードシステムがさまざまな市場のさまざまな市場状態で高いパフォーマンスを上げることを言う。アルゴリズムは、トレーダーが最初の数回のトレードを自信を持って行えるだけでなく、連敗のあとでもトレードを続けられると感じるところまで改善することができる。アルゴリズムの改善は、ヒストリカルな結果が素晴らしく見えるまでいじる(これをカーブフィッティングと言う)ことではない。それは時間をかけて学び、トレーディングアルゴリズムを、失敗させるように設計されたツールを使って作業することである。実際のお金を使ってトレードする前にアルゴリズムを失敗させる。これがアルゴリズム改善の目的なのである。失敗しないということは成功することを意味する。あなたのアルゴリズムが徹底分析のむち打ちに耐えることができれば、勝利のアルゴリズムを手に入れたことになる。
本書の第1章ではアルゴリズムの定義と例を紹介する。トレードアイデアを書き出せない、疑似コードに書けない、実際のコンピューターコードに書けないというのは、自分のトレードアイデアを検証したいと思っているトレーダーにとって最大のネックとなる。1組の命令に還元することのできるトレーディングアルゴリズムは、2つのモデリング手法(パラダイム)を使って正しくプログラミングすることができる。これら2つのパラダイム――有限状態マシンとフローチャート――はこのあと詳しく議論するとともに、記述された説明文をまずは図表、そして次に疑似コードへと変換するのに使う。図表を使ったアプローチとアルゴリズムを定式化するシンプルな疑似コードについては本章でこのあと説明する。検証可能なアルゴリズムを定義できなければ、どんなに優れた高度な検証ソフトウェアがあってもムダでしかない。本章ではアルゴリズムの定義の仕方についても説明する。
第2章はトレーディングアルゴリズムやインディケーターの基本をよく分かっている人にとっては繰り返しになるかもしれないが、本章ではインディケーターの背景にあるロジックを説明するだけでなく、完全なる仕掛け・手仕舞いテクニックにインディケーターをどう組み込めばよいかについても説明する。本章でも図表や疑似コードが頻繁に登場するが、それは各インディケーター、その目的、トレーディングアルゴリズムへの組み込み方をよく理解できるようにするためだ。また、インディケーターベースのトレーディングアルゴリズムのパフォーマンスも提示する。
第3章は完全なるトレーディングアルゴリズムとそのヒストリカルパフォーマンスについて説明する。すべてとは言わないが、検証のほとんどはコモディティや先物のヒストリカルデータを使って行った。このデータは50年以上も前のシステマティックトレードの概念を彷彿させるものだ。でも、これはアイデアを株式市場に変換できないという意味ではない。ほとんどの場合は可能だ。しかし、私がコモディティデータにこだわったのは、私がコモディティに詳しいからである。これらのアルゴリズムの完全なる疑似コードと実際のコンピューターコードも提示する。アルゴリズムの堅牢性を決める主要な統計量についても説明する。これらの統計量はアルゴリズムの結果を評価するのに使う。
第4章ではアミブローカーと、トレーディングプラットフォームの最も重要な要素――統合開発環境と関連するスクリプトプログラミング言語、各市場とポートフォリオの検証、アルゴリズムパフォーマンスの統計量――について説明する。これらの要素は、第5章でエクセルVBAについて、第6章でPythonについて、そして第7章でトレードステーションについて詳しく説明する。
第8章では遺伝的最適化、ウォークフォワード最適化、ウォークフォワード分析、モンテカルロシミュレーションについて説明する。遺伝的オプティマイザーはVBAを使って構築し、バイオロジーとコンピューターの統合というアイデアを遺伝的オプティマイザーを使って説明する。また、遺伝的アルゴリズム、適合度、淘汰、繁殖、突然変異についても詳しく説明し、エクセルを使ったコード例を示す。人工知能もトレーディングアルゴリズムの研究には不可欠で、この章では人工知能の謎に包まれたベールをはがし、これらのツールを堅牢性を生みだすのにどう使うべきなのかについて説明する。こうした話のなかでぜひとも議論しなければならないのが機械学習についてである。機械学習は今日のトレードでは議論の的になっているトピックだ。最近では「ビッグデータ」が話題になっているが、これはかなり進んでおり、本書の枠を超えるので説明は割愛する。私はこれまでマシンオンリーの入力によって得られたアルゴリズムに取り組んできたが、これらのアルゴリズムは時の試練に耐えてきた。
トレーディングアルゴリズムは幅広い市場で機能してこそ、有用で堅牢性を持つと言うことができる。第9章ではトレードステーションとアミブローカーのポートフォリオレベルの検証能力を使って、いろいろなマネーマネジメントテクニックとポートフォリオマネジメントテクニックを紹介する。最も人気のある固定比率アプローチについても説明する。
Pythonシステムバックテスターの完全ソースコードはウェブサイトで見ることができる。Pythonは多くのクオンツたちが使っている新しい言語で、この言語を使ってシンプルでパワフルなバックテスターの開発方法を示していく。ASCIIファイルを開いたり、データをリストデータ構造にインポートしたり、クラスやモジュールを作成したり、データベース全体をループするのに使われる重要な言語概念やシンタックス(文法)についても説明する。検証プラットフォームの構築については、モンテカルロシミュレーションやスタートトレードドローダウンシミュレーションをはじめとするソースコードを参照してもらいたい。
ほとんどのトレーダーはエクセルを持っていると思う。VBAを使ったPythonバックテスターの簡易バージョンの完全コードもウェブサイトで見ることができる。
本書はトレードのためのツールボックスであり、ガイドであり、アルゴリズムトレーディングのいろいろな側面にも言及している。どういったツールボックスについても言えることだが、なかに入っているツールを使ってトレーダーのアイデアを検証・評価できるだけでなく、実装できる形で再現するのには時間と努力が必要であることは言うまでもない。
本ホームページに掲載されている事項は、投資判断の参考となる情報の提供を目的としたものであり、投資の勧誘を目的としたものではありません。投資方針、投資タイミング等は、ご自身の責任において判断してください。本サービスの情報に基づいて行った取引のいかなる損失についても、当社は一切の責を負いかねますのでご了承ください。また、当社は、当該情報の正確性および完全性を保証または約束するものでなく、今後、予告なしに内容を変更または廃止する場合があります。なお、当該情報の欠落・誤謬等につきましてもその責を負いかねますのでご了承ください。