2000年7月2日記
はじめに |
株ソフトを運用する場合、最大の難点は日々データの確保でしょう。 文字放送レシーバで取得したり、インターネット上の 合法サイトに 掲載されているページからデータを抽出したりというのが定石です。 これらの方法では、当日のデータは取得できますが、当日取得でき なかった時、過去に遡ってデータを取得することはできません。
合法な過去データは、例えば、東洋経済から購入できます。 東洋経済の株価CD-ROM は、過去11年分で9.8万円もします。しかも、株価CD-ROMを購入 したとしても、このデータを自分が使用している株ソフトが読み込み 可能なフォーマットに変換する必要があります。これは一般ユーザには 難しいかも。
非合法なデータでよければ、株ソフトを販売しているシェアウエア作者から 購入するという手はありますが...この場合、対象のシェアウエアで すぐに使える形式になっているので、素人には便利ですが、データほしさに 1000円級シェアウエアを2万円とかで購入するというのも考えもの。 2年分程度のデータがついてくる場合もあるので、データ代という考えも できるが...
でも、未来永劫までデータ供給が保証されている訳ではありませんし、例えば、 シェアウエア作者が事故か病気になっただけで、データの供給は止まります。
それにしても、非合法データを売っている連中はどういう神経をしているのだろうか。 テレビから音楽を録音してMP3でエンコードして、自分の「ホームページ」 (Webサイトにあらず)で売るようなのりなのか。はたまた市販パッケージソフト をCD-Rで焼いて秋葉原の路上でキャッチ販売するようなのりなのか。 まぁ、所詮は、それに群がるユーザあってのこと。
それじゃ、シェアウエア作者のお世話にならず、もっともらしい会社組織のサイト で日々データを公開しているとことから、入手したらどうだろう。 例えば、 パンローリングや 株価データ情報 など。
もっともらしい会社組織であっても、公開しているデータは合法データとは 限りません。合法データを不特定多数に公開するためには、相当のコストが かかるはずですから、無料で公開しているというのはどう考えても... もっとも、略記した銘柄名とかを入れなければ、合法データも非合法データも 区別つかないんですけどね。(「だから、公開されているデータは合法データ」 という論法は通用するのかな。)
これらのデータはテキスト形式なので、エディタなどで変換することは可能です。 ChartScapeのユーザにも「パンローリングのデータはどうやって変換するんですか?」 といった、まぬけなメールを出してくる輩がいまだにおります。 ChartScapeは、これらのデータを読み込むような「親切な」機能はありません。 (やろうとおもえば超簡単なのですが。)
しかし、このようなデータをかたくなに拒んでも、結局非合法データを売っている 連中を太らせるだけなので、簡単な変換方法を紹介しておきます。
やっと本題、Perlをインストール |
まずは、Perlを入手する。ここで、Perlとはなんぞやとか、どこから入手したら よいのかなどの疑問がわいてくる方もおられるかも知れません。 このとき、バカの一つ覚えのように、本ページ作者に 「Perlって何ですか?」とか「Perlはどこから入手したらよいのですか?」などの メールをしようなどど考えている輩は、これ以上読み進めるのはやめてください。 検索サイトを使えば、Perlとは何でどこにあるのかはいくらでも探すことが できますし、本屋にいけば、Perlの本は腐るほどあります。 CD-ROM付きのPerl本の中から、よさそうなものを選ぶのがよいでしょう。
Macintoshの場合は、MacPerlの 最新バージョンを、ここ から入手。
で、入手したPerlをインストールする。 あとは、4本値+出来高程度の株データであれば、簡単な変換スクリプトを書くだけで変換できる。
例1:株取虫フォーマットから株取虫もどきフォーマットへの変換 |
株取虫フォーマットも、株取虫もどきフォーマットどちらもChartScapeで読み込むことができますので、この変換はあまり意味はないのですが、とりあえず、例としてとりあげます。
テキストエディタで以下のPerlスクリプトを作成し、"KD2DS.PL"という名前でセーブしてください。(名前は何でもよいのですが、拡張子はPerlスクリプトをあらわす .PLとしておいた方がよいでしょう。)
# /usr/bin/perl @market{"東証1部", "東証2部", "大証", "名証", "店頭"} = (1,2,3,4,5) ; open(INPUTFILE, "KD20000612"); $n=0; while(<INPUTFILE>){ $n++; } $n = $n - 4 ; seek(INPUTFILE, 0, 0); open(OUTPUTFILE, ">DS000612.DAT"); <INPUTFILE>; <INPUTFILE>; <INPUTFILE>; <INPUTFILE>; <INPUTFILE>; print OUTPUTFILE "000612\n" ; print OUTPUTFILE $n, "\n" ; while(<INPUTFILE>){ @rec = split; printf OUTPUTFILE "%d,%d,%s,%d,%d,%d,%d,%d\n", $rec[0], @market{$rec[1]}, $rec[2], $rec[3], $rec[4], $rec[5], $rec[6], $rec[7]/1000 ; } close(OUTPUTFILE); close(INPUTFILE); |
このスクリプトは、株取虫フォーマットのファイル"KD20000612"を読み込み、株取虫もどきフォーマットのファイル"DS0612.DAT"を出力します。
Macintoshの場合は、スクリプトファイル"KD2DS.PL"をMacPerlアイコンにドラッグし、ScriptメニューのRunにより、実行させます。一瞬で、(68kMacならばしばらくたった後)、株取虫もどきフォーマットのファイル"DS000612.DAT"が作成されます。
Windowsの場合は、DOS窓で、以下のコマンドを実行させます。はじめに、perl.exeのPATHが通しておいてください。
perl KD2DS.PL |
赤字のファイル名部分を変更すれば、別のファイルでも使用できます。
スクリプト実行の結果は、次のようになります。
変換元:KD20000612 |
---|
株取虫 株価データ 2000年 6月 12日 12時 13分 銘柄数 エラー数 0 銘柄コード 市場 銘柄名 始値 高値 安値 終値 出来高 1001 東証1部 平均株価 16876 16920 16791 16920 0 1002 東証1部 TOPIX 1587 1587 1580 1586 0 1301 東証1部 極洋 148 151 147 149 262000 1331 東証1部 ニチロ 180 184 180 182 1199000 |
出力結果:DS000612.DAT |
000612 4204 1001,1,平均株価,16876,16920,16791,16920,0 1002,1,TOPIX,1587,1587,1580,1586,0 1301,1,極洋,148,151,147,149,262 1331,1,ニチロ,180,184,180,182,1199 |
例2:syyyymmdd.txtから株取虫もどきフォーマットへの変換 |
次の例は、syyyymmdd.txtのファイルを株取虫もどきフォーマットのファイルに変換します。 市場コードが常に0である点に注意してください。ChartScapeで読み込ませる場合は、 新規登録時しか、市場コードを銘柄辞書に反映させませんから、問題はありません。
市場コードも正しく設定するようなスクリプトを書くには、株取虫フォーマットのファイル 自身を辞書として読み込み、連想配列にでも格納しておけば、証券コードから市場を容易に 逆引きするスクリプトが書けます。本見ながらやってみるか、できなかったら 親戚の理系の学生でもつかまえて、1万円程バイト料を払って、作ってもらったら よいでしょう。
変換元:s19990712.txt |
---|
19990712 1001 日経平均 17921 18274 17843 18274 53300 1002 東証指数 1465 1485 1464 1484 53300 1003 円相場 12240 12240 12240 12240 0 1007 東京円相場 12237 12253 12199 12206 0 1301 極洋 180 185 176 185 193 |
出力結果:DS990712.DAT |
990712 2242 1001,0,日経平均,17921,18274,17843,18274,53300 1002,0,東証指数,1465,1485,1464,1484,53300 1003,0,円相場,12240,12240,12240,12240,0 1007,0,東京円相場,12237,12253,12199,12206,0 1301,0,極洋,180,185,176,185,193 |
このスクリプトは次のようになります。
# /usr/bin/perl open(INPUTFILE, "s19990712.txt"); $n=0; while(<INPUTFILE>){ $n++; } $n = $n - 1 ; seek(INPUTFILE, 0, 0); open(OUTPUTFILE, ">DS990712.DAT"); $date=<INPUTFILE>; print OUTPUTFILE substr($date,2,6), "\n" ; print OUTPUTFILE $n, "\n" ; while(<INPUTFILE>){ @rec = split; printf OUTPUTFILE "%d,%d,%s,%d,%d,%d,%d,%d\n", $rec[0], 0, $rec[1], $rec[2], $rec[3], $rec[4], $rec[5], $rec[6] ; } close(OUTPUTFILE); close(INPUTFILE); |
例3:CSVファイルから株取虫もどきフォーマットへの変換 |
次の例は、CSVファイルを株取虫もどきフォーマットのファイルに変換します。
変換元:20000621.CSV |
---|
"取引年月日","銘柄コード","銘柄名","始値","高値","安値","終値","出来高" "2000/06/21",1301,"極洋",151,154,150,154,209000 "2000/06/21",1331,"ニチロ",176,179,176,178,220000 "2000/06/21",1332,"日本水産",183,183,180,182,410000 "2000/06/21",1333,"マルハ",151,155,151,154,406000 |
出力結果:DS000621.DAT |
000621 3437 1301,0,極洋,151,154,150,154,209 1331,0,ニチロ,176,179,176,178,220 1332,0,日本水産,183,183,180,182,410 1333,0,マルハ,151,155,151,154,406 |
このスクリプトは次のようになります。この例では、出来高の単位を1株から千株に変更しています。
# /usr/bin/perl open(INPUTFILE, "20000621.CSV"); $n=0; while(<INPUTFILE>){ $n++; } $n = $n - 1 ; seek(INPUTFILE, 0, 0); open(OUTPUTFILE, ">DS000621.DAT"); <INPUTFILE>; print OUTPUTFILE "000621\n" ; print OUTPUTFILE $n, "\n" ; while(<INPUTFILE>){ @rec = split(/,/); printf OUTPUTFILE "%d,%d,%s,%d,%d,%d,%d,%d\n", $rec[1], 0, substr($rec[2],1, length($rec[2])-2), $rec[3], $rec[4], $rec[5], $rec[6], $rec[7]/1000 ; } close(OUTPUTFILE); close(INPUTFILE); |
「エディタ作りました!1000円のシェアウエアです。みなさん、使ってください!」 のようなのりのシェアウエア。 vectorにいっぱいあります。 私なりの定義をすれば、実開発工数が1人月未満のシェアウエアか。 株ソフトは、一見高そうに見えるかも知れませんが、本質は1000円級シェアウエア そのものでしょう。もちろん、ChartScapeも例外ではなく。
もっとも、もし、ChartScapeをシェアウエアにしたとしても、1000円の値段はつけず、 やはり2万円にするでしょうね。商売の鉄則は「取れるところから取る」。 1000円にしたとしても、2万円にしたときの20倍の売り上げは見込めませんから。 この世界、パイは小さいんです。
パイは小さいんですが、株ソフトは、1000円級シェアウエアを10倍〜100倍の値段で ふっかけられる、数少ないジャンルですので、これからも続々参入者は増えるでしょうね。 ここは、要チェックです。ここには、シェアウエア代金が6万円もするものもあるぞ!
たまたま購入したシェアウエア株ソフトが気に入らなくなっても、一般ユーザでは、 それまで蓄積したデータを、別の株ソフトにもっていけないでしょうから、選択は 慎重に。