Skip to content

Crypto Trading Strategies

Screen cryptocurrencies using various trading strategies.

Market Cap Tiers

Large Cap Only

Focus on established cryptocurrencies:

from tvscreener import CryptoScreener, CryptoField

cs = CryptoScreener()
cs.where(CryptoField.MARKET_CAPITALIZATION > 10e9)  # >$10B
cs.sort_by(CryptoField.MARKET_CAPITALIZATION, ascending=False)
cs.select(
    CryptoField.NAME,
    CryptoField.PRICE,
    CryptoField.MARKET_CAPITALIZATION,
    CryptoField.CHANGE_PERCENT
)

df = cs.get()

Mid Cap Discovery

Find emerging projects:

cs = CryptoScreener()
cs.where(CryptoField.MARKET_CAPITALIZATION.between(100e6, 1e9))
cs.where(CryptoField.VOLUME > 5_000_000)
cs.sort_by(CryptoField.CHANGE_PERCENT, ascending=False)

df = cs.get()

Small Cap with Volume

High risk, high potential:

cs = CryptoScreener()
cs.where(CryptoField.MARKET_CAPITALIZATION.between(10e6, 100e6))
cs.where(CryptoField.VOLUME > 1_000_000)  # Liquidity filter
cs.sort_by(CryptoField.WEEKLY_PERFORMANCE, ascending=False)

df = cs.get()

Momentum Strategies

Daily Gainers

cs = CryptoScreener()
cs.where(CryptoField.CHANGE_PERCENT > 10)
cs.where(CryptoField.VOLUME > 10_000_000)
cs.sort_by(CryptoField.CHANGE_PERCENT, ascending=False)
cs.set_range(0, 50)

df = cs.get()

Weekly Momentum

cs = CryptoScreener()
cs.where(CryptoField.WEEKLY_PERFORMANCE > 30)
cs.where(CryptoField.MARKET_CAPITALIZATION > 100e6)
cs.sort_by(CryptoField.WEEKLY_PERFORMANCE, ascending=False)

df = cs.get()

Monthly Breakouts

cs = CryptoScreener()
cs.where(CryptoField.MONTHLY_PERFORMANCE > 50)
cs.where(CryptoField.VOLUME > 5_000_000)
cs.sort_by(CryptoField.MONTHLY_PERFORMANCE, ascending=False)

df = cs.get()

Technical Analysis

RSI Oversold

cs = CryptoScreener()
cs.where(CryptoField.RELATIVE_STRENGTH_INDEX_14 < 30)
cs.where(CryptoField.MARKET_CAPITALIZATION > 100e6)
cs.select(
    CryptoField.NAME,
    CryptoField.PRICE,
    CryptoField.RELATIVE_STRENGTH_INDEX_14,
    CryptoField.CHANGE_PERCENT
)
cs.sort_by(CryptoField.RELATIVE_STRENGTH_INDEX_14, ascending=True)

df = cs.get()

RSI Overbought

Potential reversal candidates:

cs = CryptoScreener()
cs.where(CryptoField.RELATIVE_STRENGTH_INDEX_14 > 70)
cs.where(CryptoField.VOLUME > 10_000_000)
cs.sort_by(CryptoField.RELATIVE_STRENGTH_INDEX_14, ascending=False)

df = cs.get()

MACD Bullish

cs = CryptoScreener()
cs.where(CryptoField.MACD_LEVEL_12_26 > 0)
cs.where(CryptoField.VOLUME > 5_000_000)

df = cs.get()

Above Moving Averages

Note: Field-to-field comparisons are NOT supported by the TradingView API. Retrieve data and filter with pandas instead:

cs = CryptoScreener()
cs.where(CryptoField.MARKET_CAPITALIZATION > 1e9)
cs.select(
    CryptoField.NAME,
    CryptoField.PRICE,
    CryptoField.SIMPLE_MOVING_AVERAGE_50,
    CryptoField.SIMPLE_MOVING_AVERAGE_200
)

df = cs.get()

# Filter using pandas
bullish = df[
    (df['Price'] > df['SMA 50']) &
    (df['SMA 50'] > df['SMA 200'])
]

df = cs.get()

Volume Analysis

Volume Spike

Unusual volume activity:

