楽天証券の口座でデイトレの自動売買に挑戦しようと Windows / Excel 上で利用できる マーケットスピード II RSS を活用して Python であれこれ取り組んでいます。この「自動売買への道」のトピックでは、プログラミングの話題にも踏み込んで、日々の活動をまとめています。
今日の日経平均株価
| 現在値 | 51,117.26 | -844.72 | -1.63% | 15:30 | |
|---|---|---|---|---|---|
| 前日終値 | 51,961.98 | 01/07 | 高値 | 51,866.19 | 09:00 |
| 始値 | 51,769.83 | 09:00 | 安値 | 51,052.83 | 15:23 |
※ 右の 15 分足チャートは Yahoo! Finance のデータを yfinance で取得して作成しました。
【関連ニュース】
- NVIDIA、次世代AI基盤「Rubin」をCESで正式発表 | Ledge.ai [2026-01-07]
- イオン、26年2月期業績を上方修正 ツルハを連結子会社化 | ロイター [2026-01-07]
- 規制委、浜岡原発は審査白紙・中部電検査へ 委員長「不許可判断も」 | ロイター [2026-01-07]
- 中国、日本のジクロロシランの反ダンピング調査開始 半導体材料 | ロイター [2026-01-07]
- 中国万科、利払い条件変更で金融機関と合意 四半期ごとから年1回に | ロイター [2026-01-07]
- 米12月ISM非製造業指数、54.4に上昇 雇用が拡大 | ロイター [2026-01-08]
- 米ADP民間雇用、12月は4.1万人増 予想下回る | ロイター [2026-01-08]
- 米製造業新規受注、10月は前月比1.3%減 民間航空機が低迷 | ロイター [2026-01-08]
- サムスン電子、10-12月営業利益が約3倍に-予想上回る - Bloomberg [2026-01-08]
- 米大統領、66の国際組織からの脱退表明 気候変動枠組条約など | ロイター [2026-01-08]
- アンソロピック、評価額3500億ドルで新調達ラウンド-関係者 - Bloomberg [2026-01-08]
- セブン&アイHD、通期純利益予想を2700億円に引き上げ | ロイター [2026-01-08]
- ファストリ、通期営業益6500億円に上方修正-全地域で増収増益 - Bloomberg [2026-01-08]
- 日経平均は大幅続落、一時900円超安 AI株に利益確定売り | ロイター [2026-01-08]
デイトレ用自作アプリ
以下は株価・取引に関連する情報の流れを示しています。
楽天証券では、Python からネットワーク越しに直接取引できるような API が提供されていないので、マーケットスピード II RSS を介して取引をする構成を取っています。
リアルタイムの取引シミュレーション (7011)
| パラメータ | 設定値 | |
|---|---|---|
| PERIOD_WARMUP | 180 | sec |
| PERIOD_MA_1 | 60 | sec |
| PERIOD_MA_2 | 900 | sec |
| PERIOD_SLOPE | 5 | sec |
| THRESHOLD_SLOPE | 0.08 | - |
| LOSSCUT_1 | -25 | 円 |
従来、寄り付き直後のウォームアップ期間を 60 秒に設定していましたが、値動きが激しくて短周期の移動平均線 MA1 が追いついていないので、ウォームアップ期間をパラメータ化して暫定的に 180 秒にしました。また、長周期の移動平均線 MA2 は 900 秒にしてみました。
短周期の移動平均線 MA1 の傾きを算出する処理を変更したので、昨日のティックデータで試してみて、とりあえず 0.08 にしました。
以下は、本日のリアルタイム取引シミュレーション (Simulated Trade) による取引結果です。
本日のリアルタイムの取引シミュレーション (Simulated Trade) の取引明細(100 株単位)
| 注文番号 | 注文日時 | 銘柄コード | 売買 | 約定単価 | 約定数量 | 損益 | 備考 |
|---|---|---|---|---|---|---|---|
| 1 | 2026-01-08 09:04:48 | 7011 | 売建 | 4278.0 | 100 | ||
| 2 | 2026-01-08 09:05:29 | 7011 | 買埋 | 4283.0 | 100 | -500.0 | |
| 3 | 2026-01-08 09:13:40 | 7011 | 売建 | 4280.0 | 100 | ||
| 4 | 2026-01-08 09:22:05 | 7011 | 買埋 | 4284.0 | 100 | -400.0 | |
| 5 | 2026-01-08 09:22:06 | 7011 | 買建 | 4284.0 | 100 | ||
| 6 | 2026-01-08 09:24:03 | 7011 | 売埋 | 4279.0 | 100 | -500.0 | |
| 7 | 2026-01-08 09:24:04 | 7011 | 売建 | 4279.0 | 100 | ||
| 8 | 2026-01-08 09:26:49 | 7011 | 買埋 | 4280.0 | 100 | -100.0 | |
| 9 | 2026-01-08 09:26:50 | 7011 | 買建 | 4280.0 | 100 | ||
| 10 | 2026-01-08 09:29:11 | 7011 | 売埋 | 4270.0 | 100 | -1000.0 | |
| 11 | 2026-01-08 09:29:12 | 7011 | 売建 | 4270.0 | 100 | ||
| 12 | 2026-01-08 09:30:34 | 7011 | 買埋 | 4276.0 | 100 | -600.0 | |
| 13 | 2026-01-08 09:30:35 | 7011 | 買建 | 4279.0 | 100 | ||
| 14 | 2026-01-08 09:44:51 | 7011 | 売埋 | 4287.0 | 100 | 800.0 | |
| 15 | 2026-01-08 09:44:59 | 7011 | 買建 | 4294.0 | 100 | ||
| 16 | 2026-01-08 09:45:14 | 7011 | 売埋 | 4286.0 | 100 | -800.0 | |
| 17 | 2026-01-08 10:19:35 | 7011 | 買建 | 4267.0 | 100 | ||
| 18 | 2026-01-08 10:20:44 | 7011 | 売埋 | 4258.0 | 100 | -900.0 | |
| 19 | 2026-01-08 10:20:45 | 7011 | 売建 | 4258.0 | 100 | ||
| 20 | 2026-01-08 10:32:34 | 7011 | 買埋 | 4244.0 | 100 | 1400.0 | |
| 21 | 2026-01-08 11:05:49 | 7011 | 買建 | 4252.0 | 100 | ||
| 22 | 2026-01-08 11:10:41 | 7011 | 売埋 | 4247.0 | 100 | -500.0 | |
| 23 | 2026-01-08 11:13:10 | 7011 | 売建 | 4247.0 | 100 | ||
| 24 | 2026-01-08 12:42:00 | 7011 | 買埋 | 4228.0 | 100 | 1900.0 | |
| 25 | 2026-01-08 12:42:01 | 7011 | 買建 | 4230.0 | 100 | ||
| 26 | 2026-01-08 12:45:08 | 7011 | 売埋 | 4220.0 | 100 | -1000.0 | |
| 27 | 2026-01-08 12:45:09 | 7011 | 売建 | 4221.0 | 100 | ||
| 28 | 2026-01-08 12:49:35 | 7011 | 買埋 | 4231.0 | 100 | -1000.0 | |
| 29 | 2026-01-08 12:49:36 | 7011 | 買建 | 4232.0 | 100 | ||
| 30 | 2026-01-08 13:03:58 | 7011 | 売埋 | 4243.0 | 100 | 1100.0 | |
| 31 | 2026-01-08 14:28:13 | 7011 | 売建 | 4263.0 | 100 | ||
| 32 | 2026-01-08 14:41:01 | 7011 | 買埋 | 4267.0 | 100 | -400.0 | |
| 33 | 2026-01-08 15:14:24 | 7011 | 買建 | 4258.0 | 100 | ||
| 34 | 2026-01-08 15:24:50 | 7011 | 売埋 | 4265.0 | 100 | 700.0 | |
| 合計損益 | -1800.0 | ||||||
オフラインの取引シミュレーション (7011)
本日収集したティックデータによる事後シミュレーションをまとめました。
本日の事後の取引シミュレーションの取引明細(100 株単位)
| 注文番号 | 注文日時 | 銘柄コード | 売買 | 約定単価 | 約定数量 | 損益 | 備考 |
|---|---|---|---|---|---|---|---|
| 1 | 2026-01-08 09:04:48 | 7011 | 売建 | 4278 | 100 | ||
| 2 | 2026-01-08 09:05:29 | 7011 | 買埋 | 4283 | 100 | -500 | |
| 3 | 2026-01-08 09:13:40 | 7011 | 売建 | 4280 | 100 | ||
| 4 | 2026-01-08 09:22:05 | 7011 | 買埋 | 4284 | 100 | -400 | |
| 5 | 2026-01-08 09:22:06 | 7011 | 買建 | 4284 | 100 | ||
| 6 | 2026-01-08 09:24:03 | 7011 | 売埋 | 4279 | 100 | -500 | |
| 7 | 2026-01-08 09:24:04 | 7011 | 売建 | 4279 | 100 | ||
| 8 | 2026-01-08 09:26:49 | 7011 | 買埋 | 4280 | 100 | -100 | |
| 9 | 2026-01-08 09:26:50 | 7011 | 買建 | 4280 | 100 | ||
| 10 | 2026-01-08 09:29:11 | 7011 | 売埋 | 4270 | 100 | -1000 | |
| 11 | 2026-01-08 09:29:12 | 7011 | 売建 | 4270 | 100 | ||
| 12 | 2026-01-08 09:30:34 | 7011 | 買埋 | 4276 | 100 | -600 | |
| 13 | 2026-01-08 09:30:35 | 7011 | 買建 | 4279 | 100 | ||
| 14 | 2026-01-08 09:44:51 | 7011 | 売埋 | 4287 | 100 | 800 | |
| 15 | 2026-01-08 09:44:59 | 7011 | 買建 | 4294 | 100 | ||
| 16 | 2026-01-08 09:45:14 | 7011 | 売埋 | 4286 | 100 | -800 | |
| 17 | 2026-01-08 10:19:35 | 7011 | 買建 | 4267 | 100 | ||
| 18 | 2026-01-08 10:20:44 | 7011 | 売埋 | 4258 | 100 | -900 | |
| 19 | 2026-01-08 10:20:45 | 7011 | 売建 | 4258 | 100 | ||
| 20 | 2026-01-08 10:32:34 | 7011 | 買埋 | 4244 | 100 | 1400 | |
| 21 | 2026-01-08 11:05:49 | 7011 | 買建 | 4252 | 100 | ||
| 22 | 2026-01-08 11:10:41 | 7011 | 売埋 | 4247 | 100 | -500 | |
| 23 | 2026-01-08 11:13:10 | 7011 | 売建 | 4247 | 100 | ||
| 24 | 2026-01-08 12:42:00 | 7011 | 買埋 | 4228 | 100 | 1900 | |
| 25 | 2026-01-08 12:42:01 | 7011 | 買建 | 4230 | 100 | ||
| 26 | 2026-01-08 12:45:08 | 7011 | 売埋 | 4220 | 100 | -1000 | |
| 27 | 2026-01-08 12:45:09 | 7011 | 売建 | 4221 | 100 | ||
| 28 | 2026-01-08 12:49:35 | 7011 | 買埋 | 4231 | 100 | -1000 | |
| 29 | 2026-01-08 12:49:36 | 7011 | 買建 | 4232 | 100 | ||
| 30 | 2026-01-08 13:03:58 | 7011 | 売埋 | 4243 | 100 | 1100 | |
| 31 | 2026-01-08 14:28:13 | 7011 | 売建 | 4263 | 100 | ||
| 32 | 2026-01-08 14:41:01 | 7011 | 買埋 | 4267 | 100 | -400 | |
| 33 | 2026-01-08 15:14:24 | 7011 | 買建 | 4258 | 100 | ||
| 34 | 2026-01-08 15:24:49 | 7011 | 売埋 | 4265 | 100 | 700 | |
| 合計損益 | -1800 | ||||||
リアルタイムのシミュレーションの取引明細とざっと比較したところ、今回も一致しています。
テクニカル指標の時系列トレンド
環境内で管理している、売買シグナルのソースとなるテクニカル指標と含み損益のトレンドをプロットしました。
縦の赤線は、取引明細の時間から入れたもので、売買をしたタイミングになります。
移動平均線 MA1 の傾き
今回から移動平均線 MA1 の傾き(絶対値)の算出方法を変更したので、MA1 の全ポイントの傾き(絶対値)の分布を確認しました。さらに、クロス・シグナル時の傾きの明細も調べる必要がありそうです。
値動きが激しく、頻繁なクロスシグナルが発生する場合のエントリ抑制は他の指標で対応することを検討します。
RollingRange の評価
寄り付き直後の値動きの変動がある程度落ち着いた時期を検出できるような指標がないか Microsoft Copilot に相談したところ、いくつか提案してくれました。その中で下記の RollingRange なるものが良さげだったので評価を始めています。
今のところ RollingRange は環境内の観測値として保持しているだけで、売買判定あるいは抑制につながるようなアクションをしていません。
class RollingRange:
def __init__(self, window_size: int):
self.window_size = window_size
self.prices = deque(maxlen=window_size)
self.current_range = 0.0
self.current_high = None
self.current_low = None
def clear(self):
self.prices.clear()
self.current_range = 0.0
self.current_high = None
self.current_low = None
def update(self, price: float) -> float:
self.prices.append(price)
# high/low を更新
if self.current_high is None:
# 初回
self.current_high = price
self.current_low = price
else:
# 新規値で更新
self.current_high = max(self.current_high, price)
self.current_low = min(self.current_low, price)
# deque が満杯になったとき、古い値が抜けるので high/low を再計算
if len(self.prices) == self.window_size:
oldest = self.prices[0]
if oldest == self.current_high or oldest == self.current_low:
# high/low が抜けたので再計算
self.current_high = max(self.prices)
self.current_low = min(self.prices)
self.current_range = self.current_high - self.current_low
return self.current_range
def getValue(self) -> float:
return self.current_range
昨年までとりあえずの指標として採用していた移動範囲 MR と RollingRange との違いを Copilot に整理してもらいました。
| 指 標 | 何を測る? | トレンド時 | レンジ時 | 特 徴 |
|---|---|---|---|---|
| MR | 1 ステップの揺れ | 小さい | 大きい | micro-volatility |
| RollingRange | 区間全体の値幅 | 大きい | 小さい | macro-volatility(フェーズ判定向き) |
本日取得したティックデータで Rooling Range を算出し、分布をプロットしました。Rooling Range が大きいところではエントリを抑制するというアプローチでうまくいくかもしれません。
RollingRange を日本語でどう呼ぶのが適切かを Copilot に尋ねたところ「移動値幅」を推してきました。う〜ん、不採用かな。
売買ロジックへのインプット
売買ロジックは Maskable PPO 互換のインターフェイスを持った自作のアルゴリズムを備えた疑似モデルです。
なるべくシンプルなロジックで売買判断できることを目指しているため、現在のところ、[0, 1] あるいは [-1, 0, 1] といった離散的なシグナルをインプットするようにしています。
シグナル名は短縮してしまって意味が判りにくいので、それぞれの機能をまとめました。
- クロスS1
- 移動平均 MA1, MA2 のクロスシグナル。デッドクロス、クロス無し、ゴールデンクロスを -1, 0, 1 としたシグナル。
- クロスS2
- クロスS1の 1 秒遅れのシグナル。反対売買用。
- クロ強
- MA1 の傾き(絶対値)が THRESHOLD_SLOPE より大きい場合に発生するクロス・シグナルの強さを示すシグナル。
- ロス1
- 含み損益が LOSSCUT_1 を下回った時に発生するシグナル。
- 建玉
- ポジション SHORT, NONE, LONG を -1, 0, 1 としたシグナル。
参考サイト
- マーケットスピード II RSS | 楽天証券のトレーディングツール
- マーケットスピード II RSS 関数マニュアル
- 注文 | マーケットスピード II RSS オンラインヘルプ | 楽天証券のトレーディングツール
- Gymnasium Documentation
- Stable-Baselines3 Docs - Reliable Reinforcement Learning Implementations
- Maskable PPO — Stable Baselines3 - documentation
- PyTorch documentation
- PythonでGUIを設計 | Qtの公式Pythonバインディング
- Python in Excel alternative: Open. Self-hosted. No limits.
- Book - xlwings Documentation








0 件のコメント:
コメントを投稿