本日のシグナルテスト

今日は日々の処理に近い形で処理をした。
具体的には、
・ 日足データの取得
・ 指標の計算
・ シグナルの計算
・ データベースからのシグナルの出ているデータの抽出
を、行った。
結果は
+——+————+———–+———–+———–+——-+——-+
| code | date | point_max | point_avg | point_min | rieki | kikan |
+——+————+———–+———–+———–+——-+——-+
| 1868 | 2006-05-29 | 100 | 98 | 93 | 43 | 23 |
| 9715 | 2006-05-29 | 100 | 100 | 100 | 138 | 5 |
| 9621 | 2006-05-29 | 100 | 100 | 100 | 49 | 17 |
| 9475 | 2006-05-29 | 100 | 94 | 87 | 122 | 27 |
| 9003 | 2006-05-29 | 100 | 100 | 100 | 17 | 66 |
| 8369 | 2006-05-29 | 100 | 100 | 100 | 39 | 17 |
| 9731 | 2006-05-29 | 100 | 100 | 100 | 14 | 20 |
| 5196 | 2006-05-29 | 100 | 100 | 100 | 18 | 6 |
| 1914 | 2006-05-29 | 100 | 100 | 100 | 12 | 25 |
| 2730 | 2006-05-29 | 100 | 100 | 100 | 85 | 6 |
| 2578 | 2006-05-29 | 100 | 100 | 100 | 21 | 13 |
| 8194 | 2006-05-29 | 97 | 96 | 96 | 79 | 7 |
| 9479 | 2006-05-29 | 96 | 95 | 95 | 5110 | 5 |
| 9717 | 2006-05-29 | 95 | 93 | 90 | 68 | 8 |
| 6440 | 2006-05-29 | 94 | 93 | 93 | 10 | 5 |
| 3106 | 2006-05-29 | 93 | 91 | 89 | 8 | 19 |
| 1972 | 2006-05-29 | 92 | 85 | 80 | 16 | 6 |
+——+————+———–+———–+———–+——-+——-+
17 rows in set (0.32 sec)
と、こんな感じである。
なぜか雰囲気的には増えるかと思ったが、
だいぶ減ってしまった。
でも、検証をしていないので、なんともわからないが、
データベースにはシグナル情報が過去のものまで入っているので、
また検討してみたい。

買いシグナルテスト

先日ひいた風邪がずっと引きずっている。
集中力が出ずに新規開発ができない。
こんな時はメンテを中心に作業をする。
今まで力任せで処理していたところを、必要な部分だけの計算ですむように
最適化などの処理をしている。
この週末に再度シグナルを出したので、表示してみる。
+——+————+———–+———–+———–+——-+——-+
| code | date | point_max | point_avg | point_min | rieki | kikan |
+——+————+———–+———–+———–+——-+——-+
| 1914 | 2006-05-19 | 100 | 100 | 100 | 12 | 25 |
| 9882 | 2006-05-19 | 100 | 100 | 100 | 39 | 29 |
| 9715 | 2006-05-19 | 100 | 100 | 100 | 138 | 5 |
| 8194 | 2006-05-19 | 100 | 100 | 100 | 79 | 7 |
| 7447 | 2006-05-19 | 100 | 99 | 95 | 183 | 13 |
| 7267 | 2006-05-19 | 100 | 100 | 100 | 333 | 29 |
| 9994 | 2006-05-19 | 100 | 100 | 100 | 45 | 20 |
| 5015 | 2006-05-19 | 100 | 100 | 100 | 10 | 21 |
| 4403 | 2006-05-19 | 100 | 96 | 95 | 22 | 20 |
| 4186 | 2006-05-19 | 100 | 100 | 100 | 64 | 25 |
| 2578 | 2006-05-19 | 100 | 100 | 100 | 21 | 13 |
| 2056 | 2006-05-19 | 100 | 100 | 100 | 8 | 5 |
| 2681 | 2006-05-19 | 99 | 87 | 68 | 21850 | 7 |
| 5192 | 2006-05-19 | 98 | 97 | 97 | 41 | 21 |
| 7914 | 2006-05-19 | 98 | 97 | 97 | 8 | 14 |
| 9607 | 2006-05-19 | 97 | 95 | 93 | 25 | 21 |
| 9726 | 2006-05-19 | 96 | 94 | 92 | 12 | 9 |
| 3302 | 2006-05-19 | 96 | 86 | 80 | 34 | 13 |
| 7221 | 2006-05-19 | 95 | 89 | 81 | 70 | 25 |
| 6272 | 2006-05-19 | 95 | 87 | 81 | 13 | 26 |
| 3009 | 2006-05-19 | 95 | 87 | 78 | 7 | 8 |
| 5233 | 2006-05-19 | 95 | 84 | 70 | 8 | 10 |
| 9667 | 2006-05-19 | 95 | 91 | 81 | 73 | 19 |
| 2922 | 2006-05-19 | 95 | 92 | 90 | 63 | 98 |
| 5491 | 2006-05-19 | 94 | 91 | 88 | 10 | 5 |
| 2715 | 2006-05-19 | 91 | 88 | 80 | -43 | 25 |
+——+————+———–+———–+———–+——-+——-+
26 rows in set (0.00 sec)
今回はシミュレーションの結果の平均値を出力できるようにしてみた。
当然に保障するものでもなんでもないのでご容赦いただきたい。
実際に出力してみると、2~3週間の期間がかかっている。
この間に最適なところで売却しないといけないのが、難しいところである。
まとまった時間が健康体の時にあれば、自動売買のところもまで行けると思うのですが、
なかなかうまくいかないもんですね・・・。

