Create your own candlestick pattern in ThinkorSwim

Buckbull

Active member
Is Anyone familiar with making your own candlestick pattern study ? Im trying to set up a bottoming tail on one study and a topping tail on another . Any pointers ?

Screenshot%20885.png
 
Last edited by a moderator:

tomsk

Well-known member
VIP
@Buckbull If you are not already aware you might like to know that TOS has a library of candlestick patterns available.
Just go to the TOS platform, click on charts. Then on the top right, there is a button called "Patterns"
There is a drop down menu, so you can go and explore that area. Many examples of chart of candlestick patterns there
 

BenTen

Administrative
Staff member
Staff
VIP
@Buckbull If you want to create a more advanced candlestick pattern, you would have to write your own script for that. The default editor is still great for beginners to get started, though. Glad to hear about your tweezer top and bottom.
 

Buckbull

Active member
@Buckbull If you are not already aware you might like to know that TOS has a library of candlestick patterns available.
Just go to the TOS platform, click on charts. Then on the top right, there is a button called "Patterns"
There is a drop down menu, so you can go and explore that area. Many examples of chart of candlestick patterns there
Yes I know about it but thanks for the heads up
 

Buckbull

Active member
@Buckbull If you need help uploading images, see this thread. We recommend Imgur.

In regards to the candlestick pattern you showed from the screenshot above, maybe you're referring to the Pin bar pattern or something like that. https://usethinkscript.com/threads/pin-bar-reversal-indicator-for-thinkorswim.156/
@BenTen That is awesome thank you for that . How would I add a stipulation in a scan that the pin bar has to close within the body of the previous candle ?
 

tomsk

Well-known member
VIP
@tomsk Could you by any chance help me out , with the pinbar study ben posted i would like to do a scan where the pinbar closes within the body of the previous days candle . Thanks

@Buckbull - I assume you're referring to the Pinbar indicator that @BenTen posted in the following thread

https://usethinkscript.com/threads/pin-bar-reversal-indicator-for-thinkorswim.156/
Here is your COMPLETED scan. Load the following code directly into the scanner. It scans for a bullish/bearish pinbar that closes within the body of the previous days candle. Please note that I have NOT changed any of the definitions of the pinbar definition that came with the original study
I just added your requirement for closes within the body of the previous candle and some minor clean up to enable the scan.

I have tested the scan on the S&P 500. At the present time, a bullish scan yields 2 results while a bearish scan yields 1 result.

Code:
# Pinbar Scan
# tomsk
# 11.23.2019
# https://usethinkscript.com/threads/create-your-own-candlestick-pattern-in-thinkorswim.1103/#post-10213

# This scans for a bullish/bearish pinbar that closes within the body 
# of the previous candle. The conditions for the logic for the pinbar 
# conditions were extracted from the following study as posted by BenTen 
# in May 2019
#
# https://usethinkscript.com/threads/pin-bar-reversal-indicator-for-thinkorswim.156/

input LastBars = 0;
input MaxNoseBodySize = 0.33; #(default = 0.33) — maximum allowed body/length ratio for the Nose bar.
input NoseBodyPosition = 0.4; #(default = 0.4) — Nose body should be position in top (bottom for bearish pattern) part of the Nose bar.
input LeftEyeOppositeDirection = yes; #(default = true) — tells the indicator that the Left Eye bar should be bearish for bullish Pinbar, and bullish for bearish Pinbar.
input NoseSameDirection = yes; #(default = true) — tells the indicator that the Nose bar should be of the same direction as the pattern itself.
input NoseBodyInsideLeftEyeBody = no; #(default = false) — tells the indicator that the Nose body should be inside the Left Eye body.
input LeftEyeMinBodySize = 0.1; #(default = 0.1) — minimum size of the Left Eye body relative to the bar length.
input NoseProtruding = 0.5; #(default = 0.5) — minimum protrusion of the Nose bar relative to the bar length.
input NoseBodyToLeftEyeBody = 1; #(default = 1) — maximum size of the Nose body relative to the Left eye body.
input NoseLengthToLeftEyeLength = 0; #(default = 0) — minimum Nose length relative to the Left Eye length.
input LeftEyeDepth = 0.2; #(default = 0.2) — minimum depth of the Left Eye relative to its length. Depth is length of the part of the bar behind the Nose.

# Left Eye and Nose bars's paramaters
def NoseLength = High - Low;
def LeftEyeLength = High[1] - Low[1];
def NoseBody = Absvalue(Open - Close);
def LeftEyeBody = Absvalue(Open[1] - Close[1]);

