119 lines
3.3 KiB
Bash
Executable File
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 "=================================="
|