# Technical Indicator Screener (`gochujang/technical-indicator-screener`) Actor

Screen US stocks by technical indicators: RSI, MACD, moving averages (SMA20/50/200), Bollinger Bands, ATR, 52-week high/low, and trend. Supports screener mode (auto-find stocks matching criteria) and ticker mode (analyze specific stocks). Data from Finviz — no API key needed.

- **URL**: https://apify.com/gochujang/technical-indicator-screener.md
- **Developed by:** [Hojun Lee](https://apify.com/gochujang) (community)
- **Categories:** Business
- **Stats:** 1 total users, 1 monthly users, 100.0% runs succeeded, 0 bookmarks
- **User rating**: No ratings yet

## Pricing

from $20.00 / 1,000 stock record returneds

This Actor is paid per event. You are not charged for the Apify platform usage, but only a fixed price for specific events.

Learn more: https://docs.apify.com/actors/running/actors-in-store.md#pay-per-event

## What's an Apify Actor?

An Actor is a serverless cloud program that runs on the Apify platform. It has two run modes.
In Batch mode, an Actor accepts a well-defined JSON input, performs an action which can take anything from a few seconds to a few hours,
and optionally produces a well-defined JSON output, datasets with results, or files in key-value store.
In Standby mode, an Actor provides a web server which can be used as a website, API, or an MCP server.

Apify vocabulary and the platform model are defined once, in the agent quickstart at https://apify.com/agents.md.

## How to integrate an Actor?

If asked about integration, you help developers integrate Actors into their projects.
You adapt to their stack and deliver integrations that are safe, well-documented, and production-ready.

Do not guess an integration path. Every one of them is in the agent quickstart at https://apify.com/agents.md: the Apify MCP server, Agent Skills with the Apify CLI, the JavaScript and Python clients, the REST API, and the account-free path for an agent with no human to sign in. It also carries the rule on stating cost before the first paid run.

For examples already wired to this Actor's own input schema, see the [API](#api) section below.

Each client library has reference documentation the quickstart does not restate: [JavaScript/TypeScript](https://docs.apify.com/api/client/js/docs.md) (`npm install apify-client`) and [Python](https://docs.apify.com/api/client/python/docs.md) (`pip install apify-client`).

# README

## Technical Indicator Screener — US Stocks via Finviz

**Technical Indicator Screener** screens US stocks by 18 technical indicators using Finviz — RSI, MACD, SMAs (20/50/200), Bollinger Bands, golden/death cross, and trend classification. Two modes: **screener** (find stocks matching filters) and **tickers** (analyze a specific watchlist). No API key required. $0.02/stock.

Finviz's free screener is the most widely used technical scanning tool in retail trading. This actor makes it programmatically accessible — schedule daily pre-market scans, build custom alert systems, and pipe results into trading workflows without manual browser use.

***

### Why use Technical Indicator Screener?

1. **Daily pre-market momentum scanning** — Run `rsi_oversold + high relative volume` every morning to find potential reversal setups before market open. High-volume oversold stocks with improving technicals are a classic bounce setup.
2. **Automated breakout detection** — Filter `new_high + above_sma200 + above_sma50` to find stocks making new highs with clean technical structure. Schedule hourly during market hours.
3. **Watchlist technical dashboard** — Run in `tickers` mode on your portfolio or watchlist. Get RSI, MACD position, SMA relationships, and 52-week range position for every holding in one batch.
4. **Golden/death cross alerts** — Schedule daily runs with `golden_cross` or `death_cross` filters to catch major trend change signals across the entire US market as they develop.
5. **Sector technical rotation** — Use `marketCapFilter: "cap_large"` with `above_sma50` to track which large-cap sectors are in uptrends — a classic systematic sector rotation signal.

***

### How to use

1. Open the actor on Apify Store and click **Try for free**.
2. Set `mode` to `screener` (find stocks matching criteria) or `tickers` (analyze specific symbols).
3. In screener mode: select `filters` from the available list; optionally set `marketCapFilter` and `sortBy`.
4. In tickers mode: set `tickers` to a comma-separated list (e.g. `"AAPL,NVDA,TSLA"`).
5. Click **Start**. Returns structured technical data per stock.

***

### Available filters

| Filter | Description |
|--------|-------------|
| `rsi_oversold` | RSI(14) below 30 — potential reversal |
| `rsi_overbought` | RSI(14) above 70 — potential pullback |
| `macd_buy` | MACD line above signal line |
| `macd_sell` | MACD line below signal line |
| `above_sma20` | Price above 20-day SMA |
| `below_sma20` | Price below 20-day SMA |
| `above_sma50` | Price above 50-day SMA |
| `below_sma50` | Price below 50-day SMA |
| `above_sma200` | Price above 200-day SMA |
| `below_sma200` | Price below 200-day SMA |
| `new_high` | 52-week high |
| `new_low` | 52-week low |
| `overbought_bb` | Above upper Bollinger Band |
| `oversold_bb` | Below lower Bollinger Band |
| `golden_cross` | SMA50 crossed above SMA200 (bullish) |
| `death_cross` | SMA50 crossed below SMA200 (bearish) |
| `uptrend` | Price in confirmed uptrend |
| `downtrend` | Price in confirmed downtrend |

***

### Output

```json
{
  "ticker": "NVDA",
  "company_name": "NVIDIA Corporation",
  "price": 124.50,
  "price_change_pct": 2.3,
  "rsi_14": 62.4,
  "atr_14": 5.80,
  "beta": 1.65,
  "sma20": 118.30,
  "sma50": 112.40,
  "sma200": 98.20,
  "pct_above_sma20": 5.2,
  "pct_above_sma50": 10.8,
  "pct_above_sma200": 26.8,
  "week52_high": 130.00,
  "week52_low": 72.00,
  "pct_from_52w_high": -4.2,
  "week52_range_pct": 89.3,
  "volume": 42000000,
  "avg_volume": 38000000,
  "relative_volume": 1.11,
  "pe_ratio": 55.2,
  "sector": "Technology",
  "industry": "Semiconductors"
}
```

***

### Cost estimation

**Pay-Per-Event: $0.005 actor start + $0.02 per stock record.**

| Use case | Stocks | Estimated cost |
|----------|--------|----------------|
| 25 oversold stocks scan | 25 | ~$0.505/run |
| 10-stock watchlist check | 10 | ~$0.205/run |
| 50 large-cap golden cross | 50 | ~$1.005/run |
| Daily pre-market scan (30) | 30 | ~$0.605/day |

***

### Example inputs

**Oversold stocks with high relative volume:**

```json
{ "mode": "screener", "filters": ["rsi_oversold"], "minRelVolume": 1.5, "maxResults": 25 }
```

**Watchlist technical analysis:**

```json
{ "mode": "tickers", "tickers": "AAPL,NVDA,TSLA,META,AMZN", "maxResults": 50 }
```

**Large-cap golden cross stocks:**

```json
{ "mode": "screener", "filters": ["golden_cross", "above_sma200"], "marketCapFilter": "cap_large", "sortBy": "volume", "maxResults": 30 }
```

***

### FAQ

**Does Finviz update intraday?**
Finviz's free screener updates throughout the trading day, typically with a 15-minute delay. For intraday momentum scans, run the actor multiple times during market hours.

**Can I combine multiple filters?**
Yes — set `filters: ["rsi_oversold", "above_sma200"]` to require all conditions. Multiple filters use AND logic (stock must match all).

**How does `relative_volume` work?**
`relative_volume = today's volume / average daily volume`. Values above 1.5 indicate unusually high trading activity — often associated with news catalysts or technical breakouts.

**Is this US stocks only?**
Yes — Finviz covers US-listed stocks (NYSE, NASDAQ, AMEX). For crypto technical indicators, see Altcoin BTC-Relative Performance or Long/Short OI Aggregator.

***

### Related actors

- [Altcoin BTC-Relative Performance](https://apify.com/gochujang/altcoin-btc-performance) — Technical momentum screening for crypto markets
- [Social Sentiment Aggregator](https://apify.com/gochujang/social-sentiment-aggregator) — Reddit sentiment to cross-validate technical signals with retail positioning
- [Startup Funding Tracker](https://apify.com/gochujang/startup-funding-tracker) — Fundamental catalyst (funding round) often precedes technical breakouts

### Feedback

If this actor helps your trading research, a quick review helps others find it: [Leave a review on Apify Store](https://apify.com/gochujang/technical-indicator-screener#reviews)

***

**Keywords:** technical analysis, RSI, MACD, moving average, Bollinger bands, stock screener, crypto screener, trading signals, momentum, support resistance, chart patterns, technical indicators

# Actor input Schema

## `mode` (type: `string`):

'screener' to find stocks matching the selected filters; 'tickers' to analyze specific stocks.

## `tickers` (type: `string`):

Comma or space separated tickers to analyze (e.g. AAPL, TSLA). Max 100.

## `filters` (type: `array`):

One or more technical filters to apply. Options: rsi_oversold, rsi_overbought, macd_buy, macd_sell, above_sma20, below_sma20, above_sma50, below_sma50, above_sma200, below_sma200, new_high, new_low, overbought_bb, oversold_bb, golden_cross, death_cross, uptrend, downtrend.

## `marketCapFilter` (type: `string`):

Optional Finviz market cap filter code (e.g. 'cap_large' for large cap, 'cap_small' for small cap). Leave blank for all.

## `sortBy` (type: `string`):

Sort screener results by this field.

## `minRsi` (type: `number`):

Filter out stocks with RSI below this value.

## `maxRsi` (type: `number`):

Filter out stocks with RSI above this value.

## `minRelVolume` (type: `number`):

Filter out stocks with relative volume below this value (e.g. 1.5 = 50% above average).

## `maxResults` (type: `integer`):

Maximum number of stocks to return.

## Actor input object example

```json
{
  "mode": "screener",
  "tickers": "",
  "filters": [
    "rsi_oversold"
  ],
  "marketCapFilter": "",
  "sortBy": "volume",
  "maxResults": 50
}
```

# Actor output Schema

## `results` (type: `string`):

No description

# API

You can run this Actor programmatically using our API. Below are code examples in JavaScript, Python, and CLI, as well as the OpenAPI specification and MCP server setup.

## JavaScript example

```javascript
import { ApifyClient } from 'apify-client';

// Initialize the ApifyClient with your Apify API token
// Replace the '<YOUR_API_TOKEN>' with your token
const client = new ApifyClient({
    token: '<YOUR_API_TOKEN>',
});

// Prepare Actor input
const input = {};

// Run the Actor and wait for it to finish
const run = await client.actor("gochujang/technical-indicator-screener").call(input);

// Fetch and print Actor results from the run's dataset (if any)
console.log('Results from dataset');
console.log(`💾 Check your data here: https://console.apify.com/storage/datasets/${run.defaultDatasetId}`);
const { items } = await client.dataset(run.defaultDatasetId).listItems();
items.forEach((item) => {
    console.dir(item);
});

// 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/js/docs

```

## Python example

```python
from apify_client import ApifyClient

# Initialize the ApifyClient with your Apify API token
# Replace '<YOUR_API_TOKEN>' with your token.
client = ApifyClient("<YOUR_API_TOKEN>")

# Prepare the Actor input
run_input = {}

# Run the Actor and wait for it to finish
run = client.actor("gochujang/technical-indicator-screener").call(run_input=run_input)

# Fetch and print Actor results from the run's dataset (if there are any)
print(f"💾 Check your data here: https://console.apify.com/storage/datasets/{run.default_dataset_id}")
for item in client.dataset(run.default_dataset_id).iterate_items():
    print(item)

# 📚 Want to learn more 📖? Go to → https://docs.apify.com/api/client/python/docs/quick-start

```

## CLI example

```bash
echo '{}' |
apify call gochujang/technical-indicator-screener --silent --output-dataset

```

## MCP server setup

```json
{
    "mcpServers": {
        "apify": {
            "type": "http",
            "url": "https://mcp.apify.com/?tools=fetch-actor-details,gochujang/technical-indicator-screener"
        }
    }
}
```

The hosted server signs you in with OAuth on first connect, so no API token belongs in this config. Clients without OAuth support can send an `Authorization: Bearer <APIFY_API_TOKEN>` header instead, using a token from API & Integrations in Apify Console (https://console.apify.com/settings/integrations).

## OpenAPI specification

Download the OpenAPI definition: https://api.apify.com/v2/actors/eA9njABmDXg3lQ8E5/builds/3myppUEcQD7BJ2rKN/openapi.json
