2025-12-29 03:06:49 +08:00
|
|
|
# QuantDinger local configuration (copy to `.env` and edit)
|
|
|
|
|
# `run.py` will load `backend_api_python/.env` automatically if present.
|
2026-03-21 18:32:04 +08:00
|
|
|
#
|
|
|
|
|
# This file is organized as:
|
|
|
|
|
# 1) first-time deployment settings at the top
|
|
|
|
|
# 2) advanced / rarely changed settings at the bottom
|
|
|
|
|
# For Docker image source / ports, use the project-root `.env`.
|
2025-12-29 03:06:49 +08:00
|
|
|
|
|
|
|
|
# =========================
|
2026-03-21 18:32:04 +08:00
|
|
|
# Auth (required)
|
2025-12-29 03:06:49 +08:00
|
|
|
# =========================
|
2026-03-24 19:10:18 +08:00
|
|
|
# Also derives Fernet key for encrypting qd_exchange_credentials.encrypted_config (do not rotate casually).
|
2025-12-29 03:06:49 +08:00
|
|
|
SECRET_KEY=quantdinger-secret-key-change-me
|
|
|
|
|
ADMIN_USER=quantdinger
|
|
|
|
|
ADMIN_PASSWORD=123456
|
2026-01-14 21:41:40 +08:00
|
|
|
ADMIN_EMAIL=
|
2025-12-29 03:06:49 +08:00
|
|
|
|
2026-01-14 05:29:55 +08:00
|
|
|
# =========================
|
2026-03-21 18:32:04 +08:00
|
|
|
# Core app
|
2026-01-14 05:29:55 +08:00
|
|
|
# =========================
|
2026-03-21 18:32:04 +08:00
|
|
|
DATABASE_URL=postgresql://quantdinger:quantdinger123@postgres:5432/quantdinger
|
|
|
|
|
FRONTEND_URL=http://localhost:8888
|
|
|
|
|
ENABLE_REGISTRATION=true
|
2026-01-14 05:29:55 +08:00
|
|
|
|
2025-12-29 03:06:49 +08:00
|
|
|
# =========================
|
2026-03-21 18:32:04 +08:00
|
|
|
# AI / LLM (choose one provider)
|
2025-12-29 03:06:49 +08:00
|
|
|
# =========================
|
2026-03-21 18:32:04 +08:00
|
|
|
LLM_PROVIDER=openrouter
|
2025-12-29 03:06:49 +08:00
|
|
|
|
2026-03-21 18:32:04 +08:00
|
|
|
OPENROUTER_API_KEY=
|
|
|
|
|
OPENROUTER_MODEL=openai/gpt-4o
|
2026-03-24 19:10:18 +08:00
|
|
|
# Optional: dedicated model for AI code generation (fallback to provider default if empty)
|
|
|
|
|
AI_CODE_GEN_MODEL=
|
2025-12-30 21:02:38 +08:00
|
|
|
|
2026-03-21 18:32:04 +08:00
|
|
|
OPENAI_API_KEY=
|
|
|
|
|
OPENAI_MODEL=gpt-4o
|
2025-12-29 03:06:49 +08:00
|
|
|
|
2026-03-21 18:32:04 +08:00
|
|
|
GOOGLE_API_KEY=
|
|
|
|
|
GOOGLE_MODEL=gemini-1.5-flash
|
2026-01-12 22:36:10 +08:00
|
|
|
|
2026-03-21 18:32:04 +08:00
|
|
|
DEEPSEEK_API_KEY=
|
|
|
|
|
DEEPSEEK_MODEL=deepseek-chat
|
|
|
|
|
|
|
|
|
|
GROK_API_KEY=
|
|
|
|
|
GROK_MODEL=grok-beta
|
2025-12-29 03:06:49 +08:00
|
|
|
|
|
|
|
|
# =========================
|
2026-03-21 18:32:04 +08:00
|
|
|
# Common background jobs
|
2026-01-12 00:15:52 +08:00
|
|
|
# =========================
|
2026-03-21 18:32:04 +08:00
|
|
|
ENABLE_PENDING_ORDER_WORKER=true
|
|
|
|
|
ENABLE_PORTFOLIO_MONITOR=true
|
|
|
|
|
DISABLE_RESTORE_RUNNING_STRATEGIES=false
|
2026-01-12 00:15:52 +08:00
|
|
|
|
|
|
|
|
# =========================
|
2026-03-21 18:32:04 +08:00
|
|
|
# Email / SMTP (optional)
|
2025-12-29 03:06:49 +08:00
|
|
|
# =========================
|
|
|
|
|
SMTP_HOST=
|
|
|
|
|
SMTP_PORT=587
|
|
|
|
|
SMTP_USER=
|
|
|
|
|
SMTP_PASSWORD=
|
|
|
|
|
SMTP_FROM=
|
|
|
|
|
SMTP_USE_TLS=true
|
|
|
|
|
SMTP_USE_SSL=false
|
|
|
|
|
|
|
|
|
|
# =========================
|
2026-03-21 18:32:04 +08:00
|
|
|
# Proxy (optional)
|
2025-12-29 03:06:49 +08:00
|
|
|
# =========================
|
2026-03-23 23:01:04 +08:00
|
|
|
# PROXY_URL=socks5h://127.0.0.1:10808 # local
|
|
|
|
|
# PROXY_URL=socks5h://host.docker.internal:10808 # Docker
|
2026-03-21 18:32:04 +08:00
|
|
|
PROXY_URL=
|
2025-12-29 03:06:49 +08:00
|
|
|
|
2026-04-07 22:47:07 +08:00
|
|
|
# Outbound HTTPS to exchanges when using PROXY_URL (especially SOCKS). If you see
|
|
|
|
|
# SSLCertVerificationError / "unable to get local issuer certificate":
|
|
|
|
|
# - Prefer: install OS ca-certificates in the image, or point to a PEM bundle:
|
|
|
|
|
# LIVE_TRADING_CA_BUNDLE=/path/to/ca-bundle.pem
|
|
|
|
|
# (REQUESTS_CA_BUNDLE / SSL_CERT_FILE are also honored.)
|
|
|
|
|
# - Last resort only: LIVE_TRADING_SSL_VERIFY=false # disables TLS verify — insecure
|
|
|
|
|
#LIVE_TRADING_CA_BUNDLE=
|
|
|
|
|
#LIVE_TRADING_SSL_VERIFY=
|
|
|
|
|
|
2025-12-29 03:06:49 +08:00
|
|
|
# =========================
|
2026-03-21 18:32:04 +08:00
|
|
|
# Captcha / OAuth (optional)
|
2025-12-29 03:06:49 +08:00
|
|
|
# =========================
|
2026-03-21 18:32:04 +08:00
|
|
|
TURNSTILE_SITE_KEY=
|
|
|
|
|
TURNSTILE_SECRET_KEY=
|
2025-12-29 03:06:49 +08:00
|
|
|
|
2026-03-21 18:32:04 +08:00
|
|
|
GOOGLE_CLIENT_ID=
|
|
|
|
|
GOOGLE_CLIENT_SECRET=
|
|
|
|
|
GOOGLE_REDIRECT_URI=http://localhost:5000/api/auth/oauth/google/callback
|
2025-12-29 03:06:49 +08:00
|
|
|
|
2026-03-21 18:32:04 +08:00
|
|
|
GITHUB_CLIENT_ID=
|
|
|
|
|
GITHUB_CLIENT_SECRET=
|
|
|
|
|
GITHUB_REDIRECT_URI=http://localhost:5000/api/auth/oauth/github/callback
|
2025-12-29 03:06:49 +08:00
|
|
|
|
2025-12-30 21:02:38 +08:00
|
|
|
# =========================
|
2026-03-23 23:01:04 +08:00
|
|
|
# Billing / payments
|
2025-12-30 21:02:38 +08:00
|
|
|
# =========================
|
2026-03-23 23:01:04 +08:00
|
|
|
BILLING_ENABLED=false
|
|
|
|
|
|
2026-04-08 07:27:26 +07:00
|
|
|
# Credit unit cost
|
2026-03-23 23:01:04 +08:00
|
|
|
BILLING_COST_AI_ANALYSIS=10
|
|
|
|
|
BILLING_COST_AI_CODE_GEN=30
|
|
|
|
|
|
|
|
|
|
CREDITS_REGISTER_BONUS=100
|
|
|
|
|
CREDITS_REFERRAL_BONUS=50
|
|
|
|
|
|
|
|
|
|
# Membership plans
|
|
|
|
|
MEMBERSHIP_MONTHLY_PRICE_USD=19.9
|
|
|
|
|
MEMBERSHIP_YEARLY_PRICE_USD=199
|
|
|
|
|
MEMBERSHIP_LIFETIME_PRICE_USD=499
|
|
|
|
|
MEMBERSHIP_MONTHLY_CREDITS=500
|
|
|
|
|
MEMBERSHIP_YEARLY_CREDITS=8000
|
|
|
|
|
MEMBERSHIP_LIFETIME_MONTHLY_CREDITS=800
|
|
|
|
|
|
|
|
|
|
# USDT payment
|
|
|
|
|
USDT_PAY_ENABLED=false
|
|
|
|
|
USDT_PAY_CHAIN=TRC20
|
|
|
|
|
USDT_TRC20_XPUB=
|
|
|
|
|
USDT_TRC20_CONTRACT=TXLAQ63Xg1NAzckPwKHvzw7CSEmLMEqcdj
|
|
|
|
|
TRONGRID_BASE_URL=https://api.trongrid.io
|
|
|
|
|
TRONGRID_API_KEY=
|
|
|
|
|
USDT_PAY_CONFIRM_SECONDS=30
|
|
|
|
|
USDT_PAY_EXPIRE_MINUTES=30
|
|
|
|
|
USDT_WORKER_POLL_INTERVAL=30
|
2025-12-30 21:02:38 +08:00
|
|
|
|
2025-12-29 03:06:49 +08:00
|
|
|
# =========================
|
2026-03-21 18:32:04 +08:00
|
|
|
# Advanced / rarely changed
|
2026-01-24 03:22:14 +08:00
|
|
|
# =========================
|
|
|
|
|
|
2026-03-21 18:32:04 +08:00
|
|
|
# Network / App tuning
|
|
|
|
|
PYTHON_API_HOST=0.0.0.0
|
|
|
|
|
PYTHON_API_PORT=5000
|
2026-03-23 23:01:04 +08:00
|
|
|
PYTHON_API_DEBUG=false
|
2026-03-21 18:32:04 +08:00
|
|
|
RATE_LIMIT=100
|
2026-03-23 23:01:04 +08:00
|
|
|
ENABLE_CACHE=false
|
|
|
|
|
ENABLE_REQUEST_LOG=true
|
2026-03-21 18:32:04 +08:00
|
|
|
|
|
|
|
|
# Strategy / execution tuning
|
|
|
|
|
PENDING_ORDER_STALE_SEC=90
|
|
|
|
|
ORDER_MODE=market
|
|
|
|
|
MAKER_WAIT_SEC=10
|
|
|
|
|
MAKER_OFFSET_BPS=2
|
|
|
|
|
STRATEGY_TICK_INTERVAL_SEC=10
|
|
|
|
|
PRICE_CACHE_TTL_SEC=10
|
|
|
|
|
K_LINE_HISTORY_GET_NUMBER=500
|
2026-03-23 23:01:04 +08:00
|
|
|
SIGNAL_NOTIFY_TIMEOUT_SEC=6
|
2026-03-21 18:32:04 +08:00
|
|
|
|
|
|
|
|
# LLM advanced tuning
|
2025-12-29 03:06:49 +08:00
|
|
|
OPENROUTER_API_URL=https://openrouter.ai/api/v1/chat/completions
|
|
|
|
|
OPENROUTER_TEMPERATURE=0.7
|
|
|
|
|
OPENROUTER_MAX_TOKENS=4000
|
|
|
|
|
OPENROUTER_TIMEOUT=300
|
|
|
|
|
OPENROUTER_CONNECT_TIMEOUT=30
|
2026-01-24 03:22:14 +08:00
|
|
|
OPENAI_BASE_URL=https://api.openai.com/v1
|
|
|
|
|
DEEPSEEK_BASE_URL=https://api.deepseek.com/v1
|
|
|
|
|
GROK_BASE_URL=https://api.x.ai/v1
|
|
|
|
|
|
2026-03-21 18:32:04 +08:00
|
|
|
# Data sources
|
2025-12-29 03:06:49 +08:00
|
|
|
DATA_SOURCE_TIMEOUT=30
|
|
|
|
|
DATA_SOURCE_RETRY=3
|
|
|
|
|
DATA_SOURCE_RETRY_BACKOFF=0.5
|
|
|
|
|
FINNHUB_API_KEY=
|
|
|
|
|
FINNHUB_TIMEOUT=10
|
|
|
|
|
FINNHUB_RATE_LIMIT=60
|
2025-12-30 17:03:22 +08:00
|
|
|
CCXT_DEFAULT_EXCHANGE=coinbase
|
2025-12-29 03:06:49 +08:00
|
|
|
CCXT_TIMEOUT=10000
|
|
|
|
|
YFINANCE_TIMEOUT=30
|
|
|
|
|
TIINGO_API_KEY=
|
|
|
|
|
TIINGO_TIMEOUT=10
|
|
|
|
|
|
2026-03-23 23:01:04 +08:00
|
|
|
# AI search / news
|
2025-12-29 03:06:49 +08:00
|
|
|
SEARCH_PROVIDER=google
|
|
|
|
|
SEARCH_MAX_RESULTS=10
|
|
|
|
|
SEARCH_GOOGLE_API_KEY=
|
|
|
|
|
SEARCH_GOOGLE_CX=
|
|
|
|
|
SEARCH_BING_API_KEY=
|
2026-02-05 00:25:38 +08:00
|
|
|
TAVILY_API_KEYS=
|
|
|
|
|
SERPAPI_KEYS=
|
|
|
|
|
|
2026-03-23 23:01:04 +08:00
|
|
|
# SMS / phone (optional)
|
2026-03-21 18:32:04 +08:00
|
|
|
TWILIO_ACCOUNT_SID=
|
|
|
|
|
TWILIO_AUTH_TOKEN=
|
|
|
|
|
TWILIO_FROM_NUMBER=
|
2026-01-14 20:42:10 +08:00
|
|
|
|
2026-03-21 18:32:04 +08:00
|
|
|
# Security / verification tuning
|
2026-01-14 20:42:10 +08:00
|
|
|
SECURITY_IP_MAX_ATTEMPTS=10
|
|
|
|
|
SECURITY_IP_WINDOW_MINUTES=5
|
|
|
|
|
SECURITY_IP_BLOCK_MINUTES=15
|
|
|
|
|
SECURITY_ACCOUNT_MAX_ATTEMPTS=5
|
|
|
|
|
SECURITY_ACCOUNT_WINDOW_MINUTES=60
|
|
|
|
|
SECURITY_ACCOUNT_BLOCK_MINUTES=30
|
|
|
|
|
VERIFICATION_CODE_EXPIRE_MINUTES=10
|
|
|
|
|
VERIFICATION_CODE_RATE_LIMIT=60
|
|
|
|
|
VERIFICATION_CODE_IP_HOURLY_LIMIT=10
|
|
|
|
|
VERIFICATION_CODE_MAX_ATTEMPTS=5
|
|
|
|
|
VERIFICATION_CODE_LOCK_MINUTES=30
|
|
|
|
|
|
2026-03-23 23:01:04 +08:00
|
|
|
# AI analysis tuning
|
|
|
|
|
ENABLE_CONFIDENCE_CALIBRATION=false
|
|
|
|
|
ENABLE_AI_ENSEMBLE=false
|
|
|
|
|
AI_ENSEMBLE_MODELS=openai/gpt-4o,openai/gpt-4o-mini
|
|
|
|
|
ENABLE_REFLECTION_WORKER=false
|
|
|
|
|
REFLECTION_WORKER_INTERVAL_SEC=86400
|
|
|
|
|
REFLECTION_MIN_AGE_DAYS=7
|
|
|
|
|
REFLECTION_VALIDATE_LIMIT=200
|
|
|
|
|
AI_CALIBRATION_MARKETS=Crypto
|
|
|
|
|
AI_CALIBRATION_LOOKBACK_DAYS=30
|
|
|
|
|
AI_CALIBRATION_MIN_SAMPLES=80
|
|
|
|
|
AI_ANALYSIS_CONSENSUS_TIMEFRAMES=1D,4H
|
|
|
|
|
|
|
|
|
|
# Internal
|
|
|
|
|
INTERNAL_API_KEY=
|