Have you ever tried trading the markets with a slingshot? No, I’m not talking about using a slingshot to shoot arrows or rocks at your target. I’m talking about using Scot1and’s Slingshot Trading Setup.
In this blog post, I will be discussing the trading setup and how you can use it to trade the markets.
For Nerds/Programmers (and I say that proudly):
- Watch the Backtesting the Slingshot Trading Strategy Using Python Video.
- Follow along with the Slingshot Trading Strategy Jupyter Notebook
Who Is Scot1and?
Scotland is a professional trader with multiple triple-digit annual returns under his belt. He posts his trades publicly on Twitter under his handle @scot1andT, and the slingshot is one of his bread-and-butter setups.
What Is the Slingshot?
Scot1and developed the slingshot setup to get into a powerful stock after a pullback just as the downward momentum stops and the stock begins to go back up.
The slingshot indicator, which is a component of the slingshot setup, fires when the current bar’s close crosses the 4-ema of the highs.
How to Trade the Slingshot Setup
Like everything in trading, there’s a lot of nuance and understanding of market dynamics. But in essence, here are the rules:
- A slingshot indicator cross (duh)
- A pullback in a strong stock (required)
- A range break (required)
- Consolidation (recommended)
The stop loss is at the low of the slingshot indicator trigger bar, so we want consolidation as it lowers the amount of risk on the trade.
If you have difficulty seeing range contraction, you can add the ADR or ATR to your charts.
Setting up the Slingshot Indicator in TradingView
Add the following code to the Pine Editor. Thank you, @taplot.
// This source code is subject to the terms of the Mozilla Public License
// 2.0 at https://mozilla.org/MPL/2.0/
// © TaPlot
//@version=5
//Code written by TA Plot https://twitter.com/TaPlot
//Written on 11/28/2021
indicator(title="TAPLOT SlingShot", shorttitle="Sling Shot", overlay=true)
C_Paintbar = input.color(title="Bar Color", defval=color.new(color.orange,0))
Paintbar=input(true,'Paint Bar?')
ShowShape=input(false,'Show SlingShot?')
EMAlen = input.int(4, minval=1, title="EMA-Length")
//MA line calculation
EMALine = ta.ema(high, EMAlen)
plot(EMALine, title="EMA")
slingshot = close > EMALine and close[1] < EMALine[1] and close[2] < EMALine[2] and close[3] < EMALine[3]
plotshape(slingshot and ShowShape?1:na,style=shape.labelup, location=location.belowbar, size=size.tiny)
barcolor(Paintbar and slingshot? C_Paintbar : na)
Setting up the Slingshot Indicator in TradingView
Here are the TC2000 Slingshot settings. Thank you, @scot1landT.

The Slingshot Backtest Results
I used the following parameters for this backtest:
- Period: Hourly
- Universe: QQQ
- Filter: Stocks above 50-day SMA (strong stocks)
- Filter: Stocks below their 10-day EMA (pullback)
- Entry: Slingshot (Close above hourly 4-period EMA)
- Exit: RR ratio or stop loss hit
2020-01-01 to 2021-12-31
rr | won | lost | win_streak | lose_streak | win_perc | edge |
---|---|---|---|---|---|---|
1 | 2075 | 1725 | 14 | 9 | 0.546053 | 0.0921 |
2 | 1425 | 1876 | 8 | 14 | 0.431687 | 0.2950 |
3 | 1072 | 1867 | 7 | 17 | 0.364750 | 0.4590 |
4 | 874 | 1845 | 6 | 16 | 0.321442 | 0.6072 |
5 | 718 | 1821 | 5 | 17 | 0.282788 | 0.6967 |
6 | 587 | 1769 | 5 | 26 | 0.249151 | 0.7440 |
7 | 514 | 1717 | 5 | 26 | 0.230390 | 0.8431 |
8 | 458 | 1679 | 5 | 26 | 0.214319 | 0.9288 |
9 | 427 | 1667 | 5 | 26 | 0.203916 | 1.0391 |
10 | 386 | 1633 | 4 | 26 | 0.191184 | 1.1030 |
2018-01-01 to 2019-12-31
rr | won | lost | win_streak | lose_streak | win_perc | edge |
---|---|---|---|---|---|---|
1 | 1152 | 1031 | 11 | 9 | 0.527714 | 0.0554 |
2 | 710 | 1065 | 6 | 14 | 0.400000 | 0.2000 |
3 | 510 | 1025 | 5 | 14 | 0.332248 | 0.3289 |
4 | 381 | 997 | 4 | 14 | 0.276488 | 0.3824 |
5 | 302 | 934 | 4 | 14 | 0.244337 | 0.4660 |
6 | 239 | 885 | 4 | 14 | 0.212633 | 0.4884 |
7 | 214 | 868 | 5 | 14 | 0.197782 | 0.5822 |
8 | 173 | 828 | 4 | 14 | 0.172827 | 0.5554 |
9 | 150 | 793 | 3 | 14 | 0.159067 | 0.5906 |
10 | 128 | 769 | 3 | 14 | 0.142698 | 0.5696 |
2016-01-01 to 2017-12-31
rr | won | lost | win_streak | lose_streak | win_perc | edge |
---|---|---|---|---|---|---|
1 | 1255 | 959 | 11 | 7 | 0.566847 | 0.1336 |
2 | 766 | 998 | 8 | 10 | 0.434240 | 0.3027 |
3 | 559 | 941 | 8 | 11 | 0.372667 | 0.4906 |
4 | 421 | 937 | 5 | 12 | 0.310015 | 0.5500 |
5 | 344 | 885 | 5 | 12 | 0.279902 | 0.6794 |
6 | 294 | 852 | 5 | 12 | 0.256545 | 0.7958 |
7 | 257 | 814 | 4 | 13 | 0.239963 | 0.9197 |
8 | 220 | 785 | 4 | 13 | 0.218905 | 0.9701 |
9 | 209 | 781 | 4 | 13 | 0.211111 | 1.1111 |
10 | 186 | 737 | 4 | 13 | 0.201517 | 1.2166 |
The hourly slingshot works even during the period, including Covid.
The daily and the hourly results are roughly similar from a risk-reward perspective, with the hourly slingshot providing many more trading opportunities. Due to a lack of trades, I had to use other trading parameters to surface that information.
The Bottom Line
This is a simple vectorized backtest using basic parameters and logic.
Using confluence, such as an undercut and reclaim (U&R) of the 50-day or combining the hourly slingshot with a daily, will provide better results — and this says nothing about range contraction and breaks.
The goal with this backtest is to identify if the setup works at a high level, which it does — it’s up to you to refine it as Scot1and has. Maybe someday, you’ll be hitting triple-digit annual returns like the man himself if you do this.