심리 예측

GET /forecasts/sentiment
GetSentimentForecast

향후 72시간 동안 자산의 심리가 어디로 향할 가능성이 있는지를 결과 범위와 그 확률로 나타냅니다. series는 4시간마다 해당 스텝에서 예상되는 강세, 약세, 중립, 전체 게시물 수와 스텝 끝의 sentiment_signal를 /sentiment 스케일로 제공합니다. chance_higher_24h와 chance_higher_72h는 신호가 current_sentiment_signal 위에서 마감할 확률을 제공하며, 각각의 _confident 플래그는 그 확률이 명확히 한쪽으로 기울 때를 표시합니다.

예측은 자산에 관한 새 게시물이 올라오면 1분 이내에, 그리고 최소 15분마다 갱신됩니다. refresh=true은 최신 데이터로 약 5초 만에 재계산합니다. 20초를 넘으면 refreshed: false와 함께 최신 예측을 받게 되며, 5크레딧이 청구됩니다. 예측이 없는 자산은 reason와 함께 status: not_forecastable을 반환합니다. 예측이 있는 자산은 /forecasts/assets에서 확인할 수 있습니다.

5크레딧이 들며, refresh=true을 사용하면 10크레딧입니다. not_forecastable 응답은 무료이며 계정당 시간당 최대 30건까지 가능합니다. 이를 초과하면 이 엔드포인트는 해당 시간이 지날 때까지 429를 반환합니다.

이 작업에는 지갑 결제를 사용할 수 없습니다. 계정 인증을 사용하세요. x402 결제 가이드.

파라미터

asset_id string QUERY 필수

/assets 또는 /search에서 가져온 자산 ID입니다(예: NVDA, GLD, SPX, bitcoin). 함께 반환된 asset_class와 같이 보내세요.

Example:NVDA

asset_class string QUERY 필수

asset_id로 지정된 자산의 클래스입니다: equity(주식 및 ETF), commodity, index, crypto 중 하나입니다. /assets 또는 /search가 asset_id와 함께 반환한 asset_class를 보내세요.

허용 값
equitycommodityindexcrypto

Example:equity

refresh boolean QUERY

true이면 최신 데이터로 예측을 재계산합니다. 10크레딧, 약 5초가 소요됩니다. 기본값은 false입니다.

Example:false

cURL 예제

curl --get \
  --url 'https://nebula-api.hiddensystems.ai/api/v1/public/forecasts/sentiment' \
  --data-urlencode 'asset_id=NVDA' \
  --data-urlencode 'asset_class=equity' \
  --header 'X-API-Key: YOUR_API_KEY'

응답

200 OK
400 잘못된 요청
401 인증되지 않음
402 크레딧이 모두 소진됨. 응답에 갱신 시점과 구매한 크레딧 잔액이 포함됩니다.
403 금지됨
404 찾을 수 없음
405 허용되지 않은 메서드입니다. Allow 헤더에 지원되는 메서드가 나열됩니다.
429 요청이 너무 많음
500 내부 서버 오류
503 서비스 이용 불가

미디어 타입 application/json

as_of
string (date-time) 필수

예측 시작 시각(UTC)으로, 계산에 사용된 마지막 완전한 15분 구간의 끝입니다. 자산이 한 번도 채점된 적이 없으면 null입니다.

chance_higher_24h
number (double) 필수

24시간 후 심리 신호가 current_sentiment_signal보다 높을 확률로, 0에서 1 사이의 값입니다.

chance_higher_24h_confident
boolean 필수

chance_higher_24h가 0.3 미만이거나 0.7 초과이면 true입니다. 즉 예측이 명확히 한쪽으로 기울어 있습니다. 0.5에 가까울수록 뚜렷한 방향이 없는 것으로 해석하세요.

chance_higher_72h
number (double) 필수

72시간 후 심리 신호가 current_sentiment_signal보다 높을 확률로, 0에서 1 사이의 값입니다.

chance_higher_72h_confident
boolean 필수

chance_higher_72h가 0.3 미만이거나 0.7 초과이면 true입니다. 즉 예측이 명확히 한쪽으로 기울어 있습니다. 0.5에 가까울수록 뚜렷한 방향이 없는 것으로 해석하세요.

current_sentiment_signal
number (double) 필수

as_of 시점의 심리 신호로, /sentiment 스케일을 따릅니다. 즉 최근 24시간 동안의 강세 게시물에서 약세 게시물을 뺀 값이며, 최근 게시물에 더 큰 가중치를 둡니다. 모든 경로가 여기서 시작하고, 확률은 이 값을 기준으로 측정됩니다. 이 값은 매시간 갱신되는 최신 /sentiment 포인트와 약간 다를 수 있습니다.

horizon_hours
integer 필수

예측이 얼마나 앞을 내다보는지(시간 단위)이며, 항상 72입니다.

reason
string 필수

자산을 예측할 수 없는 이유로, too_little_history, stale_data, missing_price 중 하나입니다. status가 ok이면 null입니다.

