Tick収集ユーティリティ

  • 楽天RSS(楽天証券のリアルタイムスプレッドシート)とExcelとを利用して、ティックを銘柄毎にCSVファイルにリアルタイムで保存します。
  • M.trading 自動売買ソフトと組み合わせると、リアルタイムで任意の分足の生成を可能とします。
  • M.trading さや取りと組み合わせると、さやをリアルタイムにチャート表示できます。

記録されたCSVファイルの例

Ticksフォルダ

[CSV Data フォルダ]の中に、今日の[日付フォルダ]が起動時に作成されます。

CSVファイル

[日付フォルダ]の中に銘柄毎のCSVファイルが作成されます。

20110821fig2.png

225先物のティック記録例。夜間取引にも対応。

最初に行う設定

Tick収集ユーティリティ

最初に、以下の順序で設定を行って下さい。

  1. 楽天RSSを起動します。
  2. Tick収集ユーティリティを起動します。
  3. [CSVフォルダを設定]ボタンを押して、[CSV Data フォルダ]を設定します。
    例:C:\Ticks
  4. 記録したい銘柄のファイル名やコードを設定します。
  5. [記録停止]ボタンを押してから、[ワークシート構築]を実行します。
  6. [記録開始]ボタンを押して、設定したCSV Data フォルダの中に今日の日付のフォルダが作成され、銘柄のCSVが作成されたのを確認します。
  7. ワークブックを保存します。

Excelの起動

このユーティリティのVBAでは、

Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True

など、Excelアプリケーション自体の動作を制御しています。従って、Excelの他のワークブックを利用するのなら、Excelを別プロセスで起動してこのユーティリティを利用するのが良いでしょう
すでに起動しているExcelと別プロセスでExcelを起動するには、

  • 既に起動しているExcelがある時に、スタートメニューからExcelのアイコンをクリックする。
  • 後述の「UWSCで、決まった時間に開く」を実行する。

などの方法があります。

タスクマネージャ

画像のように、タスクマネージャでExcelのプロセスが複数あるのを確認できます。

使い方

利用
空白以外にすると(例「*」)、その行のデータが[ワークシート構築]で利用されます。
225先物/miniの場合は、「1」にして下さい。ワークシートのA10セルに現在日付を表示し、PCの日付と現在日付が一致する場合に記録をします([値が更新時に記録]の場合)。
銘柄
銘柄の名前を任意で付けます。
ファイル名
CSVファイルのファイル名に利用されます。このファイル名に「.csv」が付け加えられます。
Code
楽天RSSのコードを記入します。[ワークシート構築]を実行すると、このコードに更新時刻現在値出来高を付け加え数式としてワークシートに配置します。
数式(時刻)
Codeが無い場合、ここにある数式をワークシートに配置します。
数式2(現在値)
Codeが無い場合、ここにある数式をワークシートに配置します。
数式3(出来高)
Codeが無い場合、ここにある数式をワークシートに配置します。
乗数
ここに数字を入れると、[数式2(現在値)]に乗算する数式にしてワークシートに配置します。[数式2(現在値)]が小数点の場合、それを整数にする場合に利用します。M.trading 自動売買ソフトでは、読み込むCSVの値・出来高は整数の必要があり、その場合などに利用します。
CSV Data フォルダパス
[CSVフォルダを設定]ボタンを押して、フォルダのフルパスを指定して下さい(J2セルに直接指定しても構いません)。
例:C:\Ticks
このフォルダの中に日付フォルダが作成され、日付フォルダの中にCSVファイルが保存されます。
ファイルを開いた時に、設定を読み込み記録を開始する。
楽天RSSが起動していないと起動時にエラーダイアログが表示されますから、楽天RSSを起動後、Tick収集ユーティリティを起動するのが良いでしょう。
閉じる時に、確認をせずまた保存をせず閉じる。
変更があった場合、閉じる前に表示されるダイアログを表示せず保存をせずに閉じます。
記録開始(計算開始)
設定を読み込み、日付フォルダ・CSVファイルを作成し、CSVに記録を開始します。
記録停止(計算停止)
CSVへの記録を停止します。また、VBAの処理を全て終了し、VBAの処理内で読み込んだ設定は破棄されます。
設定読込
設定を読み込み、日付フォルダ・CSVファイルを作成します。
日付フォルダを開く
現時点でCSVを保存しているフォルダ(今日の日付のフォルダ)をエクスプローラーで開きます。
CSVフォルダを設定
CSV Data フォルダパスを指定します。
記録間隔
[指定した間隔で記録]するで[ワークシート構築]を行った場合、ここで指定した時間ごとに記録します。
前場始値変更時刻
[前場始値の表示とともに記録する。]の場合に利用します。設定した時刻になった時、ワークシートのセルC10の数式で、「現在値」となっているものを「前場始値」に変更します。ただし、ワークシート[設定]F列[数式2(現在値)]で指定してある数式は除きます。

