vvpchart
株式チャートソフトとしての開発はやめました。
OmegaChart?を使っていた時期もありましたが、
既にメンテナンスされていないので取り上げたページは削除しました。
以下は、チャートソフトとしてはイマイチですが、データを外部のデータベースに依存するソフトの例としては、多少の存在意義はあるかもしれないので、そのまま置いておきます。
データベースの操作の習得のためという方向での追記は今後もあるかもしれません。
国内株のチャート表示ソフト。
シェアウェアの某ソフトを試用していましたが、自分の使わない機能が多すぎなのと、著作権的に許容できない部分があったので、自前で作ることにしました。
DBを内包せずに外部のPostgreSQLを利用しているので、使うにはそれなりの知識と設定が必要です。
2005/11/06以降のバージョンからMySQLではなくPostgreSQLになりました。予約語の都合でテーブル構成を一部変えたため、旧バージョンとの互換性はありません。
FX用拡張。準備中です。
コメント †
使用規約 †
個人の場合はBSDライセンスを適用します。
無償で使用できます。再配布、改変物の配布も可です。著作者人格権は主張しますので、コピーライト表示は削除できません。
法人・団体は営利・非営利に関わらず、再配布、改変物の配布は事前の承諾が必要です。当サイトからダウンロードしたユーザが使用する分には、無償で使用できます。
データの相違やソフトウェアの瑕疵等による2次的な損害を含むあらゆる損益に対して当方は責任を負いません。
本規約に係る一切の紛争は当方の居住地を管轄する地方裁判所を第一審の合意専属管轄裁判所とします。
コンセプト †
- データは内包しない(外部DBを利用する)
- カスタマイズ用の言語は作らない
- カスタマイズは全てネイティブの言語で行う(プログラマ向け)
環境設定 †
Windowsで動作します。2000/XP/2003あたりでは動作すると思いますが、それら以外では動かないかもしれません。開発環境はXPです。
.NET Framework 1.1以上が必要です。
.NETのODBCのランタイムが必要です。(odbc_net.msi)
PostgreSQLのODBCドライバが必要です。(postgresql同梱)
ToDo? †
- DB接続設定
- 株式分割を考慮
- チャート上でのカーソル表示と値表示
- 表の方で選択して、チャート上にカーソル表示
- アイコンを作る
- 表のソート機能
- 設定ファイル作成
- お気に入りの銘柄を登録する機能を追加
- FXのデイトレ用に流用 ←しばらくはこれが最優先
KnownBug? †
データベース †
PostgreSQLを使い、株価を格納します。
PostgreSQL8.0推奨です。
pgAdmin等を使って作成してください。
データベースの文字コードはUTF8でしかチェックしていません。
DATABASE作成 †
CREATE USER stock WITH PASSWORD 'stock' NOCREATEDB NOCREATEUSER; CREATE GROUP stock USER stock; CREATE DATABASE stock WITH ENCODING='UNICODE' OWNER=stock;
TABLE作成 †
CREATE TABLE code_table ( code_id SERIAL UNIQUE PRIMARY KEY, code SMALLINT, marketcode SMALLINT, name VARCHAR(64) ); CREATE TABLE daily_table ( daily_id SERIAL UNIQUE PRIMARY KEY, stock_date DATE, open REAL, high REAL, low REAL, close REAL, volume BIGINT );
CREATE TABLE split_table ( split_id SERIAL UNIQUE PRIMARY KEY, code_id INT REFERENCES code_table ON DELETE SET NULL ON UPDATE SET NULL, stock_date DATE, factor REAL );
CREATE UNIQUE INDEX codedata_index ON daily_table USING btree (code_id, stock_date);
クローラー †
日々の株価を集めます。
PHPで書かれています。Yahoo用と、無尽蔵用を作ってありますが、Yahoo用は最近動かしていないのでちゃんと動くかどうか怪しいです。
無尽蔵用 †
ver 0.55(04-Apr-2006) stock_crawler055.lzh
使い方
unlha.exeが必要なので用意します。
http://www.tsg.ne.jp/GANA/S/unlha/
v1.10 + UNLHA32.dll v0.41で動作を確認しています。パスが通っていればどこに置いてあってもかまいません。パスを通したくない場合は、stock_crawler054.lzhの解凍先(down_day.phpと同じフォルダ)に置いておけば動きます。
unlha32.dllも必要なので、
http://www.csdinc.co.jp/archiver/lib/unlha32.html
からダウンロードしてインストールします。
stock_crawler054.lzhを解凍します。以下では、c:/に解凍したものとして進めます。
c:/stock_crawler/vlib/config.inc
にデータベースの接続設定があるので、これを変えます。DatabaseConfig?()とsetup()にそれぞれ設定がありますが、setup()の方を変えます。また、前述のSQLでそのままローカルのデータベースに作成している場合は、変更する必要はありません。
コマンドラインで、
php.exe down_day.php YY MM DD
と実行します。2005/11/14のデータを登録する場合は、
php.exe down_day.php 5 11 14
と入力します。
更新履歴 †
- ver 0.55(04-Apr-2006)
無尽蔵の格納場所の変更に対応。
- ver 0.54(12-Dec-2005)
分割の登録用スクリプトを追加
2460 アプレシオが#N/Aとなっている問題への対応
- ver 0.53(08-Nov-2005)
WindowsのインタフェースをPostgreSQL対応にするついでにデータベースの名前をちょっと変えました。
- ver 0.52(06-Nov-2005)
データベースをPostgreSQLに変更。
- ver 0.51(18-Oct-2005)
PEARのDBを使うように変更。
チャート表示 †
PostgreSQLに格納されたデータを元にチャートを描くWindowsアプリです。
C#で書かれています。.NET Framework(v1.1以降)が必要です。PostgreSQLのODBCドライバも必要です。
実行ファイルのみ
StockSearch053.lzh
ソースファイルのみ
StockSearch053src.lzh
ローカルのデータベース専用です。データベース名・ユーザ・パスワードも全部"stock"固定です。
更新履歴 †
- ver 0.53(08-Nov-2005)
PostgreSQL版
スクリーニング機能が入りました。ただし、アルゴリズムの未実装版なので、全ての銘柄が表示されます。
- ver 0.52(22-Oct-2005)
チャート拡大・縮小機能
自動サイズ調整
DBからの読み込みの改善(非同期読込、優先読込、先行読込)
設定ファイルの読み込みに対応
- ver 0.51(20-Oct-2005)
RSI,移動平均を追加
チャート選択機能
期間設定機能
その他
使い方 †
注:起動するとc:\vvpchart.xmlという設定ファイルが作られます。
基本的な使い方は、「コード」に4桁の証券コードを入れて、「チャート表示」を押すとチャートが表示されます。複数の市場に上場している場合は、市場が選択できます。銘柄名は自動入力のみで検索などは出来ません。
チャート表示オプションを変更して、「再描画」ボタンを押すと、その設定でチャートが再描画されます。
AutoSize?。チェックが入っているとウインドウサイズに応じてチャートの横幅が自動的に変化します。
スライダー。チャートの拡大・縮小ができます。再描画ではないのでやや汚い画質になります。
読み込みについて †
起動すると、まず証券コード・市場・銘柄名の情報をDBから取得します。これはすぐに終了します。この後にウインドウが表示されます。
通常読み込み
チャート右上に、「DBに問い合わせ中です」と表示され、DBに全銘柄の情報を求めるクエリを発行します。これは数十秒から数分程度かかります。
次に、「登録中:(証券コード)」と表示されます。ここで表示された証券コードよりも若い番号の銘柄は、すぐにチャートを描画できます。全銘柄が登録されるには、数分から10分程度かかります。
全銘柄が登録されると、「全銘柄が登録済みです」と表示されます。この次点では、どの銘柄でもすぐにチャートを描画できる状態になっています。再度DBに問い合わせることはありません。そのため、DBの情報が更新されても反映させることはできません。
通常読み込みはバックグラウンドで行われるため、その間もユーザは任意の操作が可能です。
優先読み込み
登録には10分程度かかることもあるため、見たい銘柄が登録されるまで待つのは大変です。それでは困るので、登録されていない銘柄のチャート描画が要求された場合は、その情報を優先的に読み込むようになっています。この情報は新たなクエリを発行して取得します。そのため、数秒から数十秒程度の時間がかかります。
優先読み込み中は、ユーザは通常の操作を行うことができません。
先行読み込み
また、注目している銘柄を通常の読み込みに先立って読み込ませることができます。対象となる銘柄は設定ファイルに保存されます。この処理は、優先登録と同様に、各銘柄の情報を個別のクエリで取得します。そのため、通常の読み込みに比べるとやや効率が悪くなっています。
先行読み込みはバックグラウンドで行われるため、その間もユーザは任意の操作が可能です。
プログラムについて †
C#と.NETを始めて1週間なので多分ウインドウまわりでは変なことをしています。ツッコミ募集中です。
チャートのアルゴリズム部分はDecoratorパターンになっています。ローソク足などと一緒に書いて良い場合は、ChartGraphFloat1などから派生させると単純に計算部分だけ作れば簡単に描画できます。
ビルドにはODBC .NET Data Providerが必要です。「参照の追加」から追加してください。
メモ
DBからの読み込みの高速化のテスト。データは約100万行。
MySQL5.0.4 (ODBC 3.51) 03:29(00:51, 02:39)
PostgreSQL8.0.4 (ODBC) 02:21.5(00:61,01:20)
ソートなし全読み込み 01:22(00:30,00:52)
+データ登録なし(ODBCでの限界) 01:17(00:32,00:46)
+データ登録あり、Completeチェックなし 01:25(00:34,00:51)←そもそもCompleteデータがほとんど無かった
+クライアント側でソート 1:27.5(0:31,01:16)
ライセンスの関係で、MySQLからPostgreSQLに変えました。
インデックスの効果がMySQLよりも絶大です。というか、インデックスなしがあまりにも遅すぎます。でもインデックスありはMySQLよりも速そう。