Files
executor/quick_baa_test.sh

119 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
# BAA 전략 빠른 테스트 스크립트
# 사용법: ./quick_baa_test.sh [variant] [capital] [date]
BASE_URL="http://localhost:8000/api"
# 기본값 설정
VARIANT="${1:-BAA-G4}"
CAPITAL="${2:-50000}"
DATE="${3:-null}"
echo "=================================="
echo "BAA 전략 빠른 실행"
echo "=================================="
echo "변형: $VARIANT"
echo "초기 자본: \$$CAPITAL"
echo "기준일: $DATE"
echo ""
# 날짜 처리
if [ "$DATE" = "null" ]; then
DATE_JSON="null"
else
DATE_JSON="\"$DATE\""
fi
# 실제 데이터 모드로 실행
echo "전략 실행 중..."
RESPONSE=$(curl -s -X POST "${BASE_URL}/strategies/execute/" \
-H "Content-Type: application/json" \
-d "{
\"strategy_name\": \"BoldAssetAllocation\",
\"version\": \"1.0.0\",
\"parameters\": {
\"initial_capital\": $CAPITAL,
\"variant\": \"$VARIANT\",
\"use_real_data\": true,
\"as_of_date\": $DATE_JSON
}
}")
EXEC_ID=$(echo "$RESPONSE" | jq -r '.execution_id')
if [ "$EXEC_ID" = "null" ] || [ -z "$EXEC_ID" ]; then
echo "오류: 실행 실패"
echo "$RESPONSE" | jq '.'
exit 1
fi
echo "실행 ID: $EXEC_ID"
echo ""
# 진행 상황 표시
echo -n "데이터 다운로드 및 계산 중"
for i in {1..10}; do
sleep 1
echo -n "."
done
echo ""
echo ""
# 결과 조회
echo "결과 조회 중..."
RESULT=$(curl -s -X GET "${BASE_URL}/executions/${EXEC_ID}/")
STATUS=$(echo "$RESULT" | jq -r '.status')
if [ "$STATUS" = "completed" ]; then
echo "✓ 실행 완료!"
echo ""
# 주요 정보 추출
MODE=$(echo "$RESULT" | jq -r '.result.mode')
AS_OF_DATE=$(echo "$RESULT" | jq -r '.result.as_of_date')
TOTAL_ALLOCATED=$(echo "$RESULT" | jq -r '.result.total_allocated')
CASH_REMAINING=$(echo "$RESULT" | jq -r '.result.cash_remaining')
CANARY_BAD=$(echo "$RESULT" | jq -r '.result.canary_bad_count')
echo "====== 포트폴리오 요약 ======"
echo "기준일: $AS_OF_DATE"
echo "모드: $MODE"
echo "카나리아 bad 개수: $CANARY_BAD"
echo "총 투자액: \$$TOTAL_ALLOCATED"
echo "잔여 현금: \$$CASH_REMAINING"
echo ""
echo "====== 포트폴리오 구성 ======"
echo "$RESULT" | jq -r '.result.portfolio[] | "\(.ticker): \(.shares)주 @ $\(.current_price) = $\(.actual_amount)"'
echo ""
echo "====== 카나리아 상태 ======"
echo "$RESULT" | jq -r '.result.canary_status | to_entries[] | "\(.key): 모멘텀=\(.value.momentum | .*100 | round/100)%, bad=\(.value.is_bad)"'
echo ""
# 전체 JSON 저장
FILENAME="baa_result_${EXEC_ID}_$(date +%Y%m%d_%H%M%S).json"
echo "$RESULT" | jq '.' > "$FILENAME"
echo "전체 결과가 $FILENAME 에 저장되었습니다."
elif [ "$STATUS" = "failed" ]; then
echo "✗ 실행 실패"
ERROR=$(echo "$RESULT" | jq -r '.error_message')
echo "오류: $ERROR"
else
echo "상태: $STATUS"
echo "전체 응답:"
echo "$RESULT" | jq '.'
fi
echo ""
echo "=================================="
echo "사용 예시:"
echo " ./quick_baa_test.sh # BAA-G4, \$50,000, 현재 날짜"
echo " ./quick_baa_test.sh BAA-G12 # BAA-G12, \$50,000, 현재 날짜"
echo " ./quick_baa_test.sh BAA-G4 100000 # BAA-G4, \$100,000, 현재 날짜"
echo " ./quick_baa_test.sh BAA-G12 75000 2024-01-31 # BAA-G12, \$75,000, 2024-01-31"
echo "=================================="