# Bearish Pinbar

def BearSignalDown = if  (High - High[1] >= NoseLength * NoseProtruding) and
                     (NoseBody / NoseLength <= MaxNoseBodySize) and
                     (1 - (High - Max(Open, Close)) / NoseLength < NoseBodyPosition) and
                     if LeftEyeOppositeDirection then (Close[1] > Open[1]) else 1 and
                     if NoseSameDirection then (Close < Open) else 1  and
                     (LeftEyeBody / LeftEyeLength  >= LeftEyeMinBodySize) and
                     ((Max(Open, Close) <= High[1]) && (Min(Open, Close) >= Low[1]))  and
                     (NoseBody / LeftEyeBody <= NoseBodyToLeftEyeBody) and
                     (NoseLength / LeftEyeLength >= NoseLengthToLeftEyeLength) and
                     (Low - Low[1] >= LeftEyeLength * LeftEyeDepth) and
                     if NoseBodyInsideLeftEyeBody then ((Max(Open, Close) <= Max(Open[1], Close[1]))
                     && (Min(Open,  Close) >= Min(Open[1],  Close[1]))) else 1                   
                     then yes
                     else no ;

def BullSignalUp   = if (Low[1] - Low >= NoseLength * NoseProtruding) and
                     (NoseBody / NoseLength <= MaxNoseBodySize) and
                     (1 - (Min(Open, Close) - Low) / NoseLength < NoseBodyPosition) and
                     if LeftEyeOppositeDirection then (Close[1] < Open[1]) else 1 and
                     if NoseSameDirection then (Close > Open) else 1 and
                     (LeftEyeBody / LeftEyeLength >= LeftEyeMinBodySize) and
                     ((Max(Open, Close) <= High[1]) && (Min(Open, Close) >= Low[1])) and
                     (NoseBody / LeftEyeBody <= NoseBodyToLeftEyeBody) and
                     (NoseLength / LeftEyeLength >= NoseLengthToLeftEyeLength) and
                     (High[1] - High >= LeftEyeLength * LeftEyeDepth) and
                     if NoseBodyInsideLeftEyeBody then ((Max(Open, Close) <= Max(Open[1], Close[1]))
                     && (Min(Open, Close) >= Min(Open[1], Close[1]))) else 1
                     then yes
                     else no;

# Scan specific logic. Look for a close within previous bar's body
# Add this to the original scan condition from a user request

def condition = between(close, min(open[1],close[1]),max(open[1],close[1]));

# Comment out (#) the ONE not needed

plot bullish_signal = BullSignalup and condition;
# plot bearish_signal = BearSignalDown and condition;

# End Pinbar Scan
 
Last edited:

Buckbull

Active member
Awesome thanks as usual , But Im a little confused if im saving it right when I copied the script you made in I got 2 stocks like you did
$REG
$MKC
How do I switch it to a Bearish Scan ?
 

horserider

Well-known member
VIP
Bullish scan

# Comment out (#) the ONE not needed

plot bullish_signal = BullSignalup and condition;
# plot bearish_signal = BearSignalDown and condition;

# End Pinbar Scan

Bearish Scan

# Comment out (#) the ONE not needed

# plot bullish_signal = BullSignalup and condition;
plot bearish_signal = BearSignalDown and condition;

# End Pinbar Scan

I would just save as different scans.
 

tomsk

Well-known member
VIP
Awesome thanks as usual , But Im a little confused if im saving it right when I copied the script you made in I got 2 stocks like you did
$REG
$MKC
How do I switch it to a Bearish Scan ?

You seem to be new to scans - please note that the scanner only accepts one plot statement
I have listed two in the code, one commented out. Just switch those round for theopposite case

You should get 1 result for the bearish case if you ran the scan today
 
Last edited:

zv3

New member
Hello everyone,

Thanks in advance for your help, and forgive my ignorance in advance.

My goal is to use thinkscript to code a scan that scans for securities that meet these criteria:

1. The candle currently forming has taken out the low of the previous candle's range, but the close of the candle currently forming is greater than the low of the candle currently forming. So essentially the current candle is a "hammer"
2. The candle prior to the current "hammer" candle is inside the candle previous to it.

I am essentially using the last 3 candles (any timeframe) to screen for a setup I like. Can anyone help me out? I have attempted to code this myself, but I am not doing something right as I am getting 3 different candle results than I am expecting.


If it needs to be adjusted to where the "hammer" candle has already closed before I scan, that's okay with me, I can live with that, that will allow me to scan at the open of whatever timeframe I am looking at.
 
Last edited by a moderator:
Top