PythonでMarketSpeed II RSS(楽天証券)を使う方法|株価取得から自動売買まで

Python実装・コード

楽天証券のMarketSpeed II RSSはExcelのDDE/RSS機能を活用してリアルタイム株価を取得できるツールです。この機能をPythonと組み合わせることで、独自の自動売買システムを構築できます。ということで、この記事では、xlwingsを使ったPython接続から、シグナル検出・注文自動化まで実践的に解説します。

📘 外部参考Python 公式Python 公式ドキュメント(日本語)

📘 外部参考楽天証券 MarketSpeed II RSS(公式)

MarketSpeed II RSSとは?DDEとRSSの仕組み

MarketSpeed II RSSは楽天証券が提供する株価配信ツールです。Microsoft Excel上でDDE(Dynamic Data Exchange)またはRSS(Real-time Stock Service)プロトコルを通じて、株価・気配値・板情報などをリアルタイムで受信できます。

主な特徴:

  • 国内株・ETFのリアルタイム株価配信
  • Excel上でのリアルタイム更新(DDE/RSSセル関数)
  • 無料で利用可能(楽天証券口座が必要)
  • 発注機能は別途楽天証券の注文APIが必要

PythonとMarketSpeed II RSSの接続方法(xlwings経由)

PythonからExcelのDDEデータを読み取るにはxlwingsライブラリが最も実用的です。xlwingsはPython-Excel間のブリッジとして機能し、Excelのセルに展開されたRSSデータをPythonから取得できます。

環境構築

# 必要なライブラリのインストール
# pip install xlwings pandas
import xlwings as xw
import pandas as pd
import time

接続の前提条件

  • Windows環境(MacはExcel DDE非対応)
  • Microsoft Excel(2016以降推奨)
  • MarketSpeed II がインストール・ログイン済み
  • ExcelにRSS関数を設定したブックが開いている

リアルタイム株価データの取得コード例

まずExcel上でRSS関数を設定します。例えばセルA1に以下のような関数を入力します:

=RSS("7203.T","現在値")

次にPythonからこのExcelブックを参照してデータを取得します:

import xlwings as xw
import pandas as pd
import time
from datetime import datetime

def get_realtime_price(book_name: str, sheet_name: str, cell: str):
    """
    ExcelのRSSセルからリアルタイム株価を取得
    Args:
        book_name: Excelファイル名 (例: 'rss_data.xlsx')
        sheet_name: シート名
        cell: RSS関数が入力されたセル (例: 'A1')
    Returns:
        現在値(float)
    """
    try:
        wb = xw.Book(book_name)
        ws = wb.sheets[sheet_name]
        price = ws[cell].value
        return float(price) if price else None
    except Exception as e:
        print(f"データ取得エラー: {e}")
        return None

if __name__ == "__main__":
    book = "marketspeed_rss.xlsx"
    sheet = "株価データ"
    print("リアルタイム株価監視を開始します...")
    while True:
        price = get_realtime_price(book, sheet, "B2")
        timestamp = datetime.now().strftime("%H:%M:%S")
        print(f"[{timestamp}] トヨタ(7203): {price}円")
        time.sleep(1)

複数銘柄の一括取得

import xlwings as xw
import pandas as pd

def get_multiple_stocks(book_name, sheet_name, tickers, start_row=2):
    wb = xw.Book(book_name)
    ws = wb.sheets[sheet_name]
    data = []
    for i, ticker in enumerate(tickers):
        row = start_row + i
        record = {
            'ticker': ticker,
            'price': ws[f'B{row}'].value,
            'change': ws[f'C{row}'].value,
            'volume': ws[f'D{row}'].value,
            'bid': ws[f'E{row}'].value,
            'ask': ws[f'F{row}'].value,
        }
        data.append(record)
    return pd.DataFrame(data)

tickers = ["7203.T", "9984.T", "6758.T", "8306.T"]
df = get_multiple_stocks("rss.xlsx", "Sheet1", tickers)
print(df)

