How do I find useful indicators to help me on my way to learning how to scan for eligible stocks for swing trading or for options trading.
Hey guys I started trading a 8-9 months ago and options trading caught my attention. I’ve been trying to get better at 2-4 week swing trading options but I’m having a difficult time finding indicators and decent stocks and when I do find one I hesitate. What kind of indicator and screeners would you guys recommend and what tips do you guys have? Thank you for the help
Join useThinkScript to post your question to a community of 21,000+ developers and traders.
Swing Trading is a different animal as @useThinkScript mentions. You need to think like a hunter hunting a very elusive and smart prey. You are a hunter without prejudice!!!Reliable and effective scans for swing trading
What have you found to be the most effective and reliable scans for swing trading? I want to use daily and weekly charts on the symbols that the scans have listed. Thank you very much in advance for any help you can give.
#=============================================================
# INSTITUTIONAL SWING SCANNER V1
# Long Only
# Designed for 14-60 Day Swing Trades
# antwerks
#=============================================================
input MinScore = 80;
#-------------------------
# Weights
#-------------------------
input TrendWeight = 35;
input StructureWeight = 25;
input MomentumWeight = 20;
input ParticipationWeight = 10;
input QualityWeight = 10;
#=============================================================
# QUALITY
#=============================================================
def AvgVol = Average(volume, 50);
def DollarVolume = AvgVol * close;
def Quality =
close > 20 and
AvgVol > 3000000 and
DollarVolume > 100000000;
def QualityScore =
if Quality then QualityWeight else 0;
#=============================================================
# TREND
#=============================================================
def SMA21 = Average(close,21);
def SMA50 = Average(close,50);
def SMA200 = Average(close,200);
def Trend =
close > SMA200 and
SMA50 > SMA200 and
SMA50 > SMA50[5] and
SMA200 > SMA200[10];
# Require an established Golden Cross
def EstablishedTrend =
Sum(SMA50 > SMA200,20) == 20;
def TrendScore =
if Trend and EstablishedTrend
then TrendWeight
else 0;
#=============================================================
# STRUCTURE
#=============================================================
def Resistance =
Highest(high[1],20);
def Support =
Lowest(low[1],20);
# Healthy Pullback
def Pullback =
low <= SMA21 * 1.02 and
close > SMA21;
# Retest after breakout
def Retest =
low <= Resistance * 1.01 and
close > Resistance;
# Controlled Breakout
def Breakout =
close > Resistance and
close <= SMA50 * 1.08;
def Structure =
Pullback or
Retest or
Breakout;
def StructureScore =
if Structure
then StructureWeight
else 0;
#=============================================================
# LINDA STOCHASTIC
#=============================================================
input KLength = 8;
input DLength = 5;
def LL = Lowest(low,KLength);
def HH = Highest(high,KLength);
def K =
if HH != LL
then 100 * (close - LL) / (HH - LL)
else 50;
def D = Average(K,DLength);
def Momentum =
K < 35 and
K crosses above D and
D > D[1] and
K > K[1];
def MomentumScore =
if Momentum
then MomentumWeight
else 0;
#=============================================================
# PARTICIPATION
#=============================================================
def RVOL =
volume / Average(volume,50);
def ATR14 =
Average(TrueRange(high,close,low),14);
def ATR50 =
Average(ATR14,50);
def Participation =
RVOL > 1.10 and
ATR14 > ATR50 and
volume > volume[1];
def ParticipationScore =
if Participation
then ParticipationWeight
else 0;
#=============================================================
# EXTENSION FILTER
#=============================================================
def NotExtended =
close <= SMA50 * 1.08;
#=============================================================
# TOTAL SCORE
#=============================================================
def Score =
TrendScore +
StructureScore +
MomentumScore +
ParticipationScore +
QualityScore;
#=============================================================
# FINAL SCAN
#=============================================================
plot scan =
Trend and
EstablishedTrend and
Quality and
NotExtended and
Score >= MinScore;
#=========================================================
# INSTITUTIONAL SWING SCANNER V3.0
# PART 1
# ANTWERKS
#=========================================================
#==========================
# USER INPUTS
#==========================
input MinimumScore = 75;
input MinPrice = 20;
input MinAvgVolume = 3000000;
input MinDollarVolume = 100000000;
input TrendWeight = 40;
input StructureWeight = 25;
input MomentumWeight = 15;
input LeadershipWeight = 10;
input QualityWeight = 10;
input EMAFast = 21;
input SMAMid = 50;
input SMASlow = 200;
input ExtensionLimit = 0.15;
input LindaLength = 8;
input LindaSmooth = 5;
input RVOLLength = 50;
input ATRLength = 14;
#==========================
# MOVING AVERAGES
#==========================
def EMA21 = ExpAverage(close, EMAFast);
def SMA50 = Average(close, SMAMid);
def SMA200 = Average(close, SMASlow);
#==========================
# QUALITY ENGINE
#==========================
def AvgVolume50 = Average(volume,50);
def DollarVolume =
AvgVolume50 * close;
def QualityScore =
(if close > MinPrice then 3 else 0)
+
(if AvgVolume50 > MinAvgVolume then 4 else 0)
+
(if DollarVolume > MinDollarVolume then 3 else 0);
#==========================
# TREND ENGINE
#==========================
def TrendScore =
(if close > SMA200 then 10 else 0)
+
(if SMA50 > SMA200 then 10 else 0)
+
(if EMA21 > SMA50 then 8 else 0)
+
(if SMA50 > SMA50[5] then 5 else 0)
+
(if SMA200 > SMA200[10] then 4 else 0)
+
(if Sum(SMA50 > SMA200,20) == 20 then 3 else 0);
#==========================
# STRUCTURE ENGINE V2
#==========================
def Distance50 = AbsValue((close - SMA50) / SMA50);
#--------------------------------
# Extension Score (8 Points)
#--------------------------------
def ExtensionScore =
if Distance50 <= .05 then 8
else if Distance50 <= .10 then 6
else if Distance50 <= .15 then 4
else if Distance50 <= .20 then 2
else 0;
#--------------------------------
# Position Score (7 Points)
#--------------------------------
def PositionScore =
if close > EMA21 then 7
else if close > SMA50 then 5
else if close > SMA200 then 2
else 0;
#--------------------------------
# EMA Alignment (5 Points)
#--------------------------------
def AlignmentScore =
if EMA21 > SMA50 and SMA50 > SMA200 then 5
else if SMA50 > SMA200 then 3
else 0;
#--------------------------------
# Trend Health (5 Points)
#--------------------------------
def TrendHealth =
(close > close[5]) +
(close > close[10]) +
(SMA50 > SMA50[5]) +
(EMA21 > EMA21[5]) +
(high > high[10]);
def TrendHealthScore =
TrendHealth;
#--------------------------------
# Final Structure Score
#--------------------------------
def StructureScore =
ExtensionScore +
PositionScore +
AlignmentScore +
TrendHealthScore;
#==========================
# MOMENTUM ENGINE
#==========================
def LL =
Lowest(low,LindaLength);
def HH =
Highest(high,LindaLength);
def FastK =
if HH != LL
then 100 * (close - LL) / (HH - LL)
else 50;
def FastD =
Average(FastK,LindaSmooth);
def MomentumScore =
(if FastK < 40 then 5 else 0)
+
(if FastK crosses above FastD then 5 else 0)
+
(if FastD > FastD[1] then 3 else 0)
+
(if FastK > FastK[1] then 2 else 0);
#==========================
# LEADERSHIP ENGINE
#==========================
def SwamiBull =
reference SwamiRelativePerformance();
def RVOL =
if Average(volume, RVOLLength) != 0
then volume / Average(volume, RVOLLength)
else 0;
def ATR14 =
Average(TrueRange(high, close, low), ATRLength);
def ATR50 =
Average(ATR14, 50);
def SwamiScore =
if SwamiBull then 4 else 0;
def RVOLScore =
if RVOL >= 2.00 then 4
else if RVOL >= 1.50 then 3
else if RVOL >= 1.20 then 2
else if RVOL >= 1.05 then 1
else 0;
def ATRScore =
if ATR14 > ATR50 * 1.20 then 2
else if ATR14 > ATR50 then 1
else 0;
def LeadershipScore =
SwamiScore +
RVOLScore +
ATRScore;
#==========================
# NORMALIZE SCORES
#==========================
def TrendNormalized =
TrendScore;
def StructureNormalized =
StructureScore;
def MomentumNormalized =
MomentumScore;
def LeadershipNormalized =
LeadershipScore;
def QualityNormalized =
QualityScore;
#==========================
# TOTAL INSTITUTIONAL SCORE
#==========================
def TotalScore =
TrendNormalized +
StructureNormalized +
MomentumNormalized +
LeadershipNormalized +
QualityNormalized;
#==========================
# REQUIRED INSTITUTIONAL FILTERS
#==========================
def InstitutionalTrend =
close > SMA200 and
SMA50 > SMA200;
def HealthyStructure =
StructureScore >= 14;
def InstitutionalQuality =
close > MinPrice and
AvgVolume50 > MinAvgVolume;
#==========================
# FINAL SCAN
#==========================
plot scan =
InstitutionalTrend
and HealthyStructure
and InstitutionalQuality
and TotalScore >= MinimumScore;
OK NO- EXTENSION ALTHOUGH IMPORTANT is not the straw that breaks the camels back yes we need a filter to weed out some stocks but not make it a hard filter less we miss a continuation of a strong performing stock - ok one more - let me thinkBig issue here- how far of an extension is too far? I am thinking - get the stocks on the scanner and the trader decide after looking at the chart- what is over extension - a quick take:
Overextension guardrail
For a 2 week to 3 month swing, the problem is not only being right on direction. The entry has to be close enough to support that the stop, target, and time window still make sense.
Simple rule- If three or more red flags are present, skip the entry and wait for a reset.
This avoids buying after the easy part of the move has already happened.
Signal:
Overextended reading
Trading decision
Price stretched from trend
Above 20-day avg by 8–12% or above 50-day avg by 15–25%
Do not chase; wait for a pullback or base.
RSI is overheated
RSI 14 above 70; extreme if above 80
Avoid fresh longs unless risk is very small.
Too many ATRs above support
Entry is more than 2 ATR from the 20-day avg or last pivot
Stop is likely too far for a clean swing.
Climax move
Large gap up, wide candle, or volume spike after a fast run
Treat as late-stage buying, not a fresh setup.
Bad reward-to-risk
Logical stop is more than 8–12% below entry or target is less than 2x risk
Pass until the stock resets near structure???
Maybe grade it 0–1 red flags = Tradeable
Setup can be considered if market and sector confirm.
2 red flags = Wait
Use smaller size or wait for a tighter entry.
3 or more red flags = No chase
Overextended for a 2 week to 3 month swing trade.
What to wait for =
Pulls back toward the 20-day or 50-day moving average without breaking trend.
Builds a tight 5–15 session base with volume drying up.
RSI cools back toward 45–60 while price holds higher lows.
A logical stop sits just below support with risk under roughly 6–10%.
thoughts????
#=========================================================
# INSTITUTIONAL SWING OPPORTUNITY SCANNER V6
# LONG ONLY
# 2-12 WEEK SWING CANDIDATES
# antwerks
#=========================================================
input MinimumScore = 82;
input MinPrice = 20;
input MinAvgVolume = 3000000;
input MinDollarVolume = 100000000;
input FastEMALength = 21;
input MidSMALength = 50;
input SlowSMALength = 200;
input LindaLength = 8;
input LindaSmooth = 5;
input StructureLookback = 20;
input VolumeLength = 50;
input ATRLength = 14;
#=========================================================
# MOVING AVERAGES
#=========================================================
def EMA21 = ExpAverage(close, FastEMALength);
def SMA50 = Average(close, MidSMALength);
def SMA200 = Average(close, SlowSMALength);
#=========================================================
# QUALITY ENGINE - 5 POINTS
#=========================================================
def AvgVol = Average(volume, VolumeLength);
def DollarVol = AvgVol * close;
def QualityScore =
(if close > MinPrice then 2 else 0) +
(if AvgVol > MinAvgVolume then 2 else 0) +
(if DollarVol > MinDollarVolume then 1 else 0);
#=========================================================
# TREND ENGINE - 40 POINTS
#=========================================================
def TrendScore =
(if close > SMA200 then 8 else 0) +
(if SMA50 > SMA200 then 8 else 0) +
(if EMA21 > SMA50 then 8 else 0) +
(if EMA21 > EMA21[5] then 6 else 0) +
(if SMA50 > SMA50[10] then 6 else 0) +
(if SMA200 > SMA200[20] then 4 else 0);
#=========================================================
# STRUCTURE ENGINE - 30 POINTS
#=========================================================
def RecentHigh = Highest(high, StructureLookback);
def PriorHigh = Highest(high[StructureLookback], StructureLookback);
def RecentLow = Lowest(low, StructureLookback);
def PriorLow = Lowest(low[StructureLookback], StructureLookback);
def HigherHigh = RecentHigh > PriorHigh;
def HigherLow = RecentLow > PriorLow;
def CloseNearHigh =
close >= Highest(high, StructureLookback) * 0.96;
def HoldingTrend =
close > EMA21 or close > SMA50;
def StrongStack =
close > EMA21 and EMA21 > SMA50 and SMA50 > SMA200;
def ConstructiveBase =
low > Lowest(low, 10)[10] and close > SMA50;
def StructureScore =
(if HigherHigh then 7 else 0) +
(if HigherLow then 8 else 0) +
(if CloseNearHigh then 5 else 0) +
(if HoldingTrend then 4 else 0) +
(if StrongStack then 4 else 0) +
(if ConstructiveBase then 2 else 0);
#=========================================================
# LINDA MOMENTUM ENGINE - 15 POINTS
#=========================================================
def LL = Lowest(low, LindaLength);
def HH = Highest(high, LindaLength);
def FastK =
if HH != LL
then 100 * (close - LL) / (HH - LL)
else 50;
def FastD = Average(FastK, LindaSmooth);
def MomentumScore =
(if FastK > FastD then 4 else 0) +
(if FastK > FastK[1] then 4 else 0) +
(if FastD > FastD[1] then 3 else 0) +
(if FastK < 80 then 2 else 0) +
(if FastK crosses above FastD then 2 else 0);
#=========================================================
# PARTICIPATION ENGINE - 10 POINTS
#=========================================================
def RVOL =
if AvgVol != 0
then volume / AvgVol
else 0;
def ATR = Average(TrueRange(high, close, low), ATRLength);
def ATRBase = Average(ATR, 50);
def ParticipationScore =
(if RVOL >= 1.50 then 4
else if RVOL >= 1.20 then 3
else if RVOL >= 1.05 then 2
else 0) +
(if ATR > ATRBase then 3 else 0) +
(if volume > volume[1] then 3 else 0);
#=========================================================
# LIGHT EXTENSION WARNING - NOT A HARD FILTER
#=========================================================
def ExtremeExtension =
close > EMA21 * 1.25;
def ExtensionPenalty =
if ExtremeExtension then 5 else 0;
#=========================================================
# TOTAL SCORE
#=========================================================
def TotalScore =
TrendScore +
StructureScore +
MomentumScore +
ParticipationScore +
QualityScore -
ExtensionPenalty;
#=========================================================
# BASE REQUIREMENTS
#=========================================================
def InstitutionalTrend =
close > SMA200 and
SMA50 > SMA200;
def ConstructiveStructure =
StructureScore >= 18;
def TradableQuality =
close > MinPrice and
AvgVol > MinAvgVolume;
#=========================================================
# FINAL SCAN
#=========================================================
plot scan =
InstitutionalTrend and
ConstructiveStructure and
TradableQuality and
TotalScore >= MinimumScore;
| Thread starter | Similar threads | Forum | Replies | Date |
|---|---|---|---|---|
| G | NQ100 useful metrics (labels) | Questions | 4 | |
| M | Explain what this is useful for? | Questions | 3 | |
| Z | indicators for Sizzle Index low → options activity + expected movement? | Questions | 1 | |
| D | Indicators setup for intraday crypto | Questions | 6 | |
|
|
indicators for Sell Put Options | Questions | 3 |
Start a new thread and receive assistance from our community.
useThinkScript is the #1 community of stock market investors using indicators and other tools to power their trading strategies. Traders of all skill levels use our forums to learn about scripting and indicators, help each other, and discover new ways to gain an edge in the markets.
We get it. Our forum can be intimidating, if not overwhelming. With thousands of topics, tens of thousands of posts, our community has created an incredibly deep knowledge base for stock traders. No one can ever exhaust every resource provided on our site.
If you are new, or just looking for guidance, here are some helpful links to get you started.