今日のシグナルテスト

今日も計算してみた。
でもまったく反応もないので、
今回のでしばらくデータベースにストックするだけにします。
(ここのブログはUPするのに結構時間がかかる・・)
code date point_max point_avg point_min rieki kikan
9621 2006-05-31 100 100 100 49 17
9475 2006-05-31 100 100 100 122 27
9003 2006-05-31 100 100 100 17 66
8803 2006-05-31 100 99 93 37 21
8235 2006-05-31 100 100 100 52 10
8194 2006-05-31 100 100 100 79 7
7981 2006-05-31 100 100 100 23 22
7222 2006-05-31 100 100 100 19 11
6850 2006-05-31 100 99 95 10 9
5196 2006-05-31 100 100 100 18 6
9731 2006-05-31 100 100 100 14 20
1914 2006-05-31 100 100 100 12 25
4634 2006-05-31 100 100 100 19 19
4112 2006-05-31 100 100 100 11 9
9717 2006-05-31 100 100 100 68 8
1972 2006-05-31 100 100 100 16 6
3529 2006-05-31 100 100 100 4 7
9882 2006-05-31 99 99 99 39 29
9715 2006-05-31 98 97 97 138 5
8536 2006-05-31 97 96 95 20 6
9665 2006-05-31 97 96 93 26 25
1934 2006-05-31 96 87 78 15 9
6203 2006-05-31 96 94 92 6 6
8369 2006-05-31 95 92 91 39 17
1890 2006-05-31 93 93 92 2 4
6763 2006-05-31 93 91 88 25 26
3864 2006-05-31 93 81 60 4 18
3106 2006-05-31 93 91 89 8 19
9479 2006-05-31 92 90 90 5110 5
8130 2006-05-31 92 89 87 175 18
いつものように自己責任で・・・

本日のシグナルテスト

今日もいつものようにシグナルテストをした。
昨日作ったスクリプトで必要な処理は自動化したので、
10分程度ほっておけば、自動的にシグナルの計算までしてくれる。
今日のシグナルは
+——+————+———–+———–+———–+——-+——-+
| code | date | point_max | point_avg | point_min | rieki | kikan |
+——+————+———–+———–+———–+——-+——-+
| 1868 | 2006-05-30 | 100 | 97 | 90 | 43 | 23 |
| 9003 | 2006-05-30 | 100 | 100 | 100 | 17 | 66 |
| 9123 | 2006-05-30 | 100 | 99 | 95 | 7 | 5 |
| 5196 | 2006-05-30 | 100 | 99 | 98 | 18 | 6 |
| 9475 | 2006-05-30 | 100 | 97 | 93 | 122 | 27 |
| 9621 | 2006-05-30 | 100 | 100 | 100 | 49 | 17 |
| 9717 | 2006-05-30 | 100 | 100 | 100 | 68 | 8 |
| 9731 | 2006-05-30 | 100 | 100 | 100 | 14 | 20 |
| 1914 | 2006-05-30 | 100 | 100 | 100 | 12 | 25 |
| 8194 | 2006-05-30 | 100 | 100 | 100 | 79 | 7 |
| 6440 | 2006-05-30 | 98 | 98 | 98 | 10 | 5 |
| 8369 | 2006-05-30 | 97 | 96 | 96 | 39 | 17 |
| 1972 | 2006-05-30 | 96 | 90 | 86 | 16 | 6 |
| 6366 | 2006-05-30 | 94 | 92 | 90 | 95 | 8 |
| 9479 | 2006-05-30 | 94 | 93 | 93 | 5110 | 5 |
| 9715 | 2006-05-30 | 93 | 92 | 90 | 138 | 5 |
| 9665 | 2006-05-30 | 93 | 89 | 83 | 26 | 25 |
| 6203 | 2006-05-30 | 93 | 90 | 87 | 6 | 6 |
| 3864 | 2006-05-30 | 92 | 78 | 56 | 4 | 18 |
| 4271 | 2006-05-30 | 92 | 87 | 78 | 25 | 15 |
| 3106 | 2006-05-30 | 92 | 89 | 87 | 8 | 19 |
| 9882 | 2006-05-30 | 92 | 91 | 90 | 39 | 29 |
+——+————+———–+———–+———–+——-+——-+
22 rows in set (0.08 sec)
と、こんな感じであった。
ほんとにそろそろ自動売買に手をだしたいんですけどね。
試行で追跡してもいいんですが、やはり身銭を切らないと、
本気になれませんし、今週末くらいには注文発注ができるようにしたい。

本日のシグナルテスト

