組み合わせについて考察

最近、プログラム以前の問題として、シミュレーションの手法について、
考えていることが多い。
実際の運用を開始してしまえば、パラメータを作って、上位ポイントについて売り買いを
していけば良いのだが、それまでのシミュレーションの段では、相当な時間がかかってしまう。
今回は5指標の組み合わせを考えているが、それぞれに2~3の候補があって、
それらを組み合わせると。
3 × 3 × 3 × 2 × 2 = 162通り
この中で、採用ランクを3段区分けすると、
3^5 = 243通り
これらを掛け合わせると・・・
39,366通り
これを700日計算すると・・
27,556,200
これを3000銘柄すると・・・
82,668,600,000
と、いうことです(^^;
やっぱり、だいぶかかりそう・・(^^;
ちょっと、ロジックを考えなおします。
指標からポイントを出すところまでは、できているので、
もうすこし、がんばります。

各指標へのポイント付け

売りシグナル、買いシグナルについて、考える。
いろいろと情報をみてみると、指標がある一定の条件になると、
買いや売りのフラグをたてて、そのフラグの数などの条件で、
シグナルを出すのが多いようだ。
それだと、白黒ははっきりするが、私の目的とする、資本の高回転は、
シグナル次第になってしまう。
そこで、各指標に条件をつけて、その条件の範囲で、ポイントを算出するようにする。
買ってながら、買いは100点、売りは△100点として、数値する。
その順位高いものから順に、売り買いの指示をだし、手持ち資金分まで出資することにする。
今回は、その条件についても、システムで自動的にシミュレーションを行いつつ、
今の相場に最適なパラメータを作り出すこととしたい。
このパラメータの見直しは、毎週末に自動起動して、週明けの相場からは
新パラメータで売買をするようにする。
さすれば、毎日の損益(なんで損がさきかなぁ・・・縁起わるいなぁ)を、
確認するだけでよくなる。
と、いう夢物語を描いている。
今日は、各指標の条件の範囲について、検討をしている。
ここも自動化したかったが、そこまですると、例の28年間の時間がかかるので、
この、各指標の条件範囲については、手作業として、この2日くらいでつくりたいと思う。

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

昨日の仮シミュレーションのプログラムを改良して、
汎用的なサブルーチンを作る。
タイトルは偉そうであるが、今日はほとんどコーディングはできていない。
たとえば乖離率での買いシグナルについての計算は、
-20%、-15%、-10%を基準とした場合、それぞれの計算をするサブルーチンを
つくるよりは、当然、その数値を引数とした、サブルーチンをつくる。
もっと、いえば、乖離率の計算だけのサブルーチンよりも、
もっと汎用的にして、他の指数でも使えるようにしたい。
いわゆるサブクラス化であるが、あまり、クラスを抽象化して汎用すぎるものは、
処理のオーバーヘッドが増えて、処理速度の低下につながる。
業務で作る場合は、判読性が優先されるであろうが、なんせminiである。
速度も重視しないと、あとでえらいことになる。
そんなことを考えていると、なかなか、作業がすすまなくなってしまった。
今日は、少し頭を冷やして、明日に備えることにする。

シミュレーションの方法

先日、各指標の計算が終わり、いよいよ究極の方程式(?)を作るべく、
シミュレーションを行うこととしたが、プログラムを作る前に、
スイング用だけでも、
・ 6種類の指標(WMA、RSI、VR・・・)の組み合わせ
・ 各指標に複数のパラメータ(RSIなら、9日?14日?それとも両方使う?)
・ 各指標の判断パラメータ(RSIの9日の買いは20?25?30?など)
・ 銘柄はどれを選択すべきか(全銘柄、代表銘柄、指数?)
などで、悩み続けている。
先日書いた28年かかるというのは、すべての条件を総当たりで処理した場合の時間で、
非現実的なものであるので、ある程度条件を絞り込むなり、数学的に最適値を絞り込むか、
考えている。
HPで調べれば、いろいろとヒントはあるのであろうが、
ここの部分は、あまり、他の人を参考にせずに、自分のカラーを出したいと思っている。
ただ、私の場合、手を動かしながら考えないと、進まないので、
とりあえず、適当にシミュレーションできるものを仮ででも作り始めたいと思う。

取引シグナルの処理

今日はPCをさわることができなかった。
先日から、取引シグナル(売買シグナル)の計算方法を考えないといけないと考えていた。
(始めに考えろよ・・・という意見もあるでしょうが、私は先に作り始めてしまう癖があります(^^;)
通勤電車や仕事の移動時間に、いろいろと考えてみた。
スイング用のシグナルは、日足データから生成。
いろいろと本などをみてみると、3つの指標で基準をみたしたら、シグナルを発するような
仕組みがかかれていた。
私の場合は、軍資金の範囲で、より効率的に回したいことから、
予算額を設定して、その範囲で帰る銘柄を抽出するようなシステムにしたい。
(100万であれば、30万、40万、20万の銘柄3つを抽出・・とか)
なんせ、汎用性はいりませんからね(^^;
一度、買い(売り)をいれると、それを決済する必要がありますが、
これには、同じロジックの指標からの売り(買い)シグナルとともに、利益確定や損切りの基準を設けて、
決済する必要があります。(購入額の5%減で損切り・・など)
また、次に書く、デイトレ用の決済でも、判断をして、急落した場合や、
急上昇して、即落ちるようなケースに対応したいと思います。
これは、証券会社の自動売買では、今のところ対応できない手法だと思います。
デイトレ用のシグナルは、注視する銘柄を当日の朝までに自動抽出して、
30から100銘柄を注視していきます。
分足のデータを日足と同じように処理しつつ、気配値などから近々の動きを判断して
売り買いをしようと思います。
これは、シグナルが出た銘柄を、予算内で購入するようにします。
デイトレ用予算の全部を使うような買い方はせずに、予算の半分程度を限度に、
同時に3銘柄ほど、一日に、10回ほどの取引で回したいと思います。
基本的に翌日への持ち越しはせずに、その日のうちに決済をするようにします。
取引が終わってから、不測の発表があり、翌日に動けないと困りますので・・
(逆に良い発表があって急騰することもありますが・・)
どの指標をどのように組み合わせるかは、シミュレーションで決めることにしますが、
今、考えるシミュレーションを、すべて行うと・・・・
計算すると、うちのmini君では、
1回の計算で   28年
かかることがわかりました。
この辺は、現実的でないので、せめて1週間程度で計算できるようにしたいです。
(^^;

指標の計算

先日、指標(指数)を調べてみたが、処理能力を考えると、
毎回、必要な指標を計算するのは、だいぶ無理があることがわかった。
指標の中には、ボリジャーボンドのように、標準偏差を利用するものなどあるし、
パラメータの期間によっては、相当な時間がかかってしまう。
そこで、株価情報を収集したあとで、その日における、各指標をデータベース化し、
後で、その指標を使って、分析することにする。
そうすれば、銘柄が増えても、計算は当日分だけでよくなるので、
株価情報を取得してから、1時間もあれば、うちのマックでも計算できるだろう。
(銘柄一つの計算を1秒で終えられれば、丁度一時間でおわる。5秒なら5時間(^^;)
まずは、今後、その処理をさせることにする。

トレードの手法のお勉強

今さらなんですが、トレードをする際に必要な指数などについて、
HPで調べものをします。
これも本屋にはいろいろとかかれているようですが、
本をかってしまうと、それに縛られてしまい、自分でつくるメリットがなくなります。
そんなわけで、またしてもネットでみんながどんな指数を使っているのか、
調べてみました。
みなさん、いろんな指数に独自のパラメータを組み合わせて、買い時や売り時を判断しているようです。
ただ、つかっている指数(指標)は、大きくはかわりません。
概ね以下のようなものが多いです。
・移動平均 (単純移動平均(SMA)や加重(WMA)など種類がある)
・RSI オシレータ指数
・DMI
・VR ボリュームレシオ
・ボリジャーバンド
・株価変動率
・サイコロジカル
などが、どこででもお見かけします。
概ね、この中から適当なものを選んで、そこに与えるパラメータ(期間など)や、
判断するタイミングを変えて利用されているようです。
先人の知恵ですので、とりあえず、参考にしつつ、自分で考えた手法を組み合わせて
判断していきたいと思います。
とりあえずは、保有する全銘柄から選ぶことにしようと思います。

GUI部分の実装

分析のための情報収集は概ね目処がたったことから、
次は、実際に運用をする部分の制作に入る。
当初、様々な指数などはExcelなどでシミュレーションを繰り返して、
有用なもののみをプログラムに組み込み、採用しようと思ったが、
Mac用のExcelがなく、(Excelは存在するが、私は持っていない)
ここまでMacで作ってきたので、データの分析をWindowsでするのも
気が悪いので、Mac上で分析をできるようにしたい。
とりあえず、情報の分析や、各指数などの閲覧用のプログラムを作る。
PerlでCUIなツールを作るのが楽であるが、ここは今後の事もあるので、
GUIで作業できるようにする。
ここは、今までさわらずにいたJavaをさわるのが、一番汎用性がありそうだ。
JavaでのGUIを調べてみると、Swingなどとかかれた本が多数みつかった。
JavaのGUIの定番らしい。
ただ、SWTというものがあって、これは、Javaチックな外観でなく、
Macチックな外観をつくれるようである。
今回はJava初めてで、どうせ苦労するのはわかっているので、
ここは情報の少ないが、見た目のよさげな、SWTを利用することにしたい。
SWTを深く探っていくと、どうも、OSによってネイティブなライブラリを利用する、
そこが、Macらしい外観の根拠でもあるらしい。
とりあえず、Eclipseも適当につかっていて、ライブラリのして方法も今ひとつわからない。
しかたないので、ソースのある場所に、指定のライブラリを置いておくとちゃんと動くようだ。
(後にプロジェクトのプロパティで場所指定できることがわかる)
SWTを使うときに、JFaceというのを使うと、SWTをカプセル化できるようであるので、
こちらも使うことにする。
もう一つ、RCPというが、このJFaceを抽象してくれるようであるが、
私はあまり抽象化は好きではなく、そのまま素で使うことにする。
(抽象化すると、中で動いているSWTの正体がわからないままになりそう)
WindowsやLinuxでは、VisualEditorなるもので、GUIでボタンなどの配置ができるようであるが、
あいにく、Macのみでやりたいので、プログラムに直接コードで作ることにする。

日中足データの活用

先日までで、とりあえず日足データの取得はできるようになった。
現状のデータで、日足データを解析して、売り買いのシグナルを出し、
翌日の寄りつきで成行or指し値で買いを入れつつ、約定すれば、売りの注文をだせば、
普通にスイングトレードはできそうである。
それであれば注文を自動化せずとも、夜に帰宅後、kabu.comで、買い注文をいれて、
リレー注文で、売り注文をW指し値などでいれれば、対応できる。
ただ、それだと、タイトルの「Macが株取引」でなくなってしまうので、
なんとか、日中にリアルタイムな株価や気配値を見ながら、処理したい。
そんなわけでリアルな日中足データを取得することにする。
問題は、このデータをどこから取得するのか。
HPで調べると本当のリアルタイム株価は価格的にきつい・・・、と、いうか普通に趣味でやるには、
全く無理な金額である。
そんなわけで、
・ 日足データから翌日に動きのあるであろう株を推定する。
・ 証券会社(今回デイトレ用に開設した某e証券)からほぼリアルタイム株価を取得
・ 取得できた株価をデータベースに格納
・ 取得できた銘柄の分析をして、売り買いのシグナルをだす。
・ シグナルによって、実際の売買をする。
と、いった感じで処理しようと思う。
取得する情報は、
・ 取得日時(or取引日時)
・ 取引価格
・ 4値
・ 出来高
・ 気配値(売り買い5本に統一)
などを取得する。
間隔は1分おきくらいでよいかと思っています。
この辺は実際に取得、解析、注文、などのCPUの食い具合などを見ながら
決めたいと思います。
あまり、たくさん、証券会社にリクエストすると、クレームがくるような話も聞きますんで、
常時監視する管理銘柄も、30~50程度になると思います。

開発方針変更(cocoa 2 unix)

ここ数日、HPをみたり、自分で考えをまとめてみる。
結果、
「 MacはMacでもUNIXよりのシステムを構築する。」
と、いうことに落ち着いた。
(cocoaなシステムのみでの構築は時間がかかりすぎて飽きそうが本音(^^;)
大まかなシステムは、
1 ユーザインターフェイス(Cocoa or Java)
2 情報の取得(Perl)
3 情報の保管、管理(MySQL)
4 注文処理(Perl)
を、分離してそれぞれを独立したシステムとして運用することにする。
母国語(?)である、CやC++でコーディングしたいのは、やまやまなんですが、
Macな場合、Cで組んでしまうと、他のプラットフォームに移植するのが、
結構、大変そうな感じがするので、どこにでもある言語を使うことにする。