Files
executor/BAA_CURL_EXAMPLES.md

10 KiB

BAA 전략 API curl 예제

서버 실행

python manage.py runserver

기본 URL: http://localhost:8000/api


1. 사용 가능한 전략 구현체 목록 조회

curl -X GET http://localhost:8000/api/strategies/implementations/ \
  -H "Content-Type: application/json" | jq '.'

응답 예시:

{
  "available_implementations": {
    "BoldAssetAllocation": {
      "name": "BoldAssetAllocation",
      "description": "상대 모멘텀과 절대 모멘텀을 결합한 공격적 전술적 자산배분 전략. 카나리아 유니버스 기반 크래시 보호",
      "versions": [
        {
          "version": "1.0.0",
          "default_parameters": {
            "initial_capital": 100000,
            "variant": "BAA-G12",
            "offensive_top": 6,
            "defensive_top": 3,
            "breadth_param": 1,
            "transaction_cost": 0.001,
            "as_of_date": null,
            "use_real_data": false
          }
        }
      ]
    }
  }
}

2. BAA-G12 시뮬레이션 모드 (백테스트 결과)

전략 실행 요청

curl -X POST http://localhost:8000/api/strategies/execute/ \
  -H "Content-Type: application/json" \
  -d '{
    "strategy_name": "BoldAssetAllocation",
    "version": "1.0.0",
    "parameters": {
      "initial_capital": 100000,
      "variant": "BAA-G12",
      "use_real_data": false
    }
  }' | jq '.'

응답:

{
  "execution_id": 1,
  "status": "pending",
  "message": "Strategy execution started"
}

실행 결과 조회

curl -X GET http://localhost:8000/api/executions/1/ | jq '.'

응답 예시:

{
  "execution_id": 1,
  "strategy": "BoldAssetAllocation",
  "version": "1.0.0",
  "status": "completed",
  "started_at": "2025-10-04T10:30:00Z",
  "completed_at": "2025-10-04T10:30:02Z",
  "execution_parameters": {
    "initial_capital": 100000,
    "variant": "BAA-G12",
    "use_real_data": false
  },
  "result": {
    "strategy": "BoldAssetAllocation",
    "version": "1.0.0",
    "variant": "BAA-G12",
    "cagr": 14.6,
    "max_drawdown": 8.7,
    "sharpe_ratio": 1.19,
    "upi": 4.81,
    "profit_loss": 14600.0,
    "final_capital": 114600.0
  }
}

3. BAA-G4 실제 데이터 모드 (현재 날짜 기준 포트폴리오)

curl -X POST http://localhost:8000/api/strategies/execute/ \
  -H "Content-Type: application/json" \
  -d '{
    "strategy_name": "BoldAssetAllocation",
    "version": "1.0.0",
    "parameters": {
      "initial_capital": 50000,
      "variant": "BAA-G4",
      "use_real_data": true,
      "as_of_date": null
    }
  }' | jq '.'

응답:

{
  "execution_id": 2,
  "status": "pending",
  "message": "Strategy execution started"
}

결과 조회 (약 10초 후)

curl -X GET http://localhost:8000/api/executions/2/ | jq '.'

응답 예시:

{
  "execution_id": 2,
  "strategy": "BoldAssetAllocation",
  "version": "1.0.0",
  "status": "completed",
  "result": {
    "strategy": "BoldAssetAllocation",
    "version": "1.0.0",
    "variant": "BAA-G4",
    "mode": "offensive",
    "as_of_date": "2025-10-04",
    "canary_status": {
      "SPY": {
        "momentum": 0.0854,
        "is_bad": false
      },
      "VWO": {
        "momentum": 0.1015,
        "is_bad": false
      },
      "VEA": {
        "momentum": 0.0863,
        "is_bad": false
      },
      "BND": {
        "momentum": 0.0132,
        "is_bad": false
      }
    },
    "canary_bad_count": 0,
    "breadth_threshold": 1,
    "portfolio": [
      {
        "ticker": "VEA",
        "weight": 100.0,
        "target_amount": 50000.0,
        "current_price": 61.06,
        "shares": 818,
        "actual_amount": 49947.08
      }
    ],
    "total_allocated": 49947.08,
    "cash_remaining": 52.92,
    "initial_capital": 50000
  }
}

4. 특정 날짜 기준 포트폴리오 (2024-01-31)

curl -X POST http://localhost:8000/api/strategies/execute/ \
  -H "Content-Type: application/json" \
  -d '{
    "strategy_name": "BoldAssetAllocation",
    "version": "1.0.0",
    "parameters": {
      "initial_capital": 100000,
      "variant": "BAA-G12",
      "use_real_data": true,
      "as_of_date": "2024-01-31"
    }
  }' | jq '.'

결과 조회:

curl -X GET http://localhost:8000/api/executions/3/ | jq '.'

응답 예시 (방어 모드):

{
  "execution_id": 3,
  "strategy": "BoldAssetAllocation",
  "version": "1.0.0",
  "status": "completed",
  "result": {
    "mode": "defensive",
    "as_of_date": "2024-01-31",
    "canary_status": {
      "SPY": {
        "momentum": 0.0815,
        "is_bad": false
      },
      "VWO": {
        "momentum": -0.0110,
        "is_bad": true
      },
      "VEA": {
        "momentum": 0.0350,
        "is_bad": false
      },
      "BND": {
        "momentum": 0.0169,
        "is_bad": false
      }
    },
    "canary_bad_count": 1,
    "portfolio": [
      {
        "ticker": "DBC",
        "weight": 33.33,
        "current_price": 21.43,
        "shares": 1555,
        "actual_amount": 33317.63
      },
      {
        "ticker": "TLT",
        "weight": 33.33,
        "current_price": 89.0,
        "shares": 374,
        "actual_amount": 33287.61
      },
      {
        "ticker": "LQD",
        "weight": 33.33,
        "current_price": 101.69,
        "shares": 327,
        "actual_amount": 33253.17
      }
    ],
    "total_allocated": 99858.4,
    "cash_remaining": 141.6
  }
}

