2008/03/29

投資のプロははたしてサルに負けるのか?

絵の内容と文章は関係ないよ!

ちょっと挑戦的なタイトル。現在「金融工学入門」の息抜きとして、投資するまえにこれを見ろ!とクオンツから評判の「ウォール街のランダム・ウォーク」を読みすすめています。まだ読んでいる最中なんですけど、内容的には「バブルに乗って急上昇の株を買う」とか「数日で運用金額を数倍にしようとして、値動きが激しい株を買う」なんていうことはせずに、過去の教訓を学び、金融工学の立場からランダムウォーク理論やファンダメンタル分析を頭に入れて、リスクを考慮した投資をしましょうみたいな感じです。

ちなみに「ランダムウォーク理論」っていうのは端的に言うと、

微小時間の値動きがブラウン運動となる理論

もっと分かりやすくいうと、

すべての値動きはランダムだから過去の値動きから将来の株価の分析やっても意味ないよ!

っていう、金融工学から出てきた理論です。この理論によると、「目隠しをしたサルに新聞の相場欄めがけてダーツを投げさせ選んだ銘柄でポートフォリオを組んでも、専門家が注意深く選んだポートフォリオとさほど変わりない運用結果が得られる(p.4)」ことになります。

これは正直プロのチャーチストから見れば不快極まりない理論なわけで、もちろん批判も多いのです。個人的には長いスパンでは成り立つとは思いますが、短期ではあんま成り立たない理論だと思います。前の記事であんなこと書いちゃいましたし。

で、話がそれちゃったんですけど、面白いなと思ったのが1960年代あたりにアメリカで起こった「エレクトロニクス・バブル」の紹介です。そのころはとにかく「成長」という言葉がをアメリカ全土をとりまき、特にテクノロジー関係の銘柄はその高い成長率から、非常に高い株価がつけられました。そのため、テクノロジーとは全く関係のない会社も「エレクトロニクス」という名前をつければ株価が急伸するという異常な事態に見舞われました。

社名こそが鍵であった。「トロン」と名のつく会社は、アストロン、ドゥトロン、バルカトロン、トランジトロンなどなど多数であった。また、「ニックス」のつく会社も、サーキトロニクス、スプロニクス、ビデオトロニクスなどがあり、さらに何社か○○エレクトロソニクスという会社もあった。そのきわめつけは、全ての要素を盛り込んだ「パワートロン・ウルトラソニックス」という会社であった。

投資信託業界のリーダーの一つのドレイファス・アンド・カンパニーのジャック・ドレイファスは、この狂気の流行について次のようにコメントした。

「これまで40年間、靴の紐を製造してきた堅実な小規模会社で、株価収益率6倍の会社があったとしよう。この会社の名前を"Shoelace inc."から"Electronics and Silicon Furth-Burners"に変えたとしよう。今日の市場では"Electronics"と"Silicon"の組み合わせは株価収益率15倍に値する。しかし、本当の鍵は"Furth-Burners"という、誰も理解できない言葉に隠されている。誰も分からない言葉と言うのは、総合評価を倍増させる効果がある。ということは、靴紐製造の事業そのものの株価収益率が6倍、"Electronics"と"Silicon"の名前で15倍、合わせて21倍の価値がある。これがさらに"Furth-Burners"という名前のために倍になるため、この新社名の株価収益率は42倍になるのである。」(p.40-41)

完全にバカにしています。ただ、この馬鹿げたバブルを教訓にしたかというとそうでもなく、やっぱり現在でもテクノロジー系統の株価というのはニュースに敏感に反応する傾向があるようです(ライブドアショックとかもありましたし)。テクノロジー関係について良く分かっていない投資家が多いため、そのぶん敏感にならざるを得ないのかもしれません。

もし狙うとしたらニュースがないためにしぼんで割安になっている株を購入して、プラスのニュースが出たときに売るっていう感じでしょうか。あるいは狂気の沙汰となっている状態に空売りして、急落したときに買い戻すとか(諸刃の剣)。

2008/03/21

システムトレードの研究-2

