作成 2007/1/13
更新 2008/2/5

楽天RSSの使い方4

数式のエラー

楽天RSSの数式を入力したセルに#N/Aなどのエラーが表示されることがあります。

エラー値一覧
http://www.relief.jp/itnote/archives/000012.php

楽天RSSの数式を使う上で注意するのは、この中の#N/Aと#NAME?です。

#N/A (Not Available value)は、値が取得できていないことを示します。マーケットスピードの接続が切れているときは全部これになります。マニュアルに載っている数式でも、全て値が取得できるわけではなく、このエラーが表示される場合があります。またJASDAQ銘柄は寄り前は数字なしの最良買気配値が取得できないなど、タイミングによってこのエラーになる場合もあるようです。

#NAME? (Unrecognized NAME)は、認識できない名前であることを示します。つまり数式自体が間違っています。よくある間違いが数字の大文字小文字です。例えば、板の「最良買気配数量1」を取得するときの1は半角英数字の1ではなく全角の1です。さらにハマりやすいのが、この半角全角を間違って入力してしまうと、EXCELがその間違った値を記憶してしまうということです。一度間違って入力すると、後から正しい値を入力してもセルの値を決定したときに、自動的に元の間違った値に修正されてしまいます。この場合、EXCELを再起動する必要があります。


市場による板気配の違い

寄り前

寄り前の気配値は市場によって挙動が異なります。

東証
普通です

大証
東証と異なり、最良気配値と最良売気配値が同じ価格を差す場合があります。
成行の気配(買成行数量など)が取得できます。

JASDAQ
数字なしの最良気配(最良買気配数量など)が取得できません。変わりに数字あり(最良買気配数量1など)が使えます。
成行の気配が取得できます。
マーケットメイク銘柄の挙動はまた違うようです。

ザラバ中

JASDAQは、最良気配が動いたとき(1ティック上、あるいは下に動いたとき)に、最良気配1(数字あり)が消えるようです。

私はJASDAQの最良気配はザラバ中は数字なしの方、寄り前は数字ありの方を使っています。


マーケットスピードを自動起動する

楽天RSSを使うには、マーケットスピードを起動して、RSSを起動して、EXCELシートを起動という操作を行う必要があります。さらにマーケットスピードにはログインしなければいけませんし、EXCEL起動時に表示されるダイアログボックスにも回答しないといけません。何分もかかる作業ではありませんが、毎朝毎朝これをするのは、けっこう面倒です。こういう「同じことを正確に繰り返す」ということはプログラムが向いています。こういうOS上でちょっとした操作を行うというようなプログラムは、「スクリプト言語」や「キーボードマクロ」といった種類のプログラムの出番です。

ここではWSHを使って、各種ツールを自動起動する例を紹介します。WSH(Windows Scripting Host)は、Windowsで利用できるスクリプト言語で、バッチファイルみたいなもんですが、バッチファイルよりもうちょっと凝ったことができます。Windows XPではWSHが最初から入ってるので別途何かインストールする必要はありません(2000やVistaはどうかは知らないが多分入ってるんじゃないかなー)。なお、WSHはいくつかの言語で記述できますが、ここではVBScriptで書きます。

マーケットスピードを起動する

適当な場所に拡張子vbsで新規ファイルを作ります(例えば、C:\tmpディレクトリにrss.vbsという名前でファイルを作る)。テキストエディタで以下を記述します。

マーケットスピードの起動

Set WshShell = CreateObject("WScript.Shell")
WshShell.CurrentDirectory = "C:\Program Files\MarketSpeed\MarketSpeed"
WshShell.Exec("C:\Program Files\MarketSpeed\MarketSpeed\MarketSpeed.exe")

WScript.ShellのExecで引数に指定したプログラムを実行します。その前に、マーケットスピードはカレントディレクトリに一時ファイルを作成するので、カレントディレクトリもマーケットスピードのディレクトリにしています。作成したvbsファイルをダブルクリックするとvbsファイルに書いたスクリプトが実行され、マーケットスピードの起動を確認できます。

マーケットスピードにログインする(ための準備と後始末)

マケスピは起動しただけじゃダメで、ログインする必要があります。マケスピにキーボードのショートカットでもついていれば、簡単なんですが、ないみたいなんで、しょうがないからマウス操作でやります。マウス操作は座標がシビアなので、マウス操作する前にマケスピを最大化表示してやることにします(最大化しとけばとりあえず、自分の使っているディスプレイ上では同じ座標で操作できる)。

