ニューラルネットワークのプログラムを探す

データマイニングの手法の1つとしてニューラルネットワーク(NN)がある。
人工知能の基礎の技術であるNNを使ったシステムを調べてみた。

人工知能NNを使った取引システム

単純パーセプトロンは重回帰分析のComboRight

データマイニングの手法の1つとしてニューラルネットワーク(以後NNと略す)がある。
このNNを利用したトレードシステムはないものかとネットをさまよっていると、いくつかそれらしいものがでてきた。

Forex TSDに投稿されたMetaTrader用の無料のものを試したが動作せず、ソースコードを見ても理解ができなかった。

日本のサイトではkamita氏の
http://kamita2.at.webry.info/theme/d9b270b3a8.html
というものがあり、
ここでは
http://codebase.mql4.com/en/2792
にあるCombo Right.mq4を元にテクニカル指標と組み合わせてシステムをいくつも作った報告をしている。

すべてのコードが公開されているわけではないため、ComboRight.mq4のコードと氏の「単細胞」として公開されている一部のコードとを自分で考えて組み合わせる必要がある。

1日かけて氏の使っているコードに近いであろうプログラムができ、ヒストリカルデータでのOptimisationとバックテスト、double basicTradingSystem() のコードの入れ替えを繰り返したが、魅力的な結果は得られなかった。

氏はブログの中でカーブフィッティングという言葉を使っており、問題点を十分理解されている上で趣味的に自作したシステムの運用を行っているようである。
CodeBaseに書かれたCombo Right.mq4の使い方自体が、プログラムに利用されているパーセプトロンというNNの手法の本来の使い方と異なっている。

その方法とは、まず使用するbasicTradingSystemの数値の最適化を行い、次にNNに使用される各パラメーター数値の最適化を行う。
最適値はMetaTraderのOptimization機能によって決定するというものである。

単純パーセプトロンは重回帰分析(multiple regression analysis)と呼ばれる最も 基本的な多変量データ解析と同じことであるためこの方法により最適化することは複雑なテクニカル指標のパラメーター数値を最適化しているようなものだ。

NNは多くのデータからパターンを検出するデータマイニングの1つであり、
最良のトレード方法のパターンを検出しその方法によるバックテストの結果は、上のOptimizationから決定されたもののテストの結果とは同じではない。

NNが見つけたいくつものパターンのうちそれを利用したトレードシステムの結果が最良となるものを抽出するという狙いがこのComboRightの作者にはあるのではないか。
確かにこの方が考えやすくMetaTraderで実行可能に見えるが、残念ながらその結果は過剰に最適化されたものとなる。

バックプロバケーションNNのCortex

NNをトレードに利用する正しい?方法とはどのようなものなのだろうか。

(といってもNNにはいろいろな手法があるためパーセプトロンについて考えると、)入力する値に対して指定した出力値となるようにNN内部の値を決めるのが正しい使い方であるから、トレードでは例えば「出力する値とはこの後(未来)に値があがる[+1](または下がる[-1])であり、そういう傾向のある条件(数値)が入力する値」を考えることができる。

ここでパーセプトロンから発展したバックプロバケーションというNNの手法をトレードに使用する方法を説明したサイトを紹介する。

http://cortex.snowcron.com/cortex.htm

ここはバックプロバケーションNNのCortexというシェアウェアのメーカーのサイトであるが、ここに具体例が載っている。

http://cortex.snowcron.com/forex_nn.htm

MetaTraderを使ったFXのトレード。
まさにほしい情報そのものと言った感じであるが、印刷すると実に100枚以上にもなる。
辛抱強く3回ほど読んでみたところ、概略は次のようなものとわかった。

  1. 任意のテキスト形式のヒストリカルデータを用意する。
  2. Cortexのソフト上でSLANGという専用のプログラミング言語を使ってシステムを作成する。
  3. ソフトを実行しバックテストを行いその結果からよさそうなNNのパラメータ数値を決定する。
  4. MetaTraderでシステムを作成し直し、決定したパラメータ数値を入力する。

以上の4段階であり、実行するためにはSLNAG言語を学習しながら掲載されたソースコードを理解し改造することが必要なため敷居が高いが、どのようにNNを使用するシステムを作成するのかという点で十分参考になる。

だがこれに挑戦した人のページを見ると、Cortexに挑戦することが良い選択であるとは言えないかもしれない、、、。

http://junalab.blog39.fc2.com/

NNについて調べる

ソフトの値段は高いが次のようなものがある。

http://www.wardsystems.com/prices.asp

http://www.neuroshell.com/

NeuroShellでNNによる相場データを解析後、MetaTraderで利用するためのファイルを作成し、MetaTraderでもプログラムをNeuroShell用に作成するという手順だ。(それにしても値段が高い、、、、。)
Cortexよりは簡単らしい。

ネットを調べたところではNNは1990年にはすでにいくつものものが世に出ていたらしい。
そして現在ではプログラム作成の技術さえあれば個人で何らかのNNを利用したものが作れる状況だ。

http://www.neural-networks-at-your-fingertips.com/

こんなのもある。

http://leenissen.dk/fann/

さらにこのFANNをMetaTraderで利用するためのdllらしいのがここにある。
Barnix氏の#188のコメント欄。しかしどう使うのかは不明。

http://www.forex-tsd.com/expert-advisors-metatrader-4/11096-better-nn-ea-development-19.html

これらを参考に作れる人がうらやましい。
CやC++、Javaなどを覚えそして英語にも堪能、そうなるためにはいったい何年かかるのか。
挑戦をしないことには先へは進めないが、そもそも挑戦するだけの価値があるのだろうか?。

http://www.jcfia.gr.jp/study/ronbun-pdf/no14/89.pdf

日本市場商品先物へのNNによる予測についての研究論文。
終値だけより始値・終値・高値・安値の4つ、日足よりも週足、週足よりも月足での利用がNNでの予測精度が高い、という結論を出している。

海外のトレーディングシステムのトーナメントでAutomated Trading Championshipというのがある。
今年2008年の大会のページでNNを利用した優秀な成績を出しているシステムの作者へのインタビューのページがこちら。

http://championship.mql4.com/2008/news/473

ロックバンドと電子専門技術というユニークな経歴の作者Leonid氏は、トレードを始めるうちにNNに興味をもち精力的に行動を開始する。
フォーラムや入手しやすい情報では求める正しい知識は得られないと考え、それならばNNの開発に関わる人に聴こうということでモスクワ大学、NeuroProjectの会社、Neuroshellメーカーの開発者へとコンタクトをとっていくうちに、NNの専門家になることを決意する。
そしてMetaTraderに出会い、フォーラムで仲間を作りプログラムを作成する。

経歴を簡単に書くとこんなところだろうか。
氏は、NeuoshellとMATLABを使いほぼ毎日最適化を行っている。
そして次のようなことを言っている。

「金融マーケットにNNを使用する方法は他の分野への使い方とは大きく異なる。
将来マーケットがどのようになるのかを我々は知ることができない。
そのためにNNに我々が行うことは、過去のデータから将来への見通しを立てることを教えることだ。
見通しだけではなくこれは少し異なった目的だが、”利益を出す”ということについても教える必要がある。
そして我々の目的は、利益をただ追求するだけなく、予測不可能な終値(もしくは始値)のチャートから予測可能なスムーズな上昇する資産成長曲線を作り出すことなのだ。」

当たり前のことを言っているようだが、その本質を理解できているだろうか。