soubaKenkyujoBunke’s blog

株関係のプログラムその他

楽天RSSでのデータ取得の基本の基本

株プログラムの記事の記念すべき1つ目のテーマは
楽天RSS(リアルタイムスプレッドシート)についてです。


基本の基本なので、楽天RSSがどういうものか、から入りたいと思います。
既に知っているという方は読み飛ばしてください。


楽天RSSの説明をすると・・・
・株に関する様々なデータを取得できます。
・↑のデータを自作のプログラム等からほぼリアルタイムに取得できるので、
 証券会社から提供されているツールだと主に見たりすることしかできない
 データに対していろいろな操作が可能です。
楽天証券に口座を開いている人が使えます。
・以前は有料で無料使用にも条件があったのですが、現在は無料で利用できます。(2019/7/12)
https://marketspeed.jp/guide/before.htmlmarketspeed.jp



楽天証券の口座がある前提だと基本的な使い方は、
楽天証券のマーケットスピードをインストール&起動&ログイン
②マーケットスピードと同時にインストールされている
 リアルタイムスプレッドシートを起動
③ ①②を満たした状態で、RSS関数を実行するとデータが返ってくるので
 後は、保存したり、加工したりできます。


以下上記③についての説明を行います。
言語はC#、開発環境はVisual Studio、言語、開発環境についての基礎知識は
あることが前提です。
(できるだけ詳しく書きますが、わからなければ、すみません。)


※エクセル等でのアクセス方法が知りたければ楽天証券さんの
以下のページが丁寧に書かれてて良いと思います。
https://marketspeed.jp/guide/rss.html#skip01marketspeed.jp



C#でのRSSの使い方としては
楽天RSSはDDEという方式でデータを送っているので、
まず、DDE通信をC#で楽に使うためにNDdeというライブラリを使用します。
※上記以外のライブラリを使用する方法や、ライブラリを使用しない方法も
 あるようですが、私はNDdeしか使っていませんので、
 上記ライブラリ使用以外での楽天RSSの使い方を知りたい方は
 別サイトを探してください。


以下手順
Visual StudioのNuGetで「NDde」を検索して、インストール。
②ライブラリ読み込み

using NDde.Client;

③まずは、Cold linkの場合、
 これは、こちら側から情報を1回要求して、その返答を
 受信する方法です。(1回の要求で1回しか返ってきません)

using (DdeClient client = new DdeClient("RSS", "9984.T"))
 {
    client.Connect();
    byte[] data;
    data = client.Request("銘柄名称", 1, 3000);
    string meigaraMeisyo = Encoding.Default.GetString(data).Replace("\0", "");
}

↑「9984.T」が銘柄コード、「.T」は東証になります。
詳しくは公式の関数一覧をどうぞ。
RSS関数一覧 | マーケットスピードオンラインヘルプ

Request内の「3000」は3秒待つという意味です。
楽天RSSから送られてくるデータには変なゴミみたいなのがついてくることが多いので
Replaceで取ってます。

④次はHot linkです。
 要求したデータが更新されたら随時送られてくるので、
 リアルタイムのデータを扱いたい場合等はこちらを使うと思います。
↓リスト宣言。銘柄ごとにDdeClientを作って保持します。

 List<DdeClient> list = new List<DdeClient>();

↓1銘柄ごと下記のようにイベントハンドラを設定して、
銘柄ごとに取得したいデータを設定し、
データが更新されたらchangeValue()関数が呼び出されるようにします。

DdeClient client = new DdeClient("RSS", meigaraCode, this);
client.Connect();
client.Advise += new EventHandler<DdeAdviseEventArgs>(changeValue);
client.StartAdvise("銘柄コード", 1, true, 60000);
client.StartAdvise("銘柄名称", 1, true, 60000);
client.StartAdvise("現在値", 1, true, 60000);
list.Add(client);

↓changeValue関数の例。
データが更新されると、changeValue関数が呼び出され、
送られてきたデータが読み取れます。

private void changeValue(object sender, DdeAdviseEventArgs e)
 {
    DdeClient client = sender as DdeClient;
    string ItemName = e.Item;//更新された項目名
    byte[] byteData = e.Data;//更新されたデータ
    string kousinData = Encoding.GetEncoding(932).GetString(byteData);
    string meigaraCode = client.Topic;//銘柄コード
}

Hotlinkのデメリットは接続が切れた時に再度をつなぎ直さないといけないところと、
同時には最大200銘柄しか監視できないというところかと思います。
Coldlinkは遅いのですが、一個一個データを取得するので監視数の上限もありませんし、
処理自体は簡単ですので、自分もやりたいことに合わせて使い分けています。

以上で今回の記事は終了です。

下記サイトで今回紹介した楽天RSSを使った
「株DayTrade Simulator体験版」を公開していますので、
興味のある方はダウンロードしてみてください。
ここまで読んで頂いてありがとうございました。
www.vector.co.jp


デイトレードランキング

システムトレードランキング