Working on new Beta w/ improvements, Add-Ons , And putting together a Grid and Strategy!
Sure. Here are the RSM labels at the top left. The last one shows whether various EMAs (34, 55, and 89, I think) are stacked positive or negative (or gray for neither). It prevents my chart from looking like rainbow spaghetti.
See the back-to-back triple (and opposite!) strategy signals just before 8pm? The RSM labels and EMAs would have kept me from acting on either set of lower signals. If the labels are grayed out, there is no bull or bear direction on that timeframe for the RSM. I want RSM labels to be in agreement at the minimum from 60 min down to 5 min if I'm trading on a low timeframe. If any label 60 min or less is the wrong direction or greyed out, there is probably chop that I'm not seeing and the trend may not be strong enough to sustain the move I was looking for.
Hope that made sense!
Keltner Channels with momentum...interesting results@Christopher84 ,
The well thought out portion is all Barbaros! He is amazing at what he does and uses sound logic as he carefully and skillfully orchestrates this project. I can't thank him enough for his insight and contribution here. The original base of this system used Keltner Channels to overlay the BB, it identified when they were in a squeeze. We just updated the indicator with what we feel is a better representation of that condition, of course we could have modified the the KC settings and possibly acquired a similar result but after careful consideration and testing we decided to take that out.
The whole premise of this indicator revolves around BB, and hence the name: Balanced_BB_Breakout. Balanced due to its ability to spot areas of purposed consolidation or equilibrium, BB due to using the Bollinger Bands to show a breakout.
When the upper and lower Bollinger Bands are moving towards each other, or the distance between the upper and lower bands is narrow (on a relative basis), it is a suggestion that the market under review is consolidating.
A consolidation phase suggests that the market is non-directional for the time being and now rangebound in nature. The narrow or narrowing Bollinger Bands will essentially move closer to the price and at some stage appear to be in what I like to term a "Balanced BB Squeeze" It is at this stage that breakout traders might pay attention.
I personally do not use the Keltner Channels and am not an expert on them by any means. All that being said, I am not sure that would be a good direction to take this indicator.
I am not the coder, but I am sure the code is getting pretty complex, meaning it may be reaching a level where adding more to it may make it not work in scans, watchlists and mobile...etc. Barbaros is the resident genius on all that. But for now it is my opinion just to not include it at this time.
# Balanced BB Breakout Indicator
# Free for use. Header credits must be included when any form of the code included in this package is used.
# User assumes all risk. Author not responsible for errors or use of tool.
# v1.2 - Assembled by Chuck Edwards
# v2.0 - Barbaros - cleanup
# v2.1 - Barbaros - added RSI IFT, NumberOfShares, BB crossing options
# v2.2 - Barbaros - fixed PnL issues and removed intraDay filter
# v2.3 - Barbaros - changed input and variable names, RSM is re-done
# v2.4 - Barbaros - removed PnL, added strategy signal arrows and alerts,
# added Fibonacci SuperTrend, added unified bar color selection
# v2.5 - Chuck - added divergence and squeeze label, added squeeze alert
# Barbaros - cleanup, changed divergance to text, show stoch labels all the time
# Barbaros - added trend squeeze label for BB, added alerts for Stoch Scalper
# Barbaros - added options to hide clouds and labels
# Barbaros - changed trend and divergence colors and text to match
# Barbaros - removed volume and keltner channel studies, unified squeeze
# BETA - Barbaros - optimizations, added hints and separated out BullBear options for combinations
declare lower;
input ShowMarketForecastLabel = yes; #hint ShowMarketForecastLabel: Show the intermediate Market Forecast label
input ShowMACDBBLabel = yes; #hint ShowMACDBBLabel: Show the MACDBB based Trend label
input ShowMACDBBCloud = yes; #hint ShowMACDBBCloud: Show the MACDBB cloud shaded between BB
input ShowRSMCloud = yes; #hint ShowRSMCloud: Show the vertical cloud based on RSM
input ShowHMALabel = yes; #hint ShowHMALabel: Show HUll Moving Average based Divergence label
input ShowSTOCHSCALPERSqueezeLabel = yes; #hint ShowSTOCHSCALPERSqueezeLabel: Show Stochastic Scalper based squeeze label
input ShowSTOCHSCALPERSqueezeCloud = yes; #hint ShowSTOCHSCALPERSqueezeCloud: Show Stochastic Scalper based squeeze cloud between BB
input ShowBullBearVerticalLines = yes; #hint ShowBullBearVerticalLines: Show vertical lines for bullish or bearish direction
### Market Forecast
def pIntermediate = MarketForecast().Intermediate;
AddLabel(ShowMarketForecastLabel,
"Market Forecast " +
if pIntermediate >= 80 then "Bullish" else
if pIntermediate <= 20 then "Bearish" else
if pIntermediate > pIntermediate[1] then "Rising" else
if pIntermediate < pIntermediate[1] then "Falling" else "Neutral",
if pIntermediate >= 80 then Color.GREEN else
if pIntermediate <= 20 then Color.RED else
if pIntermediate > pIntermediate[1] then Color.LIGHT_GREEN else
if pIntermediate < pIntermediate[1] then Color.LIGHT_RED else Color.GRAY
);
### MACDBB
input MACDBB_FastLength = 12;
input MACDBB_SlowLength = 26;
input MACDBB_BandLength = 15;
input MACDBB_NumDev = 1.0;
def MACDBB_Data = MACD(fastLength = MACDBB_FastLength, slowLength = MACDBB_SlowLength, MACDLength = 5);
plot MACDBB_Upper = reference BollingerBands(price = MACDBB_Data, length = MACDBB_BandLength,
Num_Dev_Dn = -MACDBB_NumDev, Num_Dev_Up = MACDBB_NumDev).UpperBand;
MACDBB_Upper.SetDefaultColor(Color.RED);
MACDBB_Upper.HideTitle();
MACDBB_Upper.HideBubble();
plot MACDBB_Lower = reference BollingerBands(price = MACDBB_Data, length = MACDBB_BandLength,
Num_Dev_Dn = -MACDBB_NumDev, Num_Dev_Up = MACDBB_NumDev).Lowerband;
MACDBB_Lower.SetDefaultColor(Color.GREEN);
MACDBB_Lower.HideTitle();
MACDBB_Lower.HideBubble();
plot MACDBB_Midline = reference BollingerBands(price = MACDBB_Data, length = MACDBB_BandLength,
Num_Dev_Dn = -MACDBB_NumDev, Num_Dev_Up = MACDBB_NumDev).MidLine;
MACDBB_Midline.SetDefaultColor(Color.LIGHT_RED);
MACDBB_Midline.SetStyle(Curve.FIRM);
MACDBB_MidLine.HideTitle();
MACDBB_MidLine.HideBubble();
plot MACDBB_Line = MACDBB_Data;
MACDBB_Line.AssignValueColor(
if MACDBB_Line > MACDBB_Line[1] and MACDBB_Line >= MACDBB_Upper then Color.GREEN
else if MACDBB_Line < MACDBB_Line[1] and MACDBB_Line >= MACDBB_Upper then Color.DARK_GREEN
else if MACDBB_Line < MACDBB_Line[1] and MACDBB_Line <= MACDBB_Lower then Color.RED else
if MACDBB_Line > MACDBB_Line[1] and MACDBB_Line <= MACDBB_Lower then Color.DARK_RED
else Color.GRAY
);
MACDBB_Line.SetLineWeight(1);
plot MACDBB_Dots = MACDBB_Data;
MACDBB_Dots.AssignValueColor(
if MACDBB_Line > MACDBB_Line[1] and MACDBB_Line > MACDBB_Upper then Color.GREEN
else if MACDBB_Line < MACDBB_Line[1] and MACDBB_Line > MACDBB_Upper then Color.DARK_GREEN
else if MACDBB_Line < MACDBB_Line[1] and MACDBB_Line < MACDBB_Lower then Color.RED
else if MACDBB_Line > MACDBB_Line[1] and MACDBB_Line < MACDBB_Lower then Color.DARK_RED
else Color.GRAY
);
MACDBB_Dots.SetPaintingStrategy(PaintingStrategy.LINE_VS_POINTS);
MACDBB_Dots.SetLineWeight(1);
MACDBB_Dots.HideTitle();
MACDBB_Dots.HideBubble();
input MACDBB_CrossFromAboveAlert = {default "Zero", "Lower", "Middle", "Upper"};
input MACDBB_CrossFromBelowAlert = {default "Zero", "Lower", "Middle", "Upper"};
def MACDBB_CrossFromAboveVal = if MACDBB_CrossFromAboveAlert == MACDBB_CrossFromAboveAlert.Lower then MACDBB_Lower
else if MACDBB_CrossFromAboveAlert == MACDBB_CrossFromAboveAlert.Upper then MACDBB_Upper
else 0;
def MACDBB_CrossFromBelowVal = if MACDBB_CrossFromBelowAlert == MACDBB_CrossFromBelowAlert.Lower then MACDBB_Lower
else if MACDBB_CrossFromBelowAlert == MACDBB_CrossFromBelowAlert.Upper then MACDBB_Upper
else 0;
def MACDBB_Buy = MACDBB_Data > MACDBB_Upper;
def MACDBB_Sell = MACDBB_Data <= MACDBB_Lower;
AddLabel(ShowMACDBBLabel,
"Trend " +
if MACDBB_Line > MACDBB_Line[1] and MACDBB_Line > MACDBB_Upper then "Bullish"
else if MACDBB_Line < MACDBB_Line[1] and MACDBB_Line > MACDBB_Upper then "Bullish (decreasing)"
else if MACDBB_Line < MACDBB_Line[1] and MACDBB_Line < MACDBB_Lower then "Bearish"
else if MACDBB_Line > MACDBB_Line[1] and MACDBB_Line < MACDBB_Lower then "Bearish (increasing)"
else "Neutral",
if MACDBB_Line > MACDBB_Line[1] and MACDBB_Line > MACDBB_Upper then Color.GREEN
else if MACDBB_Line < MACDBB_Line[1] and MACDBB_Line > MACDBB_Upper then Color.DARK_GREEN
else if MACDBB_Line < MACDBB_Line[1] and MACDBB_Line < MACDBB_Lower then Color.RED
else if MACDBB_Line > MACDBB_Line[1] and MACDBB_Line < MACDBB_Lower then Color.DARK_RED
else Color.GRAY
);
AddCloud(if ShowMACDBBCloud then MACDBB_Upper else MACDBB_Lower, MACDBB_Lower, Color.LIGHT_RED);
### RSI/STOCASTIC/MACD CONFLUENCE COMBO
plot RSM_MACD_Diff = reference MACD("fast length" = 12, "slow length" = 26, "macd length" = 9).Diff;
RSM_MACD_Diff.SetDefaultColor(GetColor(5));
RSM_MACD_Diff.SetPaintingStrategy(PaintingStrategy.HISTOGRAM);
RSM_MACD_Diff.SetLineWeight(4);
RSM_MACD_Diff.DefineColor("Positive and Up", Color.GREEN);
RSM_MACD_Diff.DefineColor("Positive and Down", Color.DARK_GREEN);
RSM_MACD_Diff.DefineColor("Negative and Down", Color.RED);
RSM_MACD_Diff.DefineColor("Negative and Up", Color.DARK_RED);
RSM_MACD_Diff.AssignValueColor(
if RSM_MACD_Diff >= 0 then
if RSM_MACD_Diff > RSM_MACD_Diff[1] then RSM_MACD_Diff.Color("Positive and Up") else RSM_MACD_Diff.Color("Positive and Down")
else
if RSM_MACD_Diff < RSM_MACD_Diff[1] then RSM_MACD_Diff.Color("Negative and Down") else RSM_MACD_Diff.Color("Negative and Up")
);
plot RSM_MACD_ZeroLine = 0;
RSM_MACD_ZeroLine.SetDefaultColor(Color.RED);
RSM_MACD_ZeroLine.HideTitle();
RSM_MACD_ZeroLine.HideBubble();
def RSM_RSI = reference RSI(length = 7).RSI;
def RSM_Stoch_Val = 100 * (close - lowest(low, 14)) / (highest(high, 14) - lowest(low, 14));
def RSM_StochSlowK = SimpleMovingAvg(SimpleMovingAvg(RSM_Stoch_Val,3),3);
def RSM_rsiGreen = RSM_RSI >= 50;
def RSM_rsiRed = RSM_RSI < 50;
def RSM_stochGreen = RSM_StochSlowK >= 50;
def RSM_stochRed = RSM_StochSlowK < 50;
def RSM_macdGreen = RSM_MACD_Diff >= 0;
def RSM_macdRed = RSM_MACD_Diff < 0;
def RSM_Buy = RSM_rsiGreen and RSM_stochGreen and RSM_macdGreen;
def RSM_Sell = RSM_rsiRed and RSM_stochRed and RSM_macdRed;
# Shade areas based on criteria; adjust as needed
AddCloud(
if ShowRSMCloud and RSM_rsiGreen and RSM_stochGreen and RSM_macdGreen then Double.POSITIVE_INFINITY else Double.NaN,
if ShowRSMCloud and RSM_rsiGreen and RSM_stochGreen and RSM_macdGreen then Double.NEGATIVE_INFINITY else Double.NaN, Color.LIGHT_GREEN
);
AddCloud(
if ShowRSMCloud and RSM_rsiRed and RSM_stochRed and RSM_macdRed then Double.POSITIVE_INFINITY else Double.NaN,
if ShowRSMCloud and RSM_rsiRed and RSM_stochRed and RSM_macdRed then Double.NEGATIVE_INFINITY else Double.NaN, Color.LIGHT_RED
);
### Divergance
input HMA_Length = 55;
input HMA_Lookback = 2;
def HMA = HullMovingAvg(price = HL2, length = HMA_Length);
def HMA_delta = HMA[1] - HMA[HMA_Lookback + 1];
def HMA_delta_per_bar = HMA_delta / HMA_Lookback;
def HMA_next_bar = HMA[1] + HMA_delta_per_bar;
def HMA_concavity = if HMA > HMA_next_bar then 1 else -1;
def HMA_MA_Max = if HMA[-1] < HMA and HMA > HMA[1] then HMA else Double.NaN;
def HMA_MA_Min = if HMA[-1] > HMA and HMA < HMA[1] then HMA else Double.NaN;
def HMA_divergence = HMA - HMA_next_bar;
AddLabel(ShowHMALabel,
"Divergence " +
if HMA_concavity < 0 then
if HMA_divergence[1] > HMA_divergence then "Bearish (increasing)"
else "Bearish"
else
if HMA_divergence[1] < HMA_divergence then "Bullish (decreasing)"
else "Bullish",
if HMA_concavity < 0 then
if HMA_divergence[1] > HMA_divergence then Color.DARK_RED
else Color.RED
else
if HMA_divergence[1] < HMA_divergence then Color.DARK_GREEN
else Color.GREEN
);
### Stocastic Scalper
def STOCHSCALPER_oSS = (open[1] + close[1]) / 2;
def STOCHSCALPER_hSS = Max(high, close[1]);
def STOCHSCALPER_lSS = Min(low, close[1]);
def STOCHSCALPER_cSS = (STOCHSCALPER_oSS + STOCHSCALPER_hSS + STOCHSCALPER_lSS + close) / 4;
def STOCHSCALPER_mean = Average(STOCHSCALPER_cSS, 20);
def STOCHSCALPER_sd = StDev(STOCHSCALPER_cSS, 20);
def STOCHSCALPER_atr = Average(TrueRange(STOCHSCALPER_cSS, STOCHSCALPER_hSS, STOCHSCALPER_lSS), 20);
def STOCHSCALPER_squeeze = if (STOCHSCALPER_mean + (2 * STOCHSCALPER_sd)) < (STOCHSCALPER_mean + (1.5 * STOCHSCALPER_atr)) then yes else no;
def STOCHSCALPER_squeeze_signal = !STOCHSCALPER_squeeze[1] and STOCHSCALPER_squeeze;
AddCloud(if ShowSTOCHSCALPERSqueezeCloud and STOCHSCALPER_squeeze then MACDBB_Upper else Double.NaN,
if ShowSTOCHSCALPERSqueezeCloud and STOCHSCALPER_squeeze then MACDBB_Lower else Double.NaN, Color.YELLOW);
AddLabel(ShowSTOCHSCALPERSqueezeLabel, "Scalper Squeeze", if STOCHSCALPER_squeeze then Color.WHITE else Color.GRAY);
### Balance of Power
input BOP_EMA_Length = 20;
input BOP_TEMA_Length = 20;
def BOP_THL = If(high != low, high - low, 0.01);
def BOP_BullOpen = (high - open) / BOP_THL;
def BOP_BearOpen = (open - low) / BOP_THL;
def BOP_BullClose = (close - low) / BOP_THL;
def BOP_BearClose = (high - close) / BOP_THL;
def BOP_BullOC = If(close > open, (close - open) / BOP_THL, 0);
def BOP_BearOC = If(open > close, (open - close) / BOP_THL, 0);
def BOP_BullReward = (BOP_BullOpen + BOP_BullClose + BOP_BullOC) / 1;
def BOP_BearReward = (BOP_BearOpen + BOP_BearClose + BOP_BearOC) / 1;
def BOP_BOP = BOP_BullReward - BOP_BearReward;
def BOP_SmoothBOP = ExpAverage(BOP_BOP, BOP_EMA_Length);
def BOP_xPrice = BOP_SmoothBOP;
def BOP_xEMA1 = ExpAverage(BOP_SmoothBOP, BOP_TEMA_Length);
def BOP_xEMA2 = ExpAverage(BOP_xEMA1, BOP_TEMA_Length);
def BOP_xEMA3 = ExpAverage(BOP_xEMA2, BOP_TEMA_Length);
def BOP_nRes = 3 * BOP_xEMA1 - 3 * BOP_xEMA2 + BOP_xEMA3;
def BOP_SmootherBOP = BOP_nRes;
def BOP_s1 = BOP_SmoothBOP;
def BOP_s2 = BOP_SmootherBOP;
def BOP_s3 = BOP_SmootherBOP[2];
def BOP_Direction = if BarNumber() == 1 then 0
else if BOP_s2 < BOP_s3 and BOP_s2[1] > BOP_s3[1] then -1
else if BOP_s2 > BOP_s3 and BOP_s2[1] < BOP_s3[1] then 1
else BOP_Direction[1];
### RSI IFT
def RSI_IFT_R = reference RSI(5, close) - 50;
def RSI_IFT_AvgRSI = MovingAverage(AverageType.Exponential,RSI_IFT_R,9);
def RSI_IFT_InverseRSI = (Power(Double.E, 2 * RSI_IFT_AvgRSI) - 1) / (Power(Double.E, 2 * RSI_IFT_AvgRSI) + 1);
def RSI_IFT_Direction = if BarNumber() == 0 then 0
else if (RSI_IFT_InverseRSI[1] > 0) and (RSI_IFT_InverseRSI < 0) then -1
else if (RSI_IFT_InverseRSI > 0) and (RSI_IFT_InverseRSI[1] < 0) then 1
else RSI_IFT_Direction[1];
### Fibonacci SuperTrend
input FST_Length = 11;
input FST_Retrace = 23.6;
input FST_UseHighLow = yes;
def FST_h = if FST_UseHighLow then high else close;
def FST_l = if FST_UseHighLow then low else close;
def FST_minL = Lowest(FST_l, FST_Length);
def FST_maxH = Highest(FST_h, FST_Length);
def FST_hh = if FST_h > FST_maxH[1] then FST_h else FST_hh[1];
def FST_ll = if FST_l < FST_minL[1] then FST_l else FST_ll[1];
def FST_trend = if FST_h > FST_maxH[1] then 1 else if FST_l < FST_minL[1] then -1 else FST_trend[1];
def FST_Direction = if BarNumber() == 0 then 0
else if FST_trend != 1 then -1
else if FST_trend == 1 then 1
else FST_Direction[1];
### Bar Color
input BarColor = { "None", default "RSM", "FibonacciSuperTrend" };
AssignPriceColor(
if BarColor == BarColor.FibonacciSuperTrend then
if FST_trend == 1 then Color.GREEN else Color.RED
else if BarColor == BarColor.RSM then
if RSM_Buy then Color.GREEN
else if RSM_Sell then Color.RED
else Color.DARK_GRAY
else Color.CURRENT
);
### Strategy
input BullBear_Include_BOP = no;
input BullBear_Include_FST = no;
input BullBear_Include_RSI_IFT = yes;
def BullBear_Buy = (!BullBear_Include_BOP or BOP_Direction == 1) and
(!BullBear_Include_FST or FST_Direction == 1) and
(!BullBear_Include_RSI_IFT or RSI_IFT_Direction == 1);
def BullBear_Sell = (!BullBear_Include_BOP or BOP_Direction == -1) and
(!BullBear_Include_FST or FST_Direction == -1) and
(!BullBear_Include_RSI_IFT or RSI_IFT_Direction == -1);
AddVerticalLine(ShowBullBearVerticalLines and BullBear_Buy and !BullBear_Buy[1],
AsDollars(close),
Color.GREEN, Curve.SHORT_DASH);
AddVerticalLine(ShowBullBearVerticalLines and BullBear_Sell and !BullBear_Sell[1],
AsDollars(close),
Color.RED, Curve.SHORT_DASH);
def Strategy_Buy = BullBear_Buy and MACDBB_Buy and RSM_Buy;
def Strategy_Sell = BullBear_Sell and MACDBB_Sell and RSM_Sell;
def Strategy_BuySignal = Strategy_Buy and !Strategy_Buy[1];
def Strategy_SellSignal = Strategy_Sell and !Strategy_Sell[1];
plot BuyArrow = if Strategy_BuySignal then 0 else Double.NaN;
BuyArrow.SetPaintingStrategy(PaintingStrategy.ARROW_UP);
BuyArrow.SetDefaultColor(Color.WHITE);
BuyArrow.HideTitle();
BuyArrow.HideBubble();
plot SellArrow = if Strategy_SellSignal then 0 else Double.NaN;
SellArrow.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN);
SellArrow.SetDefaultColor(Color.WHITE);
SellArrow.HideTitle();
SellArrow.HideBubble();
### Alerts
Alert(Strategy_BuySignal, "Long Entry", Alert.BAR, Sound.DING);
Alert(Strategy_SellSignal, "Short Entry", Alert.BAR, Sound.DING);
Alert(MACDBB_Line crosses above MACDBB_CrossFromAboveVal, "MACDBB Crossed Up", Alert.BAR, Sound.DING);
Alert(MACDBB_Line crosses below MACDBB_CrossFromBelowVal, "MACDBB Crossed Down", Alert.BAR, Sound.DING);
Alert(STOCHSCALPER_squeeze_signal, "Scalper Squeeze", Alert.BAR, Sound.DING);
Hi @Christopher84 is it possible to share a copy of your chart layout? Thanks in advanceKeltner Channels with momentum...interesting results
I am currently using upper studies of Trend Pivot, Stacked VWAP, Average Price Movement Indicator (Week Aggregation period), STARC Band extensions, Keltner Channel signals and Forecast Candles. The only lower study I use is the Balanced BB Breakout which I modified to show the Momentum Keltner Channels instead of BB. I use these primarily on 1 hour or more timeframe although they work well on lower timeframes as well. The image I posted was 12 hour. I am new to thinkscript but trying hard to learn quickly. Most studies I am using have come from talented individuals here or I have written or modified studies to fit my preference. Let me know if you need me to clarify a bit more, or if there is anything else you were interested in. I am always happy to share and to learn from others.Hi @Christopher84 is it possible to share a copy of your chart layout? Thanks in advance
Okay no worries I just thought it'd be easier to share your chart layout instead of searching thru all the forums, but I'll search the forums for the scripts thanks!I am currently using upper studies of Trend Pivot, Stacked VWAP, Average Price Movement Indicator (Week Aggregation period), STARC Band extensions, Keltner Channel signals and Forecast Candles. The only lower study I use is the Balanced BB Breakout which I modified to show the Momentum Keltner Channels instead of BB. I use these primarily on 1 hour or more timeframe although they work well on lower timeframes as well. The image I posted was 12 hour. I am new to thinkscript but trying hard to learn quickly. Most studies I am using have come from talented individuals here or I have written or modified studies to fit my preference. Let me know if you need me to clarify a bit more, or if there is anything else you were interested in. I am always happy to share and to learn from others.
Sorry...just figured out how to share my chart settings. Hopefully this will help.Okay thanks I'll search the forums for the scripts thanks.
No worries thanks for taking the time to help me out appreciate it thanks!Sorry...just figured out how to share my chart settings. Hopefully this will help.
https://tos.mx/YRhZzvk
It’s a community of helpful people here.. this forum being my only social media account, I’m always happy to help if I can..Hi @VictusJogi I never got a chance to poperly thank you for you helping me out on the other forum. Thanks it was kind of you to take the time out to help me understand.
@barbaros thanks for generously sharing your work. What is the purpose of having prices in the lower study? Is it possible to take it off in your settings?Unlike @Chuck, it's a quiet day for me. I decided to stay out the chop.
Here is another release of the beta. I removed unused code and inputs.
Code:# Balanced BB Breakout Indicator # Free for use. Header credits must be included when any form of the code included in this package is used. # User assumes all risk. Author not responsible for errors or use of tool. # v1.2 - Assembled by Chuck Edwards # v2.0 - Barbaros - cleanup # v2.1 - Barbaros - added RSI IFT, NumberOfShares, BB crossing options # v2.2 - Barbaros - fixed PnL issues and removed intraDay filter # v2.3 - Barbaros - changed input and variable names, RSM is re-done # v2.4 - Barbaros - removed PnL, added strategy signal arrows and alerts, # added Fibonacci SuperTrend, added unified bar color selection # v2.5 - Chuck - added divergence and squeeze label, added squeeze alert # Barbaros - cleanup, changed divergance to text, show stoch labels all the time # Barbaros - added trend squeeze label for BB, added alerts for Stoch Scalper # Barbaros - added options to hide clouds and labels # Barbaros - changed trend and divergence colors and text to match # Barbaros - removed volume and keltner channel studies, unified squeeze # BETA - Barbaros - optimizations, added hints and separated out BullBear options for combinations declare lower; input ShowMarketForecastLabel = yes; #hint ShowMarketForecastLabel: Show the intermediate Market Forecast label input ShowMACDBBLabel = yes; #hint ShowMACDBBLabel: Show the MACDBB based Trend label input ShowMACDBBCloud = yes; #hint ShowMACDBBCloud: Show the MACDBB cloud shaded between BB input ShowRSMCloud = yes; #hint ShowRSMCloud: Show the vertical cloud based on RSM input ShowHMALabel = yes; #hint ShowHMALabel: Show HUll Moving Average based Divergence label input ShowSTOCHSCALPERSqueezeLabel = yes; #hint ShowSTOCHSCALPERSqueezeLabel: Show Stochastic Scalper based squeeze label input ShowSTOCHSCALPERSqueezeCloud = yes; #hint ShowSTOCHSCALPERSqueezeCloud: Show Stochastic Scalper based squeeze cloud between BB input ShowBullBearVerticalLines = yes; #hint ShowBullBearVerticalLines: Show vertical lines for bullish or bearish direction ### Market Forecast def pIntermediate = MarketForecast().Intermediate; AddLabel(ShowMarketForecastLabel, "Market Forecast " + if pIntermediate >= 80 then "Bullish" else if pIntermediate <= 20 then "Bearish" else if pIntermediate > pIntermediate[1] then "Rising" else if pIntermediate < pIntermediate[1] then "Falling" else "Neutral", if pIntermediate >= 80 then Color.GREEN else if pIntermediate <= 20 then Color.RED else if pIntermediate > pIntermediate[1] then Color.LIGHT_GREEN else if pIntermediate < pIntermediate[1] then Color.LIGHT_RED else Color.GRAY ); ### MACDBB input MACDBB_FastLength = 12; input MACDBB_SlowLength = 26; input MACDBB_BandLength = 15; input MACDBB_NumDev = 1.0; def MACDBB_Data = MACD(fastLength = MACDBB_FastLength, slowLength = MACDBB_SlowLength, MACDLength = 5); plot MACDBB_Upper = reference BollingerBands(price = MACDBB_Data, length = MACDBB_BandLength, Num_Dev_Dn = -MACDBB_NumDev, Num_Dev_Up = MACDBB_NumDev).UpperBand; MACDBB_Upper.SetDefaultColor(Color.RED); MACDBB_Upper.HideTitle(); MACDBB_Upper.HideBubble(); plot MACDBB_Lower = reference BollingerBands(price = MACDBB_Data, length = MACDBB_BandLength, Num_Dev_Dn = -MACDBB_NumDev, Num_Dev_Up = MACDBB_NumDev).Lowerband; MACDBB_Lower.SetDefaultColor(Color.GREEN); MACDBB_Lower.HideTitle(); MACDBB_Lower.HideBubble(); plot MACDBB_Midline = reference BollingerBands(price = MACDBB_Data, length = MACDBB_BandLength, Num_Dev_Dn = -MACDBB_NumDev, Num_Dev_Up = MACDBB_NumDev).MidLine; MACDBB_Midline.SetDefaultColor(Color.LIGHT_RED); MACDBB_Midline.SetStyle(Curve.FIRM); MACDBB_MidLine.HideTitle(); MACDBB_MidLine.HideBubble(); plot MACDBB_Line = MACDBB_Data; MACDBB_Line.AssignValueColor( if MACDBB_Line > MACDBB_Line[1] and MACDBB_Line >= MACDBB_Upper then Color.GREEN else if MACDBB_Line < MACDBB_Line[1] and MACDBB_Line >= MACDBB_Upper then Color.DARK_GREEN else if MACDBB_Line < MACDBB_Line[1] and MACDBB_Line <= MACDBB_Lower then Color.RED else if MACDBB_Line > MACDBB_Line[1] and MACDBB_Line <= MACDBB_Lower then Color.DARK_RED else Color.GRAY ); MACDBB_Line.SetLineWeight(1); plot MACDBB_Dots = MACDBB_Data; MACDBB_Dots.AssignValueColor( if MACDBB_Line > MACDBB_Line[1] and MACDBB_Line > MACDBB_Upper then Color.GREEN else if MACDBB_Line < MACDBB_Line[1] and MACDBB_Line > MACDBB_Upper then Color.DARK_GREEN else if MACDBB_Line < MACDBB_Line[1] and MACDBB_Line < MACDBB_Lower then Color.RED else if MACDBB_Line > MACDBB_Line[1] and MACDBB_Line < MACDBB_Lower then Color.DARK_RED else Color.GRAY ); MACDBB_Dots.SetPaintingStrategy(PaintingStrategy.LINE_VS_POINTS); MACDBB_Dots.SetLineWeight(1); MACDBB_Dots.HideTitle(); MACDBB_Dots.HideBubble(); input MACDBB_CrossFromAboveAlert = {default "Zero", "Lower", "Middle", "Upper"}; input MACDBB_CrossFromBelowAlert = {default "Zero", "Lower", "Middle", "Upper"}; def MACDBB_CrossFromAboveVal = if MACDBB_CrossFromAboveAlert == MACDBB_CrossFromAboveAlert.Lower then MACDBB_Lower else if MACDBB_CrossFromAboveAlert == MACDBB_CrossFromAboveAlert.Upper then MACDBB_Upper else 0; def MACDBB_CrossFromBelowVal = if MACDBB_CrossFromBelowAlert == MACDBB_CrossFromBelowAlert.Lower then MACDBB_Lower else if MACDBB_CrossFromBelowAlert == MACDBB_CrossFromBelowAlert.Upper then MACDBB_Upper else 0; def MACDBB_Buy = MACDBB_Data > MACDBB_Upper; def MACDBB_Sell = MACDBB_Data <= MACDBB_Lower; AddLabel(ShowMACDBBLabel, "Trend " + if MACDBB_Line > MACDBB_Line[1] and MACDBB_Line > MACDBB_Upper then "Bullish" else if MACDBB_Line < MACDBB_Line[1] and MACDBB_Line > MACDBB_Upper then "Bullish (decreasing)" else if MACDBB_Line < MACDBB_Line[1] and MACDBB_Line < MACDBB_Lower then "Bearish" else if MACDBB_Line > MACDBB_Line[1] and MACDBB_Line < MACDBB_Lower then "Bearish (increasing)" else "Neutral", if MACDBB_Line > MACDBB_Line[1] and MACDBB_Line > MACDBB_Upper then Color.GREEN else if MACDBB_Line < MACDBB_Line[1] and MACDBB_Line > MACDBB_Upper then Color.DARK_GREEN else if MACDBB_Line < MACDBB_Line[1] and MACDBB_Line < MACDBB_Lower then Color.RED else if MACDBB_Line > MACDBB_Line[1] and MACDBB_Line < MACDBB_Lower then Color.DARK_RED else Color.GRAY ); AddCloud(if ShowMACDBBCloud then MACDBB_Upper else MACDBB_Lower, MACDBB_Lower, Color.LIGHT_RED); ### RSI/STOCASTIC/MACD CONFLUENCE COMBO plot RSM_MACD_Diff = reference MACD("fast length" = 12, "slow length" = 26, "macd length" = 9).Diff; RSM_MACD_Diff.SetDefaultColor(GetColor(5)); RSM_MACD_Diff.SetPaintingStrategy(PaintingStrategy.HISTOGRAM); RSM_MACD_Diff.SetLineWeight(4); RSM_MACD_Diff.DefineColor("Positive and Up", Color.GREEN); RSM_MACD_Diff.DefineColor("Positive and Down", Color.DARK_GREEN); RSM_MACD_Diff.DefineColor("Negative and Down", Color.RED); RSM_MACD_Diff.DefineColor("Negative and Up", Color.DARK_RED); RSM_MACD_Diff.AssignValueColor( if RSM_MACD_Diff >= 0 then if RSM_MACD_Diff > RSM_MACD_Diff[1] then RSM_MACD_Diff.Color("Positive and Up") else RSM_MACD_Diff.Color("Positive and Down") else if RSM_MACD_Diff < RSM_MACD_Diff[1] then RSM_MACD_Diff.Color("Negative and Down") else RSM_MACD_Diff.Color("Negative and Up") ); plot RSM_MACD_ZeroLine = 0; RSM_MACD_ZeroLine.SetDefaultColor(Color.RED); RSM_MACD_ZeroLine.HideTitle(); RSM_MACD_ZeroLine.HideBubble(); def RSM_RSI = reference RSI(length = 7).RSI; def RSM_Stoch_Val = 100 * (close - lowest(low, 14)) / (highest(high, 14) - lowest(low, 14)); def RSM_StochSlowK = SimpleMovingAvg(SimpleMovingAvg(RSM_Stoch_Val,3),3); def RSM_rsiGreen = RSM_RSI >= 50; def RSM_rsiRed = RSM_RSI < 50; def RSM_stochGreen = RSM_StochSlowK >= 50; def RSM_stochRed = RSM_StochSlowK < 50; def RSM_macdGreen = RSM_MACD_Diff >= 0; def RSM_macdRed = RSM_MACD_Diff < 0; def RSM_Buy = RSM_rsiGreen and RSM_stochGreen and RSM_macdGreen; def RSM_Sell = RSM_rsiRed and RSM_stochRed and RSM_macdRed; # Shade areas based on criteria; adjust as needed AddCloud( if ShowRSMCloud and RSM_rsiGreen and RSM_stochGreen and RSM_macdGreen then Double.POSITIVE_INFINITY else Double.NaN, if ShowRSMCloud and RSM_rsiGreen and RSM_stochGreen and RSM_macdGreen then Double.NEGATIVE_INFINITY else Double.NaN, Color.LIGHT_GREEN ); AddCloud( if ShowRSMCloud and RSM_rsiRed and RSM_stochRed and RSM_macdRed then Double.POSITIVE_INFINITY else Double.NaN, if ShowRSMCloud and RSM_rsiRed and RSM_stochRed and RSM_macdRed then Double.NEGATIVE_INFINITY else Double.NaN, Color.LIGHT_RED ); ### Divergance input HMA_Length = 55; input HMA_Lookback = 2; def HMA = HullMovingAvg(price = HL2, length = HMA_Length); def HMA_delta = HMA[1] - HMA[HMA_Lookback + 1]; def HMA_delta_per_bar = HMA_delta / HMA_Lookback; def HMA_next_bar = HMA[1] + HMA_delta_per_bar; def HMA_concavity = if HMA > HMA_next_bar then 1 else -1; def HMA_MA_Max = if HMA[-1] < HMA and HMA > HMA[1] then HMA else Double.NaN; def HMA_MA_Min = if HMA[-1] > HMA and HMA < HMA[1] then HMA else Double.NaN; def HMA_divergence = HMA - HMA_next_bar; AddLabel(ShowHMALabel, "Divergence " + if HMA_concavity < 0 then if HMA_divergence[1] > HMA_divergence then "Bearish (increasing)" else "Bearish" else if HMA_divergence[1] < HMA_divergence then "Bullish (decreasing)" else "Bullish", if HMA_concavity < 0 then if HMA_divergence[1] > HMA_divergence then Color.DARK_RED else Color.RED else if HMA_divergence[1] < HMA_divergence then Color.DARK_GREEN else Color.GREEN ); ### Stocastic Scalper def STOCHSCALPER_oSS = (open[1] + close[1]) / 2; def STOCHSCALPER_hSS = Max(high, close[1]); def STOCHSCALPER_lSS = Min(low, close[1]); def STOCHSCALPER_cSS = (STOCHSCALPER_oSS + STOCHSCALPER_hSS + STOCHSCALPER_lSS + close) / 4; def STOCHSCALPER_mean = Average(STOCHSCALPER_cSS, 20); def STOCHSCALPER_sd = StDev(STOCHSCALPER_cSS, 20); def STOCHSCALPER_atr = Average(TrueRange(STOCHSCALPER_cSS, STOCHSCALPER_hSS, STOCHSCALPER_lSS), 20); def STOCHSCALPER_squeeze = if (STOCHSCALPER_mean + (2 * STOCHSCALPER_sd)) < (STOCHSCALPER_mean + (1.5 * STOCHSCALPER_atr)) then yes else no; def STOCHSCALPER_squeeze_signal = !STOCHSCALPER_squeeze[1] and STOCHSCALPER_squeeze; AddCloud(if ShowSTOCHSCALPERSqueezeCloud and STOCHSCALPER_squeeze then MACDBB_Upper else Double.NaN, if ShowSTOCHSCALPERSqueezeCloud and STOCHSCALPER_squeeze then MACDBB_Lower else Double.NaN, Color.YELLOW); AddLabel(ShowSTOCHSCALPERSqueezeLabel, "Scalper Squeeze", if STOCHSCALPER_squeeze then Color.WHITE else Color.GRAY); ### Balance of Power input BOP_EMA_Length = 20; input BOP_TEMA_Length = 20; def BOP_THL = If(high != low, high - low, 0.01); def BOP_BullOpen = (high - open) / BOP_THL; def BOP_BearOpen = (open - low) / BOP_THL; def BOP_BullClose = (close - low) / BOP_THL; def BOP_BearClose = (high - close) / BOP_THL; def BOP_BullOC = If(close > open, (close - open) / BOP_THL, 0); def BOP_BearOC = If(open > close, (open - close) / BOP_THL, 0); def BOP_BullReward = (BOP_BullOpen + BOP_BullClose + BOP_BullOC) / 1; def BOP_BearReward = (BOP_BearOpen + BOP_BearClose + BOP_BearOC) / 1; def BOP_BOP = BOP_BullReward - BOP_BearReward; def BOP_SmoothBOP = ExpAverage(BOP_BOP, BOP_EMA_Length); def BOP_xPrice = BOP_SmoothBOP; def BOP_xEMA1 = ExpAverage(BOP_SmoothBOP, BOP_TEMA_Length); def BOP_xEMA2 = ExpAverage(BOP_xEMA1, BOP_TEMA_Length); def BOP_xEMA3 = ExpAverage(BOP_xEMA2, BOP_TEMA_Length); def BOP_nRes = 3 * BOP_xEMA1 - 3 * BOP_xEMA2 + BOP_xEMA3; def BOP_SmootherBOP = BOP_nRes; def BOP_s1 = BOP_SmoothBOP; def BOP_s2 = BOP_SmootherBOP; def BOP_s3 = BOP_SmootherBOP[2]; def BOP_Direction = if BarNumber() == 1 then 0 else if BOP_s2 < BOP_s3 and BOP_s2[1] > BOP_s3[1] then -1 else if BOP_s2 > BOP_s3 and BOP_s2[1] < BOP_s3[1] then 1 else BOP_Direction[1]; ### RSI IFT def RSI_IFT_R = reference RSI(5, close) - 50; def RSI_IFT_AvgRSI = MovingAverage(AverageType.Exponential,RSI_IFT_R,9); def RSI_IFT_InverseRSI = (Power(Double.E, 2 * RSI_IFT_AvgRSI) - 1) / (Power(Double.E, 2 * RSI_IFT_AvgRSI) + 1); def RSI_IFT_Direction = if BarNumber() == 0 then 0 else if (RSI_IFT_InverseRSI[1] > 0) and (RSI_IFT_InverseRSI < 0) then -1 else if (RSI_IFT_InverseRSI > 0) and (RSI_IFT_InverseRSI[1] < 0) then 1 else RSI_IFT_Direction[1]; ### Fibonacci SuperTrend input FST_Length = 11; input FST_Retrace = 23.6; input FST_UseHighLow = yes; def FST_h = if FST_UseHighLow then high else close; def FST_l = if FST_UseHighLow then low else close; def FST_minL = Lowest(FST_l, FST_Length); def FST_maxH = Highest(FST_h, FST_Length); def FST_hh = if FST_h > FST_maxH[1] then FST_h else FST_hh[1]; def FST_ll = if FST_l < FST_minL[1] then FST_l else FST_ll[1]; def FST_trend = if FST_h > FST_maxH[1] then 1 else if FST_l < FST_minL[1] then -1 else FST_trend[1]; def FST_Direction = if BarNumber() == 0 then 0 else if FST_trend != 1 then -1 else if FST_trend == 1 then 1 else FST_Direction[1]; ### Bar Color input BarColor = { "None", default "RSM", "FibonacciSuperTrend" }; AssignPriceColor( if BarColor == BarColor.FibonacciSuperTrend then if FST_trend == 1 then Color.GREEN else Color.RED else if BarColor == BarColor.RSM then if RSM_Buy then Color.GREEN else if RSM_Sell then Color.RED else Color.DARK_GRAY else Color.CURRENT ); ### Strategy input BullBear_Include_BOP = no; input BullBear_Include_FST = no; input BullBear_Include_RSI_IFT = yes; def BullBear_Buy = (!BullBear_Include_BOP or BOP_Direction == 1) and (!BullBear_Include_FST or FST_Direction == 1) and (!BullBear_Include_RSI_IFT or RSI_IFT_Direction == 1); def BullBear_Sell = (!BullBear_Include_BOP or BOP_Direction == -1) and (!BullBear_Include_FST or FST_Direction == -1) and (!BullBear_Include_RSI_IFT or RSI_IFT_Direction == -1); AddVerticalLine(ShowBullBearVerticalLines and BullBear_Buy and !BullBear_Buy[1], AsDollars(close), Color.GREEN, Curve.SHORT_DASH); AddVerticalLine(ShowBullBearVerticalLines and BullBear_Sell and !BullBear_Sell[1], AsDollars(close), Color.RED, Curve.SHORT_DASH); def Strategy_Buy = BullBear_Buy and MACDBB_Buy and RSM_Buy; def Strategy_Sell = BullBear_Sell and MACDBB_Sell and RSM_Sell; def Strategy_BuySignal = Strategy_Buy and !Strategy_Buy[1]; def Strategy_SellSignal = Strategy_Sell and !Strategy_Sell[1]; plot BuyArrow = if Strategy_BuySignal then 0 else Double.NaN; BuyArrow.SetPaintingStrategy(PaintingStrategy.ARROW_UP); BuyArrow.SetDefaultColor(Color.WHITE); BuyArrow.HideTitle(); BuyArrow.HideBubble(); plot SellArrow = if Strategy_SellSignal then 0 else Double.NaN; SellArrow.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN); SellArrow.SetDefaultColor(Color.WHITE); SellArrow.HideTitle(); SellArrow.HideBubble(); ### Alerts Alert(Strategy_BuySignal, "Long Entry", Alert.BAR, Sound.DING); Alert(Strategy_SellSignal, "Short Entry", Alert.BAR, Sound.DING); Alert(MACDBB_Line crosses above MACDBB_CrossFromAboveVal, "MACDBB Crossed Up", Alert.BAR, Sound.DING); Alert(MACDBB_Line crosses below MACDBB_CrossFromBelowVal, "MACDBB Crossed Down", Alert.BAR, Sound.DING); Alert(STOCHSCALPER_squeeze_signal, "Scalper Squeeze", Alert.BAR, Sound.DING);
Yep, I try not to enter long at resistance for sure. Good deal!I didn’t go long when “A” was fired.. it seemed extended to me, plus it was near a resistance level... mADX fired later, if you see the difference between first arrow that appeared under “A” and mADX line..I shorted it at “D” when supertrnd and hull changed color plus, red candles and later BB fired a sell signal.. I didn’t wait for BB confirmation to short it, rather I used it as confirmation to stay in the trade..
It shows you the close price of the pivot point. I don't use the prices on the vertical lines. It can be pretty much "bullish" / "bearish" labels.@barbaros thanks for generously sharing your work. What is the purpose of having prices in the lower study? Is it possible to take it off in your settings?
I was just talking to @Chuck about this. mADX needs to be cleaned up. I sent Chuck the updated script for add on purposes. This add on pretty much looks at ADX being over a specific value and that it made an pivot to the down side. Much like this: / \ . There is no direction in ADX. It shows you the trend strength. What the original author intended to show is probably trend exhaustion. So, don't take the mADX as it will go up or down, but a potential exit points...and I mean that with underline, potential.
thank you!It shows you the close price of the pivot point. I don't use the prices on the vertical lines. It can be pretty much "bullish" / "bearish" labels.
Yeah..trend exhaustion and a start of a new trend or a chop..I was just talking to @Chuck about this. mADX needs to be cleaned up. I sent Chuck the updated script for add on purposes. This add on pretty much looks at ADX being over a specific value and that it made an pivot to the down side. Much like this: / \ . There is no direction in ADX. It shows you the trend strength. What the original author intended to show is probably trend exhaustion. So, don't take the mADX as it will go up or down, but a potential exit points...and I mean that with underline, potential.
Check out our Buy the Dip indicator and see how it can help you find profitable swing trading ideas. Scanner, watchlist columns, and add-ons are included.
Thread starter | Similar threads | Forum | Replies | Date |
---|---|---|---|---|
RedK Chop & Breakout Scout V2.0 for ThinkOrSwim | Indicators | 16 | ||
G | Potential Breakout (PBO) Indicator for ThinkorSwim | Indicators | 8 | |
ThinkorSwim Stock Breakout Scanner | Indicators | 11 | ||
Potential Breakout Arrow Plots Indicator for ThinkorSwim | Indicators | 82 | ||
H | TOP Ultimate Breakout Indicator for ThinkorSwim | Indicators | 127 |
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.