# Generation time: 2020-12-09T00:55:57.031Z
def IsUp = close > open;
def IsDown = close < open;
def IsDoji = IsDoji();
def avgRange = 0.05 * Average(high - low, 20);
plot PatternPlot =
IsUp[1] and
IsDown[0] and
Between(open[1] - close[0], -avgRange, avgRange) and
close[1] == open[0];
PatternPlot.SetPaintingStrategy(PaintingStrategy.BOOLEAN_WEDGE_DOWN);
PatternPlot.SetDefaultColor(GetColor(0));
# Generation time: 2020-12-09T00:56:49.012Z
def IsUp = close > open;
def IsDown = close < open;
def IsDoji = IsDoji();
def avgRange = 0.05 * Average(high - low, 20);
plot PatternPlot =
IsDown[1] and
IsUp[0] and
Between(open[1] - close[0], -avgRange, avgRange) and
close[1] == open[0];
PatternPlot.SetPaintingStrategy(PaintingStrategy.BOOLEAN_WEDGE_UP);
PatternPlot.SetDefaultColor(GetColor(0));
@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
# 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
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 ?
@tomsk I am new, but i will learn it . I refuse to be beat!
Hi, looking for two consecutive green candles script & two consecutive red candles script.
Can someone help?
Thank you
Daniel.
# Generation time: 2021-05-06T02:20:32.449444600Z
def IsUp = close > open;
def IsDown = close < open;
def IsDoji = IsDoji();
def avgRange = 0.05 * Average(high - low, 20);
plot PatternPlot =
IsUp[1] and
IsUp[0];
PatternPlot.SetPaintingStrategy(PaintingStrategy.BOOLEAN_POINTS);
PatternPlot.SetDefaultColor(GetColor(0));
Can you post a picture of what this is supposed to look like when it finds one please?Tweezer Top
Code:# Generation time: 2020-12-09T00:55:57.031Z def IsUp = close > open; def IsDown = close < open; def IsDoji = IsDoji(); def avgRange = 0.05 * Average(high - low, 20); plot PatternPlot = IsUp[1] and IsDown[0] and Between(open[1] - close[0], -avgRange, avgRange) and close[1] == open[0]; PatternPlot.SetPaintingStrategy(PaintingStrategy.BOOLEAN_WEDGE_DOWN); PatternPlot.SetDefaultColor(GetColor(0));
Tweezer Bottom
Code:# Generation time: 2020-12-09T00:56:49.012Z def IsUp = close > open; def IsDown = close < open; def IsDoji = IsDoji(); def avgRange = 0.05 * Average(high - low, 20); plot PatternPlot = IsDown[1] and IsUp[0] and Between(open[1] - close[0], -avgRange, avgRange) and close[1] == open[0]; PatternPlot.SetPaintingStrategy(PaintingStrategy.BOOLEAN_WEDGE_UP); PatternPlot.SetDefaultColor(GetColor(0));
Thanks so much!!!Very easy to do using the TOS candlestick pattern editor.
Here is an example:
Two consecutive green candles.
Code:# Generation time: 2021-05-06T02:20:32.449444600Z def IsUp = close > open; def IsDown = close < open; def IsDoji = IsDoji(); def avgRange = 0.05 * Average(high - low, 20); plot PatternPlot = IsUp[1] and IsUp[0]; PatternPlot.SetPaintingStrategy(PaintingStrategy.BOOLEAN_POINTS); PatternPlot.SetDefaultColor(GetColor(0));
Join useThinkScript to post your question to a community of 21,000+ developers and traders.
Thread starter | Similar threads | Forum | Replies | Date |
---|---|---|---|---|
K | Candlestick body to range percentage | Questions | 1 | |
T | 8ema candlestick pattern | Questions | 4 | |
T | Long Candlestick | Questions | 3 | |
Candlestick Pattern Alert | Questions | 1 | ||
Pin Bar candlestick code | Questions | 2 |
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.