シグナル検出と注文自動化のサンプル

取得したリアルタイムデータをもとに売買シグナルを検出し、楽天証券の発注機能と組み合わせる方法を解説します。

移動平均クロスによるシグナル検出

📘 外部参考Moving Average(Investopedia)

📘 外部参考Golden Cross(Investopedia)

import xlwings as xw
import numpy as np
from collections import deque

class MovingAverageCrossStrategy:
    """
    移動平均クロス戦略
    短期MA(5)が長期MA(25)を上抜けしたら買いシグナル
    """
    def __init__(self, short_period=5, long_period=25):
        self.short_period = short_period
        self.long_period = long_period
        self.price_history = deque(maxlen=long_period)
        self.last_signal = None

    def update(self, price):
        self.price_history.append(price)
        if len(self.price_history) < self.long_period:
            return None
        prices = list(self.price_history)
        short_ma = np.mean(prices[-self.short_period:])
        long_ma = np.mean(prices)
        if short_ma > long_ma and self.last_signal != 'BUY':
            self.last_signal = 'BUY'
            return 'BUY'
        elif short_ma < long_ma and self.last_signal != 'SELL':
            self.last_signal = 'SELL'
            return 'SELL'
        return None

strategy = MovingAverageCrossStrategy()
while True:
    price = get_realtime_price("rss.xlsx", "Sheet1", "B2")
    if price:
        signal = strategy.update(price)
        if signal == 'BUY':
            print(f"買いシグナル!現在値: {price}円")
        elif signal == 'SELL':
            print(f"売りシグナル!現在値: {price}円")
    time.sleep(1)

注意点・制限事項

  • Windows専用:ExcelのDDE機能はWindowsのみ対応。MacやLinuxでは動作しません。
  • Excelが必要:MarketSpeed II RSSはExcel上で動作するため、Excelのライセンスが必要です。
  • 安定性:xlwings経由のExcel操作は長時間稼働するとメモリリークが発生することがあります。定期的な再起動を推奨。
  • 遅延:DDE/RSS経由のデータ取得には数百ミリ秒〜数秒の遅延が発生します。高頻度トレードには向きません。
  • 発注について:MarketSpeed II RSSはデータ取得のみ。発注には楽天証券の別の仕組みが必要です。

楽天証券APIの今後(REST API移行の動向)

2024年以降、楽天証券は楽天証券 iSPEED APIの整備を進めており、将来的にはREST APIベースでの株価取得・発注が可能になると見られています。現時点ではDDE/RSSが主流ですが、REST API化が実現すればWindowsに依存しないクロスプラットフォームな自動売買が可能になります。最新情報は楽天証券の公式サイトをご確認ください。

まとめ

楽天証券のMarketSpeed II RSSとPythonを組み合わせることで、コストを抑えつつリアルタイム株価データを活用した自動売買システムが構築できます。xlwingsによるExcel接続が現実的な手段ですが、Windows環境依存という制約があります。より本格的なアルゴリズムトレードを学びたい方には、以下のプログラミングスクールも参考にしてみてください。


※本記事はアフィリエイト広告を含みます

Pythonプログラミングをもっと学ぶ

アルゴトレードの自動化・AI活用に役立つ学習リソースをご紹介します。

📘 外部参考Google Gemini API(公式)

📘 外部参考OpenAI API ドキュメント(公式)

無料データ、証券会社データ、リアルタイムデータの違いを比較した記事はこちら。
yfinance・楽天RSS・moomoo・SBI CSV データ取得方法比較

結論から言うと:

  • DDE/RSS経由でリアルタイムの気配値・歩み値・板情報を取得できます
  • xlwingsでPythonからExcelのRSSセルを読み取る仕組みです
  • 発注機能もあるので、自動売買システムへの発展も可能です

🔗 関連記事

Pythonで株価を取得する方法【yfinanceで日本株も対応】

🔗 関連記事

yfinanceで日本株を取得できない時の原因と対処法【エラー別】

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