第一回の続きです。今回は初めてのプログラムと言うことなので、平均-分散(mean-variance)理論を利用して簡単なプログラムを組んでみます。

プログラムに用いる言語は何が最適?

  1. MetaTraderなどの独自言語
    単純なプログラムの場合はこれが一番効率的だが、いちいち覚えなきゃいけないのがめんどくさい。あと今回扱うデータは30万×6通貨と大量なんで、速度や安定性も心配。
  2. C or C++
    速度から見れば一番最適なんだけど、コードの行数が単純に多くなる。ポインタ関係のバグとかで手間取るのは勘弁。
  3. Rとかの統計言語
    データ解析で非常に活躍するが、バックテストを行うのには不向き?(本来の分野とはかけ離れている)
  4. C# , VB.net などの .net 言語
    一番最適なような気がする。システム部分をいちいち製作しなきゃいけないけれど、その分柔軟性があり、なによりC# 3.0からLinqとラムダ式という超強力な武器が手に入る。速度の問題も気になるところはunsafe or 外部dllという手段があるし。
  5. Haskell or Ocaml
    関数型言語で実装したほうがコード数が少なくなる場合が多々あるし、なにしろこのタイプの言語は数学系統に強い。現在は見送るが、将来的に学びたい言語。

といろいろ検討した結果、C#となりました。

始めに作ったプログラム

始めに作った売買プログラムは非常に簡単で、以下の手順だけでシステムを組みました。

なお今回取引する金融商品はFX,売買する通貨はオーストラリアドル、スイスフラン、ユーロ、英ポンド、ニュージーランドドル、アメリカドル / 円の6つで、実際の取引に生じるスプレッド、スワップポイントは今回無視しました。

  1. 過去10分前までのデータから収益率r、その標準偏差σを計算し、評価関数

    を用いてランク付けする。
  2. 一番上のランクになった通貨を売買。期待収益率が正ならば対象通貨を買い、負ならば対象通貨を売る。
  3. その10分後に対象銘柄を売却か、購入する。

これを1年間に渡って繰り返した場合、100万円の元出がいくらかになったかを計算します。評価に用いた為替レートの1分足データはForexiteから取得しました。

で、作ったプログラムが以下。正直適当です。


問題発生

ところがこのようなシステムを実際に稼動してみると、どうも収益が逆に-20,30万くらい少なくなっている傾向があるようです。これでは良いシステムとは言えません。

そこでそれなら逆転の発想で、単純に売買ルールを逆にしてみればプラスになるんじゃ!ということでシステムを稼動してみると、思惑通りプラスとなりました。今回のバックテストで得られた結果のグラフがこちらです。

カーブの大小はありますが、どれも上方向を向いており、マイナスの結果になっているグラフはありません(ただし月単位で見た場合、負の収益を出している月もある点に注意)。また収益もスプレッドを無視しているとはいえ、含み益が150万~380万。年利換算で150% ~ 380%。平均の月利は約8.0~11.8%という結果になりました。これは明らかに今回の取引が「劣マルチンゲール(有利な取引)」であることを表しています。

なぜそんなことが起こるのか

もし微小時間の値動きがブラウン運動のような完全にランダムな値動きをするならば、このように4年連続で、しかも比較的綺麗な損益曲線を描くことにはならないはずです。このことから以下のように結論付けることにしました。

少なくとも過去4年間、外国為替市場における為替のレートは微小時間で正または負の方向に値が進んでいる場合、後にその動きとは逆の値動きになる傾向がある。


なぜこのような値動きになるのか。これはあくまで仮定ですが、自分は以下のように考えました。

  • 外国為替市場では売りの圧力と買いの圧力がせめぎあって、その理想均衡点が価値を決定する。
  • その理想均衡点の動きは緩やかに推移していくため、微小時間では無視することができる。
  • もし価値が理想均衡点から明らかに乖離した値をとる場合、市場は価値が理想均衡点となるように逆方向の圧力がかかり、補正される。

これならば上の結論の説明がつきそうです。そして2007年の収益が最も少なかった理由として、