ワークシート構築

ワークシート構築

ワークシート[設定]以外のワークシートをすべて削除し、[利用]の列で空白になっていない行のデータから新しいワークシートを生成します。VBAによってVBA(別の表現では、マクロによってマクロ)を自動生成しています。従って、アンチウイルスソフトによってはマクロウイルスと認識される可能性があります。Norton Internet Security 2011では大丈夫でした。

エラー画面
エラー画面

VBA プロジェクト オブジェクト モデルへのアクセスを信頼する

マクロの設定で、「VBA プロジェクト オブジェクト モデルへのアクセスを信頼する」にチェックを入れておかないとエラーが発生します。

楽天RSSを起動しておかないと、「外部データにアクセスできません。」のエラーダイアログがかなりの回数表示されます。

前場始値の表示とともに記録する。
  • 日本株の場合は、前日の後場終値を記録した後は、前場始値が表示されてから記録を開始します。
  • 225先物の場合は、0:00~3:00までのティックを記録した後、あるいは、夜間終値を記録した後、日中始値が表示されてから記録を開始します。
これを行うために、複雑な方法をとっています。後述の「前場始値の表示とともに記録する。」を参照して下さい。
出来高のセルを配置する。
チェックすると、出来高の数式を配置します。出来高のセルを配置すると、楽天マーケットスピードで表示される歩み値情報とおおむね同じになります。ティックをできるだけ正確に記録するには、チェックした方がいいでしょう(ただし、225先物は出来高をセルに配置しなくても歩み値情報と同じように記録されるようです。←検証中)
出来高も記録する。
[出来高のセルを配置する]にチェックし、これもチェックすると、出来高もCSVに保存します。ただし、楽天RSSで配信される出来高はそのティックの約定数量ではなく、それまでの合計です。
ただし、[指定した間隔で記録]する場合は、出来高は記録されません。
更新時刻・現在値時刻
どちらかをチェックします。[数式(時刻)]で配置される数式に、チェックした方が利用されます。
値が更新時に記録・指定した間隔で記録
どちらかをチェックします。
[値が更新時に記録]は、ワークシート上で値に変化があった時に記録されます。
[指定した間隔で記録]は、[記録間隔]で指定した時間ごとに記録します。

前場始値の表示とともに記録する。

原則、[前場始値変更時刻]の8:55以降に、tmpファイルが有れば、その銘柄の始値は記録されたことを示します。こうした方法により、例えばTick収集ユーティリティを日中に再起動した時、すでに始値が記録されているのに再び始値が記録される状態を防ぎます。
tmpファイルは、その日の記録が終われば削除して構いません。

この設定を利用する場合、Tick収集ユーティリティは、[前場始値変更時刻](初期設定では8:55)前に起動して下さい。

日本株の場合

東京電力(9501)の例にします。

  1. [前場始値変更時刻](初期設定では8:55)になった時に、数式の「=RSS|'9501.T'!現在値」を「=RSS|'9501.T'!前場始値」に変更します。
  2. 9:00以降に前場始値が表示された時、csvに前場始値が記録されると同時に、東京電力.tmpファイルが作成されます。
  3. 更新時刻が変化した時(Worksheet_Calculate()のイベントが発生します)、東京電力.tmpファイルが有れば、「=RSS|'9501.T'!前場始値」を、「=RSS|'9501.T'!現在値」に変更します。それにより、csvに現在値が記録されます。

225先物(ミニ)の場合

日本株の銘柄と少し異なります。

  1. [前場始値変更時刻](初期設定では8:55)前に、Tick収集ユーティリティを起動した時、「=RSS|N225.FUT01.OS!現在値」が表示されます。この値は当日3:00の夜間終値になります。これがまず、csvに記録されます。
    日経225先物.tmpファイルが作成されますが、これは仕様です。
  2. [前場始値変更時刻](初期設定では8:55)になった時に、「=RSS|N225.FUT01.OS!現在値」を「=RSS|N225.FUT01.OS!日中始値」に変更します。
    日経225先物.tmpファイルを削除します。
  3. 9:00以降に日中始値が表示された時、csvに日中始値が記録されると同時に、日経225先物.tmpファイルが作成されます。
  4. 更新時刻が変化した時(Worksheet_Calculate()のイベントが発生します)、日経225先物.tmpファイルが有れば、「=RSS|N225.FUT01.OS!日中始値」を、「=RSS|N225.FUT01.OS!現在値」に変更します。それにより、csvに現在値が記録されます。
  5. 夜間立会で0:00をまわり日付が変わった時は、新しく日付フォルダを作成し、その中に日経225先物.csv日経225先物.tmpを作成します。