5. 모든 전략 변형 예제

BAA-G12 (Balanced)

curl -X POST http://localhost:8000/api/strategies/execute/ \
  -H "Content-Type: application/json" \
  -d '{
    "strategy_name": "BoldAssetAllocation",
    "parameters": {
      "variant": "BAA-G12",
      "initial_capital": 100000,
      "use_real_data": true
    }
  }'

BAA-G4 (Aggressive)

curl -X POST http://localhost:8000/api/strategies/execute/ \
  -H "Content-Type: application/json" \
  -d '{
    "strategy_name": "BoldAssetAllocation",
    "parameters": {
      "variant": "BAA-G4",
      "initial_capital": 100000,
      "use_real_data": true
    }
  }'

BAA-G12/T3

curl -X POST http://localhost:8000/api/strategies/execute/ \
  -H "Content-Type: application/json" \
  -d '{
    "strategy_name": "BoldAssetAllocation",
    "parameters": {
      "variant": "BAA-G12/T3",
      "initial_capital": 100000,
      "use_real_data": true
    }
  }'

BAA-G4/T2

curl -X POST http://localhost:8000/api/strategies/execute/ \
  -H "Content-Type: application/json" \
  -d '{
    "strategy_name": "BoldAssetAllocation",
    "parameters": {
      "variant": "BAA-G4/T2",
      "initial_capital": 100000,
      "use_real_data": true
    }
  }'

BAA-SPY

curl -X POST http://localhost:8000/api/strategies/execute/ \
  -H "Content-Type: application/json" \
  -d '{
    "strategy_name": "BoldAssetAllocation",
    "parameters": {
      "variant": "BAA-SPY",
      "initial_capital": 100000,
      "use_real_data": true
    }
  }'

6. 파라미터 커스터마이징

예산 변경

curl -X POST http://localhost:8000/api/strategies/execute/ \
  -H "Content-Type: application/json" \
  -d '{
    "strategy_name": "BoldAssetAllocation",
    "parameters": {
      "initial_capital": 250000,
      "variant": "BAA-G4",
      "use_real_data": true
    }
  }'

특정 날짜 + 변형 조합

curl -X POST http://localhost:8000/api/strategies/execute/ \
  -H "Content-Type: application/json" \
  -d '{
    "strategy_name": "BoldAssetAllocation",
    "parameters": {
      "initial_capital": 150000,
      "variant": "BAA-G12/T3",
      "use_real_data": true,
      "as_of_date": "2024-06-30"
    }
  }'

7. 비동기 실행 패턴

1단계: 실행 시작

EXEC_ID=$(curl -s -X POST http://localhost:8000/api/strategies/execute/ \
  -H "Content-Type: application/json" \
  -d '{
    "strategy_name": "BoldAssetAllocation",
    "parameters": {
      "initial_capital": 50000,
      "variant": "BAA-G4",
      "use_real_data": true
    }
  }' | jq -r '.execution_id')

echo "Execution ID: $EXEC_ID"

2단계: 상태 폴링

while true; do
  STATUS=$(curl -s http://localhost:8000/api/executions/${EXEC_ID}/ | jq -r '.status')
  echo "Status: $STATUS"

  if [ "$STATUS" = "completed" ] || [ "$STATUS" = "failed" ]; then
    break
  fi

  sleep 2
done

3단계: 최종 결과 조회

curl -s http://localhost:8000/api/executions/${EXEC_ID}/ | jq '.result'

8. 에러 처리

잘못된 variant

curl -X POST http://localhost:8000/api/strategies/execute/ \
  -H "Content-Type: application/json" \
  -d '{
    "strategy_name": "BoldAssetAllocation",
    "parameters": {
      "variant": "INVALID",
      "use_real_data": true
    }
  }'

응답:

{
  "execution_id": 4,
  "status": "failed",
  "error_message": "Invalid parameters"
}

누락된 필수 파라미터

curl -X POST http://localhost:8000/api/strategies/execute/ \
  -H "Content-Type: application/json" \
  -d '{
    "strategy_name": "BoldAssetAllocation",
    "parameters": {}
  }'

9. 원라인 실행 + 결과 조회

# 실행하고 10초 후 자동으로 결과 조회
EXEC_ID=$(curl -s -X POST http://localhost:8000/api/strategies/execute/ \
  -H "Content-Type: application/json" \
  -d '{"strategy_name":"BoldAssetAllocation","parameters":{"initial_capital":50000,"variant":"BAA-G4","use_real_data":true}}' \
  | jq -r '.execution_id') && \
echo "Execution ID: $EXEC_ID" && \
sleep 10 && \
curl -s http://localhost:8000/api/executions/${EXEC_ID}/ | jq '.'

참고사항

  1. jq 설치: JSON 포맷팅을 위해 jq 설치 권장

    # macOS
    brew install jq
    
    # Ubuntu/Debian
    sudo apt-get install jq
    
  2. 실행 시간:

    • 시뮬레이션 모드: 약 2초
    • 실제 데이터 모드: 약 5-15초 (데이터 다운로드 시간 포함)
  3. 날짜 형식: YYYY-MM-DD (예: 2024-01-31)

  4. 초기 자본: 달러($) 단위

  5. 매수 수량: 정수 주식만 매수, 잔액은 현금 보유