マケスピの最大化

WshShell.CurrentDirectory = "C:\Program Files\MarketSpeed\MarketSpeed"
Set objMS = WshShell.Exec("C:\Program Files\MarketSpeed\MarketSpeed\MarketSpeed.exe")
WshShell.AppActivate(objMS.ProcessID)
WScript.Sleep(5000)

WshShell.SendKeys("% X")
WScript.Sleep(1000)

AppActivateが「ウィンドウのタイトル」か「プロセスID」を指定して、指定したウィンドウをアクティブにするメソッドです。ここでは、Execメソッドの戻り値から取得したプロセスIDを指定して、マケスピのウィンドウをアクティブにしています。

その後のSendKeysが指定したキーをアクティブなウィンドウにおくるメソッドです。"% X"はALT+Xを押したことをあらわす文字列です。

Sleepは処理の間の待ち時間で、自分のPCの性能その他によって、適当な値を入れて調整します。

あと、AppActivateは、ウィンドウタイトルも指定可能です。

WshShell.AppActivate("Market Speed Ver6.0")

お昼休みなどに、マケスピをログオフしてもっかいログオンとかしたいときに、マケスピのウィンドウをつかみたいときには、タイトル指定が使えます。

ログインする

WSHでマウスクリックとかもできればいいんですが、よくわからなかったので、別のツールを使いました。使ったのはKMmacroというキーボードマクロ言語です。

KMmacro
http://www.geocities.jp/trick_room/kmmacro.html

KMmacroでマケスピログインの例

delay 1000
LCLICK 1536,42
delay 3000
LCLICK 196,93
delay 500
PASTE "xxxxxxx"
KEY [RET]
delay 1000

マケスピの右上の「ログイン」をクリックして、表示されるログインダイアログのパスワード欄をクリックしたあと、パスワード(xxxxx)を入力、その後リターンキーを押す、という処理を書いてます。詳細は、KMmacroのドキュメントをご覧ください。EXCEL VBAを自分で書けるくらいの人なら、利用は簡単だと思います。

上のマクロを記述したファイルをC:\tmpのrms_login.MACだとすると、VBScriptから以下のような感じで呼び出します。呼び出したプログラムの終了までブロック(待機)しときたいときはExecよりRunメソッドが簡単なようです。

マクロの呼び出しの例

WshShell.Run "C:\app\kmmacro\KMmacro.exe /FILE=C:\tmp\rms_login.MAC",7,True

代替方法

私は他の用事でもKMmacroを使っていたので、これでやりましたが、掲示板とかMLを見ていると、UWSCというのを使っている人が多いようです。

UWSC
http://www.h7.dion.ne.jp/~umiumi/

あと、マウス操作でログインって人によって座標調整とかいるし不安定だしカッコ悪いという方には、ますぷろ氏作のMSSというツールもあります。これを使うと、ログイン等にショートカットのないマケスピに無理やりショートカットをつけて、キー操作でログインがおこなえるようです(使ってないけど多分)。

MSS
http://etw.ath.cx/mss/

ちなみに、上の私の例だと、VBScript+KMmacroですが、VBScript使わずキーボードマクロ言語(KMmacro、UWSCなど)だけで同様のことができます。あるいは、MSSなどを併用すれば、キーボードマクロ言語を使わずに、Windows標準のVBScript(+WSH)で全部できます。まぁ、とりあえず毎日正確に動けば何でもいいやということで。

代替方法2(2008/2/5追記)

マケスピのショートカット登録機能をつかえば、マウス操作なしで、WSHだけでログイン処理が行えます。例えば、ショットカットキーのF3を総合サマリーに割り当てます。そして、F3を押すと、総合サマリーが開き、次に、検索ボタンを押すと、ログインしてなければログインのポップアップが表示されます。ここで検索ボタンは、総合ページが開いたときのカレントのボタンになっているので、エンターキーで押すことができます。

MS_WINDOW_TITLE = "Market Speed Ver6.3"
MS_WINDOW_LOGIN_TITLE = "Market Speed - ログイン"

Set WshShell = CreateObject("WScript.Shell")

ret = WshShell.AppActivate(MS_WINDOW_TITLE)
WScript.Sleep(1000)

