Live release feed
Sub-second macro releases for FX backtests
Point-in-time history
Official CPI, jobs, GDP, and central-bank events with point-in-time history.
$25/month 14-day free trial
Start Free Trial
Algo-Trading Bitcoin trên Binance với FXMacroData Macro Signals image
Share headline card X LinkedIn Email
Download

Implementation

How-To Guides

Algo-Trading Bitcoin trên Binance với FXMacroData Macro Signals

Xây dựng một robot giao dịch Bitcoin dựa trên tín hiệu vĩ mô trong Python: lấy tỷ lệ chính sách USD, lạm phát, mức cân bằng và dữ liệu vàng từ FXMacroData, biên soạn điểm số chế độ, lên lịch xung quanh các bản phát hành FOMC và CPI và gửi lệnh BTC / USDT trên Binance tự động.

Cũng có sẵn tại English
Share article X LinkedIn Email

Tại sao dữ liệu vĩ mô thúc đẩy Bitcoin

Bitcoin không phải là một công ty. Nó không trả cổ tức, không báo cáo lợi nhuận và không có số nhân doanh thu để neo định giá. Thay vào đó, BTC giao dịch như tài sản nhạy cảm với rủi ro nhất trên thị trường một cược đòn bẩy vào điều kiện thanh khoản toàn cầu, sức mạnh đồng đô la và kỳ vọng lãi suất thực. Điều đó có nghĩa là cùng một bộ công cụ vĩ mô được các nhà giao dịch FX sử dụng để định vị EUR / USD hoặc AUD / JPY áp dụng trực tiếp cho Bitcoin.

Khi Fed cắt giảm lãi suất, thanh khoản đô la mở rộng và tài sản rủi ro tăng BTC thường dẫn đầu. Khi CPI bất ngờ tăng, các câu chuyện bảo hiểm lạm phát lại xuất hiện. Khi lợi nhuận thực sự sụp đổ, các lời kể về sự suy giảm giá trị tiền tệ đẩy vốn vào các lựa chọn thay thế tài sản cứng. Mỗi tín hiệu này đều có thể quan sát được trước thông qua các điểm cuối chỉ số của FXMacroData, được đóng dấu thời gian đến giây và có sẵn qua API REST sạch.

Hướng dẫn này hướng dẫn bạn xây dựng một robot giao dịch thuật toán dựa trên tín hiệu vĩ mô cho BTC/USDT trên Binance.

  • Kéo tín hiệu vĩ mô thời gian thực từ FXMacroData (lãi suất chính sách, lạm phát, tỷ lệ cân bằng, vàng)
  • Kết hợp chúng thành một điểm số tổng hợp
  • Lên lịch thực thi xung quanh các bản phát hành có tác động cao thông qua lịch phát hành
  • Gửi lệnh thị trường và giới hạn trên Binance thông qua Python SDK chính thức

luận án cốt lõi

Thay đổi chế độ vĩ mô chu kỳ cắt giảm lãi suất, xoay chuyển lạm phát, đảo ngược xu hướng đô la tạo ra gió hậu hướng nhiều tuần cho Bitcoin. Bằng cách đọc các tín hiệu chế độ này từ FXMacroData trước khi các phiên giao dịch mở ra, bạn nắm bắt thiết lập thay vì theo đuổi động thái.

Điều kiện tiên quyết

Trước khi bắt đầu, hãy chắc chắn rằng bạn đã chuẩn bị những thứ sau:

  • Python 3.9+ tất cả các đoạn trích sử dụng cú pháp đánh máy tiêu chuẩn
  • FXMacroData API đăng ký tại /đăng ký và lấy chìa khóa của bạn từ bảng điều khiển
  • Tài khoản Binance với số dư USDT được tài trợ tạo các khóa API trong bảng điều khiển Binance với Cho phép giao dịch giao dịch và ký quỹ kiểm tra
  • Các gói Python requests python-binance pandas schedule
pip install requests python-binance pandas schedule

Lưu trữ các khóa API của bạn như biến môi trường thay vì mã hóa cứng chúng:

export FXMACRO_API_KEY="YOUR_FXMACRODATA_KEY"
export BINANCE_API_KEY="YOUR_BINANCE_KEY"
export BINANCE_SECRET_KEY="YOUR_BINANCE_SECRET"

Bước 1: Nhập tín hiệu macro từ FXMacroData

Bốn chuỗi vĩ mô là trung tâm của mô hình chế độ BTC: Lãi suất chính sách USD lạm phát CPI, Tỷ lệ lạm phát mức cân bằng 10 năm, và giá mặt hàng vàngCùng nhau, họ mô tả môi trường thanh khoản, chế độ lạm phát và tâm lý chạy sang tài sản cứng.

import os
import requests

BASE_URL = "https://fxmacrodata.com/api/v1"
FXMACRO_KEY = os.environ["FXMACRO_API_KEY"]


def get_series(path: str, start: str = "2024-01-01") -> list[dict]:
    """Fetch a time-series from FXMacroData."""
    resp = requests.get(
        f"{BASE_URL}{path}",
        params={"api_key": FXMACRO_KEY, "start": start},
        timeout=10,
    )
    resp.raise_for_status()
    return resp.json()["data"]


# Macro inputs
policy_rate   = get_series("/announcements/usd/policy_rate")
cpi           = get_series("/announcements/usd/inflation")
breakeven_10y = get_series("/announcements/usd/breakeven_inflation_rate")
gold          = get_series("/commodities/gold")

# Each item: {"date": "2025-04-08", "val": 5.25, "announcement_datetime": "..."}
print(f"Policy rate (latest): {policy_rate[0]['val']}%")
print(f"CPI (latest):          {cpi[0]['val']}%")
print(f"10Y breakeven:         {breakeven_10y[0]['val']}%")
print(f"Gold spot:             ${gold[0]['val']:.2f}")

Mỗi điểm cuối trả về một danh sách được sắp xếp từ gần đây nhất đến lâu đời nhất data[0] là luôn luôn là bài đọc mới nhất. valcho các chỉ số vĩ mô, val giữ hình ảnh tiêu đề và announcement_datetime mang dấu thời gian phát hành cấp hai hữu ích cho lập kế hoạch (được đề cập trong Bước 4).

Các đầu vào tín hiệu vĩ mô Chế độ hiện tại

Giá trị minh họa dựa trên dữ liệu 20242025. Khi Fed cắt giảm lãi suất và lạm phát đạt mức cân bằng tăng, BTC hình thành xu hướng tăng nhiều tháng.

Bước 2: Xây dựng điểm số tổng hợp

Thay vì phản ứng với một chỉ số duy nhất, điểm tổng hợp tổng hợp tất cả bốn tín hiệu thành một số hướng giữa -1 (hoàn toàn rủi ro) và +1 (hoán toàn rủiro).

def macro_score(
    policy_rate_pct: float,
    cpi_pct: float,
    breakeven_pct: float,
    gold_usd: float,
    *,
    gold_baseline: float = 1900.0,
) -> float:
    """
    Returns a composite macro score in [-1, +1].

    Positive = risk-on / BTC bullish environment.
    Negative = risk-off / BTC bearish environment.
    """
    score = 0.0

    # ── Policy rate regime (weight 0.35) ──────────────────────────
    # Sub-4.5% = accommodative → bullish; above 5.5% = restrictive → bearish
    if policy_rate_pct < 4.5:
        score += 0.35
    elif policy_rate_pct <= 5.5:
        score += 0.35 * (5.5 - policy_rate_pct) / 1.0
    else:
        score -= 0.20

    # ── Inflation regime (weight 0.25) ────────────────────────────
    # CPI 2–4%: moderate inflation → neutral/slightly bullish
    # CPI > 6%: high inflation → monetary debasement narrative → bullish
    # CPI < 1.5%: deflationary risk → bearish
    if cpi_pct > 6.0:
        score += 0.25
    elif cpi_pct >= 2.0:
        score += 0.10
    else:
        score -= 0.15

    # ── Breakeven inflation (weight 0.20) ─────────────────────────
    # Rising breakevens signal inflation expectations are re-anchoring → bullish
    if breakeven_pct >= 2.5:
        score += 0.20
    elif breakeven_pct >= 2.0:
        score += 0.10
    else:
        score -= 0.10

    # ── Gold trend (weight 0.20) ──────────────────────────────────
    # Gold above baseline confirms hard-asset demand → bullish
    gold_ratio = (gold_usd - gold_baseline) / gold_baseline
    score += 0.20 * max(-1.0, min(1.0, gold_ratio * 5))

    return round(max(-1.0, min(1.0, score)), 4)


