Skip to main content

Self-hosted webhook bridge from TradingView alerts to moomoo / OANDA brokers, with Cloudflare Tunnel + WAF reference architecture.

Project description

alpha-strike

PyPI version CI CodeQL License: Apache 2.0 Python

English | 日本語

TradingView のアラートを Webhook で受け取り、moomoo / OANDA に自動発注するセルフホスト型ブリッジ

alpha-strike は、TradingView Premium / Essential 以上のアラート機能から Webhook 経由でシグナルを受け取り、リクエストボディに基づいて moomoo 証券(米国株・香港株・暗号資産) または OANDA 証券(FX・CFD) へ自動発注する FastAPI ベースの Webhook サーバーです。

Oracle Cloud Always Free + Cloudflare Tunnel + Cloudflare WAF Custom Rule の構成で、自宅 IP の DHCP 変動に依存せず、月額 0 円でセルフホストできるリファレンス実装も提供しています。

TradingView Premium / Essential
       │  HTTPS Webhook
       ▼
Cloudflare WAF Custom Rule (TradingView IP allowlist)
       │
Cloudflare Tunnel (cloudflared)
       │  outbound only (NSG Ingress = 0)
       ▼
alpha-strike (FastAPI, this repo)
       │
       ├──► moomoo OpenD ─► moomoo SIMULATE / REAL (米国株 / 香港株 / 暗号資産)
       └──► OANDA REST v20 ─► OANDA PRACTICE / LIVE (FX / CFD)

主な機能

  • TradingView Webhook 受信/webhook エンドポイントで JSON ペイロードを受理、Pydantic で厳格バリデーション
  • passphrase 認証 — リクエストボディの passphraseWEBHOOK_PASSPHRASE と HMAC 比較
  • multi-broker ルーティングbroker: "moomoo" | "oanda" で発注先を選択。asset_classUS / HK / CRYPTO / FX / COMMODITY / INDEX を切替
  • Rate limitingslowapi10 req/min/IP の上限を強制
  • リトライ + タイムアウトtenacity で broker API 一時障害に対する自動リトライ(OANDA: 指数バックオフ ×3、moomoo: 固定 2 秒 ×3)
  • JSONL イベントログSignalEvent / OrderEvent / FillEvent / TradeClosedEvent を逐次追記、journal との pnl 突合に利用可
  • メモリ・サービス監視scripts/check_memory.sh を cron 登録すれば 5 分毎にメモリ・swap・サービス・OOM を ntfy 通知
  • 本格運用向けデプロイ手順 — 初回構築は docs/ops/vm-provisioning.md(Oracle Cloud E2.1.Micro + Cloudflare Tunnel + systemd)、新バージョンの反映(PyPI → VM 更新 + 再起動)は docs/ops/deployment.md を参照

クイックスタート

ローカルで試す(最短)

PyPI から(推奨)

# uv(推奨)
uv add alpha-strike

# または pipx でグローバル CLI として
pipx install alpha-strike

# または venv に直接
pip install alpha-strike

起動:

WEBHOOK_PASSPHRASE=your-secret-passphrase alpha-strike

# ホスト / ポート指定
WEBHOOK_PASSPHRASE=your-secret-passphrase alpha-strike --host 127.0.0.1 --port 9000

# 疎通確認
curl http://localhost:8080/health
# → {"status":"ok"}

ソースから(開発時)

git clone https://github.com/alforge-labs/alpha-strike.git
cd alpha-strike
uv sync

# .env を設定
echo 'WEBHOOK_PASSPHRASE=your-secret-passphrase' > .env
echo 'MOOMOO_TRD_ENV=SIMULATE' >> .env  # moomoo を使う場合
echo 'OANDA_ENV=PRACTICE'     >> .env   # OANDA を使う場合

# CLI から起動
uv run alpha-strike

# ホットリロード(開発時)
uv run alpha-strike --reload

Oracle Cloud + Cloudflare Tunnel で本格運用

ペーパートレード本格運用までの完全手順は公式ドキュメントを参照:

環境変数