IF ret = True Then
	WshShell.SendKeys("{F3}") 'マケスピ側でF3キーに何か割り当て
	WScript.Sleep(1000)
	WshShell.SendKeys("{ENTER}") 'エンターで「検索」ボタンが押される
	WScript.Sleep(1000)

	ret = WshShell.AppActivate(MS_WINDOW_LOGIN_TITLE)
	WScript.Sleep(1000)

	IF ret = True Then
		'ログインパスワード入力画面(IDはマケスピの設定で入力済とする)
		WshShell.SendKeys("XXXXX")
		WScript.Sleep(1000)
		WshShell.SendKeys("{ENTER}")
		WScript.Sleep(1000)

		'重要なメッセージのお知らせなどのウィンドウがでたとき用
		'お知らせがなかった場合は上の検索ボタンをもう一回押すことになる
		ret = WshShell.AppActivate("Market Speed")
		WScript.Sleep(1000)
		If ret = True Then
			WshShell.SendKeys("{ENTER}")
			WScript.Sleep(1000)
		End IF

		WshShell.SendKeys("% N")
		WScript.Sleep(1000)
	End If

End If

ショートカットキーと画面はF4とニュース画面など、お好みで指定してください。この方法だとマウス操作は不要で、マケスピ画面最大化なども不要です。ごくまれにですが、ログインポップアップを開いたときに、文字化けというか画像化けみたいになってログインできないことがあって、ちょっと代替案を調べていたら、これでもできるじゃんということがわかりました。でも、これでもたまにログイン失敗するかも。しばらく試してみます。

RSSを自動起動する

rss.exeとEXCELシートの起動も同様な感じでできます(マウス操作ないのでもっと簡単)。

RSS.exeの起動の例

WshShell.Exec("C:\Program Files\MarketSpeed\MarketSpeed\RSS.exe")

EXCELシートの起動の例(C:\tmp\hoge.xlsを起動)

WshShell.CurrentDirectory = "C:\tmp"
WshShell.Run "C:\tmp\hoge.xls",1
WScript.Sleep(5000)
WshShell.SendKeys("E")
WScript.Sleep(2000)
WshShell.SendKeys("U")
WScript.Sleep(2000)

EXCELは、「マクロを有効にするか」、「データソースへのリンクを更新するか」という2つのダイアログが表示されるので、それぞれ「マクロを有効にする(E)」、「更新する(U)」をSendKeysを使って選択しています。

ちなみに、「最初のマクロを有効にするか」の質問は自己証明書などを作って署名することでダイアログを出なくするという方法もあるらしいです。でも、どうせもう一個でますし、SendKeysでいいかなぁ。

あと、うちの環境のせいかもしれませんが、VBScriptでEXCELシートを起動したとき、ファイルを開いたときのWorkbook.Openイベントが呼ばれません。私はOpenでいろいろ初期化処理を書いているので、呼ばれないと困るのですが。。。しょうがないから、EXCEL側のマクロにショートカットキーを割り当てて、EXCELを開いた後にWshShell.SendKeys("^{i}")とかいう風に呼んで対処しました。ちょっと苦しい対処だ。

スケジューラに登録

自分が作ったスクリプトをWindowsのタスクスケジューラに登録しておくと、朝8時に起動、昼12時に再起動とか、勝手にやらすことができます。

電源を切るとスケジューラが動かないので、うちは夜はスリープ(S4)でPCを休止状態にして寝てます。で、マケスピ類の起動の5分前くらいに一度Windowsの再起動をしています。タスクスケジューラに下のコマンドを指定します。

Windowsの再起動

C:\WINDOWS\system32\shutdown.exe -r -f

あと、キーボードやマクロの操作がからむので、自分が作ったのスクリプトの実行は、Windowsにログインした状態で行う必要があります。自宅で自分だけが使うPCの場合は、ユーザーの設定で自動ログインにできるので、そうしとけば、上のWindows再起動の後に自動ログインできます。

XPでログオン作業をなくしたい
http://arena.nikkeibp.co.jp/tec/winxp/20020930/102109/


便利なTipsがあったら、そのうちまた更新したいと思います。

→次 [作成中]へ

←前 [楽天RSSの使い方3]へ
↑TOP [楽天RSSの使い方]へ
/HOME [ミスターマーケットの気まぐれ]へ