1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Moomoo API で日本株取引シミュレーションアプリを作ってみた話①

1
Last updated at Posted at 2026-06-24

ちょっと前に東京で活動している中国語 AWS UserGroup と Moomoo 証券の共同イベントに参加してきました。

主に AI Agent で US 株の自動取引と日本株の取引 AI 補助などについてデモをしていただきました。

会場のネットが微妙だったので、帰ってから早速実装してみましたので個人メモとして。

ちょっと長くなりそうなので、複数回に分けて書こうと思います。

同じく株式投資、Moomoo 証券や AI 取引などについて興味がある方はぜひご一読ください。

Moomoo 証券とは

moomoo(ムームー)証券とは、米国ナスダック上場企業を親会社に持つ、次世代の次世代の金融情報アプリ・ネット証券会社です。米国株や日本株の手数料の安さと、プロ顔負けの高機能な投資分析ツールを無料で提供していることで世界中で人気を集めています。

moomoo証券の主な特徴・メリット

  • 圧倒的な低コスト
    日本株の現物取引手数料が無料です。また米国株の取引においても、主要ネット証券と比較して業界最安水準の手数料を実現しています。NISA 口座を利用すれば、日本株だけでなく米国株の取引手数料も 0 円になります。
  • 高機能な分析ツールが無料
    機関投資家(プロ)が利用するような銘柄分析、企業財務、リアルタイムの市況データやニュースをアプリ上で完全無料で閲覧できます。大口投資家の動向や、アナリストの評価などもひと目で分かります。
  • 取引時間が自由
    米国市場の立会時間だけでなく、24 時間いつでも米国株の取引が可能です。

現在の Moomoo API でできること

  • リアルタイム相場データの取得
    米国株や米国オプションのリアルタイム株価、板情報(オーダーブック)、約定データ(ティックデータ)、過去データなどを取得し、独自の分析やエクセル管理に活用できます。
  • 自動発注・アルゴリズム取引
    Python、Java、C#、C++、JavaScript などの主要言語に対応した公式 SDK が提供されており、プログラムから直接売買注文の実行が可能です。損切り・利確ルールのシステム化にも対応しています。
  • 自然言語での AI 自動売買(ノーコード)
    プログラミングコードを書かなくても、「Moomoo API Skill」を利用してチャットで売買ルールを指示するだけで、AI が自動売買を実行・最適化してくれます。
  • デモ取引(模擬取引)による検証
    実資金を使わずにペーパートレード環境を利用できるため、構築した自動売買プログラムや戦略の動作確認をリスクなしで行うことができます。

API の利用自体は無料です。

※日本株の相場データやファンダメンタルズ情報を取得できますが、取引シミュレーションはできません。
現物取引には対応しています(単元未満株(1株からの取引)も利用可能です)が、現状日本株の信用取引や夜間取引(PTS)は提供されていません。

Moomoo API 使用開始

Moomoo API を使用開始するまでに以下の手順をまず実施する必要があります。

Moomoo 証券アカウントおよび口座の作成

  1. まずは Moomoo 証券のアカウントを作りましょう
    https://www.moomoo.com/jp
  2. 個人情報を入力し、口座開通の審査を開始
    審査完了まで数営業日かかる場合があります。
  3. 取引パスワード作成
    実際の取引と下記で紹介する Opend を使用する際に必要な 6 桁パスワード(ATM を使う時に聞かれる暗証番号のようなもの)です。
    見つけにくいので、スマホアプリで操作するとスムーズ。

Moomoo OpenD のインストールと有効化

Moomoo OpenD とは、Moomoo サーバーの API Gateway とローカルホストの間に挟んで安全に取引を確保するためのゲートウェイプログラム(中継ソフト)です。

  1. 以下のサイトからダウンロードできます。
    GUI: https://www.moomoo.com/download/OpenAPI
    CLI: https://openapi.moomoo.com/moomoo-api-doc/en/opend/opend-cmd.html
  2. OpenD を立ち上げ、ログインし、トレードをアンロック
    右上の Unlock Trade ボタンをクリックすると取引パスワードの入力が求められる。