「2007年はサブプライム問題などにより売り買いの圧力が大きく変動したため、理想均衡点自体が大幅に変動し、予測がしにくかったのではないか」

と推論しました。

次回はこの仮定を検証してみますが、それよりもまずは金融工学をもっと勉強しなきゃ・・・(まだ300ページしか読み終わってない)自分が知らないことはまだまだたくさんある。

追記(03/23)

年利換算が間違っていたので修正しました。資産額じゃなくて純利益だったのを忘れてました。だめだこりゃ。

2008/03/20

システムトレードの研究-1

金融工学を学んでいる途中なんですけど、ぼちぼち平行してシステムトレードの研究をしてみたいと思います。映像とは全く関係ないっすねぇ :) もうそろそろブログのタイトルを違うものにしたほうがいいかもしれないです。

というわけでシステムトレードの研究です。この記事は正直研究日誌的なもので、実際に運用している人にとっては全く役立たないっす。数ヵ月後自分がこの記事を見て「うわぁこれはねーよ」って言って赤面するために書いてます。あんま気にしないでください。

うっし。それじゃあ書いていくか。

システムトレードとは

投資法の一種で、一般にはプログラミングによって金融商品の分析、売買を全てコンピュータに委託させる手法のことを指している。広義では一定のルールを予め決め、そのルールに従って売買を繰り返す手法もシステムトレードと言うので、必ずしもコンピュータで完全に自動売買させることを指すわけではない。

システムトレードの利点

  • 過去のデータを用いてシステムの検証ができる。過去のあらゆる時点でテストを行うことによって、その構築したシステムのパフォーマンスや欠点が判明し、よりよいシステムを構築することができる。
  • 感情を廃して取引を行えるため、きちんとしたプログラムを組めば人間よりも合理的な判断を行える。
    ex.人間は「損を極端に嫌う」という傾向がある。そのため一旦損をしてしまうと、その補填をしようと何回もリスクのある取引を行ってしまい、深みにはまってしまう(ざわ・・・ざわ・・・)とか。

システムトレードの欠点

  • 過去に無い相場に遭遇した場合、損失を出すリスクが高くなる。
  • 過度にパラメータを最適化してしまうと、未知の事象に対処しきれなくなってしまうため、むしろ損失してしまう場合がある。

欠点を克服するにはどうすればいい?

  • 十分に長い期間(5年以上くらい)バックテストを行うことで、システムのパフォーマンスや欠点を分析する。
  • パラメータが現時点において適切であるような「合理的」なパラメータになるよう学習させる。

雑感

  • システムトレードで検索すると胡散臭いサイトばっかり出てくるのはなんで?プログラムで自分は何もしなくて良いという所が受けるんだろうか。
  • システムトレードでExcelを使っている人が多いけど、個人的にはそんなにExcel VBA使いたがるのか理解できない。
  • という自分はC#信者。
  • なんで金融系ってオープンソースコミュニティが成熟していないんだろう。あんまそういう閉鎖的な部分ってよくないと思うんすけどねぇ

次に実際に自分がプログラムしたシステムトレードについて書いていきます。

2008/03/01

ポスター製作。

Depalma-Poster

東北大学映画部 デパルマの新入生歓迎用のポスターを製作しました。製作時間は約4、5時間。下には連絡先とかが入ってたんですけど、公開するのはまずいんで省略。オブジェクトはXSIを用いて作成しましたが、こういう質感にするんだったら手書きでもよかったかも。これでモノクロ印刷とかだったら嫌だなぁ X-(

どうしても自分が作るとスタイルが明朝体になってしまって、映画の宣伝ポスターっぽくなっちゃう。なんかこういうスタイル好きなんですよ。エレガントだし落ち着きがあって。「Trajan」フォントなんてもう最高で、なんにも考えないとすべてこのフォントを使ってしまうってくらい気に入ってます。

最近映像系を全くやってないように見えますが、実はぼちぼちと進めています。ただすごく地道なんです。うぅ。もう少ししたら報告します。