用 Claude 寫 Binance API 自動風控指令碼:爆倉前 3 小時預警

💡 國內提示:Binance 官網在中國大陸無法直連,訪問需自備網路工具;法幣入金不支援銀行卡,主要走 C2C(USDT↔CNY)通道完成。 加密圈有句話:“爆倉不是突然的事,是慢慢惡化的結果”。爆倉前 2-4 小時維持保證金率(MMR)通常已經很危險了,但很多人因為手機沒通知,等看到時已經被強平。 這篇用 Claude Code 寫了一個小指令碼監控 Binance U 本位合約賬戶的保證金健康度,低於閾值時立即 Telegram 推送。完整程式碼 + 部署。 需求描述(給 Claude) 寫一個 Python 指令碼監控 Binance 合約賬戶: 1. 用 Binance API Key(只勾"讀取"許可權)查 U 本位合約賬戶 2. 算每個開倉的 "維持保證金率" 維持保證金率 = 維持保證金 / 賬戶餘額 3. 整個賬戶的健康度: - 安全:賬戶餘額/總維持保證金 > 5 - 警戒:2-5 - 危險:< 2(大機率爆倉程序啟動) 4. 危險時立即 Telegram 推送(含倉位明細 + 當前 MMR) 5. 每 10 分鐘跑一次 6. 用環境變數存 API key,不寫死在程式碼裡 一稿即可用的程式碼 binance_risk_monitor.py: ...

2026-04-19 · 3 min · 545 words · 磐石

量化策略為什麼需要住宅 IP:Binance API 封號防禦完整方案

我在 AWS 新加坡跑 Binance 量化策略時遇到過一系列"IP 相關"的坑:地區限制、API 限流、賬號被風控凍結。最終的解法是用 IPRoyal 住宅 IP 作為 API 呼叫出口。這篇文章把原理和配置完整寫出來。 量化策略會遇到的 IP 問題 問題 1:Binance 對部分國家限制訪問 Binance 對美國 / 英國 / 荷蘭等部分地區 IP 限制 API 訪問: 訪問合約 API 返回 451 Unavailable For Legal Reasons 某些 API 介面直接拒絕 使用者服務合規問題 常見受影響 VPS 區域: AWS us-east-1 / us-west-2(美國) Vultr 部分美國節點 Hetzner 部分德國節點(受歐盟新規影響) 問題 2:API 限流頻繁觸發 Binance 對每個 IP 的 API 請求有限制: ...

2026-04-17 · 4 min · 824 words · 磐石

量化策略止損引數研究方法論:如何用歷史資料找到最優止損距離

止損距離是量化策略裡最難確定的引數之一。太緊頻繁被掃止損,太鬆單次虧損超預期。 憑直覺設引數沒有說服力。更可靠的方法是:用歷史資料系統地研究不同止損距離對策略表現的影響,找到在多個評估維度上表現均衡的引數區間。 這篇文章講這個研究過程的方法論,包括資料準備、引數搜尋、評估指標、以及防止過擬合的注意事項。 研究框架 1. 資料準備 ├─ 選取歷史資料區間(訓練集) └─ 準備價格序列和訊號序列 2. 引數網格搜尋 ├─ 定義止損引數範圍(如 0.5% - 5%,步長 0.1%) └─ 對每個引數值跑完整回測 3. 評估指標計算 ├─ 總收益率 ├─ 最大回撤 ├─ 夏普比率 ├─ 勝率 × 盈虧比 └─ 止損觸發率 4. 結果分析 ├─ 繪製引數敏感性曲線 ├─ 找穩健區間(小變化 → 小影響) └─ 在驗證集上驗證 5. 確定最終引數 資料準備 import pandas as pd import numpy as np from binance.client import Client def get_klines(symbol: str, interval: str, start: str, end: str) -> pd.DataFrame: """獲取 Binance K 線資料""" client = Client() # 公開資料不需要 API 金鑰 klines = client.get_historical_klines(symbol, interval, start, end) df = pd.DataFrame(klines, columns=[ 'timestamp', 'open', 'high', 'low', 'close', 'volume', 'close_time', 'quote_vol', 'trades', 'taker_buy_base', 'taker_buy_quote', 'ignore' ]) for col in ['open', 'high', 'low', 'close', 'volume']: df[col] = df[col].astype(float) df['timestamp'] = pd.to_datetime(df['timestamp'], unit='ms') df.set_index('timestamp', inplace=True) return df # 獲取資料:分成訓練集和驗證集(時間序列不能隨機分割!) df_train = get_klines("BTCUSDT", "4h", "2023-01-01", "2024-06-30") # 訓練集 df_val = get_klines("BTCUSDT", "4h", "2024-07-01", "2024-12-31") # 驗證集 為什麼不能隨機分割? ...