score = macro_score(
    policy_rate_pct=policy_rate[0]["val"],
    cpi_pct=cpi[0]["val"],
    breakeven_pct=breakeven_10y[0]["val"],
    gold_usd=gold[0]["val"],
)
print(f"Composite macro score: {score:+.4f}")
# e.g. → +0.6500  (bullish regime)

Hướng dẫn giải thích điểm số

Phạm vi điểm số Chế độ vĩ mô Tín hiệu đề xuất
+0,5 đến +1,0 Rủi ro lãi suất thích nghi, lạm phát trung bình đến cao Tăng / giữ BTC dài
+0,1 đến +0,5 Hỗ trợ nhẹ tín hiệu hỗn hợp, chế độ chuyển tiếp Định vị giảm, chờ xác nhận.
-0,1 đến +0,1 Trực tuyến không có tín hiệu chế độ mạnh Căn hộ / không còn trên thị trường
-1,0 đến -0,1 Rủi ro lãi suất cao, môi trường giảm phát hoặc trì trệ Rút / Giảm tiếp xúc lâu

Bước 3: Kết nối với Binance và lấy giá BTC

Với tín hiệu macro sẵn sàng, kết nối với Binance bằng cách sử dụng chính thức python-binance Luôn luôn lấy giá hiện tại trước khi đặt lệnh để tránh giá trị tham chiếu lỗi thời.

import os
from binance.client import Client

BINANCE_KEY    = os.environ["BINANCE_API_KEY"]
BINANCE_SECRET = os.environ["BINANCE_SECRET_KEY"]

client = Client(BINANCE_KEY, BINANCE_SECRET)

# Verify connectivity
status = client.get_system_status()
print(f"Binance status: {status['msg']}")  # → "normal"

# Latest BTC/USDT price
ticker = client.get_symbol_ticker(symbol="BTCUSDT")
btc_price = float(ticker["price"])
print(f"BTC/USDT spot: ${btc_price:,.2f}")

# Current USDT balance
account = client.get_account()
usdt_balance = next(
    (float(b["free"]) for b in account["balances"] if b["asset"] == "USDT"),
    0.0,
)
print(f"Available USDT: ${usdt_balance:,.2f}")

Thương mại giấy trước tiên

Binance cung cấp một môi trường thử nghiệm tại testnet.binance.visionSử dụng Client(key, secret, testnet=True) Để thực hiện toàn bộ chiến lược mà không phải rủi ro tiền thật sự.

Bước 4: Lên lịch xung quanh các sự kiện phát hành macro

Một trong những tính năng mạnh mẽ nhất của FXMacroData cho giao dịch thuật toán là Điểm cuối lịch phát hànhThay vì thăm dò các chỉ số trên một bộ đếm thời gian cố định, bạn có thể truy vấn chính xác thời gian phát hành theo lịch trình cho bất kỳ chỉ số và bắn logic của bạn chính xác khi dữ liệu mới hạ cánh.

import datetime
import schedule
import time


def get_next_release(currency: str, indicator: str) -> datetime.datetime | None:
    """
    Returns the next scheduled release datetime for an indicator.
    The calendar endpoint returns upcoming release dates ordered ascending.
    """
    resp = requests.get(
        f"{BASE_URL}/calendar/{currency}",
        params={"api_key": FXMACRO_KEY},
        timeout=10,
    )
    resp.raise_for_status()
    events = resp.json().get("data", [])

    now_utc = datetime.datetime.now(tz=datetime.timezone.utc)
    for event in events:
        if event.get("indicator") != indicator:
            continue
        release_str = event.get("release_datetime") or event.get("date")
        if not release_str:
            continue
        release_dt = datetime.datetime.fromisoformat(release_str.replace("Z", "+00:00"))
        if release_dt > now_utc:
            return release_dt
    return None


