#!/usr/bin/env bash # RSI DCA 정액 매수 live 전환/복귀 — 사용자가 직접 실행하는 스위치. # bash scripts/3_go_live_rsi_dca.sh # live 전환: .env RSI_DCA_MODE=live + cron 줄 활성화 + crontab 적용 # bash scripts/3_go_live_rsi_dca.sh --paper # paper 복귀 (cron 유지, 주문 없음) # bash scripts/3_go_live_rsi_dca.sh --dry-run # 변경 없이 수행 내용만 출력 set -euo pipefail ROOT="$(cd "$(dirname "$0")/.." && pwd)" ENV="${ROOT}/.env" EXAMPLE="${ROOT}/scripts/crontab.bithumb.example" RSI_LINE_RE='3_run_rsi_dca_cron\.sh' MODE="live" DRY=0 for a in "$@"; do case "$a" in --paper) MODE="paper" ;; --live) MODE="live" ;; --dry-run) DRY=1 ;; -h|--help) sed -n 2,5p "$0"; exit 0 ;; *) echo "unknown arg: $a" >&2; exit 1 ;; esac done [ -f "$ENV" ] || { echo ".env 없음: $ENV" >&2; exit 1; } cur="$(grep -E '^RSI_DCA_MODE=' "$ENV" | tail -1 | cut -d= -f2 | tr -d '[:space:]' || true)" echo "현재 RSI_DCA_MODE=${cur:-<미설정>} → 목표 ${MODE}" echo "대상: $(grep -E '^RSI_DCA_SYMBOLS=' "$ENV" | cut -d= -f2) | 규칙: $(grep -E '^RSI_DCA_LEVELS=' "$ENV" | cut -d= -f2) | 일 상한: $(grep -E '^RSI_DCA_DAILY_MAX_KRW=' "$ENV" | cut -d= -f2)원" if [ "$MODE" = "live" ] && [ -f "${ROOT}/data/spot/operations/rsi.kill" ]; then echo "주의: 킬스위치 파일(data/spot/operations/rsi.kill)이 있어 매수가 차단됩니다. 해제: rm data/spot/operations/rsi.kill" fi if [ "$DRY" = "1" ]; then echo "[dry-run] 1) .env RSI_DCA_MODE=${MODE} 로 변경" echo "[dry-run] 2) ${EXAMPLE} 의 RSI cron 줄 주석 해제" echo "[dry-run] 3) bash scripts/install_crontab.sh --apply" exit 0 fi # 1) .env 모드 if grep -qE '^RSI_DCA_MODE=' "$ENV"; then sed -i '' -E "s/^RSI_DCA_MODE=.*/RSI_DCA_MODE=${MODE}/" "$ENV" else printf '\nRSI_DCA_MODE=%s\n' "$MODE" >> "$ENV" fi echo "1) .env: $(grep -E '^RSI_DCA_MODE=' "$ENV")" # 2) cron 예시에서 RSI 줄 활성화 (이미 활성화면 그대로) if grep -qE "^# \* \* \* \* \* .*${RSI_LINE_RE}" "$EXAMPLE"; then sed -i '' -E "s|^# (\* \* \* \* \* .*${RSI_LINE_RE}.*)$|\1|" "$EXAMPLE" fi echo "2) cron 예시: $(grep -E "${RSI_LINE_RE}" "$EXAMPLE" | grep -vE '^#' | head -1 | cut -c1-70)…" # 3) crontab 적용 (BITHUMB 블록 갱신 — 캔들 수집·모니터·RSI tick) bash "${ROOT}/scripts/install_crontab.sh" --apply echo "3) crontab RSI 줄:"; crontab -l | grep -E "${RSI_LINE_RE}" || echo " (없음)" echo if [ "$MODE" = "live" ]; then echo "완료: 다음 1분 tick부터 실거래 매수. 첫 tick은 미초기화 종목 커서 설정만 하고, 이후 봉부터 매수합니다." echo "긴급 차단: touch ${ROOT}/data/spot/operations/rsi.kill | paper 복귀: bash scripts/3_go_live_rsi_dca.sh --paper" echo "확인: python scripts/3_run_rsi_dca.py --status / tail -f data/spot/operations/rsi_dca_cron.log" else echo "완료: paper 모드. cron은 유지되며 주문은 나가지 않습니다." fi