diff --git a/README.md b/README.md index 518dc52..4f0708b 100644 --- a/README.md +++ b/README.md @@ -1,6 +1,9 @@ -# eth_hedge_sim +# 比特骆驼自动化对冲系统(eth_hedge_sim) -独立自动对冲**模拟盘**:OKX 实盘只读行情 + 本地虚拟资金撮合。 +**产品名:比特骆驼自动化对冲系统** +工程仓库 / 目录名:`eth_hedge_sim`(与产品名分离,部署路径不变)。 + +独立自动对冲系统:OKX / 币安行情 + 本地 SIM 撮合,可选 LIVE 实盘。 与现网 `crypto_monitor` **无代码、进程、密钥共用**。 仓库: @@ -11,12 +14,14 @@ - [代码结构](docs/代码结构.md) - [商业化与授权方案](docs/商业化与授权方案.md) - [策略说明](docs/策略说明.md) +- [实盘策略说明](docs/实盘策略说明.md) ## 访问(测试机) - 反代:[`https://dc.hyf2.cc`](https://dc.hyf2.cc) → 本机 `5155`(PM2: `eth-hedge-api`) -- 默认登录:见服务器 `/opt/eth_hedge_sim/.env` 的 `AUTH_USERNAME` / `AUTH_PASSWORD`(示例 `admin` / `admin123`) +- 登录账号:见服务器 `/opt/eth_hedge_sim/.env` 的 `AUTH_USERNAME` / `AUTH_PASSWORD` - 可在「系统设置」修改用户名/密码;前端固定同源 API,无 API 地址配置项 +- 支持电脑 / 平板安装为独立应用(PWA) ## 一键部署 / 更新(禁止 scp 传代码) diff --git a/backend/app/main.py b/backend/app/main.py index ed83f19..4c14fa3 100644 --- a/backend/app/main.py +++ b/backend/app/main.py @@ -73,9 +73,9 @@ async def lifespan(app: FastAPI): app = FastAPI( - title="eth_hedge_sim", + title="比特骆驼自动化对冲系统", version="0.3.0", - description="ETH 自动对冲模拟盘 P1/P2", + description="比特骆驼自动化对冲系统(eth_hedge_sim)", lifespan=lifespan, ) app.add_middleware( diff --git a/deploy/lib/common.sh b/deploy/lib/common.sh index b1cc1a8..dc752c0 100755 --- a/deploy/lib/common.sh +++ b/deploy/lib/common.sh @@ -1,155 +1,155 @@ -#!/usr/bin/env bash -# deploy/lib/common.sh — eth_hedge_sim 部署公共函数 -set -e -set -u -if [ -n "${BASH_VERSION:-}" ]; then - set -o pipefail -fi - -INSTALL_ROOT="${INSTALL_ROOT:-/opt/eth_hedge_sim}" -GIT_URL="${GIT_URL:-https://git.bz121.com/dekun/eth_hedge_sim.git}" -GIT_BRANCH="${GIT_BRANCH:-main}" -BACKUP_ROOT="${BACKUP_ROOT:-/root/backups/eth_hedge_sim}" -TZ_NAME="${EHS_TZ:-Asia/Shanghai}" -NODE_MAJOR="${NODE_MAJOR:-20}" -PM2_APP_NAME="${PM2_APP_NAME:-eth-hedge-api}" -API_PORT="${API_PORT:-5155}" - -LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -DEPLOY_DIR="$(cd "${LIB_DIR}/.." && pwd)" -REPO_ROOT="$(cd "${DEPLOY_DIR}/.." && pwd)" - -log() { printf '[%s] %s\n' "$(TZ="${TZ_NAME}" date '+%Y-%m-%d %H:%M:%S')" "$*"; } -step() { echo ""; log "==> $*"; } - -die() { - echo "错误: $*" >&2 - exit 1 -} - -require_root() { - if [[ "$(id -u)" -ne 0 ]]; then - die "请使用 root 执行(推荐: sudo -i 后运行)" - fi -} - -detect_server_ip() { - local ip="" - if command -v hostname >/dev/null 2>&1; then - ip="$(hostname -I 2>/dev/null | awk '{print $1}')" - fi - if [[ -z "${ip}" ]]; then - ip="127.0.0.1" - fi - echo "${ip}" -} - -# curl|bash 时 stdin 可能是管道,交互从 /dev/tty 读 -cm_read() { - local __var="$1" - local __prompt="${2:-}" - local __line="" - if [[ -n "${__prompt}" ]]; then - printf '%s' "${__prompt}" >/dev/tty 2>/dev/null || printf '%s' "${__prompt}" - fi - if [[ -r /dev/tty ]]; then - IFS= read -r __line /dev/null 2>&1; then - apt-get update -qq - apt-get install -y git ca-certificates curl python3 python3-venv python3-pip - fi - if ! command -v node >/dev/null 2>&1; then - step "安装 Node.js ${NODE_MAJOR}" - curl -fsSL "https://deb.nodesource.com/setup_${NODE_MAJOR}.x" | bash - - apt-get install -y nodejs - fi - if ! command -v pm2 >/dev/null 2>&1; then - step "安装 PM2" - npm install -g pm2 - fi -} - -pm2_stop_project() { - if command -v pm2 >/dev/null 2>&1; then - pm2 stop "${PM2_APP_NAME}" 2>/dev/null || true - fi -} - -pm2_delete_project() { - if command -v pm2 >/dev/null 2>&1; then - pm2 delete "${PM2_APP_NAME}" 2>/dev/null || true - pm2 save 2>/dev/null || true - fi -} - -pm2_save_startup() { - if command -v pm2 >/dev/null 2>&1; then - pm2 save 2>/dev/null || true - pm2 startup systemd -u root --hp /root 2>/dev/null || true - fi -} - -verify_health() { - local port="${1:-${API_PORT}}" - local url="http://127.0.0.1:${port}/health" - step "健康检查 ${url}" - local i - for i in 1 2 3 4 5 6 7 8 9 10; do - if curl -fsS "${url}" >/dev/null 2>&1; then - log "health OK" - curl -fsS "${url}" || true - echo "" - return 0 - fi - sleep 1 - done - log "警告: health 暂未就绪,请稍后检查 pm2 logs ${PM2_APP_NAME}" - return 1 -} - -print_post_install_guide() { - local ip - ip="$(detect_server_ip)" - echo "" - echo "══════════════════════════════════════" - echo " eth_hedge_sim 部署完成" - echo " 目录: ${INSTALL_ROOT}" - echo " 本机: http://${ip}:${API_PORT}/health" - echo " 进程: pm2 status → ${PM2_APP_NAME}" - echo " 管理: bash ${INSTALL_ROOT}/deploy/manage.sh" - echo " 配置: ${INSTALL_ROOT}/.env" - echo "══════════════════════════════════════" - echo "" -} +#!/usr/bin/env bash +# deploy/lib/common.sh — 比特骆驼自动化对冲系统 部署公共函数 +set -e +set -u +if [ -n "${BASH_VERSION:-}" ]; then + set -o pipefail +fi + +INSTALL_ROOT="${INSTALL_ROOT:-/opt/eth_hedge_sim}" +GIT_URL="${GIT_URL:-https://git.bz121.com/dekun/eth_hedge_sim.git}" +GIT_BRANCH="${GIT_BRANCH:-main}" +BACKUP_ROOT="${BACKUP_ROOT:-/root/backups/eth_hedge_sim}" +TZ_NAME="${EHS_TZ:-Asia/Shanghai}" +NODE_MAJOR="${NODE_MAJOR:-20}" +PM2_APP_NAME="${PM2_APP_NAME:-eth-hedge-api}" +API_PORT="${API_PORT:-5155}" + +LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +DEPLOY_DIR="$(cd "${LIB_DIR}/.." && pwd)" +REPO_ROOT="$(cd "${DEPLOY_DIR}/.." && pwd)" + +log() { printf '[%s] %s\n' "$(TZ="${TZ_NAME}" date '+%Y-%m-%d %H:%M:%S')" "$*"; } +step() { echo ""; log "==> $*"; } + +die() { + echo "错误: $*" >&2 + exit 1 +} + +require_root() { + if [[ "$(id -u)" -ne 0 ]]; then + die "请使用 root 执行(推荐: sudo -i 后运行)" + fi +} + +detect_server_ip() { + local ip="" + if command -v hostname >/dev/null 2>&1; then + ip="$(hostname -I 2>/dev/null | awk '{print $1}')" + fi + if [[ -z "${ip}" ]]; then + ip="127.0.0.1" + fi + echo "${ip}" +} + +# curl|bash 时 stdin 可能是管道,交互从 /dev/tty 读 +cm_read() { + local __var="$1" + local __prompt="${2:-}" + local __line="" + if [[ -n "${__prompt}" ]]; then + printf '%s' "${__prompt}" >/dev/tty 2>/dev/null || printf '%s' "${__prompt}" + fi + if [[ -r /dev/tty ]]; then + IFS= read -r __line /dev/null 2>&1; then + apt-get update -qq + apt-get install -y git ca-certificates curl python3 python3-venv python3-pip + fi + if ! command -v node >/dev/null 2>&1; then + step "安装 Node.js ${NODE_MAJOR}" + curl -fsSL "https://deb.nodesource.com/setup_${NODE_MAJOR}.x" | bash - + apt-get install -y nodejs + fi + if ! command -v pm2 >/dev/null 2>&1; then + step "安装 PM2" + npm install -g pm2 + fi +} + +pm2_stop_project() { + if command -v pm2 >/dev/null 2>&1; then + pm2 stop "${PM2_APP_NAME}" 2>/dev/null || true + fi +} + +pm2_delete_project() { + if command -v pm2 >/dev/null 2>&1; then + pm2 delete "${PM2_APP_NAME}" 2>/dev/null || true + pm2 save 2>/dev/null || true + fi +} + +pm2_save_startup() { + if command -v pm2 >/dev/null 2>&1; then + pm2 save 2>/dev/null || true + pm2 startup systemd -u root --hp /root 2>/dev/null || true + fi +} + +verify_health() { + local port="${1:-${API_PORT}}" + local url="http://127.0.0.1:${port}/health" + step "健康检查 ${url}" + local i + for i in 1 2 3 4 5 6 7 8 9 10; do + if curl -fsS "${url}" >/dev/null 2>&1; then + log "health OK" + curl -fsS "${url}" || true + echo "" + return 0 + fi + sleep 1 + done + log "警告: health 暂未就绪,请稍后检查 pm2 logs ${PM2_APP_NAME}" + return 1 +} + +print_post_install_guide() { + local ip + ip="$(detect_server_ip)" + echo "" + echo "══════════════════════════════════════" + echo " 比特骆驼自动化对冲系统 部署完成" + echo " 目录: ${INSTALL_ROOT}" + echo " 本机: http://${ip}:${API_PORT}/health" + echo " 进程: pm2 status → ${PM2_APP_NAME}" + echo " 管理: bash ${INSTALL_ROOT}/deploy/manage.sh" + echo " 配置: ${INSTALL_ROOT}/.env" + echo "══════════════════════════════════════" + echo "" +} diff --git a/deploy/lib/uninstall.sh b/deploy/lib/uninstall.sh index c5700a4..4603577 100755 --- a/deploy/lib/uninstall.sh +++ b/deploy/lib/uninstall.sh @@ -1,80 +1,80 @@ -#!/usr/bin/env bash -# deploy/lib/uninstall.sh — 一键卸载(仅本项目 PM2,不动其它进程) -set -e -set -u -if [ -n "${BASH_VERSION:-}" ]; then - set -o pipefail -fi - -LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -# shellcheck source=common.sh -source "${LIB_DIR}/common.sh" - -main_uninstall() { - require_root - - local root="" - if ! root="$(resolve_repo_root)"; then - if [[ -d "${INSTALL_ROOT}" ]]; then - root="${INSTALL_ROOT}" - else - die "未找到安装目录 ${INSTALL_ROOT}" - fi - fi - REPO_ROOT="${root}" - - echo "" - echo "将卸载 eth_hedge_sim:" - echo " - 停止并删除 PM2 进程: ${PM2_APP_NAME}" - echo " - 移走目录: ${INSTALL_ROOT}" - echo " - 备份 .env 到 ${BACKUP_ROOT}" - echo " - 不影响其它 PM2 应用" - echo "" - if ! confirm_yes "确认卸载?"; then - log "已取消卸载" - return 0 - fi - - local stamp backup_dir removed_dir - stamp="$(TZ="${TZ_NAME}" date +%Y%m%d-%H%M%S)" - backup_dir="${BACKUP_ROOT}/pre-uninstall-${stamp}" - removed_dir="${INSTALL_ROOT}.removed.${stamp}" - mkdir -p "${backup_dir}" - - step "备份配置" - if [[ -f "${REPO_ROOT}/.env" ]]; then - cp -a "${REPO_ROOT}/.env" "${backup_dir}/.env" - fi - if [[ -d "${REPO_ROOT}/backend/data" ]]; then - cp -a "${REPO_ROOT}/backend/data" "${backup_dir}/data" 2>/dev/null || true - fi - { - echo "created_at=${stamp}" - echo "install_root=${INSTALL_ROOT}" - echo "removed_dir=${removed_dir}" - echo "pm2_app=${PM2_APP_NAME}" - } >"${backup_dir}/uninstall.manifest" - - step "停止并移除 PM2 进程 ${PM2_APP_NAME}" - pm2_stop_project - pm2_delete_project - - step "移走安装目录" - if [[ -d "${INSTALL_ROOT}" ]]; then - mv "${INSTALL_ROOT}" "${removed_dir}" - log "已移动: ${INSTALL_ROOT} -> ${removed_dir}" - else - log "安装目录不存在,跳过" - fi - - echo "" - echo "卸载完成." - echo " 配置备份: ${backup_dir}" - echo " 旧目录: ${removed_dir} (确认无误后可手动 rm -rf)" - echo "" - echo "回滚示例:" - echo " mv ${removed_dir} ${INSTALL_ROOT}" - echo " bash ${INSTALL_ROOT}/deploy/manage.sh # 选 1 修复环境" -} - -main_uninstall "$@" +#!/usr/bin/env bash +# deploy/lib/uninstall.sh — 一键卸载(仅本项目 PM2,不动其它进程) +set -e +set -u +if [ -n "${BASH_VERSION:-}" ]; then + set -o pipefail +fi + +LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +# shellcheck source=common.sh +source "${LIB_DIR}/common.sh" + +main_uninstall() { + require_root + + local root="" + if ! root="$(resolve_repo_root)"; then + if [[ -d "${INSTALL_ROOT}" ]]; then + root="${INSTALL_ROOT}" + else + die "未找到安装目录 ${INSTALL_ROOT}" + fi + fi + REPO_ROOT="${root}" + + echo "" + echo "将卸载 比特骆驼自动化对冲系统 (eth_hedge_sim):" + echo " - 停止并删除 PM2 进程: ${PM2_APP_NAME}" + echo " - 移走目录: ${INSTALL_ROOT}" + echo " - 备份 .env 到 ${BACKUP_ROOT}" + echo " - 不影响其它 PM2 应用" + echo "" + if ! confirm_yes "确认卸载?"; then + log "已取消卸载" + return 0 + fi + + local stamp backup_dir removed_dir + stamp="$(TZ="${TZ_NAME}" date +%Y%m%d-%H%M%S)" + backup_dir="${BACKUP_ROOT}/pre-uninstall-${stamp}" + removed_dir="${INSTALL_ROOT}.removed.${stamp}" + mkdir -p "${backup_dir}" + + step "备份配置" + if [[ -f "${REPO_ROOT}/.env" ]]; then + cp -a "${REPO_ROOT}/.env" "${backup_dir}/.env" + fi + if [[ -d "${REPO_ROOT}/backend/data" ]]; then + cp -a "${REPO_ROOT}/backend/data" "${backup_dir}/data" 2>/dev/null || true + fi + { + echo "created_at=${stamp}" + echo "install_root=${INSTALL_ROOT}" + echo "removed_dir=${removed_dir}" + echo "pm2_app=${PM2_APP_NAME}" + } >"${backup_dir}/uninstall.manifest" + + step "停止并移除 PM2 进程 ${PM2_APP_NAME}" + pm2_stop_project + pm2_delete_project + + step "移走安装目录" + if [[ -d "${INSTALL_ROOT}" ]]; then + mv "${INSTALL_ROOT}" "${removed_dir}" + log "已移动: ${INSTALL_ROOT} -> ${removed_dir}" + else + log "安装目录不存在,跳过" + fi + + echo "" + echo "卸载完成." + echo " 配置备份: ${backup_dir}" + echo " 旧目录: ${removed_dir} (确认无误后可手动 rm -rf)" + echo "" + echo "回滚示例:" + echo " mv ${removed_dir} ${INSTALL_ROOT}" + echo " bash ${INSTALL_ROOT}/deploy/manage.sh # 选 1 修复环境" +} + +main_uninstall "$@" diff --git a/deploy/lib/update.sh b/deploy/lib/update.sh index 571e3d7..92c95c5 100755 --- a/deploy/lib/update.sh +++ b/deploy/lib/update.sh @@ -1,29 +1,29 @@ -#!/usr/bin/env bash -# deploy/lib/update.sh — 更新(仅 git pull,禁止 scp) -set -e -set -u -if [ -n "${BASH_VERSION:-}" ]; then - set -o pipefail -fi - -LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -# shellcheck source=common.sh -source "${LIB_DIR}/common.sh" - -main_update() { - require_root - if ! REPO_ROOT="$(resolve_repo_root)"; then - die "未找到安装目录 ${INSTALL_ROOT},请先执行「1) 一键部署」" - fi - if ! repo_ready "${REPO_ROOT}"; then - die "安装不完整,请先执行「1) 一键部署」" - fi - - step "更新 eth_hedge_sim (git pull + 构建 + pm2 reload)" - bash "${REPO_ROOT}/deploy/pull_and_restart.sh" - verify_health || true - echo "" - log "更新完成" -} - -main_update "$@" +#!/usr/bin/env bash +# deploy/lib/update.sh — 更新(仅 git pull,禁止 scp) +set -e +set -u +if [ -n "${BASH_VERSION:-}" ]; then + set -o pipefail +fi + +LIB_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" +# shellcheck source=common.sh +source "${LIB_DIR}/common.sh" + +main_update() { + require_root + if ! REPO_ROOT="$(resolve_repo_root)"; then + die "未找到安装目录 ${INSTALL_ROOT},请先执行「1) 一键部署」" + fi + if ! repo_ready "${REPO_ROOT}"; then + die "安装不完整,请先执行「1) 一键部署」" + fi + + step "更新 比特骆驼自动化对冲系统 (git pull + 构建 + pm2 reload)" + bash "${REPO_ROOT}/deploy/pull_and_restart.sh" + verify_health || true + echo "" + log "更新完成" +} + +main_update "$@" diff --git a/deploy/manage.sh b/deploy/manage.sh index 039fda4..8f81ca0 100755 --- a/deploy/manage.sh +++ b/deploy/manage.sh @@ -1,224 +1,224 @@ -#!/usr/bin/env bash -# eth_hedge_sim 部署管理器 — 一键部署 / 卸载 / 更新 -# -# 新服务器(免克隆): -# curl -fsSL https://git.bz121.com/dekun/eth_hedge_sim/raw/branch/main/deploy/manage.sh | bash -# -# 已安装: -# bash /opt/eth_hedge_sim/deploy/manage.sh -# -set -e -if [ -n "${BASH_VERSION:-}" ]; then - set -o pipefail -fi - -INSTALL_ROOT="${INSTALL_ROOT:-/opt/eth_hedge_sim}" -GIT_URL="${GIT_URL:-https://git.bz121.com/dekun/eth_hedge_sim.git}" -GIT_BRANCH="${GIT_BRANCH:-main}" - -# curl | bash 时脚本从 stdin 执行,BASH_SOURCE[0] 为空;须先安全探测再 set -u -_script_src="${BASH_SOURCE[0]:-}" -if [[ -n "${_script_src}" && -f "${_script_src}" ]]; then - DEPLOY_DIR="$(cd "$(dirname "${_script_src}")" && pwd)" - REPO_ROOT="$(cd "${DEPLOY_DIR}/.." && pwd)" - LIB_DIR="${DEPLOY_DIR}/lib" -else - DEPLOY_DIR="" - REPO_ROOT="" - LIB_DIR="" -fi -unset _script_src - -set -u - -repo_ready() { - [[ -f "${1}/deploy/manage.sh" && -f "${1}/deploy/pull_and_restart.sh" && -d "${1}/deploy/lib" ]] -} - -ensure_git_cli() { - if command -v git >/dev/null 2>&1; then - return 0 - fi - if command -v apt-get >/dev/null 2>&1; then - export DEBIAN_FRONTEND=noninteractive - apt-get update -qq - apt-get install -y git ca-certificates curl - else - echo "错误: 未找到 git" >&2 - exit 1 - fi -} - -sync_repo_if_present() { - local root="$1" - if [[ -d "${root}/.git" ]] && command -v git >/dev/null 2>&1; then - git -C "${root}" fetch --all --prune 2>/dev/null || true - git -C "${root}" checkout "${GIT_BRANCH}" 2>/dev/null || true - git -C "${root}" pull --ff-only origin "${GIT_BRANCH}" 2>/dev/null \ - || git -C "${root}" pull --ff-only 2>/dev/null \ - || true - fi -} - -# 旧目录已存在但缺 manage.sh:尽量 git pull / 修复后切到仓库内脚本 -heal_existing_install() { - local root="$1" - echo "检测到已有目录但缺少管理脚本: ${root}" - echo "尝试同步最新代码…" - ensure_git_cli - - if [[ -d "${root}/.git" ]]; then - sync_repo_if_present "${root}" - if repo_ready "${root}"; then - echo "同步成功,切换到仓库内 manage.sh" - exec bash "${root}/deploy/manage.sh" "$@" &2 - exit 1 - fi - heal_existing_install "${INSTALL_ROOT}" "$@" - fi - - echo "eth_hedge_sim 部署管理器 — 首次自举" - echo "将克隆到: ${INSTALL_ROOT}" - if [[ "$(id -u)" -ne 0 ]]; then - echo "错误: 请使用 root 执行" >&2 - exit 1 - fi - ensure_git_cli - mkdir -p "$(dirname "${INSTALL_ROOT}")" - git clone -b "${GIT_BRANCH}" "${GIT_URL}" "${INSTALL_ROOT}" - # clone 后用仓库内脚本 + 终端 stdin(管道已 EOF) - exec bash "${INSTALL_ROOT}/deploy/manage.sh" "$@" /dev/tty 2>/dev/null || printf '%s' "${__prompt}" - fi - if [[ -r /dev/tty ]]; then - IFS= read -r __line /dev/null 2>&1; then + return 0 + fi + if command -v apt-get >/dev/null 2>&1; then + export DEBIAN_FRONTEND=noninteractive + apt-get update -qq + apt-get install -y git ca-certificates curl + else + echo "错误: 未找到 git" >&2 + exit 1 + fi +} + +sync_repo_if_present() { + local root="$1" + if [[ -d "${root}/.git" ]] && command -v git >/dev/null 2>&1; then + git -C "${root}" fetch --all --prune 2>/dev/null || true + git -C "${root}" checkout "${GIT_BRANCH}" 2>/dev/null || true + git -C "${root}" pull --ff-only origin "${GIT_BRANCH}" 2>/dev/null \ + || git -C "${root}" pull --ff-only 2>/dev/null \ + || true + fi +} + +# 旧目录已存在但缺 manage.sh:尽量 git pull / 修复后切到仓库内脚本 +heal_existing_install() { + local root="$1" + echo "检测到已有目录但缺少管理脚本: ${root}" + echo "尝试同步最新代码…" + ensure_git_cli + + if [[ -d "${root}/.git" ]]; then + sync_repo_if_present "${root}" + if repo_ready "${root}"; then + echo "同步成功,切换到仓库内 manage.sh" + exec bash "${root}/deploy/manage.sh" "$@" &2 + exit 1 + fi + heal_existing_install "${INSTALL_ROOT}" "$@" + fi + + echo "比特骆驼自动化对冲系统 部署管理器 — 首次自举" + echo "将克隆到: ${INSTALL_ROOT}" + if [[ "$(id -u)" -ne 0 ]]; then + echo "错误: 请使用 root 执行" >&2 + exit 1 + fi + ensure_git_cli + mkdir -p "$(dirname "${INSTALL_ROOT}")" + git clone -b "${GIT_BRANCH}" "${GIT_URL}" "${INSTALL_ROOT}" + # clone 后用仓库内脚本 + 终端 stdin(管道已 EOF) + exec bash "${INSTALL_ROOT}/deploy/manage.sh" "$@" /dev/tty 2>/dev/null || printf '%s' "${__prompt}" + fi + if [[ -r /dev/tty ]]; then + IFS= read -r __line /dev/null 2>&1; then - echo "ERROR: npm not found. Install Node.js 18+ first (manage.sh 一键部署会自动装)." - exit 1 -fi - -( - cd "$ROOT/frontend" - if [[ -f package-lock.json ]]; then npm ci; else npm install; fi - npm run build -) - -if ! command -v pm2 >/dev/null 2>&1; then - npm install -g pm2 -fi - -# 仅 reload 本项目进程,禁止 pm2 restart all -pm2 startOrReload "$ROOT/deploy/ecosystem.config.cjs" --update-env -pm2 save - -echo "[eth_hedge_sim] done. health: http://127.0.0.1:5155/health" +#!/usr/bin/env bash +# 一键更新/部署:仅 git pull,禁止 scp 传代码。 +# 用法: +# bash /opt/eth_hedge_sim/deploy/pull_and_restart.sh +# 或通过 manage.sh 选 1/3 +set -euo pipefail + +ROOT="$(cd "$(dirname "$0")/.." && pwd)" +cd "$ROOT" + +echo "[比特骆驼] pull @ $ROOT" +if [[ -d "$ROOT/.git" ]]; then + git fetch --all --prune + git pull --ff-only +fi + +if [[ ! -f "$ROOT/.env" ]]; then + echo "[比特骆驼] missing .env — copy from example" + cp "$ROOT/.env.example" "$ROOT/.env" + # 云上测试机默认直连 OKX + sed -i 's/^OKX_HTTP_PROXY=.*/OKX_HTTP_PROXY=/' "$ROOT/.env" || true + sed -i 's/^API_PORT=.*/API_PORT=5155/' "$ROOT/.env" || true + sed -i 's/^ENV_NAME=.*/ENV_NAME=test/' "$ROOT/.env" || true + sed -i 's/^EXCHANGE=.*/EXCHANGE=okx/' "$ROOT/.env" || true + echo "[比特骆驼] wrote .env — please review AUTH_* secrets" +fi + +if [[ ! -d "$ROOT/.venv" ]]; then + python3 -m venv "$ROOT/.venv" +fi +# shellcheck disable=SC1091 +source "$ROOT/.venv/bin/activate" +pip install -U pip +pip install -r "$ROOT/requirements.txt" + +if ! command -v npm >/dev/null 2>&1; then + echo "ERROR: npm not found. Install Node.js 18+ first (manage.sh 一键部署会自动装)." + exit 1 +fi + +( + cd "$ROOT/frontend" + if [[ -f package-lock.json ]]; then npm ci; else npm install; fi + npm run build +) + +if ! command -v pm2 >/dev/null 2>&1; then + npm install -g pm2 +fi + +# 仅 reload 本项目进程,禁止 pm2 restart all +pm2 startOrReload "$ROOT/deploy/ecosystem.config.cjs" --update-env +pm2 save + +echo "[比特骆驼] done. health: http://127.0.0.1:5155/health" diff --git a/docs/OKX实盘策略说明.md b/docs/OKX实盘策略说明.md index ea76476..0561070 100644 --- a/docs/OKX实盘策略说明.md +++ b/docs/OKX实盘策略说明.md @@ -1,6 +1,6 @@ # OKX 实盘策略说明 -> 专用于 **OKX** LIVE。通用对冲逻辑见 [策略说明](./策略说明.md);币安见 [币安实盘策略说明](./币安实盘策略说明.md)。 +> 产品:**比特骆驼自动化对冲系统** · 专用于 **OKX** LIVE。通用对冲逻辑见 [策略说明](./策略说明.md);币安见 [币安实盘策略说明](./币安实盘策略说明.md)。 > **标准仓**:永续 **1 ETH** + 期权 **2 ETH** 名义(倍数 `k` 可缩放)。 > 更新:2026-07-26 diff --git a/docs/代码结构.md b/docs/代码结构.md index f1fa497..ec4cea6 100644 --- a/docs/代码结构.md +++ b/docs/代码结构.md @@ -1,283 +1,284 @@ -# eth_hedge_sim — 代码结构 - -> 本文描述目标仓库目录与模块职责。当前阶段以文档为准;业务代码按阶段逐步添加。 -> 可从 `crypto_monitor` **复制** 有用片段到本仓库后改造;**禁止修改** 现网仓库内文件。 - ---- - -## 1. 根目录总览 - -```text -eth_hedge_sim/ -├── README.md -├── .gitignore -├── .env.example # 无密钥的示例;真 .env 不上库 -├── package.json # 若前端/Node;或改用 Python 则 requirements.txt -├── requirements.txt # 后端若用 Python -├── docs/ -│ ├── 开发方案.md # 业务与部署方案(本文档姐妹篇) -│ └── 代码结构.md # 本文件 -├── deploy/ -│ ├── ecosystem.config.cjs # PM2:仅本项目进程 -│ └── pull_and_restart.sh # git pull + 构建 + pm2 reload(不碰现网) -├── backend/ # API + 行情 + 策略 + 本地撮合 -│ ├── app/ -│ │ ├── main.py # 或 index.ts:进程入口 -│ │ ├── config.py -│ │ ├── api/ # HTTP 路由 -│ │ ├── ws/ # 向前端推送 -│ │ ├── market/ # OKX 只读行情 -│ │ ├── strategy/ # 自动对冲状态机 -│ │ ├── sim/ # 本地撮合与账本 -│ │ ├── live/ # 实盘适配器(后期,默认关闭) -│ │ ├── models/ # DB 模型 / schema -│ │ └── services/ # 组、统计、设置等应用服务 -│ ├── data/ # 本地 SQLite 等(gitignore 数据文件) -│ └── tests/ -├── frontend/ # OKX 风格 Web -│ ├── index.html -│ ├── package.json -│ ├── src/ -│ │ ├── main.tsx -│ │ ├── App.tsx -│ │ ├── layouts/ # 导航壳 -│ │ ├── pages/ -│ │ │ ├── Plan.tsx # 自动对冲计划 -│ │ │ ├── Trades.tsx # 交易记录 -│ │ │ ├── Stats.tsx # 统计 -│ │ │ └── Settings.tsx # 系统设置 -│ │ ├── components/ # 盘口、组标识、持仓条等 -│ │ ├── api/ # 调后端 -│ │ └── styles/ # OKX 深色交易台风 -│ └── dist/ # 构建产物(可部署由 API 托管或 nginx) -└── scripts/ # 运维/一次性工具(可选) - └── smoke_market.py # 只读行情连通性检查 -``` - -技术栈可在开工时二选一(建议尽快定一种,避免双栈): - -- **推荐 A**:后端 Python(FastAPI)+ 前端 React/Vite(与现网 Python 生态接近,便于复制行情代码)。 -- **推荐 B**:全 Node(Nest/Express + React)。 - -下文按 **推荐 A** 描述模块;若选 B,目录名对应平移即可。 - ---- - -## 2. 后端模块职责 - -### 2.1 `backend/app/market/` — 行情(OKX 实盘只读) - -```text -market/ -├── okx_rest.py # 合约列表、到期、启动对齐 -├── okx_ws.py # 永续 + 期权盘口订阅 -├── instruments.py # 解析「次日 16:00」到期、ATM 行权价 -├── book_cache.py # 买一/卖一/深度内存缓存 -└── types.py # Quote / Depth 结构 -``` - -职责: - -- 只拉行情,**不调用交易接口**。 -- 对外提供:永续买卖一、Call/Put 买卖一与深度、标记价。 -- 可选:行情快照落盘,供 P4 回放。 - -可参考现网 OKX WS/REST 实现,复制后改成本模块 API。 - -### 2.2 `backend/app/sim/` — 本地模拟 - -```text -sim/ -├── matcher.py # 撮合:永续市价;期权吃买卖一;滑点=1×f;双边手续费 -├── ledger.py # 虚拟资金、占用、流水 -├── liquidity.py # 买一深度是否覆盖 2 ETH -└── pricing.py # 成交价公式(含 f) -``` - -成交价口径(与开发方案一致): - -| 腿 | 动作 | 基准 | 成交价 | -|----|------|------|--------| -| 永续 | 开多 / 平空 | 卖一 | 基准 × (1+f) | -| 永续 | 开空 / 平多 | 买一 | 基准 × (1-f) | -| 期权 | 买入 | 卖一 | 基准 × (1+f) | -| 期权 | 卖出 | 买一 | 基准 × (1-f) | - -另扣:`手续费 = 名义 × f`。 - -### 2.3 `backend/app/strategy/` — 自动对冲 - -```text -strategy/ -├── clock.py # 业务窗:D 16:00~D+1 08:00;次数≤3 -├── signal.py # Call 卖一 vs Put 卖一 → 方向 -├── exits.py # 权利金覆盖 / 30 点 -├── sizing.py # 永续 1 ETH、期权 2 ETH(写死) -├── group.py # 组 ID:G-YYYYMMDD-NN -└── engine.py # 状态机:空仓→开仓→盯盘→全平→下一组 -``` - -状态机要点: - -- 同时最多 1 组。 -- 平完才允许下一组;达 3 次或过 08:00 则停开。 -- 每组锁定 `initial_premium`。 - -### 2.4 `backend/app/live/` — 实盘(P5) - -```text -live/ -├── okx_trade.py # 永续市价单;期权吃一对应下单 -└── adapter.py # 与 sim.matcher 相同接口,便于切换 -``` - -默认关闭;仅 `MODE=LIVE` 且设置页确认后启用。 - -### 2.5 `backend/app/api/` + `ws/` - -```text -api/ -├── plan.py # 当前组、策略启停、紧急全平 -├── trades.py # 组列表、组成交明细 -├── stats.py # 汇总统计 -└── settings.py # 读写配置(脱敏) - -ws/ -└── push.py # market.snapshot / group.updated / fill.created / strategy.state -``` - -### 2.6 `backend/app/models/` — 数据 - -建议表: - -| 表 | 用途 | -|----|------| -| `groups` | 组头:方向、开平时间、初始权利金、平仓原因、盈亏 | -| `fills` | 成交:腿、价、量、滑点、手续费 | -| `positions` | 当前仓(最多一组两腿) | -| `ledger_entries` | 资金流水 | -| `settings` | 配置 KV | -| `market_ticks` | 可选行情快照 | - ---- - -## 3. 前端结构 - -```text -frontend/src/pages/ -├── Plan.tsx # 自动对冲计划(主盘) -├── Trades.tsx # 交易记录(按组) -├── Stats.tsx # 统计 -└── Settings.tsx # 系统设置 - -frontend/src/components/ -├── Nav.tsx # 四项导航 -├── GroupBadge.tsx # 组 ID + 状态色 -├── PerpOrderBook.tsx # 永续盘口 -├── OptionOrderBook.tsx # Call/Put;卖一选向高亮、买一平仓 -├── PositionBar.tsx # 1 ETH + 2 ETH、浮盈、触发进度 -└── EquityChart.tsx # 统计页曲线 -``` - -导航文案固定: - -1. 自动对冲计划 -2. 交易记录 -3. 统计 -4. 系统设置 - ---- - -## 4. 部署相关文件 - -### 4.1 `deploy/ecosystem.config.cjs`(示意) - -```js -module.exports = { - apps: [ - { - name: 'eth-hedge-api', - cwd: '/opt/eth_hedge_sim/backend', - script: 'uvicorn', - args: 'app.main:app --host 0.0.0.0 --port 8100', - interpreter: 'python3', - env: { MODE: 'SIM' }, - }, - // 若前端独立静态服务可再加 eth-hedge-web;也可由 nginx 指到 frontend/dist - ], -}; -``` - -### 4.2 `deploy/pull_and_restart.sh`(原则) - -- 仅 `cd /opt/eth_hedge_sim && git pull` -- 安装依赖 / `frontend` build -- `pm2 startOrReload deploy/ecosystem.config.cjs --update-env` -- **禁止** `pm2 restart all`,**禁止** 调用现网 `crypto_monitor` 的部署脚本 - ---- - -## 5. 进程与端口(建议,可改) - -| 服务 | 端口 | PM2 名 | -|------|------|--------| -| API + WS | `8100` | `eth-hedge-api` | -| 前端(若独立) | `8101` 或 nginx 反代 | `eth-hedge-web` | - -与现网端口、进程名全部错开。 - ---- - -## 6. 配置与密钥 - -```text -.env.example # 提交到 git -.env # 仅服务器 / 本机,gitignore -``` - -关键项: - -- `MODE=SIM|LIVE` -- `OKX_API_KEY / SECRET / PASSPHRASE`(SIM 阶段只读权限即可) -- `FEE_RATE`(滑点自动 = 1 × FEE_RATE) -- `INITIAL_EQUITY` -- `MAX_ROUNDS=3` -- `OPEN_HHMM=16:00` / `STOP_OPEN_HHMM=08:00` -- `TZ=Asia/Shanghai` - ---- - -## 7. 从现网复制代码时的规则 - -| 允许 | 禁止 | -|------|------| -| 复制 OKX 行情订阅、签名、深度解析到本仓库 | 修改 `C:\Users\dekun\Desktop\crypto_monitor` 下任何文件 | -| 复制「买一流动性检查」思路后重写 | 把本项目塞进现网 monorepo 一起 PM2 | -| 新建本仓库的 `.env` | 默认使用现网交易 Key 做模拟(模拟不需要交易权限) | - -复制后在本仓库内自由修改;现网保持原样。 - ---- - -## 8. 建议落地顺序(与开发方案分期对应) - -1. 建 git 远程 → clone 到本机该目录与服务器 `/opt/eth_hedge_sim` -2. P0:`market/` 通行情 -3. P1:`sim/` 手动开平 -4. P2:`strategy/` 自动化 -5. P3:`frontend/` 四页 -6. `deploy/` PM2 上独立机 -7. P5:`live/` 实盘开关 - ---- - -## 9. 当前仓库已有文件 - -```text -eth_hedge_sim/ -└── docs/ - ├── 开发方案.md - └── 代码结构.md -``` - -负责人创建远程仓库后,将本目录作为首批提交即可;业务代码按上表目录逐步添加。 +# 比特骆驼自动化对冲系统 — 代码结构 + +> **产品名**:比特骆驼自动化对冲系统 · **工程目录**:`eth_hedge_sim` +> 本文描述目标仓库目录与模块职责。当前阶段以文档为准;业务代码按阶段逐步添加。 +> 可从 `crypto_monitor` **复制** 有用片段到本仓库后改造;**禁止修改** 现网仓库内文件。 + +--- + +## 1. 根目录总览 + +```text +eth_hedge_sim/ # 产品:比特骆驼自动化对冲系统 +├── README.md +├── .gitignore +├── .env.example # 无密钥的示例;真 .env 不上库 +├── package.json # 若前端/Node;或改用 Python 则 requirements.txt +├── requirements.txt # 后端若用 Python +├── docs/ +│ ├── 开发方案.md # 业务与部署方案(本文档姐妹篇) +│ └── 代码结构.md # 本文件 +├── deploy/ +│ ├── ecosystem.config.cjs # PM2:仅本项目进程 +│ └── pull_and_restart.sh # git pull + 构建 + pm2 reload(不碰现网) +├── backend/ # API + 行情 + 策略 + 本地撮合 +│ ├── app/ +│ │ ├── main.py # 或 index.ts:进程入口 +│ │ ├── config.py +│ │ ├── api/ # HTTP 路由 +│ │ ├── ws/ # 向前端推送 +│ │ ├── market/ # OKX 只读行情 +│ │ ├── strategy/ # 自动对冲状态机 +│ │ ├── sim/ # 本地撮合与账本 +│ │ ├── live/ # 实盘适配器(后期,默认关闭) +│ │ ├── models/ # DB 模型 / schema +│ │ └── services/ # 组、统计、设置等应用服务 +│ ├── data/ # 本地 SQLite 等(gitignore 数据文件) +│ └── tests/ +├── frontend/ # Web 控制台(比特骆驼) +│ ├── index.html +│ ├── package.json +│ ├── src/ +│ │ ├── main.tsx +│ │ ├── App.tsx +│ │ ├── layouts/ # 导航壳 +│ │ ├── pages/ +│ │ │ ├── Plan.tsx # 自动对冲计划 +│ │ │ ├── Trades.tsx # 交易记录 +│ │ │ ├── Stats.tsx # 统计 +│ │ │ └── Settings.tsx # 系统设置 +│ │ ├── components/ # 盘口、组标识、持仓条等 +│ │ ├── api/ # 调后端 +│ │ └── styles/ # 深色交易台风 +│ └── dist/ # 构建产物(可部署由 API 托管或 nginx) +└── scripts/ # 运维/一次性工具(可选) + └── smoke_market.py # 只读行情连通性检查 +``` + +技术栈可在开工时二选一(建议尽快定一种,避免双栈): + +- **推荐 A**:后端 Python(FastAPI)+ 前端 React/Vite(与现网 Python 生态接近,便于复制行情代码)。 +- **推荐 B**:全 Node(Nest/Express + React)。 + +下文按 **推荐 A** 描述模块;若选 B,目录名对应平移即可。 + +--- + +## 2. 后端模块职责 + +### 2.1 `backend/app/market/` — 行情(OKX 实盘只读) + +```text +market/ +├── okx_rest.py # 合约列表、到期、启动对齐 +├── okx_ws.py # 永续 + 期权盘口订阅 +├── instruments.py # 解析「次日 16:00」到期、ATM 行权价 +├── book_cache.py # 买一/卖一/深度内存缓存 +└── types.py # Quote / Depth 结构 +``` + +职责: + +- 只拉行情,**不调用交易接口**。 +- 对外提供:永续买卖一、Call/Put 买卖一与深度、标记价。 +- 可选:行情快照落盘,供 P4 回放。 + +可参考现网 OKX WS/REST 实现,复制后改成本模块 API。 + +### 2.2 `backend/app/sim/` — 本地模拟 + +```text +sim/ +├── matcher.py # 撮合:永续市价;期权吃买卖一;滑点=1×f;双边手续费 +├── ledger.py # 虚拟资金、占用、流水 +├── liquidity.py # 买一深度是否覆盖 2 ETH +└── pricing.py # 成交价公式(含 f) +``` + +成交价口径(与开发方案一致): + +| 腿 | 动作 | 基准 | 成交价 | +|----|------|------|--------| +| 永续 | 开多 / 平空 | 卖一 | 基准 × (1+f) | +| 永续 | 开空 / 平多 | 买一 | 基准 × (1-f) | +| 期权 | 买入 | 卖一 | 基准 × (1+f) | +| 期权 | 卖出 | 买一 | 基准 × (1-f) | + +另扣:`手续费 = 名义 × f`。 + +### 2.3 `backend/app/strategy/` — 自动对冲 + +```text +strategy/ +├── clock.py # 业务窗:D 16:00~D+1 08:00;次数≤3 +├── signal.py # Call 卖一 vs Put 卖一 → 方向 +├── exits.py # 权利金覆盖 / 30 点 +├── sizing.py # 永续 1 ETH、期权 2 ETH(写死) +├── group.py # 组 ID:G-YYYYMMDD-NN +└── engine.py # 状态机:空仓→开仓→盯盘→全平→下一组 +``` + +状态机要点: + +- 同时最多 1 组。 +- 平完才允许下一组;达 3 次或过 08:00 则停开。 +- 每组锁定 `initial_premium`。 + +### 2.4 `backend/app/live/` — 实盘(P5) + +```text +live/ +├── okx_trade.py # 永续市价单;期权吃一对应下单 +└── adapter.py # 与 sim.matcher 相同接口,便于切换 +``` + +默认关闭;仅 `MODE=LIVE` 且设置页确认后启用。 + +### 2.5 `backend/app/api/` + `ws/` + +```text +api/ +├── plan.py # 当前组、策略启停、紧急全平 +├── trades.py # 组列表、组成交明细 +├── stats.py # 汇总统计 +└── settings.py # 读写配置(脱敏) + +ws/ +└── push.py # market.snapshot / group.updated / fill.created / strategy.state +``` + +### 2.6 `backend/app/models/` — 数据 + +建议表: + +| 表 | 用途 | +|----|------| +| `groups` | 组头:方向、开平时间、初始权利金、平仓原因、盈亏 | +| `fills` | 成交:腿、价、量、滑点、手续费 | +| `positions` | 当前仓(最多一组两腿) | +| `ledger_entries` | 资金流水 | +| `settings` | 配置 KV | +| `market_ticks` | 可选行情快照 | + +--- + +## 3. 前端结构 + +```text +frontend/src/pages/ +├── Plan.tsx # 自动对冲计划(主盘) +├── Trades.tsx # 交易记录(按组) +├── Stats.tsx # 统计 +└── Settings.tsx # 系统设置 + +frontend/src/components/ +├── Nav.tsx # 四项导航 +├── GroupBadge.tsx # 组 ID + 状态色 +├── PerpOrderBook.tsx # 永续盘口 +├── OptionOrderBook.tsx # Call/Put;卖一选向高亮、买一平仓 +├── PositionBar.tsx # 1 ETH + 2 ETH、浮盈、触发进度 +└── EquityChart.tsx # 统计页曲线 +``` + +导航文案固定: + +1. 自动对冲计划 +2. 交易记录 +3. 统计 +4. 系统设置 + +--- + +## 4. 部署相关文件 + +### 4.1 `deploy/ecosystem.config.cjs`(示意) + +```js +module.exports = { + apps: [ + { + name: 'eth-hedge-api', + cwd: '/opt/eth_hedge_sim/backend', + script: 'uvicorn', + args: 'app.main:app --host 0.0.0.0 --port 8100', + interpreter: 'python3', + env: { MODE: 'SIM' }, + }, + // 若前端独立静态服务可再加 eth-hedge-web;也可由 nginx 指到 frontend/dist + ], +}; +``` + +### 4.2 `deploy/pull_and_restart.sh`(原则) + +- 仅 `cd /opt/eth_hedge_sim && git pull` +- 安装依赖 / `frontend` build +- `pm2 startOrReload deploy/ecosystem.config.cjs --update-env` +- **禁止** `pm2 restart all`,**禁止** 调用现网 `crypto_monitor` 的部署脚本 + +--- + +## 5. 进程与端口(建议,可改) + +| 服务 | 端口 | PM2 名 | +|------|------|--------| +| API + WS | `8100` | `eth-hedge-api` | +| 前端(若独立) | `8101` 或 nginx 反代 | `eth-hedge-web` | + +与现网端口、进程名全部错开。 + +--- + +## 6. 配置与密钥 + +```text +.env.example # 提交到 git +.env # 仅服务器 / 本机,gitignore +``` + +关键项: + +- `MODE=SIM|LIVE` +- `OKX_API_KEY / SECRET / PASSPHRASE`(SIM 阶段只读权限即可) +- `FEE_RATE`(滑点自动 = 1 × FEE_RATE) +- `INITIAL_EQUITY` +- `MAX_ROUNDS=3` +- `OPEN_HHMM=16:00` / `STOP_OPEN_HHMM=08:00` +- `TZ=Asia/Shanghai` + +--- + +## 7. 从现网复制代码时的规则 + +| 允许 | 禁止 | +|------|------| +| 复制 OKX 行情订阅、签名、深度解析到本仓库 | 修改 `C:\Users\dekun\Desktop\crypto_monitor` 下任何文件 | +| 复制「买一流动性检查」思路后重写 | 把本项目塞进现网 monorepo 一起 PM2 | +| 新建本仓库的 `.env` | 默认使用现网交易 Key 做模拟(模拟不需要交易权限) | + +复制后在本仓库内自由修改;现网保持原样。 + +--- + +## 8. 建议落地顺序(与开发方案分期对应) + +1. 建 git 远程 → clone 到本机该目录与服务器 `/opt/eth_hedge_sim` +2. P0:`market/` 通行情 +3. P1:`sim/` 手动开平 +4. P2:`strategy/` 自动化 +5. P3:`frontend/` 四页 +6. `deploy/` PM2 上独立机 +7. P5:`live/` 实盘开关 + +--- + +## 9. 当前仓库已有文件 + +```text +eth_hedge_sim/ +└── docs/ + ├── 开发方案.md + └── 代码结构.md +``` + +负责人创建远程仓库后,将本目录作为首批提交即可;业务代码按上表目录逐步添加。 diff --git a/docs/商业化与授权方案.md b/docs/商业化与授权方案.md index dc19d12..a3b9bc1 100644 --- a/docs/商业化与授权方案.md +++ b/docs/商业化与授权方案.md @@ -1,5 +1,6 @@ -# eth_hedge_sim — 商业化与授权方案(初步) +# 比特骆驼自动化对冲系统 — 商业化与授权方案(初步) +> **产品名**:比特骆驼自动化对冲系统 · **工程**:`eth_hedge_sim` > 状态:草案,指导后续开发,细节可迭代。 > 商业模式结论:**客户侧部署 + 软件授权**(不做中心化多租户托管)。 > 关联文档:[开发方案](./开发方案.md)、[代码结构](./代码结构.md) @@ -12,6 +13,7 @@ | 项 | 约定 | |----|------| +| 产品名 | **比特骆驼自动化对冲系统** | | 产品形态 | 可独立部署的对冲交易系统(SIM + 可选实盘) | | 交付方式 | 安装包 / 一键脚本 / Docker(后续择一为主) | | 收费方式 | **授权(License)**:按实例、按期限、按功能档 | @@ -30,7 +32,7 @@ ### 1.3 产品定位一句话 -> 客户在自己的服务器上部署;API Key 不出客户环境;你提供软件、更新与授权。 +> **比特骆驼自动化对冲系统**:客户在自己的服务器上部署;API Key 不出客户环境;你提供软件、更新与授权。 --- diff --git a/docs/实盘策略说明.md b/docs/实盘策略说明.md index f0eacf4..27f92df 100644 --- a/docs/实盘策略说明.md +++ b/docs/实盘策略说明.md @@ -1,5 +1,6 @@ -# ETH 永续 + 期权对冲 · 实盘说明索引 +# 比特骆驼自动化对冲系统 · 实盘说明索引 +> 产品:**比特骆驼自动化对冲系统** > 通用规则见 [策略说明](./策略说明.md)。**开平仓、资金币种、API 按交易所分开写**,请直接打开对应文档。 > 更新:2026-07-26 diff --git a/docs/币安实盘策略说明.md b/docs/币安实盘策略说明.md index d3abfb0..ac77d68 100644 --- a/docs/币安实盘策略说明.md +++ b/docs/币安实盘策略说明.md @@ -1,6 +1,6 @@ # 币安实盘策略说明 -> 专用于 **币安** LIVE。通用对冲逻辑见 [策略说明](./策略说明.md);OKX 见 [OKX实盘策略说明](./OKX实盘策略说明.md)。 +> 产品:**比特骆驼自动化对冲系统** · 专用于 **币安** LIVE。通用对冲逻辑见 [策略说明](./策略说明.md);OKX 见 [OKX实盘策略说明](./OKX实盘策略说明.md)。 > **标准仓**:永续 **1 ETH** + 期权 **2 ETH** 名义(倍数 `k` 可缩放)。 > 更新:2026-07-26 diff --git a/docs/开发方案.md b/docs/开发方案.md index 3003820..a62c738 100644 --- a/docs/开发方案.md +++ b/docs/开发方案.md @@ -1,5 +1,7 @@ -# eth_hedge_sim — 自动对冲模拟盘开发方案 +# 比特骆驼自动化对冲系统 — 开发方案 +> **产品名**:比特骆驼自动化对冲系统 +> **工程名 / 目录**:`eth_hedge_sim` > 独立项目,与现网 `crypto_monitor` / `zk.hyf2.cc` **无部署、无进程、无密钥共用关系**。 > 可参考现有仓库的实现思路或复制片段到本仓库,但 **禁止修改** `crypto_monitor` 内任何文件。 > Git 仓库由负责人自行创建;本目录为本地工程骨架与文档。 @@ -10,7 +12,8 @@ | 项 | 约定 | |----|------| -| 项目名 / 目录名 | `eth_hedge_sim` | +| 产品名 | **比特骆驼自动化对冲系统** | +| 工程名 / 目录名 | `eth_hedge_sim` | | 本机路径 | `C:\Users\dekun\Desktop\新建文件夹\eth_hedge_sim` | | 云服务器 | **单独一台 Ubuntu**(或同机不同目录/不同 PM2 进程名,且与现网隔离) | | 部署 | PM2 | @@ -218,4 +221,4 @@ TZ=Asia/Shanghai ## 9. 一句话 -**独立仓 `eth_hedge_sim`:OKX 真行情只读 + 本地虚拟资金撮合(永续市价、期权只买吃买卖一、滑点=1×手续费)+ OKX 风四页前端 + Ubuntu/PM2 单独部署;可抄现网思路,但不改现网代码、不共用现网进程。** +**独立仓 `eth_hedge_sim`(产品:比特骆驼自动化对冲系统):OKX/币安真行情只读 + 本地虚拟资金撮合(永续市价、期权只买吃买卖一、滑点=1×手续费)+ 四页前端 + Ubuntu/PM2 单独部署;可抄现网思路,但不改现网代码、不共用现网进程。** diff --git a/docs/策略说明.md b/docs/策略说明.md index bf2ffe2..c073b09 100644 --- a/docs/策略说明.md +++ b/docs/策略说明.md @@ -1,5 +1,6 @@ -# ETH 永续 + 期权对冲策略说明 +# 比特骆驼自动化对冲系统 — 策略说明 +> 产品:**比特骆驼自动化对冲系统**(工程 `eth_hedge_sim`) > 依据当前代码逻辑整理(SIM 默认真值参数)。 > 关联:[开发方案](./开发方案.md)、[商业化与授权方案](./商业化与授权方案.md)、[实盘索引](./实盘策略说明.md)、[OKX实盘](./OKX实盘策略说明.md)、[币安实盘](./币安实盘策略说明.md) > 更新:2026-07-26 diff --git a/frontend/index.html b/frontend/index.html index 8d79815..04c1209 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -11,16 +11,16 @@ - - + + - OKX 自动化对冲系统 + 比特骆驼自动化对冲系统
-
OKX 自动化对冲系统
+
比特骆驼自动化对冲系统