2026-04-15 · 4 min · 660 words · 磐石

Binance 合約交易風控體系:倉位管理、止損設定、熔斷機制

💡 國內提示:Binance 官網在中國大陸無法直連,訪問需自備網路工具;法幣入金不支援銀行卡,主要走 C2C(USDT↔CNY)通道完成。 合約交易裡,盈利策略和虧損策略的區別,很多時候不是訊號對不對,而是風控做沒做。 一個好的入場訊號配上差的風控,會在一次大波動裡把所有收益吐回去。這篇文章專門講合約風控的框架:你需要在哪些層次做控制,每層具體怎麼設定。 三個層次的風控 層次 1:倉位管理 — 每次開多大的倉 層次 2:止損設定 — 單筆交易最多虧多少 層次 3:熔斷機制 — 連續虧損後強制暫停 這三層缺一不可。倉位管理控制單次風險暴露,止損控制單筆最大損失,熔斷防止在策略失效時持續虧損。 層次 1:倉位管理 固定比例法(推薦) 每次開倉金額 = 賬戶總權益 × 固定比例 def calc_position_size(equity: float, risk_pct: float, leverage: int, entry_price: float) -> float: """ equity: 賬戶總權益(USDT) risk_pct: 單次風險比例,如 0.02 = 2% leverage: 槓桿倍數 entry_price: 開倉價格 返回: 合約張數(BTCUSDT 每張 = 0.001 BTC) """ risk_amount = equity * risk_pct # 實際願意虧的金額 notional = risk_amount * leverage # 對應名義價值 qty = notional / entry_price return qty 為什麼用固定比例而不是固定金額? ...

2026-04-15 · 3 min · 633 words · 磐石

量化策略止損怎麼設:從北極星策略出發講通用止損設計

止損是量化策略裡最容易被忽視、也最容易出問題的模組。很多新手策略回測看起來不錯,實盤一跑就崩,往往根源在止損設計有問題:要麼止損太寬導致單次虧損過大,要麼止損太緊被市場噪音訊繁觸發。 這篇文章從 北極星策略 的實際設計出發,講通用的止損設計思路。 為什麼需要止損 止損本質上是承認錯誤的機制。趨勢跟蹤策略的邏輯是:大多數時候市場沒有趨勢,策略會小虧;少數時候有趨勢,策略要大賺,用大賺覆蓋小虧。 如果沒有止損,那次"大虧"有可能把賬戶打穿,後面的大賺機會都沒了。 數學上,止損控制的是單次最大虧損,進而控制最大回撤: 最大回撤 ≈ f(止損比例, 連續虧損次數, 勝率) 策略在某段時間內 5 連敗是很正常的,如果每次虧 10%,5 連敗後賬戶還剩 59%;如果每次虧 3%,5 連敗後還剩 85%,差距非常大。 止損型別 1. 固定百分比止損 最簡單的方式:入場後虧損超過固定比例就出場。 # 入場價 40000,止損 3% entry_price = 40000 stop_loss_pct = 0.03 stop_price_long = entry_price * (1 - stop_loss_pct) # 做多止損:38800 stop_price_short = entry_price * (1 + stop_loss_pct) # 做空止損:41200 優點: 簡單、可計算、風險固定 缺點: 忽略了市場的波動率,BTC 平時日內波動可能就有 3%,容易被噪音觸發 適用場景: 高時間週期(日線以上),或者已經驗證止損比例遠大於平均波動 2. ATR 動態止損(推薦) ATR(Average True Range,平均真實波幅)衡量的是市場最近的波動率。用 ATR 倍數設止損,波動大的時候止損寬,波動小的時候止損窄,更貼近市場實際。 import pandas as pd def calculate_atr(df, period=14): """計算 ATR""" high = df['high'] low = df['low'] close = df['close'] tr1 = high - low tr2 = abs(high - close.shift(1)) tr3 = abs(low - close.shift(1)) true_range = pd.concat([tr1, tr2, tr3], axis=1).max(axis=1) atr = true_range.rolling(period).mean() return atr def get_stop_price(entry_price, atr_value, direction, multiplier=2.0): """基於 ATR 的止損價""" if direction == 'long': return entry_price - atr_value * multiplier else: return entry_price + atr_value * multiplier # 示例:BTC 1H,ATR=1200,入場 40000,做多 # 止損 = 40000 - 1200 * 2 = 37600(-6%) ATR 倍數選擇: ...

2026-04-10 · 3 min · 468 words · 磐石