2012年5月13日日曜日

バックテストの際に注意すべきこと(2)

バックテストの際に気をつけないといけないことの2つめは、多くの自動売買のプラットフォームではBidの値段によって売買が行われたものとしてバックテストが行われるということです。
 
これは現実からは大きく異なります。現実には、買うときはAskの値段で買うことができ、Bidの値段で買うことは出来ません。
 
これがバックテストでは何を意味するかというと、例えば、
 
  • 指値で買い注文を入れていた場合、実際には約定しないのに約定したと取り扱われることがある。
  • 逆指値で注文を入れていた場合、実際には発注しないのに、発注し約定したと取り扱われることがある。
  • 逆指値での買い注文は、逆指値での売り注文に比べて有利な方向にバイアスがかかる
 
などです。
 
これらの要素がバックテストでのシステムのパフォーマンスに及ぼす影響は無視できないもので、これらを加味した上でバックテストでのパフォーマンスを評価する必要があります。

2012年5月6日日曜日

バックテストの際に注意すべきこと(1)

今回は、バックテストの際に注意すべきことについて思いついたことを書いてみます。
 
多くの人は、トレードシステムを開発して、それで取引を始める際に、
 
まずトレードシステムのコードを書いて、
バックテストによるパラメータの最適化を行い
そのバックテストの結果により使えそうなシステムならばそのシステムで取引を行う
 
という手順を踏んでいることと思います。
 
しかし、バックテストによるパラメータの最適化を行いそのバックテストの結果により使えそうなシステムかどうか判断する際に気をつけなければならないことがいくつかあります。
 
まず第一に、上のようにして得られたバックテストの結果は、パラメータの最適化を行ったうえでの結果なので、カーブフィッティングが行われている可能性があるということです。
カーブフィッティングが過度に行われた結果であれば、実際に取引を行った際には、バックテストで得られたパフォーマンスから悪い方に大きく乖離したパフォーマンスになる可能性が高いです。
 
どのぐらい過度なカーブフィッティングになりやすいかは、最適化を行うパラメータの数、システムの性質、パラメータの最適化手法等によります。
 
このことはよく知られていることではありますが、トレードシステムを開発する際に、このことに関していくら注意深く慎重になってもなり過ぎることはないと思います。
 
このこと以外にも、あまり言われていないことですが注意しなければならないことがあります。
それについては、また次回。