2015年9月23日水曜日

シンプルなシステムトレードプログラムを作る

中国ショックでは損切りラインに引っ掛かったポジションがいくつもできてしまい、あの暴落のタイミングで「瞬殺」されてしまいました。資産を吹っ飛ばさないための措置とはいえ、あの大下がりした一瞬でやられるとは、相場の怖さを思い知らされました。逆にいうと、ここ数年は調子がよかったので、油断していたとも思います。

さて、連休で時間があるのを利用して、システムトレードのプログラムを作りました。人それぞれいろいろなアルゴリズムを考えるのでしょうが、ある意味、それぞれの銘柄毎の動きのクセや傾向があったり、人の心理は共通のものだとはいえ、未来のことは分からないという側面があります。

そもそも統計的にもサイコロを振るような閉鎖系・単純系の世界と違い、この世界は開放系・複雑系なので、必ずその確率に収束するというものでもないでしょう。

ということで、過度の信頼はできませんが、一時的に売りが殺到してオーバーシュートした銘柄が元に戻る性質を利用したアルゴリズムは勝率が高いと言われています。

そこで今回はシンプルに、移動平均乖離率(過去n日分の終値の平均を取った指数で、株価のおおまかな動きを表す)とボリンジャーバンド(過去n日分の終値から標準偏差1つ分、2つ分、3つ分の距離を表す。2つ離れる状況が起こる確率は5%以下、3つ離れると0.3%以下となる)を使用してみました。

複雑系では必ずしも当てはまりませんが、いちおう統計的に過度な動きをしたものが元に戻る性質を利用したものです。とりあえずオーソドックスに5日移動平均、25日移動平均、ボリンジャーバンド-2σ(シグマ)、-3σを計算します。

まず母集団ですが、東証一部としました。全部含めると処理時間が掛かり過ぎるというのと、古い相場師によると倒産や統計が当てはまらない荒っぽい値動き、また出来高の低さで買いたい値段で買えない、などの状況を考えて、東証二部や新興市場は対象外としました。

ということで、まず試作品のプログラムをRubyという言語で書き、次に株価サイトから直近のデータをダウンロードしました。そしてバッチファイルを書いて、それらのデータを順繰りに処理させることにしました。

10分程度で処理は終わり、以下のようなメッセージを出力しました。

----------
C:\work>echo off
data/1712-T:: lower than 25-day moving average. (-25.58 % below.)
data/2379-T:: lower than 25-day moving average. (-62.61 % below.)
data/2540-T:: lower than -2 sigma bollinger bands: 949 / 953.16
data/2772-T:: lower than 25-day moving average. (-34.52 % below.)
data/3110-T:: lower than 25-day moving average. (-26.97 % below.)
data/3514-T:: lower than -2 sigma bollinger bands: 1175 / 1178.94
data/3521-T:: lower than 5-day moving average. (-6.34 % below.)
data/3880-T:: lower than 25-day moving average. (-20.94 % below.)
data/4003-T:: lower than 5-day moving average. (-5.41 % below.)
data/6080-T:: lower than 25-day moving average. (-31.87 % below.)
data/6089-T:: lower than 25-day moving average. (-30.93 % below.)
data/6432-T:: lower than 25-day moving average. (-38.02 % below.)
data/7730-T:: lower than 25-day moving average. (-44.62 % below.)
data/7936-T:: lower than 5-day moving average. (-6.09 % below.)
data/7936-T:: lower than -2 sigma bollinger bands: 3005 / 3071.30
data/8194-T:: lower than 5-day moving average. (-5.43 % below.)
data/8275-T:: lower than 25-day moving average. (-35.02 % below.)
data/8355-T:: lower than 5-day moving average. (-5.01 % below.)
data/8729-T:: lower than -2 sigma bollinger bands: 2014 / 2016.83
data/9037-T:: lower than 25-day moving average. (-20.94 % below.)
data/9132-T:: lower than 5-day moving average. (-6.25 % below.)
data/9132-T:: lower than -2 sigma bollinger bands: 30 / 30.44
data/9678-T:: lower than 25-day moving average. (-20.23 % below.)
Done!
----------

こうしてみると、5日移動平均と25日移動平均の両方を満たす条件はありません。また-3σを満たすほどの下落もありません。

2点ほど、複数条件がヒットした銘柄がありました。

1つ目の7936アシックスが5日移動平均と-2シグマの両方を下回っているので、検討の価値はありそうです。

もう1つ、9132第一中央汽船ですが、ここはどうも経営が危ないようです。財閥系だから救済があるのでは、とは推測が飛び交っていますが、とりあえず素性が危ない以上は、臆病かもしれませんが、近づかないでおいた方が良さそうです。

という感じで、仕事の都合でできないタイミングもあるかもしれませんが、出来る限り計算を続けてみようと思います。

0 件のコメント:

コメントを投稿