# Find when the next FOMC policy rate decision is scheduled
next_fomc = get_next_release("usd", "policy_rate")
if next_fomc:
    delta = next_fomc - datetime.datetime.now(tz=datetime.timezone.utc)
    print(f"Next FOMC release: {next_fomc.isoformat()} ({delta.days}d {delta.seconds // 3600}h away)")
else:
    print("No upcoming policy_rate event found in calendar.")


# Find when the next CPI release is scheduled
next_cpi = get_next_release("usd", "inflation")
if next_cpi:
    print(f"Next CPI release:  {next_cpi.isoformat()}")

Được trang bị thời gian chính xác phát hành, bạn có thể lên lịch làm mới tín hiệu sau khi phát hành cho phép thị trường hấp thụ bản in trong vài phút trước khi đánh giá lại và giao dịch lại:

def on_macro_release():
    """Called shortly after a scheduled macro release."""
    print("Macro release fired — refreshing signals...")
    run_strategy()


def schedule_next_release(currency: str, indicator: str, delay_seconds: int = 90):
    """
    Schedules the strategy to run 'delay_seconds' after the next release.
    A 90-second delay lets the initial market reaction settle slightly.
    """
    release_dt = get_next_release(currency, indicator)
    if not release_dt:
        return

    fire_at = release_dt + datetime.timedelta(seconds=delay_seconds)
    fire_str = fire_at.strftime("%H:%M:%S")  # schedule library uses HH:MM:SS
    schedule.every().day.at(fire_str).do(on_macro_release).tag(f"{currency}_{indicator}")
    print(f"Scheduled signal refresh at {fire_str} UTC after {currency.upper()} {indicator}")


schedule_next_release("usd", "policy_rate", delay_seconds=90)
schedule_next_release("usd", "inflation", delay_seconds=60)

Bước 5: Định giá và gửi đơn đặt hàng

Định giá vị trí là nơi hầu hết các chiến lược thuật toán mất tiền không trong logic tín hiệu. Chức năng dưới đây định giá giao dịch BTC là một phần vốn có sẵn, quy mô theo quy mô tuyệt đối của điểm số macro. Môi trường macro có xác tín cao hơn (điểm số xa hơn từ 0) biện minh cho việc phân bổ lớn hơn, nhưng không bao giờ vượt quá mức tối đa có thể cấu hình.

from binance.enums import SIDE_BUY, SIDE_SELL, ORDER_TYPE_MARKET, ORDER_TYPE_LIMIT
from binance.exceptions import BinanceAPIException
import math


def compute_quantity(
    score: float,
    usdt_balance: float,
    btc_price: float,
    max_position_pct: float = 0.20,
) -> float:
    """
    Scale position size between 0 and max_position_pct of USDT balance.
    Only trade when |score| > 0.30 to avoid noise-driven entries.
    Returns BTC quantity rounded to Binance's minimum lot size (0.00001 BTC).
    """
    if abs(score) < 0.30:
        return 0.0

    conviction = (abs(score) - 0.30) / 0.70          # 0.0 → 1.0
    usdt_to_trade = usdt_balance * max_position_pct * conviction
    btc_qty = usdt_to_trade / btc_price
    return math.floor(btc_qty * 100_000) / 100_000    # 5 decimal places


def place_order(side: str, quantity: float, btc_price: float) -> dict | None:
    """
    Submit a market order. For limit orders, pass a price to get_order_book
    and sit 0.1% inside the spread.
    """
    if quantity <= 0.0:
        print("Quantity zero — no order placed.")
        return None

    try:
        order = client.order_market(
            symbol="BTCUSDT",
            side=side,
            quantity=quantity,
        )
        print(f"Order placed: {side} {quantity:.5f} BTC @ ~${btc_price:,.2f}")
        return order
    except BinanceAPIException as exc:
        print(f"Binance order error: {exc.message}")
        return None

Bước 6: Lắp ráp toàn bộ vòng lặp chiến lược

Bây giờ kết hợp từng mảnh thành một. run_strategy() chức năng lấy dữ liệu vĩ mô mới, tính điểm số, kiểm tra thay đổi chế độ và mở hoặc đóng một vị trí BTC phù hợp.