補足:AI Agent に Moomoo API Skill を適用すると自動的に OpenD のダウンロードまたは更新が行われます。
https://openapi.moomoo.com/skills/opend-skills.zip

OpenD のカスタマイズ設定について:
https://openapi.moomoo.com/moomoo-api-doc/jp/opend/opend-operate.html

各種言語の SDK を入手

Refer: https://www.moomoo.com/ja/download/OpenAPI

今回は Python を例に紹介していきます。
pip install moomoo-api

まずはスナップショットを取得してみる

Refer: https://openapi.moomoo.com/moomoo-api-doc/jp/quote/get-market-snapshot.html

main.py
from moomoo import *

quote_ctx = OpenQuoteContext(host="127.0.0.1", port=11111)
print(quote_ctx.get_market_snapshot("JP.6758"))
quote_ctx.close()

実行結果

(0,       code        name          update_time  ...  overnight_change_val  overnight_change_rate  overnight_amplitude
0  JP.6758  Sony Group  2026-06-24 15:30:00  ...                   N/A                    N/A                  N/A

[1 rows x 142 columns])

データを扱いやすくしよう

main.py
from moomoo import *

quote_ctx = OpenQuoteContext(host="127.0.0.1", port=11111)

ret, snap_data = quote_ctx.get_market_snapshot("JP.6758")

if ret == RET_OK:
    print(f"""
Code: {snap_data["code"]}
Name: {snap_data["name"]}
prev_close_price: {snap_data["prev_close_price"]}
Open Price: {snap_data["open_price"]}
Last Price: {snap_data["last_price"]}
""")

else:
    print("Error:", snap_data)

quote_ctx.close()

実行結果

Code: JP.6758
Name: Sony Group
Previous Day Close Price: 3159.0
Open Price: 3217.0
Last Price: 3250.0

RET_CODE について: https://openapi.moomoo.com/moomoo-api-doc/jp/ftapi/common.html

  • RET_OK: 成功
  • RET_ERROR: 失敗
パラメータ 説明
ret RET_CODE API呼び出し結果
data tuple ret == RET_OK の場合、イベント通知データを返す
str ret != RET_OK の場合、エラーの説明を返す

リアルタイムデータ取得

Refer: https://openapi.moomoo.com/moomoo-api-doc/jp/quote/get-stock-quote.html

main.py
quote_ctx = OpenQuoteContext(host="127.0.0.1", port=11111)

ret_sub, err_message = quote_ctx.subscribe(
    ["JP.6758"], [SubType.QUOTE], subscribe_push=False
)

if ret_sub == RET_OK:
    ret, real_data = quote_ctx.get_stock_quote(["JP.6758"])

    if ret == RET_OK:
        print(real_data)
    else:
        print("Error:", real_data)

else:
    print("Subscription Failed:", err_message)
quote_ctx.close()
ret_sub, err_message = quote_ctx.subscribe(
    ["JP.6758"], [SubType.QUOTE], subscribe_push=False
)

まずローソク足タイプを登録。
登録成功後 OpenD はサーバーからのプッシュを継続的に受信。
False は一時的にスクリプトへのプッシュが不要であることを示す。

蛇足:日本市場ではできないが、シミュレーションをしたい時

trd_ctx = OpenSecTradeContext(host='127.0.0.1', port=11111)

simu_result = trd_ctx.place_order(
    price=500.0,
    qty=100,
    code="JP.6758",
    trd_side=TrdSide.BUY,
    trd_env=TrdEnv.SIMULATE,
)
print(simu_result)

trd_ctx.close()

実行結果

(-1, "No available paper accounts with HK market authority in Unknown security, please check the input parameters 'security_firm' and 'filter_trdmarket' of OpenSecTradeContext.")

なので、独自にトレードシミュレーション機能を作る必要があります。
次回に続く...

7/31 追記

現在日本株リアルタイムデータ API が障害対応中とのことと、ちゃっかり日本株シミュレーションが公式に追加されたので一旦置いとくことにしました。

担当者に問い合わせました
IMG_6807.PNG

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?