システムトレード その四

WEBさん
WEBさん
色々と条件変えてやってみました。

で、やはりExcelで処理させると時間かかるので、軽いツールないかな~と探してましたら、普通に無料で分析出来るサイトがあったのでちょっと感心しました。ちなみにカブロフってサイトです。

話が前後しましたが、Excelで分析した結果載せます。
市場:日経225mini
期間:2007年の一年間で5分足
売買数量:すべて1枚(100株)
適用テクニカル手法:RSI,MACD,STCH,ADX,PIVOT
スリッページ:3
手数料:100

まずは各手法の性能を見ました。
適用指標:売買損益/売買回数/(スリッページ+手数料)
RSI(0.25-0.75):-526500/280/-230000
MACD(12:26:9):-32600/136/-100000
STCH1(7:3:3):67600/209/-160000(%Kが%Dを上限下限でクロスしたとき売買)
STCH2(7:3:3):-166800/45/-60000(%Dが上限下限でダブルボトム形成時売買)
ADX(14):-8500/25/-20000
PIVOT:31400/1/-800(Support2,Resistance2使用)

分かりにくいですが簡単に言うと成績は悪かったです。
なので組み合わせたのですが全然成績が上がらず、結局成績が良くなった条件もただのカーブフィッティングになっているだけのようだったので分析をやめました。
ちなみに条件はStchで%Kが上限で%Dとクロスしたとき%Dの傾きがマイナス、下限で%Dとクロスしたときは傾きがプラスであるときに売買という条件でした。
Stch3:226500/55/-44000


指標を使用したにも関わらず予想以上に結果が悪かったので、他の手法を使用したいと思い、悩んでいたので日記更新が遅れました。

そして遂に今までの苦労が報われるかもしれない結果に辿り着いたかもしれません。・・・まだ自信ないので曖昧な表現です。

問題はこの方法は日記で説明すると難しくなるってことです。長くなりますが興味のある方はお付き合い下さいませ。



今までの売買条件選定方法は各指標がしっかり高値と安値を捉えているかどうかがとても曖昧でした。高値で売って安値で買わないと勝てないが、要は成績が良ければ高値売り安値買いしているのではないか?という考えのもと結果だけを見る売買条件選定方法だったのです。

確かにそれは間違ってはいないのですが、あまり結果だけを気にしすぎると、やはりカーブフィッティングに陥りやすいというのを前の検証段階で実感したのです。
たまたま勝てた結果が+200000としてもその裏で-500000クラスの負けが5倍も6倍もあったのでは「よし、+200000になったからこの条件で売買しよう」とはどうしても思えないのです。


そこで発想を転換させました。


今度は「高値/安値になったときの各指標の値はいくつになっているのか?」を見ました。
ここでの問題は「高値/安値」とは一体どこになるのか?です。
結局これについては未だに答えが出ていないのですが、簡易的に「指定した期間での高値/安値」とします。
たとえば5分足で期間100ならば500分の間での高値と安値がいくつか?を見ます。

そして高値/安値のときの各指標の数値を見ます。

さてさて、ここで視覚的に分かったことがあります。
安値ではRSIやSTCHの値が高値に比べ低かったのです。
「そんなの当然じゃないか!」と思うかもしれませんが、ここで重要なことは「相関性があること」なのです。

高値/安値で各指標に大きな違いがあるならば、その挙動を捉える事ができます。

さて、ここで「相関性を見る」という考えが浮上しました。
ここは回帰式の出番です。一次式ではうまく近似できないと思われるので、ちょっと難しいことを言いますが、応答曲面使います。簡単に説明すると高次近似式を作成します。(今回は2次近似式を作成)


ここで更に問題発生です。

Yを目的変数、Xを説明変数とすると、Xは各指標の数値ですが、Yを株価にすると変なことになるのです。たとえばこちらが「15000円は安値だった」といったとしてもその15000円という数値は回帰出来た場合、その数値が安値であるという保証も何もなく、何をやっているのか意味がわからないのです。ちょっと難しいこといってますが、多分、この部分はわかる人はいないと思ってます。説明下手が原因です。


