2016年4月10日日曜日

バックテスト2(昨日の反省)

 昨日、「 My Life as a Mock Quant(2011-03-29) およびその中で紹介されている FOSS Trading: How to backtest a strategy in R を参考にして」と書きましたが、落ち着いて見直してみると、参考にしたことになっているのかどうか心配になってきたので、現在感じている問題点を論じてみたいと思います。

 まず、本質的でない点を2点。

 その1、昨日の東証1部でのシミュレーションでは株式分割について考慮していません。手持ちのデータでは株式分割を知るすべはありません。また、あったとして、どのような対処が必要かについて考えていません。原典でも考慮していないと思われます。

 その2、指標について。原典のFOSSではDVIを使っています。DVIではデフォルトで252日分以上のデータが必要であるように思われます。My Life as a Mock Quant(2011-03-29)ではrsiを用いています。最終的なパフォーマンスではどのような指標を作るかが問題になるのでしょうが、今回は本質的でない話題ということで処理いたしました。

 今回本質的と思うのはステップ4:トレーディングルールについてです。

 昨日のモデルは、現金に注目して、売買は寄成に限りました。

 FOSSでは昨日書いたようにロングアンドショートという、株を買うか、空売りするかのどちらかというモデルでした。

 この場合は現金に注目してもうまくいかないのでしょう。FOSSの日々のリターンを計算するコードは次の通りでした。



 sigはステップ3で作成した指標です。日々1または-1の値をとっています。1がロング(買い)、-1がショート(空売り)です。

 GSPCは株価データです。

 Clで日々の終値をとっています。

 ROCはrate of change 変化率とでも訳すのでしょうか。イメージとしては「(当日の終値-前日の終値)/前日の終値」です。

ROCの定義をネット上でいろいろ調べてみたのですが、どうもはっきりとした定義が与えられていない。で関数のコードを見ました。要点を書くと、


の2つの定義があり、オプションでどちらを使うかが指定できます。デフォルトは下の式です。

上の定義はイメージ通りのものです。

下の定義では、log(x)-log(lag(x))=log(x/lag(x))ですから、x/lag(x)が1に近いとき、x/lag(x)-1で近似できます。これが上の式です。

ret はこの値を持ちます。

総資産の評価に


という式が出てきます。

終値を古いほうからx1, x2, x3, ..., xnと書くことにしましょう。

空売りなしの場合には、retの内容は log(x2)-log(x1), log(x3)-log(x2), log(x4)-log(x3), ... と続きます。

これのcumsumをとりますから、隣同士消えて、log(xn)-log(x1)となります。exp(log(xn)-log(x1))ですから、これはxn/x1となります。

すなわち、最初の価格が何倍になったかを示すことになります。

FOSSのステップ4の最後は


総資産の変化の様子を見て終わります。

昨日の記事とだいぶ違いますか?参考にしてバックテストをしてみたというスタンスでご理解ください。

ステップ5は今後の課題ということで。


0 件のコメント:

コメントを投稿