cs = CryptoScreener()
cs.where(CryptoField.RELATIVE_VOLUME > 3)  # 3x normal volume
cs.where(CryptoField.MARKET_CAPITALIZATION > 50e6)
cs.sort_by(CryptoField.RELATIVE_VOLUME, ascending=False)

df = cs.get()

High Volume Movers

cs = CryptoScreener()
cs.where(CryptoField.VOLUME > 100_000_000)
cs.where(CryptoField.CHANGE_PERCENT.not_between(-2, 2))  # Significant move
cs.sort_by(CryptoField.VOLUME, ascending=False)

df = cs.get()

Multi-Timeframe

Daily + Hourly RSI

cs = CryptoScreener()

# Daily RSI moderate
cs.where(CryptoField.RELATIVE_STRENGTH_INDEX_14.between(35, 50))

# Hourly RSI oversold
rsi_1h = CryptoField.RELATIVE_STRENGTH_INDEX_14.with_interval('60')
cs.where(rsi_1h < 30)

cs.where(CryptoField.MARKET_CAPITALIZATION > 500e6)
cs.select(
    CryptoField.NAME,
    CryptoField.PRICE,
    CryptoField.RELATIVE_STRENGTH_INDEX_14,
    rsi_1h,
    CryptoField.CHANGE_PERCENT
)

df = cs.get()

4-Hour Trend Confirmation

cs = CryptoScreener()

# Daily trend up
cs.where(CryptoField.PRICE > CryptoField.SIMPLE_MOVING_AVERAGE_50)

# 4-hour MACD bullish
macd_4h = CryptoField.MACD_LEVEL_12_26.with_interval('240')
cs.where(macd_4h > 0)

# 4-hour RSI not overbought
rsi_4h = CryptoField.RELATIVE_STRENGTH_INDEX_14.with_interval('240')
cs.where(rsi_4h < 65)

df = cs.get()

Volatility Screens

High Volatility

For active traders:

cs = CryptoScreener()
cs.where(CryptoField.VOLATILITY > 5)
cs.where(CryptoField.VOLUME > 10_000_000)
cs.sort_by(CryptoField.VOLATILITY, ascending=False)

df = cs.get()

Low Volatility Large Cap

For conservative positions:

cs = CryptoScreener()
cs.where(CryptoField.MARKET_CAPITALIZATION > 5e9)
cs.where(CryptoField.VOLATILITY < 3)
cs.sort_by(CryptoField.MARKET_CAPITALIZATION, ascending=False)

df = cs.get()

Recovery Screens

Bouncing from Lows

cs = CryptoScreener()
cs.where(CryptoField.MONTHLY_PERFORMANCE < -30)  # Down 30%+ monthly
cs.where(CryptoField.CHANGE_PERCENT > 5)          # Up today
cs.where(CryptoField.VOLUME > 5_000_000)
cs.sort_by(CryptoField.CHANGE_PERCENT, ascending=False)

df = cs.get()

RSI Reversal Setup

cs = CryptoScreener()
cs.where(CryptoField.RELATIVE_STRENGTH_INDEX_14.between(30, 40))
cs.where(CryptoField.CHANGE_PERCENT > 0)
cs.where(CryptoField.MARKET_CAPITALIZATION > 100e6)

df = cs.get()

Specific Cryptos

Track specific assets:

cs = CryptoScreener()
cs.symbols = {
    "query": {"types": []},
    "tickers": [
        "BINANCE:BTCUSDT",
        "BINANCE:ETHUSDT",
        "BINANCE:SOLUSDT",
        "BINANCE:ADAUSDT",
        "BINANCE:DOTUSDT"
    ]
}
cs.select_all()

df = cs.get()

Streaming Monitor

Real-time updates:

cs = CryptoScreener()
cs.where(CryptoField.MARKET_CAPITALIZATION > 1e9)
cs.sort_by(CryptoField.CHANGE_PERCENT, ascending=False)
cs.set_range(0, 20)
cs.select(
    CryptoField.NAME,
    CryptoField.PRICE,
    CryptoField.CHANGE_PERCENT,
    CryptoField.VOLUME
)

for df in cs.stream(interval=10):
    print("\n=== Top 20 Large Cap Movers ===")
    print(df)

Notes

  • Crypto markets are 24/7 - different dynamics than stocks
  • Higher volatility requires stricter risk management
  • Volume is crucial for entry/exit execution
  • Consider timezone for volume patterns