今日は日々の処理に近い形で処理をした。
具体的には、
・ 日足データの取得
・ 指標の計算
・ シグナルの計算
・ データベースからのシグナルの出ているデータの抽出
を、行った。
結果は
+——+————+———–+———–+———–+——-+——-+
| 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)
と、こんな感じである。
なぜか雰囲気的には増えるかと思ったが、
だいぶ減ってしまった。
でも、検証をしていないので、なんともわからないが、
データベースにはシグナル情報が過去のものまで入っているので、
また検討してみたい。

日足データの取得とシグナル出力

久しぶりの更新になってしまった。
Blogでこんなに更新空いてしまったら意味ないのであるが、
仕事の方と体調不良のため作業がなかなか進まない。
今日は土曜日ということで、合間を見て作業を行った。
また、シグナルも出力してみた。
まず、今日完成したのは、日足データの取得。
なぜ、今さら・・・という感もあるが、今までは履歴から取得していたので、
特に不自由もしなかったので作成が後回しになってしまった。
ただ、毎日の更新を考えると当然に必要な機能である。
今、3900銘柄を管理しているので、過去履歴で1日を取るのと、
最新の値だけをまとめて取得できるのでは、効率が全くちがう。
作成は例のごとくPerlで作る。
内容は特に難しいものはない。
また、取得は1回のリクエストで50銘柄とした。
ただ一つ、いままで通りで動かない部分があった。
それは、日本語の処理である。
Yahooはご存じのとおり、EUCで書かれている。
EUCはUNIXには非常に都合の良い文字コードであるが、
PCレベルではShiftJISな方が読める環境が多い。
そこで、今回はシステムはすべてソースコードをShiftJISに統一している。
そんなわけで、htmlソースは、
EUC => UTF16 => SHIFT_JIS
と、変換して処理している。
以前はjcode.plというので処理していたが、Encodeで処理するようになり、
最近、Jcodeが更新されたので、Jcodeに戻っている。
おかげで、今まですこぶる快調だったのだが、今回はどうしても止まってしまう。
どうも、一覧で取得する場合に、特定の文字コードが邪魔をしているようである。
結局、
$jconv->set( $a->content() )->euc;
$tree->parse( $jconv->sjis );
と、していたところを、
$tree->parse( Jcode::convert( $a->content(), ‘sjis’, ‘euc’ ));
と、して解決した。
やってることは全く同じなんですけどね・・。
直接変換しているようでも、内部ではutfで処理してると思ったんですけどね・・。
とりあえず、動いたので良いことにします。
今回の、日足データ取得で、毎日早い時間にシグナルを出すことができるようになる。
早速計測。
日足データ取得(全銘柄)  3分
指標計算(必要分のみ)  2分
シグナル計算(必要分のみ) 3分
シグナル抽出    0秒
全部合わせても10分かからないですね。(^^v
これなら、昼の間に20分遅延で処理しても、後場までには十分計算できそう。
半日足データでシグナルを出せるともう少し精度が上げられるかもしれない。
そんなわけで、相変わらず意味がないかもしれないが、
本日のシグナル。
+——+————+———–+———–+———–+——-+——-+
| code | date | point_max | point_avg | point_min | rieki | kikan |
+——+————+———–+———–+———–+——-+——-+
| 1914 | 2006-05-26 | 100 | 100 | 100 | 12 | 25 |
| 9717 | 2006-05-26 | 100 | 100 | 100 | 68 | 8 |
| 9621 | 2006-05-26 | 100 | 100 | 100 | 49 | 17 |
| 7201 | 2006-05-26 | 100 | 94 | 85 | 66 | 29 |
| 5233 | 2006-05-26 | 100 | 98 | 97 | 8 | 10 |
| 5196 | 2006-05-26 | 100 | 99 | 98 | 18 | 6 |
| 4921 | 2006-05-26 | 100 | 100 | 100 | 251 | 25 |
| 4186 | 2006-05-26 | 100 | 100 | 100 | 64 | 25 |
| 9731 | 2006-05-26 | 100 | 100 | 100 | 14 | 20 |
| 3337 | 2006-05-26 | 100 | 100 | 100 | 85 | 15 |
| 2730 | 2006-05-26 | 100 | 100 | 100 | 85 | 6 |
| 2578 | 2006-05-26 | 100 | 100 | 100 | 21 | 13 |
| 9479 | 2006-05-26 | 99 | 99 | 99 | 5110 | 5 |
| 9475 | 2006-05-26 | 97 | 89 | 80 | 122 | 27 |
| 6440 | 2006-05-26 | 96 | 95 | 95 | 10 | 5 |
| 9715 | 2006-05-26 | 96 | 95 | 93 | 138 | 5 |
| 9003 | 2006-05-26 | 96 | 92 | 90 | 17 | 66 |
| 1972 | 2006-05-26 | 94 | 87 | 84 | 16 | 6 |
| 8194 | 2006-05-26 | 94 | 93 | 93 | 79 | 7 |
| 3106 | 2006-05-26 | 93 | 91 | 89 | 8 | 19 |
| 4634 | 2006-05-26 | 93 | 93 | 92 | 19 | 19 |
| 4042 | 2006-05-26 | 93 | 87 | 84 | 10 | 7 |
| 8234 | 2006-05-26 | 92 | 85 | 64 | 34 | 7 |
| 1964 | 2006-05-26 | 92 | 91 | 91 | 7 | 6 |
| 7447 | 2006-05-26 | 91 | 70 | 50 | 183 | 13 |
+——+————+———–+———–+———–+——-+——-+
25 rows in set (0.01 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で、これらのシステムの起動などをして、表示させることになると思う。

シミュレーションループの効率化(プログラム編)

先日に問題はわかったが、プログラムの方がうまく思いつかない。
いままでは、単純に指標の数だけループしており、
それにともなった、比重もループに組み込んで、
単純な10重のループになっていた。
必要な3重ループを2つに編成しないといけないが、
5C3のループをどうするか・・。
おそらく今までのプログラム人生の中で、幾度と無く組んでいるはずであるが、
覚えているはずものなく、ソースを探すくらいなら、自分で考えることにする。
(ロジックは自分で考えるのが好きで、人のロジックを持ってくるのは好きでないので・・)
・・・・
結局、必要な5C3は、
for ( my $loop1 = 0 ; $loop1 <= 2 ; $loop1++ ) { for ( my $loop2 = $loop1 + 1 ; $loop2 <= 3 ; $loop2++ ) { for ( my $loop3 = $loop2 + 1 ; $loop3 <= 4 ; $loop3++ ) { で、ループさせて、生成。 これで、$loop1から3に、1から5の組み合わせが入る。 これを、 foreach my $valwk1 ( @{ $all_val[$loop1] } ) { $val[$loop1] = $valwk1; foreach my $wariwk1 (@loop_cnt) { $wari[$loop1] = $wariwk1; みたいな、感じで3重のループをさせて、 実際のシミュレーションのサブルーチンには、 $val $wari を、0から4の5つを、引き渡せば、今までの処理が生かせる。 そんな感じで、テスト・・・ おーー早い。 計測してみると、従来の10分の1くらいの時間。 内容も特に問題ないようである。 先日の1日以上にわたるテストは無駄ということであるが、 それがないと、今回の改良には至らなかったので、よかったとする。 これなら、1日で全銘柄のシミュレーションがすませそうである。 とりあえず、今日のところは、このシミュレーションを起動して、 お出かけすることにする。(^^v

シミュレーションループの効率化

やはり、先日の最後に書いた、
「テキストで出力したときより、データベースに格納した方がレコード数が少ない」
と、いう感覚は間違っていなかった。
よく考えると、単純にパターンをループで生成すると、単純に組み合わせをする時では問題ないが、
その中で、適宜チョイスする場合だと、だいぶロスがでてしまう。
それは承知の上だったかが、そこに比重がはいると、ロスどころか、切り捨てができずに、
重複した結果を出力していることになる。
よく考えるとわかるけど、思いつきで作業していると、作るに精一杯でその辺に頭が回らない。
結局、5つの指標で3つを選択する組み合わせは、
5C3で10通りになるはず、その中で比重をつければ、
効率的に計算できるはずである。
どれだけ効率が上がるかは、いろんなところが関係するので、あえて計算せずに、
とりあえず、修正しよう・・・。
でも、どうも、うまくロジックが、思い浮かばない・・・。

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

風邪はだいぶましになったが、まだ体調は万全とはいえない状態。
こんな時期に風邪とは情けないが、会社でも結構はやっているようで、
仕方ないとあきらめる。
さて、先日までは、シミュレーションの結果はテキストファイルに出力していたが、
(厳密にはSTDOUTだが・・・)
後々のためにデータベースへの格納をすることにする。
その前に、先日の不具合を先に修正する。
・利率計算が微妙におかしい
 ロジックをみると、やっぱりおかしい・・・、すぐになおした(^^;
・DIV0エラー
 ロジックを見てもおかしくない。
 そもそも639銘柄も実行して止まったので、普通の状態ではない。
 メモリの関係か・・・と、悩む前に、
 基になる、指標データを眺める、6453をみてると、微妙に動きのない時期が・・・、
 そう、この1月ほどほとんど動かない時期に、ボリンジャーバンドの指数が0という瞬間があった。
 こんなこともあるんですね・・。
 とりあえず、セオリーどおり、割り算の分母は0判定をしましょう。
エラーがなくなったところで、データベースへの格納。
この辺はPerlのDBIでさくっと作る。
試行錯誤を軽くして、あっさり動作した。
なんとなく、テキストで見たときより、レコード数がすくないような・・・。
テストは明日の朝からにすることにして、
とりあえず、今日は寝る・・・・