スイング用シグナルの取得

ここ数日Blogを書かなかった、それは風邪気味であるということもあるが、
スイング用のシグナルを早く出したかったからである。
シミュレーションで取得した、その銘柄に合った、
・指標の組み合わせ
・指標のポイント化の範囲
・組み合わせ比率
を、TOP5利用し、当日の情報にあてて、
総合得点を出力する。
プログラミングは当然として、
・株価の取得
・念のため最新データでのシミュレーション
は、行う必要があるので、月曜日の夜から、
株価取得 => 指標の計算 => シミュレーション
を行った。
そんなわけで結果的に処理できる日付は5/15になる。
今回はこのシグナル自体も、データベースへ取得するようにしてある。
今後、分析をしていくこともあると思うので・・。
初めてのシグナルである。
+——+————+———–+———–+———–+
| code | date | point_max | point_avg | point_min |
+——+————+———–+———–+———–+
| 1719 | 2006-05-15 | 100 | 100 | 100 |
| 9726 | 2006-05-15 | 100 | 100 | 100 |
| 8061 | 2006-05-15 | 100 | 100 | 100 |
| 7718 | 2006-05-15 | 100 | 100 | 100 |
| 6966 | 2006-05-15 | 100 | 100 | 100 |
| 5491 | 2006-05-15 | 100 | 100 | 100 |
| 9882 | 2006-05-15 | 100 | 100 | 100 |
| 4201 | 2006-05-15 | 100 | 100 | 100 |
| 2737 | 2006-05-15 | 100 | 100 | 100 |
| 1820 | 2006-05-15 | 100 | 100 | 100 |
| 1834 | 2006-05-15 | 100 | 100 | 100 |
| 2056 | 2006-05-15 | 100 | 100 | 100 |
| 1899 | 2006-05-15 | 100 | 95 | 90 |
| 3009 | 2006-05-15 | 98 | 92 | 83 |
| 1914 | 2006-05-15 | 98 | 93 | 85 |
| 4521 | 2006-05-15 | 98 | 97 | 96 |
| 5204 | 2006-05-15 | 96 | 94 | 92 |
| 8291 | 2006-05-15 | 96 | 87 | 82 |
| 6937 | 2006-05-15 | 95 | 94 | 90 |
| 2578 | 2006-05-15 | 95 | 92 | 90 |
| 7882 | 2006-05-15 | 93 | 89 | 85 |
+——+————+———–+———–+———–+
とりあえず、うちのシステムで初めて出力した買いシグナルである。
同じくらいの売りシグナルもあるが、信用売りはしばらく保留するので、
買い方のみ抽出した。
今回は上場銘柄のほぼすべてから抽出している割には少ない・・・
なお、この結果をそのまま取引には使わないようにしていただきたい。
まったく責任もてないので・・。
実際はこのシグナルの上位の、ザラ場を見ながら注文を出すことになる。
ザラ場では、高値で寄りつきすぎればパスしたり、下がり始めたら反転するまで待ってみたり、
板の厚みで判断したりすることになる。
(実際にシステムにするのは、面倒だとは思うが・・・)
しばらくは、kabu.comのいろいろと条件注文ででもテストしてみようと思う。
(当然、夜に手作業で仕掛ける・・・昼間みれないので怖いけど・・)