ここでは要するに安値なのか高値なのか?が知りたいので、株価をY(目的変数)に設定するのではなく、高値なのか?安値なのか?を示唆する数値を入れてあげるだけでいいのです。
私は高値を100,安値を0としました。つまり高値データのYはすべて100、安値データのYはすべて0にしました。


使用したデータは日経225miniの2007/1/1~2007/12/31で5分足です。高値安値を捉える期間は30です。(30*5=150分の期間での高値安値を捉えた)

この条件で応答曲面が作成し、そのときの回帰係数(自由度調整済み決定係数)は0.64とまずまず・・・。

この応答曲面をどう売買条件に指定するかというと、
5分足で毎足、毎足、X(各指標の数値)が算出されるのでこれをYに代入し、Y(高値で100,安値で0)を算出します。(Y=aX+bでaとbが既知とすればXが分かればYが分かるのと同じことです)
0以下なら安値なので買い、100以上なら高値なので売りという風に設定すればよいのです。

しかしこの条件では回帰係数が0.64と低いので高値圏でも結構買いを入れたりしてしまい、全然トータル損益はマイナスでした。そこで買い条件をYが-50以下,売りを150以上、などと色々変えてみました。結果は無残なものでかなりの惨敗加減・・・。ここにデータを載せるのも馬鹿らしくなるほどでした。

ここでさらに一日考え込み(落ち込み?)ます。
苦労ばかりが目立ち、結果が全然ついてきてくれません。



問題は回帰係数が低かったことにあるという考えに収まりました。回帰精度を上げれば自然と高値安値を捉える精度が上がるのです。回帰係数を上げるためには、高値/安値を捉える期間を長くしてやればよいのです。
今回は思い切って期間200でやってみました。

すると学習データが80しか取れなくなり、少し心配になりましたが、回帰係数は0.87と驚異的な数値まで跳ね上がりました。

ためしに色々と条件変えて売買してみると、比較的良好な結果になりました。
買い条件:Yが-50以下
売り条件:Yが150以上
Exit条件:40期間後(200分後)
結果(損益/エントリー回数/手数料+スリッページ):101200/48/-40000

プラスになっただけでも御の字です。
しかしこれが他の期間でも通用するのか?自信がなかったので2008/1~2008/7のデータに当てはめて(応答曲面自体は2007年データのものを使用)売買してみました。
買い条件:Yが-50以下
売り条件:Yが150以上
Exit条件:40期間後(200分後)
結果(損益/エントリー回数/手数料+スリッページ):205500/25/-20000

なぜか2007年データよりも戦績が良くなりました。
恐らくたまたまでしょうが、回帰係数が異様に高い(0.87)ので、今回の結果で「うまくいくんじゃないか?」という個人的な期待感は飛躍的に高まりました。


長くなりましたが、今後もこの売買条件選定方法が有効かどうかを検証していく予定です。
3件のコメントがあります
1~3件 / 全3件
WEBさん
>>daikonさんこんにちは

そうです!回帰係数0.87とは驚異的ですよね!RSIとかMACDとかSTCHとかありきたりな数値しか説明変数に指定していないのにこの精度は私も驚きました。
ちなみに今2001-2008年とデータ数を増やして回帰したら0.
75でした。この数値ではどうなることやら(^^;

それと手数料+スリッページは5分足とか関係無く、利益の大部分を奪っていくようです。基本的には全部成り行き売買なので、スリッページが辛いです。

>>ウィルキンソンさんこんにちは
カブロフ?ってやっぱり有名なサイトだったんですね。
株情報しか検証出来ないのが残念ですが、あれだけの機能を無料で提供しているところには脱帽です。
サーバーに負担がかからないんでしょうかね。
(退会済み)
はじめましてー

「カブロフ」ってこのサイトでも「銘柄」のところの情報提供してるところですよね?

参考になりそうなのでいってきます^^ゞ
daikonさん
興味深く拝見しました。
回帰係数0.87とは素晴らしい結果ですね。

5分足を使う場合、売買回数が多くなって手数料の負担がかなり大きくなるのですね。
手数料の安い証券会社を利用することが重要だと感じました。
WEBさんのブログ一覧