def public_opinion():
    qtu = QTradableStocksUS()
    sentiment_stocktwits = SimpleMovingAverage(
        inputs=[stocktwits.bull_minus_bear],
        window_length=2,
    )
    sentiment_news = SimpleMovingAverage(
        inputs=[sentiment.sentiment_signal],
        window_length=2
    )
    sentiment_factor = sentiment_stocktwits + sentiment_news
    sentiment_factor_winsorized = sentiment_factor.winsorize(
        min_percentile=0.10,
        max_percentile=0.90)

    sentiment_factor_rank =  sentiment_factor_winsorized.rank().zscore()

    screen = qtu & ~sentiment_stocktwits.isnull() & ~sentiment_news.isnull() & sentiment_factor.isfinite()

    return sentiment_factor_rank, screen