シミュレーションテスト完了&履歴取得修正

本日の昼から行っていた、シミュレーションテストが完了した。
どれくらいの時間がかかるか、不安があったが計算どおりの処理速度であった。
今回は東証一部銘柄を対象に処理を行っている。
銘柄数 1,667社
処理時間 33,319秒(20秒/社)
抽出取引結果 197,992パターン(118パターン/社)
と、いうことでまずまずの結果。
ここから、最適な指標などの組み合わせを抽出しないといけないが、
できれば、SQL一発で抽出したい。
早速、Accessで検討を行う。(MySQLへはODBCでアクセス)
結果、
・ 取引回数は、同一銘柄の取引回数の標準偏差以上
・ 勝率は70%以上
・ 利率の高い順のTOP5
を、採用指標として、毎日のシグナルを出すことにする。
このシミュレーションは、一日で全銘柄を再計算できるので、
毎週、金曜日の夜から自動的に計算させることにする。
次に過去履歴を再度取り込む、
前回は4月の上旬まで取得したが、
それ以降の分をとりあえず取得しなくてはならない。
(稼働しだせば、毎日夕方に取得するが・・)
株価履歴データベースから、最新の株価データ取得日を取得して、
その日以降のデータを取得するように、修正する。
これも一時間ほどで修正完了。
いつでも動かせる状態になった。
あとは、実際にシグナルを出すシステムを作った段階で、
最新の情報を取得すれば良い。
明日以降は、シグナルを出すシステムを作る。
(そんなにむつかしくないと思いますが・・)
最終的にはコンソールはJavaで作成し、WEBから操作できるようにするつもりだが、
機械的な抽出は例のごとくPerlで行うこととする。
最終的にはJavaのUIで、これらのシステムの起動などをして、表示させることになると思う。

指標作成シミュレートこける

風邪薬のためか、強烈な眠気が襲ってくる。
今日は今日中に寝なくては・・
先日から実施している、シミュレートは午後9時過ぎまで順調に作業をおこなっていた。
9時過ぎに、div0でプログラムがとまる。
原因はわからないが、プログラムは眠いので明日見ることにする。
出てきた数値の分析をするには、十分なデータがあつまっていると思う。
実行環境はMacのターミナルを使っているので、
とりあえず、シミュレートした銘柄数と総レコード数はすぐに判断がつく、
wc awkで数える。
とてもExcelでは扱えない・・・。
容量は・・・220MB・・。
MySQLに流すのもありだが、今日はとにかく眠い。
DOSVメイン機のAccessに流して処理してみる。
計算した
銘柄数 639
時間  20時間
レコード数 458,724(3回以上のトレード)
平均レコード 717レコード
試行パターン 16,769,916回
のべ計算日数 11,738,941,200日
と、いう感じです。
中身をざっとみると、
・用意した指標はすべて使っている
・銘柄によって採用している指標が相当ユニーク
など、いろいろとわかってきた。
ここの分析は重要なので、明日ももうすこしじっくりながめたい。

シミュレーション結果のデータベース格納準備