import json
import pathlib

STATE_FILE = pathlib.Path("strategy_state.json")


def load_state() -> dict:
    if STATE_FILE.exists():
        return json.loads(STATE_FILE.read_text())
    return {"position": 0.0, "last_score": 0.0}


def save_state(state: dict) -> None:
    STATE_FILE.write_text(json.dumps(state, indent=2))


def run_strategy() -> None:
    state = load_state()

    # ── 1. Fetch fresh macro data ──────────────────────────────────
    policy_rate_val   = get_series("/announcements/usd/policy_rate")[0]["val"]
    cpi_val           = get_series("/announcements/usd/inflation")[0]["val"]
    breakeven_val     = get_series("/announcements/usd/breakeven_inflation_rate")[0]["val"]
    gold_val          = get_series("/commodities/gold")[0]["val"]

    # ── 2. Compute macro score ─────────────────────────────────────
    score = macro_score(policy_rate_val, cpi_val, breakeven_val, gold_val)
    print(f"Macro score: {score:+.4f}  (prev: {state['last_score']:+.4f})")

    # ── 3. Fetch current Binance position and price ───────────────
    account   = client.get_account()
    btc_held  = float(next(b["free"] for b in account["balances"] if b["asset"] == "BTC"))
    usdt_held = float(next(b["free"] for b in account["balances"] if b["asset"] == "USDT"))
    btc_price = float(client.get_symbol_ticker(symbol="BTCUSDT")["price"])

    # ── 4. Regime change logic ─────────────────────────────────────
    prev_score    = state["last_score"]
    was_long      = prev_score >= 0.30
    is_long_now   = score >= 0.30
    was_flat      = abs(prev_score) < 0.30
    is_flat_now   = abs(score) < 0.30

    if is_long_now and (was_flat or prev_score < 0):
        # Enter or increase long
        qty = compute_quantity(score, usdt_held, btc_price)
        place_order(SIDE_BUY, qty, btc_price)

    elif is_flat_now and was_long and btc_held > 0.0001:
        # Exit long — macro regime has turned neutral
        exit_qty = math.floor(btc_held * 100_000) / 100_000
        place_order(SIDE_SELL, exit_qty, btc_price)

    elif score < -0.30 and btc_held > 0.0001:
        # Hard exit on bearish signal
        exit_qty = math.floor(btc_held * 100_000) / 100_000
        place_order(SIDE_SELL, exit_qty, btc_price)
        print("BEARISH regime — full exit.")

    # ── 5. Persist state ───────────────────────────────────────────
    state["last_score"] = score
    save_state(state)


# ── Run once immediately, then on each scheduled release ──────────────
run_strategy()

# Keep scheduler alive
while True:
    schedule.run_pending()
    time.sleep(10)

BTC/USDT so với Macro Score Mô phỏng 2024

Kiểm tra ngược minh họa. Điểm số macro vượt trên +0.3 vào đầu năm 2024 trùng với sự khởi đầu của BTC từ ~ $ 40k đến $ 70k. Đi điểm đã giảm khi các kỳ vọng cắt giảm lãi suất được định giá và câu chuyện tài sản cứng nguội.

Bước 7: Quản lý rủi ro và các cân nhắc hoạt động

Một chiến lược tín hiệu vĩ mô có tần suất giao dịch thấp hơn nhiều so với một hệ thống kỹ thuật thuần túy các bước vào và ra thường xảy ra khoảng 68 lần phát hành chỉ số chính mỗi năm. Tần số thấp đó là một tính năng, không phải là lỗi: bạn đang định vị cho các thay đổi chế độ nhiều tuần, không có tiếng ồn trong ngày. Tuy nhiên, nó cũng có nghĩa là mỗi vị trí mang lại nhiều rủi ro hơn cho mỗi giao dịch, làm cho quản lý rủi ro kỷ luật không thể đàm phán được.

✓ Làm

  • Chạy trên mức dừng lỗ 0,52% cho mỗi giao dịch dựa trên ATR
  • Giới hạn vị trí tối đa 20% của tài khoản mỗi giao dịch
  • Kiểm tra ngược ít nhất 2 chu kỳ lãi suất Fed trước khi đi vào hoạt động
  • Ghi lại mỗi giao dịch và điểm số vào một tập tin để kiểm toán
  • Sử dụng Binance testnet cho chạy khô đầu tiên

