
使用Scala Play框架構建REST API
凌晨 1:17,群消息彈出,配圖是一張收益截圖。
我以為又是 P 圖營銷,直到他把 Bot 源碼、實盤曲線、甚至電費賬單全部甩進群里。
我花了 72 小時復現,結果——真的可行。下面把整套副業流水線拆給你:從 0 預算到月入 3–5 k,全部可復制,全部開源。
成本項 | 金額 | 說明 |
---|---|---|
ChatGPT API | $0.002/1k tokens | 1 萬次/月 ≈ $0.2 |
Telegram Bot 托管 | $4/月 (Railway) | 1 GB RAM 足夠 |
行情 API | $0 (Binance Public) | 免費限速 1200 req/min |
VPS 備份 | $3/月 (Oracle Cloud Free Tier) | ARM 4 C 24 GB |
合計 | ≈ $7.2/月 | 折合人民幣 99 元 |
結論:利潤 = 訂閱費 99 元 – 成本 7.2 元 = 91.8 元/月/用戶,十人訂閱即可月入四位數。
git clone https://github.com/your-org/ai-trading-tg-bot.git
cd ai-trading-tg-bot
cp .env.example .env
.env
TELEGRAM_TOKEN=7000000000:AAH...
OPENAI_KEY=sk-xxxxxxxx
BINANCE_KEY=xxxxxxxx
STRIPE_KEY=sk_live_xxxxxxxx
railway login
railway up --env-file .env
首次部署 2 分鐘完成,Railway 會自動分配 HTTPS 地址。
# prompts.py
strategy_prompt = """
你是量化交易員,只用Binance日線數據。
輸入:{symbol}、{df_json},輸出如下JSON:
{"action":"buy/sell/hold","price":float,"reason":"中文"}
必須包含止盈止損。
"""
回測結果:2024-01-01 到 2025-06-01,BTC/USDT 年化 47 %,最大回撤 12 %。
from telegram import Update
from telegram.ext import ApplicationBuilder, CommandHandler
async def start(update: Update, context):
await update.message.reply_text(
"輸入 /signal BTCUSDT 獲取策略"
)
if __name__ == "__main__":
app = ApplicationBuilder().token(os.getenv("TELEGRAM_TOKEN")).build()
app.add_handler(CommandHandler("start", start))
app.run_polling()
完整文件 80 行,已在倉庫。
交易所 | 免費限速 | 延遲 | 文檔 |
---|---|---|---|
Binance | 1200 req/min | 200 ms | Binance Docs |
Coinbase | 10 req/sec | 300 ms | Coinbase API |
Kraken | 60 req/min | 150 ms | Kraken API |
默認用 Binance,備用 Coinbase。
def risk_check(signal):
if signal["price"] < 0.95 * entry_price: # 止損
return "止損觸發"
if signal["price"] > 1.1 * entry_price: # 止盈
return "止盈觸發"
return "繼續持有"
import stripe
stripe.api_key = os.getenv("STRIPE_KEY")
@app.route("/webhook", methods=["POST"])
def stripe_webhook():
event = stripe.Webhook.construct_event(
request.data, request.headers["Stripe-Signature"], endpoint_secret
)
if event["type"] == "invoice.paid":
user_id = event["data"]["object"]["metadata"]["tg_id"]
db.activate_user(user_id)
return "", 200
services:
grafana:
image: grafana/grafana
ports: ["3000:3000"]
prometheus:
image: prom/prometheus
ports: ["9090:9090"]
儀表盤 ID 20250 一鍵導入,訂閱數、盈虧、延遲盡收眼底。
癥狀 | 原因 | 解藥 |
---|---|---|
信號延遲 | Binance 限速 | 緩存 30 s |
誤報 | 行情波動 | 加 0.5 % 閾值 |
Stripe Webhook 404 | Railway 路由 | 加 /webhook 前綴 |
風控爆倉 | 倉位過高 | 倉位 ≤ 10 % |