先日、久しぶりに高熱をだし、仕事も半日休むという失態をしてしまった。
やはり、後遺症がきつく、現在もまだ微熱があり、集中できない。
(と、いいつつこんな時間にblog書いてていいのか・・・(–;)
今日は、シミュレーション結果をデータベースに格納するために、
・ 格納するレコード定義の仕上げ
・ データをレコードの項目に合わせる成型作業
を行った。
作業自体は、あまり頭も使うことなく、淡々と作業をし、
いつもの、デバック&修正の繰り返しで、とりあえず、
形ができた。
今までは一銘柄だけでテストをしていたが、
データの形が整ったことから、実際にデータベースに流す前に、
ある程度の銘柄を処理して、
・ 大量に処理したときの負荷のかかりかた。
・ 不正なメモリ操作はしていないか確認(おかしければ微妙にメモリ使用量が増えていく)
・ 実際にかかる時間
などを計測して、
Excelなどで、
・ 採用指標に偏りがないか
・ ポイントの付け方は妥当か
・ 採用指標の倍率は妥当か
などを試行したい。
今回は全銘柄でなく、とりあえず、東証1部銘柄の処理をすることにする。
たまに息継ぎをさせてやるために、銘柄切り替えのつど10秒のSleepをいれてやる。
以前に高負荷で連続運転したら、気が付いたら電源切れてましたから・・(^^;
今日はこの作業をスタートして、寝ることにする。

シミュレーションの試行錯誤

今日は、GW初日(1,2日は当然仕事です。それにしても通勤電車ガラガラだった・・(;;))
今日は、子供らの相手をしつつ、
・シミュレーションで出た結果をExcelに流し込む
・Excelでいろいろと検証
・プログラムを修正
を、繰り返した。
昨日のシミュレーションより、だいぶ精度が上がった。
これは、精度が上がったというよりも、昨日のプログラムに不具合があっただけともいうが・・・。
結局、勝率、利率ともに上昇し、今後の自信につながった。
期間中に最低3回は取引をすることを条件に加え、
510パターンが抽出された。
平均は、
取引回数 4.1回
勝率  76%
利率 57.4%(年率換算)
と、いうところ。
ちなみに、この銘柄(1301)で一番パフォーマンスの良いパターンは、
・RSI 9日 20% 比重1
・VR 14日 20% 比重1
・PSY 12日 25% 比重2
で、
700日間の取引データの中での、
取引回数3回
勝率100%
平均利益21.7円
平均運用期間14.3日
利率83.9%
であった。
ちなみに、売買のLOGは、
kai:2003-11-19:137円=>uri:2003-11-25:156円
kai:2005-09-14:254円=>uri:2005-10-04:270円
kai:2006-02-21:267円=>uri:2006-04-03:297円
と、いう感じ。
他の組み合わせで、
2004/12/17でシグナルを出しているものもあり、
こちらの利益率はおいしいのであるが、他の成績がもう一つだった。
いいとこ取りができればいいんですが・・。
そんなわけで、組み合わせは、何通りか抽出して、そこからシグナルを出させることも
検討する。
だんだん、複雑になってきた・・。
そろそろ、全銘柄の計算をさせても良いのであるが、
受け皿になるべき、データベースがまだできていないので、
早急に整備したい。

シミュレーション(仮)してみた

先日から、チャレンジしてきたシミュレーションであるが、
実際の日足データや日中足データのデータベース化よりも、
手強かった・・・(–;
2,3日でできると思ったが、結局まる1週間以上かかってしまった。
(と、言ってもまだまだ仮ですが・・)
・ データベースは新しい日付から読み取るが、シミュレーションが古い日から処理する、
 こんな当たり前のことが、計算してみて、異常数値がでるまで気が付かなかった(^^;
・ ループが深いので、localでサブ化しようと思ったが、Perlのlocalの扱いって、
 myとそこからのサブルーチンとおもっていたが、どうもエラーがでてうまくいかず・・。
 結局、サブルーチンに全変数(10個くらい)を引数にした・・(^^;
・ ?演算子の書き方を間違えていた(^^;
など、人には言えない間違いが多々あり、マシンデバックできない環境では、
机上デバックの重要性を思い知った。
でも、仕様書なんぞは、作るつもりはありませんけどね(^^;
さて、実際にシミュレーションを動かしてみた。
内容は、今までにも何度もでてきたもので、
1銘柄につき、
・5指標
・3or2パターン
・3比重(0..2)
の、26,244パターン
但し、指標を3つ採用したもののみでシミュレーション。(感覚的に3つがいいかな・・と)
これを700日でシミュレートする。
売り買いの条件は、
買いから入って売りで抜ける。(カラ売りなし)
買い  ポイント90以上
       => 翌日の寄りつきで買い
売り  ポイント△90以下 
      又は 
       買い以降の終値の最高値ベースの95%と比較して終値が下回った
       => 翌日の寄りつきで売り
と、至ってシンプルにした。
やってみると、(今回は1銘柄1301のみ)
26244パターンの指標の組み合わせで、実際に買いから売りで決済できたのは810パターン
平均売り買い回数は 2.6回
平均利益額は 5.3千円
平均保有期間は 9.4日
と、いう結果であった。
興味深いのは、この単純な売買で、損失になったのは、わずか14パターンであった。
当然、実際に使うのは、上位のパターンであるが、
回数 利益 平均期間
3 16 6.333333333
4 16 7.5
2 16 9.5
3 16 6.333333333
4 16 7.5
5 16 19.2
3 14.25 6.333333333
3 14.25 6.333333333
4 14.25 6.5
5 14.25 7.4
3 14.25 8.666666667
4 14.25 6.5
と、いう感じであり、まーまー使えそう。
株価みていただければわかりますが、結構な利益率。
ちなみに、この処理は、我がminiで、97秒で処理している。
(iTuneで音楽聴きながら、Safariでサーフィンしながら)
明日はもっと銘柄を増やして、分析を進めたい。
そろそろ、シミュレーション用のPCでも用意するかな・・・。
開発しながらのシミュレーションは効率悪いです。

指標処理完了

昨夜から処理している、指標の計算が無事に終了した。
と、言っても、朝起きたら勝手に終わってただけですが・・
計算に要した時間は1時間25分で、だいたい計算どおりの時間で終了していたことになる。
今後は、新しく取得した日足データと、新規に追加した銘柄の計算だけなので、
数分でおわることと思う。
ただ、今回の計算の過程で、
アクティビティモニタ(CPU負荷やHDDアクセスのモニタ、Windowsのタスクマネージャ)
を、見ていて思ったのが、データベース(MySQL)の負荷が予想以上に高いということ。
これからシミュレーションの作業や、日足、日中足データの取得、株式売買の発注などをすることになるが、
mini君が負荷に耐えれるのか・・・、心配になってくる。
うちのMacminiは、
ハードウェアの概要:
コンピュータ名: Mac mini
コンピュータの機種: PowerMac10,1
CPU タイプ: PowerPC G4 (1.2)
CPU 数: 1
CPU 速度: 1.25 GHz
二次キャッシュ(CPU 単位): 512 KB
メモリ: 1 GB
バス速度: 167 MHz
ブート ROM のバージョン: 4.8.9f1
 内蔵HDDは、Seagate (ST940110A) 40.00GB/5,400 rpm (UltraATA)という、
2.5inchのHDDです。
データベースを酷使するわりに、2.5inchの5,400回転はちょいと可哀想かな・・。
一番初期のMacminiなんで、今のIntelなminiだと、
全然、問題ないかもしれません。
でも、このminiでどこまでできるのか、試すのも楽しいですね。

株日足データ再取得

先日取得した日足データが、微妙に取れていない部分があることが判明。
原因を追及したところ、想像通り、私のプログラムミス(^^;
ざざっと修正して、再度取得をする。
取得時間は2003年から現在までの取得、結局1日半かかって、
取得した。
2565764レコード
これから、分析する部分をつくりたいと思う。