Tránh

  • Theo đuổi các động thái BTC trong ngày với các tín hiệu vĩ mô
  • Nhập ngay lập tức khi phát hành dữ liệu (đợi 6090 giây)
  • Đặt trọng lượng điểm quá mức vào một chu kỳ duy nhất
  • Chạy mà không có bộ ngắt mạch giảm hàng ngày
  • Chìa khóa API mã hóa cứng trong tệp nguồn

Một cân nhắc bổ sung: BTC giao dịch 24/7 nhưng các sự kiện vĩ mô được lên lịch. FOMC, CPI và NFP đều được phát hành trong giờ thị trường Mỹ. Người lập lịch của bạn nên nhận thức về múi giờ sử dụng UTC trong suốt và chuyển đổi chỉ khi hiển thị cho người dùng cuối. announcement_datetime trường luôn luôn UTC, làm cho điều này đơn giản.

Mở rộng chiến lược

Đây là các phần mở rộng tự nhiên để khám phá tiếp theo:

  • Thêm dữ liệu định vị COT Điểm cuối CFTC COT của FXMacroData cung cấp định vị đầu cơ hàng tuần trong hợp đồng tương lai USD. /cot/usd và thêm một thuật ngữ định vị ròng vào điểm số macro.
  • Điểm số đa tiền tệ kết hợp các tín hiệu macro EUR, JPY và GBP để xây dựng điểm thanh khoản toàn cầu. Khi nhiều ngân hàng trung ương G10 đang trong chế độ nới lỏng đồng thời, điều kiện rủi ro BTC mạnh nhất.
  • Tốc độ xu hướng chia sẻ thay vì mức lạm phát mức độ ngang, sử dụng tỷ lệ thay đổi 4 tuần.
  • Tích hợp lịch phát hành hỏi Lịch phát hành Đối với tất cả các sự kiện USD một tháng, nhóm chúng theo trọng lượng tác động và xác định các cửa sổ trong đó nhiều phát hành tác động cao được nhóm trong vòng 48 giờ đó là các khoảng thời gian đáng định vị.

Tóm lại

Bạn có một robot giao dịch Bitcoin hoạt động dựa trên tín hiệu vĩ mô kết nối dữ liệu chỉ số FXMacroData trực tiếp với việc thực hiện Binance. Chiến lược đọc tỷ lệ chính sách USD, CPI, lạm phát bình đẳng và vàng để xây dựng điểm số vĩ mô tổng hợp, lên lịch xung quanh các sự kiện thông báo trong thế giới thực và kích thước và gửi các đơn đặt hàng BTC / USDT tỷ lệ thuận với sự xác nhận của chế độ.

Bài viết tiếp theo trong loạt bài này bao gồm kiểm tra lại khung này với dữ liệu lịch sử và hiệu chuẩn trọng số điểm bằng cách sử dụng chuỗi thời gian FXMacroData thực sự trở lại năm 2015.

Blogroll

AI Answer-Ready

Key Facts

Page
Algo Trading Bitcoin Binance FXmacrodata
Section
Articles
Canonical URL
https://fxmacrodata.com/vi/articles/algo-trading-bitcoin-binance-fxmacrodata
Source
FXMacroData editorial and official publisher references
Last Updated
2026-06-15 11:06 UTC

Provenance And Trust

Cite the canonical URL and source field above. Where available, this page maps to official publisher releases and timestamped updates.

Quick Q&A

What is this page about? This page explains Algo Trading Bitcoin Binance FXmacrodata with directly usable context for trading, research, and API workflows.

What source should be cited? Use the canonical URL and the listed source field; cite official publisher references when available.

How fresh is this content? The last updated value above reflects the page metadata or latest available data timestamp.

Can this be used in AI assistants? Yes. This section is intentionally structured for retrieval and citation in chat assistants.

Prompt Packs

Use these in ChatGPT, Claude, Gemini, Mistral, Perplexity, or Grok for consistent source-aware outputs.