VBA投資楽天RSS2

マーケットスピードⅡ RSSの関数を読み解く

VBA

システムトレード(自動売買)するなら必須

 楽天証券のマーケットスピードⅡの新機能、RSS(リアルタイムスプレッドシート)を有効活用し、自動で売買するためにはサンプルシートのようにエクセル上に関数を埋め込むだけでなく、VBAを利用した発注を行っていく必要がある。
楽天証券マーケットスピードⅡの関数一覧表を読むとぱっと見だけで脱落してしまいたくなるところだが、よくよく読むと関数は4と5ページのみ記載された36の関数のみである。その内訳は以下のようになる。

関数の種類VBAでの操作
注文関数11可(自動売買では必須)
注文約定関数13不可
投資情報関数8不可
チャート関数3不可
補助関数1不可

また、そのほとんどは使う人によっては必要のない関数であり、必須といえるのものは少ない。私の場合、以下のような感じになる。

まずは必須といえる関数から読み解いていく。

国内株式の現物注文を出すRssStockOrder_v

 これが自動で出せなければ自動売買が成り立たない。引数は驚異の19個( RssStockOrderと異なりNo.2の発注トリガーはないため。)で開幕から心を折りに来る。とりあえず発注するだけなら以下のようなコードで可能(ここで記載したコードによるいかなる損失も補償できません。利用の際は自己責任で使用してください。

'ここで記載したコードによるいかなる損失も補償できません。利用の際は自己責任で使用してください。
'発注に成功した場合、不要な注文であれば注文取り消しを忘れないようにしてください
Sub Stock_Purchase_Order()
Dim ret
    ret = RssStockOrder_v(10, "8918.T", "3", "0", "0", "100", "1", "2", "1", , 0)
    
    Debug.Print ret
    
End Sub

自動化するのであれば変数にする必要がある。ただし、国内株式の現物限定で使用するのであれば、省略や、固定値でOKな箇所も多い。

※引数12以降はこの場合省略できる。赤字の項目は自動化の際変数にした方がいい。

国内株式の注文取消しを出すRssCancelOrder_v

 注文取消しを出すだけなら引数は(発注id,注文番号)と簡単そうに見える。ただし、自動売買を考慮した場合、結構難しい。そもそも注文番号て何だ?発注idと違うのか?
 本家ヘルプを読むとRssOrderListで取得するとあるが、取得項目が多すぎて勝手が悪く、RssOrderIDListのほうが勝手がいい。この場合(発注ID,関数名,発注日, 発注時刻,注文番号,発注結果)で返ってくる。この中の注文番号を取得して、RssCancelOrder_vを投げる。
 気を付けないといけないことがいくつかある。
①idずれ
発注後、idをインクリメントしているとそれで検索かけようとすると注文とずれるため、何とかする必要がある(発注時のidを別の変数に保存して検索する等)
②キャンセルしようと思った銘柄が約定している場合
面倒。防止策としてRssOrderStatusで注文の状態を確認し、ステータスが2(有効)の場合のみキャンセルするようにする。

先物関連

 先物口座を楽天証券では開いていないが、指標としては使うために確認した。基本的には公式のサンプルがあるため、まずはそれを参考にすると罠にはまりにくいと思います。

先物OP銘柄コード取得を行うRssFOPCode

 補助関数として一番最後に記載がありますが、まずこれを理解しないと先物は何もできません。
他の先物関数では下の図のように一見、例としてN225.YYYYMM.Cが記載してあるように見えるんですがここでこれを入力するわけではありません。(YYYYMMは指定する限月<必須項目>と書いてあるところが余計に…)

 RssFOPCodeとしての引数は(銘柄種類、限月、C/P区分、行使価格)になります。先物であればC/P区分と行使価格は不要で、セルに=RssFOPCode(“N225F”,”202203″,,)という形で入力すると9桁の銘柄コードが表示されるため、これを用いて他の先物OP関数で利用します。

情報取得用

 VBAではなく、Excelシートに関数として埋め込んで使用する。割と必須に近いものが多い。

所持しているポジションをExcelシート上に表示するRssPositionList

 手持ちのポジションをシート上に表示して自動で更新します。使い方は簡単でどこかかのセルで
=RssPositionList(
と入力してエンターを押せば補完してポジション情報を表示してくれます。

銘柄の現在株価等を取得するRssMarket

 買いや売りを判断するために現在株価を何らかの方法で取得する必要がありますが、私はRssMarketを使用しています。RssPositionListと比べると意味不明な使いにくさです。必要な引数は2つで銘柄コードと戻り値(セルに取ってくる情報)になります。戻り値の種類が相当多く、148種類ありますが、私が使っているのは多分3種類だけです。最良売気配値と最良買気配値、あと銘柄コードから銘柄名称を自動で埋めてもらうために銘柄名称を利用しています。銘柄名称はいらないですが、最良売気配値は購入の判断に、最良買気配値は売却の判断に使用しています。現在値を使う手もあるかもしれないですが、結局売りを出して約定できるのは最良買気配値、買いを出して約定できるのは最良売気配値のため、こちらを使う方がいいと思います。例えば最良買気配値を取得するには=RssMarket(9984,”最良買気配値”)とします。銘柄コード(例でいう9984)は別のセルに銘柄コードを入力して参照した方が使い勝手がいいです。

RssOrderIDListで発注キャンセル用の注文番号を取得する

 出した注文をキャンセルしたい場合というのは多々あるがこれが結構面倒で、発注IDだけでなく注文番号が必要になる。本家HELPはRssOrderListを利用しているみたいなんですが、戻り値が28個ある上、発注IDはないため、RssOrderIDListの方が使い勝手がいいのではないかと思います。
 使い方は簡単で=RssOrderIDList(
と入力してエンターを押せば補完して発注IDや注文番号が取得できます。

注文の状況を示すRssOrderStatus

 注文をキャンセルしようにも、注文を出し終えていないとキャンセルはできないし、約定していたらキャンセルはできません。というわけでその注文の状態を表示することができるのがRssOrderStatusになります。使い方としては=RssOrderStatus(発注ID)という形になります。
 戻り値は-1だと該当なし、1だと無効(キャンセル済み等)2だと有効、3だと約定となります。
上で書いているんですが、注文を出し終えていない(-1)とキャンセルできません。これは楽天証券側が注文を受け付けてからになります。2の場合のみキャンセルするようにしましょう。

コメント

タイトルとURLをコピーしました