Ichimoku Scanner for ThinkorSwim


Not sure how many people on here use the Ichimoku indicator, but I thought I share this list just in case. Here are a few different Ichimoku scanners for ThinkorSwim.

Ichimoku Cloud Scan by Linus

# Ichimoku cloud scan

input nTe = 9;  # Tenkan length
input nKi = 26; # Kijun length
input nSp = 52; # SpanB length
def Tenkan = (Highest(high, nTe) + Lowest(low, nTe)) / 2;
def Kijun = (Highest(high, nKi) + Lowest(low, nKi)) / 2;
def SpanA = (Tenkan[nKi] + Kijun[nKi]) / 2;
def SpanB = (Highest(high[nKi], nSp) + Lowest(low[nKi], nSp)) / 2;

# The cloud is made up of SpanA and SpanB, so use Max and Min to scan above and below the cloud.  Only one plot can be active in the scan, so comment out the plot not being used with #.

#plot IsAboveCloud = low > Max(SpanA, SpanB);
plot IsBelowCloud = high < Min(SpanA, SpanB);

A compilation of other related scanners:
https://tos.mx/wq9kYL – Ichimoku Break Above the Cloud – 5 Minute Chart
https://tos.mx/d7340d – Ichimoku Break Below the Cloud – 5 Minute Chart
https://tos.mx/30fZt5 – Ichimoku Chikou Line Crosses Above The Cloud
https://tos.mx/uOwZmL – Ichimoku Chiko Line Crosses Below The Cloud
https://tos.mx/GSfZab – Ichimoku 3 candles above the cloud
https://tos.mx/HnAeox – Ichimoku 3 candles above the cloud
https://tos.mx/0WReVp – Ichimoku 2 candles below the cloud
https://tos.mx/yGwahs – Ichimoku 3 candles below the cloud – click for the thinkorswim downloads
https://tos.mx/QZU8Rn – Ichimoku inside the cloud daily
https://tos.mx/iFlKxM – Ichimoku inside the cloud houry
https://tos.mx/CP91iY – Ichimoku inside the cloud 10 min
https://tos.mx/WZBbqo – Ichimoku T crossabove K Daily
https://tos.mx/PlVCiY – Ichimoku – Ichimoku T crossabove K 10 min
https://tos.mx/rkGFAn – Ichimoku T crossabove K 1 hour


New member
Hi Ben, How do you read these in terms of bullish vs. bearish?

# Ichimoku Tenkan/Kijun an early exit warning study_StanL
#the preferred version is version 2 because the arrows accurately show the START of a HA dowtrend
#Now version 2.1

#hint:This is a Ichimoku Tenkan/Kijun an early exit warning study that plots the difference between the tenkan and kijun in histogram format. A YELLOW down warning arrow plots when a Heikin Ashi downtrend starts.
#Background:The difference of the Tenkan and the Kijun indicate the strength of this bullish signal as shown by the histogram above zero values. When this strength difference weakens a downward trend may(often?) start. Heikin Ashi candles are adept at showing trend development. The plotted YELLOW arrows are points to consider exiting even though the entity may be in buillsh territory(i.e. above the cloud). In summary, this is an early warning signal that is productive and calls your attention to it to consider exiting.
#USAGE:When YELLOW down arrows are present, watch the Heikin Ashi style candles to see the extent of the downtrend.(Configure your Heikin Ashi for 'Red Fill' when down. The DMI_Oscillator, MACD and ADX are good complementary studies
#SUMMARY: The histograqm shows  the change in strength of the bullish T/K signal while the YELLOW arrows call your attention to a possible start of a downtrend.

#TOS Title = Ichi_TK_Exit_Warning
# Version date = 5/17/14 by StanL, version 2
# Revision 2.1, added dots at the zero line 5/18/14

declare lower;
input Show_HA_Down = YES;#hint HA_Down:Toggles (ON/OFF) HA-Down-candle arrows showing the start of a HA-Down series. View the HA chart style to see the length of the down series.
#input Show_HA_Up = YES;#hint HA_Up:Toggles (ON/OFF) HA-Up-candle arrows showing the start of a HA-Up series. View the HA chart style to see the length of the up series.
plot Diff = Ichimoku().tenkan - Ichimoku().kijun;
plot ZeroLine = 0;

Diff.DefineColor("Positive and Up", Color.GREEN);
Diff.DefineColor("Positive and Down", Color.DARK_GREEN);
Diff.DefineColor("Negative and Down", Color.RED);
Diff.DefineColor("Negative and Up", Color.DARK_RED);
Diff.AssignValueColor(if Diff >= 0 then if Diff > Diff[1] then Diff.Color("Positive and Up") else Diff.Color("Positive and Down") else if Diff < Diff[1] then Diff.Color("Negative and Down") else Diff.Color("Negative and Up"));
plot HistoLiner = Diff;
#def HAopen = (open[1] + close[1]) / 2;
#def HAhigh = Max(high, close[1]);
#def HAlow = Min(low, close[1]);
#def HAclose = (open + high + low + close) / 4;