制限

第一の理由としてRSSではデータが常にすべて送られてくるというわけではありません。第二の理由としてExcelの処理速度が追いつかない場合があります。従って、歩み値の変わる速度が速い場合などは記録しきれなくなります。完璧なデータ収集はできません。特に、225先物は取得仕切れません。
このユーティリティとは別に、VB.netで作成した日経225先物専用のティック取得四本値生成ユーティリティを利用していますが、これでも取得仕切れていません。四本値生成を行うと実際の四本値とはずれることもあり、実際にずれた四本値で自動売買を行うこともしばしばあります。
より正確なティックを取得する方法があるようでしたら、お知らせいただければ対応できる範囲でユーティリティを作成したいと思います。

昼の切断対策

225先物が配信されるため、昼に楽天RSSは切断されないようです。

UWSCで、決まった時間に開く

次のスクリプトをTickRecord.uwsとして保存します。それを、UWSCのスケジュール設定に登録します。
このスクリプトでは、すでにExcelが起動していてもExcelは別プロセスとして起動します。

//ファイル名とファイルへのパスを設定して下さい。
ファイル名 = "TickRecord_1.9.1.xls"
パス = "C:\"

//既に開かれていたら閉じる。
IFB GETID(ファイル名) <> -1 THEN
	CTRLWIN(GETID(ファイル名), CLOSE2 )
	SLEEP(5)
ENDIF

//二重起動の防止
IFB GETID(ファイル名) < 0 THEN
	Excel = CreateOLEObj("Excel.Application")
	Excel.Visible = True
	Excel.WorkBooks.Open(FileName:=パス + ファイル名, readOnly:=False)
ENDIF

タスクから開いた場合、イベントが機能しない

タスクに登録した例

画像のようにTickRecord.xlsファイルをアクセサリ>タスクに登録します。
このタスクを実行した場合、Excelファイルが開かれますが、Windows XP SP3上の、Excel 2002(XP) SP3 , 2003 SP3では、

  • 開いた時、最初の1回はイベントが発生する。
  • その後のイベントは起こらない。

という動作になります。従って、このユーティリティは動作しなくなります。
Excel 2007 SP1では、その後のイベントは起こり問題はありませんでした。
(イベントとは、Worksheet_Calculateや、Worksheet_Activateなど。)

タスクからExcelファイルを開くとこの例のように想定外の動作になる可能性があるため、タスクからは開かない方が良いでしょう。Excel 2007ではイベントは機能するようですが、それ以外に想定外の問題が発生する可能性があることを考えると、Excel 2007でもタスクからの利用はやめた方が良いと判断します。

日経225先物:前日がザラ場引けの場合

ザラ場引け

日経225先物(miniも同様)で前日(夕場)がザラ場引け(引けで値段がつかない場合)となると、最初の時刻が "20:00"ではなく例えば"19:59"になります。
このティックデータだと、M.trading 自動売買ソフトで四本値を生成できなくなります。
従って、ザラ場引けのティックは記録が開始されてから前日の終値のティックデータを"20:00"に変更する必要があります。
これは、日経225先物の場合だけであり、他の銘柄などは関係ありません。

2011/8/21追記
3:00まで夜間が延長された後も、同様だと思われます。この場合、"3:00"に変更する必要があります。

日経225先物:限月が切り替わる場合

限月が切り替わる場合
後場終了後に記録されたティックデータ

限月が切り替わる第2金曜日に記録されるティックデータは、後場終了後に2つの限月の終値が記録される場合があります。
画像の例では、2009年3月12日(第2金曜日)の、3月限の後場終値(7150)と6月限の後場終値(7090)が記録されています。
このデータを利用した場合、M.trading 自動売買ソフトでは正確な四本値を生成できません。
これは、日経225先物の場合だけであり、他の銘柄などは関係ありません。

記録するティックをより増やす方法

HDDでは無く書き込み速度の速いSSDを使うと、記録できるティック数が増えます。より正確な四本値を作成するには良い方法です。


開発者向け

現在値時刻と更新時刻との違い

東証一部の銘柄なら、11:00~12:30の間がそれらの違いが判りやすく、この間は現在値時刻は変わらず、更新時刻は変わります。従って、更新時刻でワークシートを構築すると、この時間の間でもCSVにデータが保存されます。しかし、日経225先物などはこの時刻の間は更新時刻は変わらないようで、CSVには保存されません。

また、現在値時刻は、その更新のタイミングとWorksheet_Calculateイベントとの関係を私も検証しているのですがよく判りません。
参照:RSS のアイテム "現在値" のイベントの発生タイミング

