🛠️ 开发者实操 Back to channelMoomoo OpenD 安裝踩坑記:Ubuntu CLI 版完整教學 & 加拿大用戶的殘酷現實
Moomoo OpenD 安裝踩坑記:Ubuntu CLI 版完整教學 & 加拿大用戶的殘酷現實
作者:炒股大王 | 2026-06-19 頻道:財務自由 cwzy
前言
最近在研究搭建自動交易機器人,目標是把 NVDA、AMD、MU、INTC 這四支半導體股的策略自動化。
Futu(富途)旗下的 Moomoo 在美股散戶中口碑不錯,而且他們有一個 OpenD 開源 API 網關,理論上可以讓開發者用程式碼直接對接交易系統。
聽起來很美,對吧?
結果我踩了一路的坑。這篇文記錄了完整的安裝過程、CLI 版的正確用法,以及一個讓加拿大用戶心碎的事實。
一、OpenD 是什麼?
OpenD(Open Door)是 Futu/Moomoo 提供的一個本地 API 網關。
你的程式 → OpenD(本地進程)→ Moomoo 伺服器 → 交易所
你不需要直接處理券商 API 的複雜認證,OpenD 幫你搞定登入和 session 管理。你的 Python 程式只需要通過 Protobuf/WebSocket 跟本地的 OpenD 進程溝通。
支援的開發語言:
- Python 🐍
- C++
- Java
- JavaScript(WebSocket)
二、下載 OpenD
Moomoo 官網的下載頁面是用 JavaScript 觸發下載的,不會直接顯示鏈接。
經過分析,背後的真實下載 API 是:
# 獲取最新版本的下載重定向
curl -sI -L "https://www.futunn.com/download/fetch-lasted-link?name=opend-ubuntu"
真實下載鏈接(截至 2026-06-19)
| 平台 | 下載鏈接 |
|---|---|
| 🐧 Ubuntu | https://softwaredownload.futunn.com/Futu_OpenD_10.7.6728_Ubuntu18.04.tar.gz |
| 🪟 Windows | https://softwaredownload.futunn.com/Futu_OpenD_10.7.6728_Windows.7z |
| 🍏 macOS | https://softwaredownload.futunn.com/Futu_OpenD_10.7.6728_Mac.tar.gz |
文件大小約 428MB,裡面包含了 OpenD 二進位檔、動態庫、配置文件、語言文件等。
三、Ubuntu 安裝步驟
Step 1: 下載
wget https://softwaredownload.futunn.com/Futu_OpenD_10.7.6728_Ubuntu18.04.tar.gz
Step 2: 解壓
tar -xzf Futu_OpenD_10.7.6728_Ubuntu18.04.tar.gz
sudo mv moomoo_OpenD_10.7.6728_Ubuntu /opt/FutuOpenD
Step 3: 看看裡面有什麼
root@server:/opt/FutuOpenD# ll
total 100168
-rw-r--r-- 1 root root 15152258 Jun 19 07:17 AppData.dat
-rwxr-xr-x 1 root root 3865032 Jun 19 07:17 FTUpdate*
-rwxr-xr-x 1 root root 1582400 Jun 19 07:17 FTWebSocket*
-rwxr-xr-x 1 root root 33108720 Jun 19 07:17 FutuOpenD* ← 主程式
-rw-r--r-- 1 root root 7076 Jun 19 07:17 FutuOpenD.xml ← 配置文件
drwxr-xr-x 4 root root 4096 Jun 19 07:17 Languages/
-rwxr-xr-x 1 root root 5286984 Jun 19 07:17 libcrypto.so.3*
-rwxr-xr-x 1 root root 869136 Jun 19 07:17 libcurl.so.4*
-rwxr-xr-x 1 root root 2050104 Jun 19 07:17 libf3cbasis.so*
-rwxr-xr-x 1 root root 699888 Jun 19 07:17 libf3clog.so*
-rwxr-xr-x 1 root root 1956912 Jun 19 07:17 libf3clogin.so*
-rwxr-xr-x 1 root root 511136 Jun 19 07:17 libf3cloguploader.so*
-rwxr-xr-x 1 root root 1785392 Jun 19 07:17 libf3cnet.so*
-rwxr-xr-x 1 root root 710512 Jun 19 07:17 libf3creport.so*
-rwxr-xr-x 1 root root 34174336 Jun 19 07:17 libprotobuf.so.32*
-rwxr-xr-x 1 root root 772176 Jun 19 07:17 libssl.so.3*
重點:FutuOpenD 是 33MB 的主程式,FutuOpenD.xml 是配置文件。
四、配置文件 FutuOpenD.xml
打開 FutuOpenD.xml,裡面長這樣:
<?xml version="1.0" encoding="UTF-8"?>
<config>
<host>127.0.0.1</host>
<api_port>11111</api_port>
<websocket_port>0</websocket_port>
<log_level>info</log_level>
<log_path>./log</log_path>
</config>
建議配置(用於 Headless 伺服器)
<?xml version="1.0" encoding="UTF-8"?>
<config>
<host>127.0.0.1</host>
<api_port>11111</api_port>
<websocket_port>9000</websocket_port>
<log_level>info</log_level>
<log_path>/var/log/futuopend</log_path>
</config>
五、CLI 啟動參數(完整解析)
這是 ./FutuOpenD help 的真實輸出:
启动参数帮助
login_account 登录帐号
login_pwd 登录密码明文
login_pwd_md5 登录密码密文(32位MD5加密16进制)
login_by_remember 记住密码登录
remember 记住密码(0=取消记住,不传=保持)
login_region 优先连接点区域(hk/gz/sh/us/sg)
cfg_file FutuOpenD配置文件绝对路径
console 是否显示控制台(0=后台,1=控制台)
lang FutuOpenD语言(en/chs)
api_ip API接口协议监听地址
api_port API接口协议监听端口
help 输出启动命令行参数然后退出程序
log_level 日志级别(no/debug/info/warning/error/fatal)
log_path 日志路径
no_monitor 是否启动守护进程(0=启动,1=不启动)
simulate_trade 是否启用模拟交易(enable/disable)
websocket_ip WebSocket监听地址
websocket_port WebSocket监听端口
websocket_private_key WebSocket证书私钥文件路径
websocket_cert WebSocket证书文件路径
websocket_key_md5 密钥密文(32位MD5)
price_reminder_push 是否接收到价提醒推送(0=不接收,1=接收)
auto_hold_quote_right 被踢后是否自动抢权限(0=否,1=是)
future_trade_api_time_zone 期货交易API时区
啟動方式
方式 1:命令行參數登入
./FutuOpenD login_account=your_account login_pwd_md5=your_md5_password console=1 lang=en
方式 2:配置文件 + 啟動後登入
./FutuOpenD cfg_file=/opt/FutuOpenD/FutuOpenD.xml console=0 no_monitor=1
然後通過 API 發送登入指令。
⚠️ 六、你必須知道的陷阱
🚫 陷阱 1:沒有 --version 標誌
# ❌ 錯誤!這不會顯示版本
./FutuOpenD --version
# ✅ 正確:查看幫助
./FutuOpenD help
如果你執行 ./FutuOpenD --version,OpenD 會把 --version 當成無效參數,然後嘗試啟動並登入。
因為沒有帳號密碼 → 登入失敗 → 登入失敗計數 +1
🔒 陷阱 2:10 次失敗會鎖定
- 登入失敗次數會累積
- 10 次失敗後帳號被鎖定
- 解鎖需要聯絡客服
也就是說,你如果亂試 --version、-v、--ver 這些不存在的參數,每次都會觸發一次登入嘗試,10 次之後你的交易帳號就鎖了。
💡 警告:千萬不要在生產環境的伺服器上亂試 OpenD 的 CLI 參數!
✅ 正確的版本查看方式
目前 OpenD 沒有 --version 標誌。唯一看版本的方法是:
- 查看文件名(例如
Futu_OpenD_10.7.6728_Ubuntu18.04.tar.gz中的10.7.6728) - 查看 FutuOpenD.xml 中的版本信息
- 啟動後通過 API 查詢版本
🇨🇦 七、加拿大用戶的殘酷現實
這是最關鍵的部分。
問題
用 moomoo Canada 的帳號嘗試登入 OpenD,結果:
登入失敗
登入失敗計數:1
...
原因
OpenD 不支援 moomoo Canada(加拿大富途)的帳號體系。
Moomoo 在全球有多個實體:
| 地區 | 公司實體 | 監管機構 | OpenD 支援? |
|---|---|---|---|
| 🇺🇸 美國 | Futu Inc. | SEC/FINRA | ✅ 支援 |
| 🇭🇰 香港 | Futu Securities Int'l | SFC | ✅ 支援 |
| 🇸🇬 新加坡 | Futu Singapore | MAS | ✅ 支援 |
| 🇯🇵 日本 | ふたつ証券 | JFSA | ✅ 支援 |
| 🇨🇦 加拿大 | Moomoo Financial Canada Inc. | CIRO | ❌ 不支援 |
加拿大 Moomoo 使用的是獨立的後端系統,跟 Futu 全球體系不同。OpenD 是為 Futu/Moomoo 全球版(香港/美國體系)設計的,加拿大 CIRO 監管體系的帳號不在支援範圍內。
官方態度
- moomoo Canada 的 OpenAPI 文檔頁面不提供下載鏈接
- moomoo Canada 客服確認「目前不支援 API 交易」
- 2026年4月推出的 Moomoo API Skills(自然語言驅動的 AI 交易),加拿大是否支援仍不明確
🛠️ 八、加拿大用戶的替代方案
如果你在加拿大也想搭建交易機器人,以下是幾個方案:
方案 A:Interactive Brokers + ib_insync 🥇
IBKR 是加拿大最成熟的選擇:
pip install ib_insync
from ib_insync import *
ib = IB()
ib.connect('127.0.0.1', 7497, clientId=1)
# 獲取 NVDA 股價
nvda = Stock('NVDA', 'SMART', 'USD')
ib.qualifyContracts(nvda)
ticker = ib.reqMktData(nvda, '', False, False)
print(f"NVDA: ${ticker.last}")
# 下單
order = MarketOrder('BUY', 100)
trade = ib.placeOrder(nvda, order)
優點:
- IBKR Gateway/TWS 在加拿大完全可用
ib_insync是非常成熟的 Python 套件- 支援股票、期權、期貨、外匯
- TFSA/RRSP 帳戶也可以
缺點:
- IBKR Gateway 需要跑一個桌面程式(可跑在 VPS 上)
- 稍微複雜的配置
方案 B:Alpaca Markets 🥈
純 API 券商,不需要本地網關:
pip install alpaca-trade-api
from alpaca.trading.client import TradingClient
from alpaca.trading.requests import MarketOrderRequest
client = TradingClient('API_KEY', 'SECRET_KEY')
order = MarketOrderRequest(
symbol='NVDA',
qty=10,
side='buy',
type='market'
)
client.submit_order(order)
優點:
- REST API,不需要本地進程
- 文檔完善,社群活躍
- 支援模擬交易
缺點:
- 加拿大居民只能交易美股(不能交易加拿大股票)
- 不支援 TFSA/RRSP
方案 C:自建信號系統 + 手動下單 🥉
適合初學者的 MVP 方案:
import yfinance as yf
# 獲取 NVDA 技術指標
nvda = yf.Ticker("NVDA")
hist = nvda.history(period="3mo")
# 計算簡單移動平均線
sma_20 = hist['Close'].rolling(20).mean()[-1]
sma_50 = hist['Close'].rolling(50).mean()[-1]
# 產生信號
if sma_20 > sma_50:
signal = "🟢 黃金交叉!考慮買入 NVDA"
else:
signal = "🔴 死亡交叉!考慮減倉 NVDA"
# 發送通知
print(signal)
# 或發送 Email / Telegram / Discord 通知
優點:
- 免費,零成本開始
- 不需要券商 API
- 可以學習完整的交易邏輯
缺點:
- 需要手動下單
- 數據不是實時的(延遲 15 分鐘)
九、未來展望:Moomoo API Skills
2026年4月,Moomoo 推出了 API Skills 功能:
用戶可以用自然語言跟 AI Agent 對話,由 AI 代理執行交易策略
例如:
「幫我監控 NVDA,如果跌到 $200 以下買 50 股,站回 $220 賣一半」
但目前 API Skills 只在美國和香港上線,加拿大是否支援仍是未知數。
總結
| 項目 | 結論 |
|---|---|
| OpenD 下載鏈接 | softwaredownload.futunn.com/Futu_OpenD_10.7.6728_Ubuntu18.04.tar.gz |
CLI --version 陷阱 |
不存在! 亂跑會扣登入次數,10次鎖帳號 |
| moomoo Canada 支援? | ❌ 不支援! |
| 加拿大的最佳替代 | Interactive Brokers + ib_insync |
如果你在加拿大,想搞交易機器人,別走 OpenD 這條死路。直接上 Interactive Brokers 才是正道。
下一篇我會寫:IBKR + ib_insync 從註冊到第一個自動交易策略的完整教學。
敬請期待!🔥
免責聲明:本文僅供教育參考,不構成投資建議。交易有風險,投資需謹慎。