AddLabel(1, "Plot of Tenkan - Kijun early warning of T/K strength weakening", Color.WHITE);
AddLabel(1, "A YELLOW down arrow plots at the start of a HA downtrend.Watch the HA style chart candles to see the length of the downtrend", Color.YELLOW);

### Extracted Mobius Heikin Ashi code #
input Begin = 0000;

# Higher Aggregation
def barSeq = if SecondsTillTime(Begin) == 0 and
                   SecondsFromTime(Begin) == 0
                then 0
                else barSeq[1] + 1;
def agg = GetAggregationPeriod();
def BarsPerHour = 60 / (agg / 1000 / 60);
def bar = barSeq;
def barCount = if bar % BarsPerHour == 0
                  then bar
                  else Double.NaN;
def barCountOpen  = if !IsNaN(barCount)
                       then open
                       else barCountOpen[1];
def barCountHigh  = if IsNaN(barCount) and
                          high > barCountHigh[1]
                       then high
                       else if !IsNaN(barCount)
                       then high
                       else barCountHigh[1];
def barCountLow   = if IsNaN(barCount) and
                          low < barCountLow[1]
                       then low
                       else if !IsNaN(barCount)
                       then low
                       else barCountLow[1];
def barCountClose = if !IsNaN(barCount)
                       then close[1]
                       else barCountClose[1];
def HAopen_EV = Round(if HAopen_EV[1] == 0
                      then barCountOpen
                      else (HAopen_EV[1] + barCountClose[1]) / 2 /
                            TickSize(), 0) * TickSize();
def HAclose_EV = Round(if HAopen_EV[1] == 0
                        then OHLC4
                        else (barCountOpen + barCountHigh + barCountLow + HAopen_EV[1])
                              / 4 / TickSize(), 0) * TickSize();
def HAhigh_EV = Round(Max(barCountHigh, barCountClose[1]) /
                      TickSize(), 0) * TickSize();
def HAlow_EV = Round(Min(barCountLow, barCountClose[1]) /
                     TickSize(), 0) * TickSize();
# Color Block For Higher Aggregation
def Size = AbsValue(HAopen_EV - HAopen_EV);
def Block = CompoundValue(1, if HAopen_EV > Block[1] + Size[1]
                                then Block[1] + Size
                                else if HAopen_EV < Block[1] - Size[1]
                                then Block[1] - Size
                                else Block[1] , barCountClose);

plot cond1_EV = Block;
def cond2_EV = if Block != Block[1]
               then Block[1]
               else cond2_EV[1];

plot Block2 = cond2_EV;

#  AssignPriceColor(if HAclose < HAopen
#                   then Color.Red
#                   else Color.Green);

# Trade Management Conditions
def Bcond = CompoundValue(1, if HAclose_EV crosses above HAopen_EV
               then Bcond[1] + 1
               else if HAclose_EV crosses below HAopen_EV
               then 0
               else Bcond[1], 0);

#UP arrow is the start of an HA-up series.  Need to view HA Chart style to see the extent & end
#plot ArrowUp = if Bcond crosses above 0 && Show_HA_Up && Diff < 0 then HistoLiner[0] else Double.NaN;# this line used when up HA arrows are implemented
plot ArrowUp = if Bcond crosses above 0 && Diff < 0 then HistoLiner[0] else Double.NaN;

def Scond = CompoundValue(1, if HAclose_EV crosses below HAopen_EV
               then Scond[1] + 1
               else if barCountClose crosses above HAopen_EV
               then 0
               else Scond[1], 0);

#DOWN arrow is the start of an HA-down series. Need to view HA Chart style to see the extent & end
plot ArrowDn = if Scond crosses above 0 && Show_HA_Down && Diff > 0
                 then HistoLiner[0]
                 else Double.NaN;

def lineCond = if ArrowUp < ArrowDn
               then 1
               else if ArrowDn > ArrowUp
               then 1
               else -1;

plot line = if IsNaN(ArrowUp)
              then ArrowDn - (TickSize() * 2)
              else ArrowUp + (TickSize() * 2);
line.AssignValueColor(if lineCond == 1                   
                             then Color.GREEN
                             else if lineCond == -1
                             then Color.RED
                             else Color.WHITE);

######## define dot on zero line when above the cloud ######
def IsAboveCloud = if close > Ichimoku()."Span A" && close > Ichimoku()."Span B" then 1 else 0; # close is above the cloud
def IsBelowCloud = if close < Ichimoku()."Span A" && close < Ichimoku()."Span B" then 1 else 0; # close is below the cloud
Plot AboveCloudDot = if IsAboveCloud then 0 else double.nan;

Plot BelowCloudDot = if IsBelowCloud then 0 else double.nan;

#Define variables used to place a bubble
def barNum = BarNumber();
def FirstBar = if barNum == 1 then 1 else 0;
AddChartBubble(FirstBar, 0, "GREEN dot = close IS ABOVE CLOUD\nRED dot = close IS BELOW CLOUD", Color.PINK,no);
#---- End Of Code ---