VBA自動生成の理由

VBAによってVBAを生成している理由は、そうしなければ、Worksheet_Calculateの処理のなかでそのイベントが発生してるワークシートをオブジェクトとして特定できないからです。
2番目のワークシートのVBAの3行目は、
  wsIndex = 2
となっているはずです。この番号はワークシートのインデックス番号で、ワークシートによって数字を変えて自動生成しています。

書き込み処理と書き込みエラー

CSVに書き込む時に、M.trading 自動売買ソフトによって、そのファイルが参照されている場合があります。この場合、書き込みエラーになりますが、エラーが無くなり書き込み出来るまで処理を繰り返します。
ただし、検証はしていませんが、書き込みできるようになるまでに新たにセルの値が変わってしまい、エラーで書き込みが出来なかった変わる前のセルの値が書き込み出来ない可能性はあります。
書き込みエラーが発生した場合は、イミディエイトウインドウにその情報が書き込まれます。

出来高のセル

楽天RSSの数式のセルの値が変わると、Worksheet_Calculateのイベントが発生します。このイベントが発生した時にセルの値をCSVに書き込みします。出来高のセルも配置すると、出来高が変更になった時も当然このイベントが発生します。現在値時刻・現在値では、Worksheet_Calculateのイベントが実際の歩み値が更新された時に必ず起こるわけではないため、出来高をWorksheet_Calculateイベントに利用するのが良いと思います。

また、楽天RSSの出来高はその日の約定数量の累計であって、そのティックの約定数量ではありません。従って、前の出来高を記録しておいて出来高が変わったときにその差からそのティックの約定数量を計算することができますが、ExcelのVBAでこれらの処理を行うと処理が遅くなります。従って、約定数量を計算し分足に合わせた出来高を生成するのはM.trading 自動売買ソフトで行っています。


動作条件

Excel 2010(32bit) + Windows 7(64bit)で開発・確認しています。
Excel XP,2003,2007、Windows XP,VISTAでの動作も確認しました。

使用規約

  • 作者 mikihiro
  • このソフトウェアはリンクウェアです。
  • 著作権は作者にあります。
  • このソフトウェアを使用したことによる一切の損害について作者は責任を負いません。
  • 使用規約は変更される場合があります。
  • 他、M.tradingのソフトウェア使用許諾契約書(第6条と第9条とを除き、第1条から第17条まで)を適用します。

配布

  • 無料でご利用いただけますが、このユーティリティはリンクウェアです。ホームページやブログなどに、
    <a href="http://www.m-trader.net/" target="_blank">システムトレード M.trader</a>
    などのように、リンクを貼って下さい。http://www.m-trader.net/ へのリンクならどのような形でもOKです。
    お問い合わせフォームから、リンクしていただいたURLとメールアドレスをお知らせ下さい。折り返し、ダウンロード先のURLをメール致します。
  • M.tradingライセンスご契約者にはリンク無しに配布しています。

履歴

2011-08-21
Ver 1.9.1。225先物の夜間取引に対応し、日付が変わった時に新しく日付フォルダを作成し記録を継続するようにした。ただし、A列[利用]の欄で「1」にすることで、A10セルに現在日付を表示し、PCの日付と一致しない時は記録しない。
2011-02-14
Ver 1.8。225先物のRSSの数式変更に対応し、「前場始値」を「日中始値」に変更した。
2010-07-21
Ver 1.7。オプションに[前場始値の表示とともに記録する。]を追加。[前場始値変更時刻]を追加。「記録するティックをより増やす方法」を掲載。日経225銘柄に対応して、デフォルトの銘柄を入れ替え。
2010-03-01
Ver 1.5。「CSVフォルダを設定」ボタンを追加。ワークシート構築で、「更新時刻」「現在値時刻」「値が更新時に記録」「指定した間隔で記録」をオプションとして選択可能にした。
2009-04-05
「日経225先物:限月が切り替わる場合」を追記など。
2009-01-09
Ver 1.0.1。日経225銘柄に対応して、デフォルトの銘柄を入れ替え。乗数が数式に追加されない場合があるバグを修正。
2008-11-04
Ver 1.0.0。「閉じる時に、確認をせずまた保存をせず閉じる。」を追加、日経225銘柄のファイル名・Codeを設定など。β版を終了し、正式版としました。
2008-10-27
「日経225先物:前日がザラ場引けの場合」を追記など。
2008-10-11
Ver 0.9.2。「M.trading 自動売買ソフト」のサンプル銘柄を追加。「UWSCで、決まった時間に開く」を掲載
2008-08-05
「タスクから開いた場合、イベントが機能しない」を掲載
2008-08-01
掲載