허용 값
too_little_historystale_datamissing_pricenull
refreshed
boolean 필수

이 요청이 예측을 다시 실행한 경우(refresh=true이고 재실행이 제때 완료된 경우) true이며, 예약 실행된 최신 예측이면 false입니다.

sample_paths
array<array<number (double)>> 필수

심리 신호에 대한 24개의 가능한 경로로, 각각 series와 정렬됩니다. 이를 그려서 결과의 분포를 확인하세요.

series
array<object> 필수

as_of부터 4시간마다의 예측으로, 18개 스텝이며 가장 오래된 것부터 정렬됩니다.

series[].bearish_posts
object 필수

이 4시간 스텝에서만 예상되는 약세 게시물 수로, 봇은 제외됩니다. /sentiment의 구간 게시물과 같으며, 24시간 누적 집계와는 다릅니다.

series[].bearish_posts.mean
number (double) 필수

해당 스텝에서 예상되는 약세 게시물 수입니다.

series[].bearish_posts.p10
number (double) 필수

해당 스텝에서 약세 게시물 수의 10번째 백분위수입니다.

series[].bearish_posts.p25
number (double) 필수

해당 스텝에서 약세 게시물 수의 25번째 백분위수입니다.

series[].bearish_posts.p50
number (double) 필수

해당 스텝에서 약세 게시물 수의 50번째 백분위수입니다.

series[].bearish_posts.p75
number (double) 필수

해당 스텝에서 약세 게시물 수의 75번째 백분위수입니다.

series[].bearish_posts.p90
number (double) 필수

해당 스텝에서 약세 게시물의 90번째 백분위수입니다.

series[].bullish_posts
object 필수

이 4시간 스텝에만 해당하는 예상 강세 게시물 수입니다(봇 제외). /sentiment의 구간 게시물과 같은 기준이며, 최근 24시간 누적 집계가 아닙니다.

series[].bullish_posts.mean
number (double) 필수

해당 스텝의 예상 강세 게시물 수입니다.

series[].bullish_posts.p10
number (double) 필수

해당 스텝에서 강세 게시물의 10번째 백분위수입니다.

series[].bullish_posts.p25
number (double) 필수

해당 스텝에서 강세 게시물의 25번째 백분위수입니다.

series[].bullish_posts.p50
number (double) 필수

해당 스텝에서 강세 게시물의 50번째 백분위수입니다.

series[].bullish_posts.p75
number (double) 필수

해당 스텝에서 강세 게시물의 75번째 백분위수입니다.

series[].bullish_posts.p90
number (double) 필수

해당 스텝에서 강세 게시물의 90번째 백분위수입니다.

series[].neutral_posts
object 필수

이 4시간 스텝에만 해당하는 예상 중립 게시물 수입니다(봇 제외). /sentiment의 구간 게시물과 같은 기준이며, 최근 24시간 누적 집계가 아닙니다.

series[].neutral_posts.mean
number (double) 필수

해당 스텝의 예상 중립 게시물 수입니다.

series[].neutral_posts.p10
number (double) 필수

해당 스텝에서 중립 게시물의 10번째 백분위수입니다.

series[].neutral_posts.p25
number (double) 필수

해당 스텝에서 중립 게시물의 25번째 백분위수입니다.

series[].neutral_posts.p50
number (double) 필수

해당 스텝에서 중립 게시물의 50번째 백분위수입니다.

series[].neutral_posts.p75
number (double) 필수

해당 스텝에서 중립 게시물의 75번째 백분위수입니다.

series[].neutral_posts.p90
number (double) 필수

해당 스텝에서 중립 게시물의 90번째 백분위수입니다.

series[].sentiment_signal
object 필수

스텝 종료 시점의 센티먼트 신호로, /sentiment 척도 기준입니다. 즉 선이 어디에 위치할 가능성이 높은지를 나타냅니다.

series[].sentiment_signal.mean
number (double) 필수

스텝 종료 시점의 예상 센티먼트 신호입니다.

series[].sentiment_signal.p10
number (double) 필수

스텝 종료 시점 센티먼트 신호의 10번째 백분위수입니다.

series[].sentiment_signal.p50
number (double) 필수

스텝 종료 시점 센티먼트 신호의 50번째 백분위수입니다.

series[].sentiment_signal.p90
number (double) 필수

스텝 종료 시점 센티먼트 신호의 90번째 백분위수입니다.

series[].sentiment_signal.quantiles
array<number (double)> 필수

스텝 종료 시점 센티먼트 신호의 21개 분위수입니다. 0번째, 5번째, 10번째, ... 100번째 백분위수를 낮은 값부터 나열합니다. 임의의 범위에 속할 확률을 구하려면 이 값들 사이를 보간하세요.

series[].timestamp
string (date-time) 필수

스텝이 종료되는 UTC 시각입니다. as_of에 4, 8, ... 72시간을 더한 값입니다.

series[].total_posts
object 필수

