Wednesday, September 23, 2026

Постройте сигнал тональности новостей для своего вотчлиста

Kevin Bartsch

Постройте сигнал тональности новостей для своего вотчлиста

Тональность отдельной статьи полезна, но часто вам нужно одно число на компанию: новостной поток сейчас склоняется в позитив или в негатив? В этом руководстве вы превратите тональность и уверенность из finlight в один взвешенный по уверенности балл на каждый тикер, для всего вотчлиста, с помощью Python и pandas.

Идея

Каждая статья сопровождается sentiment (positive, neutral, negative) и confidence. Мы:

  1. Подтянем недавние статьи по каждому тикеру.
  2. Сопоставим тональность с числом: +1, 0, -1.
  3. Взвесим каждую статью по её уверенности и усредним по тикеру.

Результат — балл между -1 и +1, который суммирует тон новостей по каждой компании.

Код

import pandas as pd

from finlight_client import FinlightApi, ApiConfig
from finlight_client.models import GetArticlesParams

client = FinlightApi(config=ApiConfig(api_key="YOUR_API_KEY"))

WATCHLIST = ["AAPL", "NVDA", "TSLA"]
SCORE = {"positive": 1, "neutral": 0, "negative": -1}

rows = []
for ticker in WATCHLIST:
    response = client.articles.fetch_articles(
        GetArticlesParams(tickers=[ticker], from_="2026-06-01", pageSize=100)
    )
    for article in response.articles:
        if article.sentiment is None:
            continue
        rows.append({
            "ticker": ticker,
            "score": SCORE.get(article.sentiment, 0),
            "confidence": article.confidence or 0.0,
        })

df = pd.DataFrame(rows)

# Взвешенная по уверенности средняя тональность на каждый тикер
df["weighted"] = df["score"] * df["confidence"]
signal = df.groupby("ticker").apply(
    lambda g: g["weighted"].sum() / g["confidence"].sum()
)

print(signal.sort_values(ascending=False))

Что вы получаете

signal — это одно число на каждый тикер:

ticker
NVDA    0.62
AAPL    0.18
TSLA   -0.34

Положительный балл означает, что недавний новостной поток склоняется в позитив, отрицательный — в негатив, а величина отражает, насколько сильна и уверенна эта склонность. Взвешивание по confidence означает, что пачка статей с высокой уверенностью двигает балл сильнее, чем груда неуверенных.

Как сделать лучше

  • Добавьте взвешивание по свежести: умножайте на временное затухание, чтобы сегодняшние новости весили больше, чем прошлонедельные.
  • Добавьте объём: отслеживайте количество статей рядом с баллом, ведь сильный балл по двум статьям — более слабое свидетельство, чем тот же балл по пятидесяти.
  • Перейдите к инкрементальности: перезапускайте по расписанию или переключитесь на WebSocket, чтобы обновлять сигнал в реальном времени.

Предостережение

Тональность — это один из входных сигналов, а не прогноз цены. Рынки могут игнорировать плохие новости или переоценивать хорошие. Воспринимайте этот балл как признак, который стоит сочетать с объёмом, источником и вашими собственными моделями, а не как самостоятельное торговое правило.

Куда двигаться дальше

Получите бесплатный API-ключ →