土地柄 Ruby が熱いです。matz 信奉者はもちろんのこと、matz を育てたのは俺だと称するおじいちゃんまで居ます。
会社に matz 直筆サインの入った O’reilly の Ruby 本がありました。
昨今では、著者のサインが入った本がブームのようです (どこが火種か言うまでもないですが) 。
しかし同じ本と比べてみて、有難味が増しているような感じはしますし、なんか読んでみたくなる気分になります。
同僚の @m2ym さんは、RMS のサインが入ったエッセイ集を持ち歩いていますが。彼を敬虔な GNU 信者たらしめるのは、こういう教祖のサインの入った本がそうさせるのかなと思ったりしました。
というわけで Ruby を触ってみました。
ブロックによるコレクション処理で lisp を感じられたり、オープンクラスで動的に機能を追加したり上書きしたりとオモロい言語です。
ただ調べるだけではつまらないので。遺伝的アルゴリズム (以下、GA [Genetic Algorithm]) を使った、為替予想プログラムを Ruby で書いてみました(Ruby の練習とは言いながら、Ruby のオモロい機能はあんまり使えてないですが。まぁ暖かい目で見てくれるとくれしいです)。
GA は、実時間で解けなかったり、最適解があるかどうかが計算でわからないような場合に、ヒューリスティックに解を求める有名な手法ですが。こいつを、円-ドルの為替レートの予測に適応させてみます。
大学の経済学の講義にて、経済学者の先生曰く。銀行や証券会社の人は、製造業の受発注件数とかの遅延指数とか、政府や役所が出す経済指標に応じて、為替や株価の予測をしているみたいです。
例えば「 P 社の株価は、液晶パネルの原材料を大量輸入したら、2ヶ月後に上がる」といった感じです。
これはジンクスとか願掛けとった類ではなく「原料輸入」→ 「新製品を開発しているかも?」→ 「株価が後で上がるかも?」といった因果関係がこの理論のバックにあります。
このプログラムでは、GA を使って上述のような因果関係の指標を見つけ、明日の為替の終値の予想を行います。
以前、自然言語系の先生が日経新聞の内容と某社の株価との相関を解析的に見つけて、小金を得たという逸話を耳にしたが。ここでは外的な情報によらず、過去の為替情報のみから、この因果関係を見つけます。
では、さっそく設計してみましょう。
GA の世界では、被演算処理の個体 (オブジェクト) を「染色体」と言います。
ここでは各染色体が、次の遺伝子情報を持つようにします。
1. [ ある日の為替銘柄は n 日前に価値が上がる/下がる ] * 50 (この数字は適当で構いません。)
2. 前日の価値との割合
3. 適応度
(1) は過去の現象の為替推移の予測になり、こいつが DNA 配列を模したデータ構造になり GA の演算対象になります。こいつはあくまで「予測」なので、必ずしも当てはまるとは限りません。なのでこいつを GA によって解析解を見つけます。
(2) は前日の価値と比較した値で “事実” なので、不変です。
(3) の “適応度” というのは生物学の言葉で、ある雌が子供を生む数の事を言うみたいで、その個体の貴重性を表すみたいです。GA の世界では、ある染色体が特定の視点からみて優秀かどうかを判定する度合いで、評価関数の出力値になります。
評価関数は、渡された染色体の (2) の前提の基で (1) の予測が、どれだけ現実の為替推移に適合するかを計算します。
要するに何やってるのかというと、過去の為替チャートから過去 n 日に遡って、明日の為替レートが上がる (もしくは下がる) 予兆 (経済学的には “遅延指数” と言うみたいです) を解析的に見つけようという取り組みです。
さて。以上を踏まえて、為替予測プログラム (azumi くん) を作ってみたの話。
[ 次回 につづく ]
なお、この azumi くんによると、明日の 円ードル の終値は『前日(10/07)より下がります』
最近のコメント