이 4시간 스텝에만 해당하는 예상 게시물 수(강세, 약세, 중립 합계)입니다(봇 제외). /sentiment의 구간 게시물과 같은 기준이며, 최근 24시간 누적 집계가 아닙니다. 백분위수는 합계 자체를 기준으로 하므로 세 가지 유형의 백분위수를 더한 값이 아닙니다.

series[].total_posts.mean
number (double) 필수

해당 스텝의 예상 게시물 수(강세, 약세, 중립 합계)입니다.

series[].total_posts.p10
number (double) 필수

해당 스텝에서 게시물(강세, 약세, 중립 합계)의 10번째 백분위수입니다.

series[].total_posts.p25
number (double) 필수

해당 스텝에서 게시물(강세, 약세, 중립 합계)의 25번째 백분위수입니다.

series[].total_posts.p50
number (double) 필수

해당 스텝에서 게시물(강세, 약세, 중립 합계)의 50번째 백분위수입니다.

series[].total_posts.p75
number (double) 필수

해당 스텝에서 게시물(강세, 약세, 중립 합계)의 75번째 백분위수입니다.

series[].total_posts.p90
number (double) 필수

해당 스텝에서 게시물(강세, 약세, 중립 합계)의 90번째 백분위수입니다.

status
string 필수

ok이거나, 자산을 예측할 수 없을 때는 not_forecastable입니다(이 경우 요약 필드는 null이고 series는 비어 있으며, reason이 그 이유를 나타냅니다).

허용 값
oknot_forecastable
turning
integer 필수

센티먼트가 강세로 전환되는 동안에는 1(최근 몇 시간이 지난 하루보다 확실히 더 강세 쪽으로 기울어짐), 약세로 전환되는 동안에는 -1, 그 외에는 0입니다.

허용 값
-101null
{
  "as_of": "2026-09-14T09:15:00Z",
  "chance_higher_24h": 0.74,
  "chance_higher_24h_confident": true,
  "chance_higher_72h": 0.61,
  "chance_higher_72h_confident": false,
  "current_sentiment_signal": 128.6,
  "horizon_hours": 72,
  "reason": null,
  "refreshed": false,
  "sample_paths": [
    [
      133.2,
      141.7
    ],
    [
      126.4,
      118.9
    ]
  ],
  "series": [
    {
      "bearish_posts": {
        "mean": 18,
        "p10": 9.9,
        "p25": 13.5,
        "p50": 17.1,
        "p75": 21.6,
        "p90": 27.9
      },
      "bullish_posts": {
        "mean": 46,
        "p10": 25.3,
        "p25": 34.5,
        "p50": 43.7,
        "p75": 55.2,
        "p90": 71.3
      },
      "neutral_posts": {
        "mean": 29,
        "p10": 16,
        "p25": 21.8,
        "p50": 27.6,
        "p75": 34.8,
        "p90": 45
      },
      "sentiment_signal": {
        "mean": 131.4,
        "p10": 92.9,
        "p50": 129.6,
        "p90": 175.5,
        "quantiles": [
          21.6,
          70.2,
          92.9,
          104.8,
          113.1,
          119.4,
          124.2,
          127.6,
          130.5,
          132.7,
          134.5,
          136.4,
          138.7,
          141.3,
          144.9,
          149.2,
          155.1,
          163.8,
          179.4,
          202.6,
          287.3
        ]
      },
      "timestamp": "2026-09-14T13:15:00Z",
      "total_posts": {
        "mean": 93,
        "p10": 51.2,
        "p25": 69.8,
        "p50": 88.4,
        "p75": 111.6,
        "p90": 144.2
      }
    },
    {
      "bearish_posts": {
        "mean": 19,
        "p10": 10.5,
        "p25": 14.3,
        "p50": 18.1,
        "p75": 22.8,
        "p90": 29.5
      },
      "bullish_posts": {
        "mean": 50,
        "p10": 27.5,
        "p25": 37.5,
        "p50": 47.5,
        "p75": 60,
        "p90": 77.5
      },
      "neutral_posts": {
        "mean": 31,
        "p10": 17.1,
        "p25": 23.3,
        "p50": 29.5,
        "p75": 37.2,
        "p90": 48.1
      },
      "sentiment_signal": {
        "mean": 137.6,
        "p10": 99.1,
        "p50": 135.79999999999998,
        "p90": 181.7,
        "quantiles": [
          21.6,
          70.2,
          92.9,
          104.8,
          113.1,
          119.4,
          124.2,
          127.6,
          130.5,
          132.7,
          134.5,
          136.4,
          138.7,
          141.3,
          144.9,
          149.2,
          155.1,
          163.8,
          179.4,
          202.6,
          287.3
        ]
      },
      "timestamp": "2026-09-14T17:15:00Z",
      "total_posts": {
        "mean": 100,
        "p10": 55,
        "p25": 75,
        "p50": 95,
        "p75": 120,
        "p90": 155
      }
    }
  ],
  "status": "ok",
  "turning": 0
}