Thanks!! @BenTen

input nTe = 9;  # Tenkan length
input nKi = 26; # Kijun length
input nSp = 52; # SpanB length
def Tenkan = (Highest(high, nTe) + Lowest(low, nTe)) / 2;
def Kijun = (Highest(high, nKi) + Lowest(low, nKi)) / 2;
def SpanA = (Tenkan[nKi] + Kijun[nKi]) / 2;
def SpanB = (Highest(high[nKi], nSp) + Lowest(low[nKi], nSp)) / 2;

def X = Tenkan * .10;
plot scan = absvalue(close - Tenkan) is less than or equal to X ;

HAHAHA, YAS. Decided to give it another shot and play around with the original code you gave me. I FINALLY got it to work for the specific thing I had in mind. I know it's elementary but I am a complete noob when it comes to this. I can't stress how happy I was when I finally executed the code with no problem!

Will backtest and share a strategy for y'all soon!

Ninja Bull

New member
Hey Ben, great Ichimoku Cloud Scanner!!! Plugged into TOS and works good! Quick question: can you modify it to show only those results with 3 bars ago. In other words, this will limit it to those breakouts that have recently happened and will allow you to quickly jump in the trade from the beginning. The other scanner scripts that have been posted don't work...Thanks in advance!


New member
Hey @BenTen ! I have a couple quick questions. is there a difference between the two "3 candles above the cloud" scans? Also for those scans TOS says "Add label" must be taken out so does that make the scan miss anything important?


New member
I was wondering if there's a way to get a scanner for the ichimoku clouds where it shows stocks that are 3 candles above the cloud also looking for 3 candles below the clouds also looking for a scan where the candles just cross above the clouds and below the clouds if thats possible any help will be much appreciated
Thank you


New member
Hello. I thank you for the indicators. I wanted to download the indicators above for Ichimoku, but they don't scan. In other words, I applied the Chikou above the cloud, and I can find it in the personal line-up, but the scanner button does not respond nor is it the greenish color. Please tell me what I am doing wrong? P.S I hope to have membership one day, but i have many medical bills, so be patient with me. Thats why i am trying to trade.
I think the biggest problem is coming from that Chikou line. It doesn't seem to like to scan for the negative number in code that looks like close[-displace].


New member
Hello Everyone, I'm trying to add a custom alert (other than bell, chime, ding or chimes) to this script I found in the thinkscript Onedrive. Any help would be greatly appreciated. Thank you.

# Adaptation of Ichimoku Strategy
# Mobius
# Revised Tenkan and Kijun
# V01.12.2013

input nA = 8;
input nB = 21;

def Tenkan = (Highest(high, nA) + Lowest(low, nA)) / 2;
def Kijun = (Highest(high, nB) + Lowest(low, nB)) / 2;
def "Span A" = (Tenkan[nA] + Kijun[nA]) / 2;
def "Span B" = (Highest(high[nA], nB) + Lowest(low[nA], nB)) / 2;

plot Chikou = Inertia(close[-nA], nB);

# Color Config
#"Span A".SetDefaultColor(Color.PLUM);
#"Span B".SetDefaultColor(Color.YELLOW);
DefineGlobalColor("Bullish", Color.YELLOW);
DefineGlobalColor("Bearish", Color.RED);

#AddCloud("Span A", "Span B", GlobalColor("Bullish"), GlobalColor("Bearish"));
##Arrows on Chikou Crossover
# changed from crosses above to >
plot ArrowUp = Chikou crosses above Max("Span A", "Span B");

# changed from crosses below to <
plot ArrowDn = Chikou crosses below Min("Span A", "Span B");


Add this to the end of your script:

# Alerts
Alert(ArrowUp, " ", Alert.Bar, Sound.Chimes);
Alert(ArrowDn, " ", Alert.Bar, Sound.Bell);


@british43 Yes, but that is using a different setting/method. I don't know if it is compatible with this sort of indicator, though. If anything, you can go to MarketWatch > Alerts and see if you can find anything.



New member
Hi guys, need help in code the following 2 ichimoku scans

Bullish Scan

  • Current closing price breaks above Kumo
  • Current closing price above Tenkan and Tenkan above Kijun
  • Chikou free or clear from any price interaction (meaning the chikou is not within the interference of any candles)
  • Future kumo is bullish
Bearish Scan

  • Current closing price breaks below Kumo
  • Current closing price below Tenkan and Tenkan below Kijun
  • Chikou free or clear from any price interaction (meaning the chikou is not within the interference of any candles)
  • Future kumo is bearish
Thank you so much


New member
I am testing this study out and so far I have not seen the arrows re-paint. This is on a one minute chart. Just curious, is anyone aware of a similar scan?

--Correcting myself, in watching this more today I have seen a signal fire and then more than one price bar later disappear from the chart. To me that is a re-paint, but that is just me.
Last edited:

Similar threads