変数 必須 説明
WEBHOOK_PASSPHRASE TradingView アラートの認証用パスフレーズ(32 文字以上のランダム文字列推奨)
ALPHA_STRIKE_HOST バインドホスト(既定 0.0.0.0
ALPHA_STRIKE_PORT バインドポート(既定 8080
MOOMOO_HOST moomoo 使用時 OpenD のホスト(既定 127.0.0.1
MOOMOO_PORT moomoo 使用時 OpenD のポート(既定 11111
MOOMOO_TRD_ENV moomoo 使用時 SIMULATE(デモ)または REAL(本番)
MOOMOO_TIME_IN_FORCE 米国市場の成行注文の有効期限(#76)。GTC(既定)= 市場クローズ後に受けた注文を翌営業日寄付に持ち越して約定 / DAY = 当日のみ有効(旧挙動。クローズ後の注文は約定せず失効する)。HK / CRYPTO は moomoo 仕様・取引時間特性により常に DAY
MOOMOO_SELL_POSITION_GUARD moomoo の SELL を broker の実保有 can_sell_qty まで clamp(超過分は減量)し、建玉ゼロなら skip する over-sell ガード(既定 1=有効)。0/false で無効化。Pine→webhook→broker の open-loop ズレによる Not enough positions を防ぐ
MOOMOO_TARGET_QTY_RECONCILE payload に target_qty(目標絶対保有量)がある場合、broker 実保有との差分から発注数量・方向を再解決する closed-loop 化(#80、既定 1=有効)。0/false で旧 delta 解釈に戻す
OANDA_API_KEY OANDA 使用時 Personal Access Token
OANDA_ACCOUNT_ID OANDA 使用時 口座 ID
OANDA_ENV OANDA 使用時 PRACTICE(デモ)または LIVE(本番)
LIVE_EVENTS_PATH JSONL イベントログ保存先(既定 /app/data/events。docker-compose の volumes と一致させる)
STATUS_API_TOKEN /status/status/events の Bearer トークン(#57)。未設定時はこれらのエンドポイントを 503 で無効化(fail-safe・デフォルト非公開)
NTFY_TOPIC 約定プッシュ通知の ntfy トピック(#57 Phase 2)。未設定なら通知は no-op
NTFY_SERVER ntfy サーバー(既定 https://ntfy.sh
ORDER_RECONCILE_DELAY_SECONDS 発注後に order status を照合するまでの待機秒数(既定 5

重要: 検証時は必ず MOOMOO_TRD_ENV=SIMULATE / OANDA_ENV=PRACTICE を使用してください。本番口座での誤発注は本ソフトウェアの責任範囲外です。

Webhook ペイロード仕様

詳細は docs/tradingview.mddocs/webhook-payload-v2.md を参照。最小例:

{
  "passphrase": "your-secret-passphrase",
  "broker": "moomoo",
  "asset_class": "US",
  "action": "buy",
  "ticker": "US.AAPL",
  "quantity": 10,
  "run_mode": "paper",
  "strategy_id": "demo_buy_v1"
}

任意フィールド target_qty(目標絶対保有量、>= 0)を付けると、moomoo では broker 実保有との差分から発注数量・方向を再解決する(closed-loop、#80)。quantitytarget_qty 非対応バージョン向けのフォールバック値(増減量)として併送する。

asset_class broker ticker 例
US moomoo / oanda US.AAPL / AAPL
HK moomoo HK.00700
CRYPTO moomoo CC.BTC / CC.ETH / CC.XRP
FX oanda USDJPY
COMMODITY oanda XAUUSD
INDEX oanda NAS100

ドキュメント

開発に参加する

開発環境

# 依存関係インストール
uv sync

# テスト + Lint
uv run pytest tests/ -q
uv run ruff check .

# PyPI 配布用 wheel / sdist をローカル生成
uv build
# → dist/alpha_strike-X.Y.Z-py3-none-any.whl + .tar.gz

関連プロジェクト

  • 🌐 alforgelabs.com — Alforge Labs 公式サイト
  • 📊 alpha-visualizer — AlphaForge バックテスト結果の Web 可視化ツール(Apache-2.0)
  • 🧪 AlphaForge — バックテスト・最適化エンジン(商用ライセンス)

免責事項

本ソフトウェアは現状のまま(AS IS)提供され、いかなる種類の保証もありません。自動売買は元本を超える損失を生じる可能性があります。本ソフトウェアを利用して発生した直接・間接の損害(金銭的損失を含む)について、著作権者およびコントリビューターは一切の責任を負いません。本ソフトウェアの利用は完全に自己責任で行ってください。

各 broker の利用規約・取引時間・規制を必ず遵守してください。米国居住者の moomoo crypto 利用には FinCEN MSB 規制が適用される等、規制要件は利用者自身で確認・遵守する責任があります。

ライセンス

Apache License 2.0 © alforge-labs

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

alpha_strike-0.7.0.tar.gz (355.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

alpha_strike-0.7.0-py3-none-any.whl (48.7 kB view details)

Uploaded Python 3

File details

Details for the file alpha_strike-0.7.0.tar.gz.

File metadata

  • Download URL: alpha_strike-0.7.0.tar.gz
  • Upload date:
  • Size: 355.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for alpha_strike-0.7.0.tar.gz
Algorithm Hash digest
SHA256 5e4f58a3835a22c3530ba6386e70560941c53e0ec99d7441f279e6a20b2157a9
MD5 b9678fe4f2d1a068eac489b4eda4b0de
BLAKE2b-256 c1af9b695dfc736129d0da7698e90f0aba3ad23f75bbdfeae0205f8858c3dc95

See more details on using hashes here.

Provenance

The following attestation bundles were made for alpha_strike-0.7.0.tar.gz:

Publisher: release.yml on alforge-labs/alpha-strike

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file alpha_strike-0.7.0-py3-none-any.whl.

File metadata

  • Download URL: alpha_strike-0.7.0-py3-none-any.whl
  • Upload date:
  • Size: 48.7 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for alpha_strike-0.7.0-py3-none-any.whl
Algorithm Hash digest
SHA256 732b300f9385158b63bc36292fa6dc19962e480f79df9dce15cae64aef5088a2
MD5 35570dcaeab6a528015aa88f4eb732e2
BLAKE2b-256 34094518d4cbc2b44494b88c83b96cdf7ddd46693ee70547e7ec6b437153cab9

See more details on using hashes here.

Provenance

The following attestation bundles were made for alpha_strike-0.7.0-py3-none-any.whl:

Publisher: release.yml on alforge-labs/alpha-strike

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page