Moxie Indicator for ThinkorSwim

@Slippage. That is a great idea? Actually clearer than the trampoline dots. Please let me know when you have been satisfied with the observation results as I’d love to try the code when ready. I admire your sticktoitness.

I'll update the code here once it's ready and let you guys know.
 

New Indicator: Buy the Dip

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.

Download the indicator

Is someone able to create a Moxie Upper with arrows that correlate with the squeeze types?? I was looking through the thread and don't know if this has been done yet. I think color-coordinated arrows would be best served for this purpose, rather than a down arrow be standard Red and an up arrow be standard Green. The squeeze helped me stay out of some potentially nasty whipsaws and chop today around 11:30-12:00 EST on the ES and I'd like to do whatever possible to highlight those potentially dangerous trades.
 
Is someone able to create a Moxie Upper with arrows that correlate with the squeeze types?? I was looking through the thread and don't know if this has been done yet. I think color-coordinated arrows would be best served for this purpose, rather than a down arrow be standard Red and an up arrow be standard Green. The squeeze helped me stay out of some potentially nasty whipsaws and chop today around 11:30-12:00 EST on the ES and I'd like to do whatever possible to highlight those potentially dangerous trades.

Arrows are directional and would be misleading but you can use my SqueezePro Clouds, inspired by whoever posted the MTF Squeeze Clouds on this site a while ago. I overlapped two of each cloud to make them less transparent. If you want them less bold you can delete the extra two AddCloud() statements for each squeeze type.

Ruby:
def bbu = reference BollingerBands().UpperBand;
def bbl = BollingerBands().LowerBand;

def kc1u = KeltnerChannels(factor = 1.0).Upper_Band;
def kc1l = KeltnerChannels(factor = 1.0).Lower_Band;

def kc2u = KeltnerChannels(factor = 1.5).Upper_Band;
def kc2l = KeltnerChannels(factor = 1.5).Lower_Band;

def kc3u = KeltnerChannels(factor = 2.0).Upper_Band;
def kc3l = KeltnerChannels(factor = 2.0).Lower_Band;

# loose squeeze
def cloudBUSqz3 = if bbu < kc3u then bbu else Double.NaN;
def cloudKC2USqz3 = if bbu < kc3u then kc3u else Double.NaN;
def cloudBLSqz3 = if bbl > kc3l then bbl else Double.NaN;
def cloudKC2LSqz3 = if bbl > kc3l then kc3l else Double.NaN;

AddCloud(cloudBUSqz3, cloudKC2USqz3, Color.DARK_GREEN, Color.DARK_GREEN);
AddCloud(cloudBLSqz3, cloudKC2LSqz3, Color.DARK_GREEN, Color.DARK_GREEN);

AddCloud(cloudBUSqz3, cloudKC2USqz3, Color.DARK_GREEN, Color.DARK_GREEN);
AddCloud(cloudBLSqz3, cloudKC2LSqz3, Color.DARK_GREEN, Color.DARK_GREEN);

# normal squeeze
def cloudBUSqz2 = if bbu < kc2u then bbu else Double.NaN;
def cloudKC2USqz2 = if bbu < kc2u then kc2u else Double.NaN;
def cloudBLSqz2 = if bbl > kc2l then bbl else Double.NaN;
def cloudKC2LSqz2 = if bbl > kc2l then kc2l else Double.NaN;

AddCloud(cloudBUSqz2, cloudKC2USqz2, Color.RED, Color.RED);
AddCloud(cloudBLSqz2, cloudKC2LSqz2, Color.RED, Color.RED);

AddCloud(cloudBUSqz2, cloudKC2USqz2, Color.RED, Color.RED);
AddCloud(cloudBLSqz2, cloudKC2LSqz2, Color.RED, Color.RED);

# tightest squeeze
def cloudBUSqz1 = if bbu < kc1u then bbu else Double.NaN;
def cloudKC2USqz1 = if bbu < kc1u then kc1u else Double.NaN;
def cloudBLSqz1 = if bbl > kc1l then bbl else Double.NaN;
def cloudKC2LSqz1 = if bbl > kc1l then kc1l else Double.NaN;

AddCloud(cloudBUSqz1, cloudKC2USqz1, Color.YELLOW, Color.YELLOW);
AddCloud(cloudBLSqz1, cloudKC2LSqz1, Color.YELLOW, Color.YELLOW);

AddCloud(cloudBUSqz1, cloudKC2USqz1, Color.YELLOW, Color.YELLOW);
AddCloud(cloudBLSqz1, cloudKC2LSqz1, Color.YELLOW, Color.YELLOW);
 
Arrows are directional and would be misleading but you can use my SqueezePro Clouds, inspired by whoever posted the MTF Squeeze Clouds on this site a while ago. I overlapped two of each cloud to make them less transparent. If you want them less bold you can delete the extra two AddCloud() statements for each squeeze type.

Ruby:
def bbu = reference BollingerBands().UpperBand;
def bbl = BollingerBands().LowerBand;

def kc1u = KeltnerChannels(factor = 1.0).Upper_Band;
def kc1l = KeltnerChannels(factor = 1.0).Lower_Band;

def kc2u = KeltnerChannels(factor = 1.5).Upper_Band;
def kc2l = KeltnerChannels(factor = 1.5).Lower_Band;

def kc3u = KeltnerChannels(factor = 2.0).Upper_Band;
def kc3l = KeltnerChannels(factor = 2.0).Lower_Band;

# loose squeeze
def cloudBUSqz3 = if bbu < kc3u then bbu else Double.NaN;
def cloudKC2USqz3 = if bbu < kc3u then kc3u else Double.NaN;
def cloudBLSqz3 = if bbl > kc3l then bbl else Double.NaN;
def cloudKC2LSqz3 = if bbl > kc3l then kc3l else Double.NaN;

AddCloud(cloudBUSqz3, cloudKC2USqz3, Color.DARK_GREEN, Color.DARK_GREEN);
AddCloud(cloudBLSqz3, cloudKC2LSqz3, Color.DARK_GREEN, Color.DARK_GREEN);

AddCloud(cloudBUSqz3, cloudKC2USqz3, Color.DARK_GREEN, Color.DARK_GREEN);
AddCloud(cloudBLSqz3, cloudKC2LSqz3, Color.DARK_GREEN, Color.DARK_GREEN);

# normal squeeze
def cloudBUSqz2 = if bbu < kc2u then bbu else Double.NaN;
def cloudKC2USqz2 = if bbu < kc2u then kc2u else Double.NaN;
def cloudBLSqz2 = if bbl > kc2l then bbl else Double.NaN;
def cloudKC2LSqz2 = if bbl > kc2l then kc2l else Double.NaN;

AddCloud(cloudBUSqz2, cloudKC2USqz2, Color.RED, Color.RED);
AddCloud(cloudBLSqz2, cloudKC2LSqz2, Color.RED, Color.RED);

AddCloud(cloudBUSqz2, cloudKC2USqz2, Color.RED, Color.RED);
AddCloud(cloudBLSqz2, cloudKC2LSqz2, Color.RED, Color.RED);

# tightest squeeze
def cloudBUSqz1 = if bbu < kc1u then bbu else Double.NaN;
def cloudKC2USqz1 = if bbu < kc1u then kc1u else Double.NaN;
def cloudBLSqz1 = if bbl > kc1l then bbl else Double.NaN;
def cloudKC2LSqz1 = if bbl > kc1l then kc1l else Double.NaN;

AddCloud(cloudBUSqz1, cloudKC2USqz1, Color.YELLOW, Color.YELLOW);
AddCloud(cloudBLSqz1, cloudKC2LSqz1, Color.YELLOW, Color.YELLOW);

AddCloud(cloudBUSqz1, cloudKC2USqz1, Color.YELLOW, Color.YELLOW);
AddCloud(cloudBLSqz1, cloudKC2LSqz1, Color.YELLOW, Color.YELLOW);
@Slippage Thanks! I believe that will do just fine.
 
For anyone considering purchasing any Moxie stuff, Simpler Trading keeps increasing the prices. If you're serious about it you're probably better off doing it soon rather than waiting. I noticed today the package I paid $997 for just over a week ago is now $1197. If you were looking at a package last week and you remember what that price was it might be worth calling them and trying to get that price now.

So far, since I joined Mastery, TG hasn't called any trades except an optional add to an SLV position they were already in which went south two days after he called the add. He has live trading sessions for Mastery and for one or two classes this week. It sounds like Mastery members do not get alerts for the trades he takes live with the classes. Other Mastery members, please correct me if I'm wrong. I don't care that much, since my goal isn't to trade his alerts forever, but it does kind of rub me the wrong way. I thought I was paying for alerts on his trades, not paying for alerts on his trades except ones he takes Wednesdays and Thursdays or whatever days. It's not like sharing those trades with Mastery members takes anything away from the classes.

Regarding TG's fear of shorting, I think I caught the root cause of that in one of his videos. He was showing a stock in an uptrend and saying he doesn't like to short because "it has all these levels of support it can bounce from" while pointing to the moving averages. I don't know why it doesn't occur to him he just needs to reverse his criteria to look for a clear path down the same as he looks for a clear path up to go long. There are stocks already below their daily MAs and some below the weekly and monthly MAs as well.
I am in the Moxie Mastery and don't think I will be paying once my subscription expires. I've been in it for 2 months now and he hardly put on any trades because he doesn't short. Instead he's been on one vacation after another. I am a little irritated by that. As a new trader I paid $600 for guidance and instead I've lost money by following him. @Slippage I can't believe that moxie is the same thing as MACD. I just compared the two and you are right!!!! I am appalled.

To answer your question about Mastery members having access to live trading classes that come with the indicator - I don't think we do which is messed up. They want to charge $100s for the live classes. I'm supposed to get one live trading session per month with my subscription and in the last scheduled one he put on one trade that someone in the class suggested and we ended up getting out of it with a loss. Granted the market was heading down and since he only trades in one direction there was nothing for him to do Instead he just went over Moxie for new people. I'm very disappointed.

I do think he might add a trade in the Mastery alerts if he sees something good during the paid live trading session but because so many people with large accounts follow him you see an immediate spike in price, so we have to be very careful and wait for a pullback.

To summarize the "Moxie method", it doesn't seem to have anything to do with the actual indicator. It mostly has to do with the way price interacts with moving averages as long as the indicator supports the narrative. TG admitted that he doesn't use Moxie scans. He simply has a list of stocks that move a lot and just trades those. Slippage has already covered it in his reviews and I'm just confirming that.

I'm starting to think that TG is really good at trading bullish market (by identifying stocks through other avenues) and he is a great salesperson. And he is cute and charismatic so things are working for him.

To his credit, he also is patient and that has proven to be very prudent in this market. We could've taken much bigger losses and he has prevented that from happening. If anyone wants to buy the package from Simpler Trading, don't do it. Just use the indicator code here and you can join the Moxie Mastery room for $600 for 3 months and you will learn the way he trades. It would be a much better investment. According to TG, we are about to be done with the the downturn so he is supposed to start shining any day now.
 
I am in the Moxie Mastery and don't think I will be paying once my subscription expires. I've been in it for 2 months now and he hardly put on any trades because he doesn't short. Instead he's been on one vacation after another. I am a little irritated by that. As a new trader I paid $600 for guidance and instead I've lost money by following him. @Slippage I can't believe that moxie is the same thing as MACD. I just compared the two and you are right!!!! I am appalled.

To answer your question about Mastery members having access to live trading classes that come with the indicator - I don't think we do which is messed up. They want to charge $100s for the live classes. I'm supposed to get one live trading session per month with my subscription and in the last scheduled one he put on one trade that someone in the class suggested and we ended up getting out of it with a loss. Granted the market was heading down and since he only trades in one direction there was nothing for him to do Instead he just went over Moxie for new people. I'm very disappointed.

I do think he might add a trade in the Mastery alerts if he sees something good during the paid live trading session but because so many people with large accounts follow him you see an immediate spike in price, so we have to be very careful and wait for a pullback.

To summarize the "Moxie method", it doesn't seem to have anything to do with the actual indicator. It mostly has to do with the way price interacts with moving averages as long as the indicator supports the narrative. TG admitted that he doesn't use Moxie scans. He simply has a list of stocks that move a lot and just trades those. Slippage has already covered it in his reviews and I'm just confirming that.

I'm starting to think that TG is really good at trading bullish market (by identifying stocks through other avenues) and he is a great salesperson. And he is cute and charismatic so things are working for him.

To his credit, he also is patient and that has proven to be very prudent in this market. We could've taken much bigger losses and he has prevented that from happening. If anyone wants to buy the package from Simpler Trading, don't do it. Just use the indicator code here and you can join the Moxie Mastery room for $600 for 3 months and you will learn the way he trades. It would be a much better investment. According to TG, we are about to be done with the the downturn so he is supposed to start shining any day now.
@Homemadeitmyself , i feel the same way as u to. i m glad i m not alone. we should form a moxie group here n bounce idea to trade together. lol
 
It's just short of a month I've been in there. My best trade so far using TG's strategy was BA, not an alert. I had a couple of successful shorts my first week or so when he wasn't taking any trades. His alerts have been mixed and I'm okay with that, for now. I took some other trades which also had mixed results. A couple that when I looked again I saw my mistake and some that just didn't work out. That's trading.

I suspect he feels pressure from the group to alert something and it leads to losses. MAC was probably one of those. That looked to me like, "yeah okay I guess it fits the rules so we have to take it". I don't think he even took that trade. He didn't look to me like he was entering orders for 6 or 8 accounts. I'd be curious to see his account statements. Due to the way that went down I risked a whole $10 on that trade. I come from day trading with sizing based on risk rather than buying however many shares some percent of your account can buy. I didn't like the trade but I figured I'd get in so I'd track it. Maybe it'd contribute a little bit to pay for the subscription. OSTK and one or two of the other recent alerts didn't seem to fit any strategy. It seemed like he just wanted in early for the bounce. I used smaller sizing on those trades, too.

I didn't expect an "alert service" to provide much instruction. That's why I paid for the (not live) class, which I've subsequently recommended skipping and just watching YouTube and Mastery's Learning Library videos instead. There's more included in Mastery than what I thought would be. It could be just push notifications with no chat room and no TG answering questions throughout most days.

I agree his ski trips are detrimental to the service. He gives SPY a quick glance in the morning so it seems like he's working. Along the lines of... "the 15m 50 SMA blah blah blah so no trades today. Since there's nothing to do I won't be checking in."

When joining Mastery I had no intention to subscribe long term. My eyes are still new to the strategy and I expect I'll still make mistakes until I've had more repetitions with it but my learning process for his core strategy is done and I'm ignoring trampolines for now. I'm debating about mostly focusing on my own trades and taking the alerts when they come or mainly trading the alerts until I've seen more of those setups in real-time before taking a lot of trades on my own.

I still have more than 2 months left in the subscription. Right now I'm trading super small while I gain trust in the strategy. I scale up a little bit each week. If by the end of my 3 months the alerts pay for the subscription then I may let it renew and continue scaling the risk/reward.
 
Here's Moxie with no higher timeframes. The resulting line is drawn slightly differently than the real Moxie, more or less arriving at the same result in most cases but it affects the shape of the line so the signals may be different from the real Moxie and may cause confusion in the Moxie Mastery trading room if you're talking about things you see in this one. I'll probably run both until I get a feel for which I like better but I'm going to use the arrows from this version so it shows only the trigger candle.

Ruby:
declare lower;

input showVerticalLines = yes;
input showTrampolines = yes;
input showSqueezeDots = no;
input showLabel = yes;

plot ZeroLine = 0;
ZeroLine.SetDefaultColor(Color.GRAY);
ZeroLine.SetLineWeight(2);
ZeroLine.HideBubble();
ZeroLine.HideTitle();

def currentAggPeriod = GetAggregationPeriod();
def multiplier =
  if currentAggPeriod <= AggregationPeriod.TWO_MIN then AggregationPeriod.FIVE_MIN / currentAggPeriod
  else if currentAggPeriod <= AggregationPeriod.THREE_MIN then AggregationPeriod.TEN_MIN / currentAggPeriod
  else if currentAggPeriod <= AggregationPeriod.FIVE_MIN then AggregationPeriod.FIFTEEN_MIN / currentAggPeriod
  else if currentAggPeriod <= AggregationPeriod.TEN_MIN then AggregationPeriod.THIRTY_MIN / currentAggPeriod
  else if currentAggPeriod <= AggregationPeriod.FIFTEEN_MIN then AggregationPeriod.HOUR / currentAggPeriod
  else if currentAggPeriod <= AggregationPeriod.THIRTY_MIN then AggregationPeriod.TWO_HOURS / currentAggPeriod
  else if currentAggPeriod <= AggregationPeriod.HOUR then 7
  else if currentAggPeriod <= AggregationPeriod.TWO_HOURS then 3
  else if currentAggPeriod <= AggregationPeriod.FOUR_HOURS then 3 # yes, weird, but this matches better
  else if currentAggPeriod <= AggregationPeriod.DAY then 5
  else if currentAggPeriod <= AggregationPeriod.WEEK then AggregationPeriod.MONTH / currentAggPeriod
  else AggregationPeriod.QUARTER / currentAggPeriod
;

script MoxieFunc {
  input factor = 1;
  def v = ExpAverage(close, 12*factor) - ExpAverage(close, 26*factor);
  def a = ExpAverage(v, 9*factor);
  plot m = (v - a) * 3;
}

plot Moxie = MoxieFunc(multiplier);

Moxie.SetLineWeight(2);
Moxie.DefineColor("Up", Color.UPTICK);
Moxie.DefineColor("Down", Color.RED);
Moxie.AssignValueColor(
  if Moxie < Moxie[1] then Moxie.Color("Down")
  else Moxie.Color("Up")
);
Moxie.HideBubble();
Moxie.HideTitle();

# Watkins uses a different setup for Moxie on his 15 minute charts.
# He uses two lines derived from two higher timeframes.
def secondMultiplier =
  if currentAggPeriod == AggregationPeriod.FIFTEEN_MIN then 7
  else currentAggPeriod
;

plot MoxieSecondLine =
  if currentAggPeriod == AggregationPeriod.FIFTEEN_MIN
  then MoxieFunc(secondMultiplier)
  else Double.NaN
;

MoxieSecondLine.SetLineWeight(2);
MoxieSecondLine.DefineColor("Up", Color.UPTICK);
MoxieSecondLine.DefineColor("Down", Color.RED);
MoxieSecondLine.AssignValueColor(
  if MoxieSecondLine < MoxieSecondLine[1] then MoxieSecondLine.Color("Down")
  else MoxieSecondLine.Color("Up")
);
MoxieSecondLine.HideBubble();
MoxieSecondLine.HideTitle();
MoxieSecondLine.SetHiding(currentAggPeriod != AggregationPeriod.FIFTEEN_MIN);

# Show vertical lines at crossovers
AddVerticalLine(showVerticalLines and Moxie[1] crosses above 0, "", CreateColor(0,150,0), Curve.SHORT_DASH);
AddVerticalLine(showVerticalLines and Moxie[1] crosses below 0, "", CreateColor(200,0,0), Curve.SHORT_DASH);

# Indicate the Trampoline setup
def sma50 = Average(close, 50);
plot Trampoline =
  if showTrampolines and ((Moxie < -.01 and close > sma50) or (Moxie > .01 and close < sma50))
  then 0
  else Double.NaN
;
Trampoline.SetPaintingStrategy(PaintingStrategy.SQUARES);
Trampoline.DefineColor("Bullish", Color.LIGHT_GREEN);
Trampoline.DefineColor("Bearish", Color.PINK);
Trampoline.AssignValueColor(if close > sma50 then Trampoline.Color("Bearish") else Trampoline.Color("Bullish"));
Trampoline.HideBubble();
Trampoline.HideTitle();

# show squeeze dots on zero line
def bb = reference BollingerBands.LowerBand;
def squeezeLevel =
  if bb > KeltnerChannels(factor = 1.0).Lower_Band then 3
  else if bb > KeltnerChannels(factor = 1.5).Lower_Band then 2
  else if bb > KeltnerChannels(factor = 2.0).Lower_Band then 1
  else 0
;

plot Squeeze = if !showSqueezeDots then Double.NaN else 0;
Squeeze.SetPaintingStrategy(PaintingStrategy.POINTS);
Squeeze.SetDefaultColor(Color.GRAY);
Squeeze.DefineColor("Loose Squeeze", Color.UPTICK);
Squeeze.DefineColor("Squeeze", Color.RED);
Squeeze.DefineColor("Tight Squeeze", Color.YELLOW);
Squeeze.DefineColor("No Squeeze", Color.GRAY);
Squeeze.AssignValueColor(
  if squeezeLevel == 3 then Squeeze.Color("Tight Squeeze")
  else if squeezeLevel == 2 then Squeeze.Color("Squeeze")
  else if squeezeLevel == 1 then Squeeze.Color("Loose Squeeze")
  else Squeeze.Color("No Squeeze")
);
Squeeze.HideTitle();
Squeeze.HideBubble();

AddLabel(
  showLabel,
  if currentAggPeriod == AggregationPeriod.WEEK then " W "
  else if currentAggPeriod == AggregationPeriod.DAY then " D "
  else if currentAggPeriod == AggregationPeriod.HOUR then " H "
  else if currentAggPeriod == AggregationPeriod.FIFTEEN_MIN then " 15 "
  else if currentAggPeriod == AggregationPeriod.FIVE_MIN then " 5 "
  else if currentAggPeriod == AggregationPeriod.TWO_MIN then " 2 "
  else " ",
  if Moxie < 0 then Color.RED else Color.GREEN
);

The upper study now shows only one arrow instead of a series of them. It's showing the candle that actually triggered instead of all the days that week or all the hours that day, etc. If you find it harder to notice the arrow in the chart you can modify the color and/or size to see if that helps. The arrow might still appear and disappear until the trigger candle closes but once that candle closes it won't change any more.

The upper study can now color your candles to match Moxie. Disabled by by default.

Upper study
Ruby:
declare upper;

input colorCandles = no;

def currentAggPeriod = GetAggregationPeriod();
def multiplier =
  if currentAggPeriod <= AggregationPeriod.TWO_MIN then AggregationPeriod.FIVE_MIN / currentAggPeriod
  else if currentAggPeriod <= AggregationPeriod.THREE_MIN then AggregationPeriod.TEN_MIN / currentAggPeriod
  else if currentAggPeriod <= AggregationPeriod.FIVE_MIN then AggregationPeriod.FIFTEEN_MIN / currentAggPeriod
  else if currentAggPeriod <= AggregationPeriod.TEN_MIN then AggregationPeriod.THIRTY_MIN / currentAggPeriod
  else if currentAggPeriod <= AggregationPeriod.FIFTEEN_MIN then AggregationPeriod.HOUR / currentAggPeriod
  else if currentAggPeriod <= AggregationPeriod.THIRTY_MIN then AggregationPeriod.TWO_HOURS / currentAggPeriod
  else if currentAggPeriod <= AggregationPeriod.HOUR then 7
  else if currentAggPeriod <= AggregationPeriod.TWO_HOURS then 3
  else if currentAggPeriod <= AggregationPeriod.FOUR_HOURS then 3 # yes, weird, but this matches better
  else if currentAggPeriod <= AggregationPeriod.DAY then 5
  else if currentAggPeriod <= AggregationPeriod.WEEK then AggregationPeriod.MONTH / currentAggPeriod
  else AggregationPeriod.QUARTER / currentAggPeriod
;

script MoxieFunc {
  input factor = 1;
  def v = ExpAverage(close, 12*factor) - ExpAverage(close, 26*factor);
  def a = ExpAverage(v, 9*factor);
  plot m = (v - a) * 3;
}

def Moxie = MoxieFunc(multiplier);

def longArrowPosition = if Moxie > 0 and Moxie[1] <= 0 then low else Double.NaN;
plot LongArrow = longArrowPosition;
LongArrow.SetPaintingStrategy(PaintingStrategy.ARROW_UP);
LongArrow.SetDefaultColor(Color.GREEN);
LongArrow.SetLineWeight(5);
LongArrow.HideBubble();
LongArrow.HideTitle();

def shortArrowPosition = if Moxie < 0 and Moxie[1] >= 0 then high else Double.NaN;
plot ShortArrow = shortArrowPosition;
ShortArrow.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN);
ShortArrow.SetDefaultColor(Color.LIGHT_RED);
ShortArrow.SetLineWeight(5);
ShortArrow.HideBubble();
ShortArrow.HideTitle();

AssignPriceColor(if !colorCandles then Color.CURRENT else if Moxie < Moxie[1] then Color.RED else Color.UPTICK);
@Slippage I find the smooth moxie lower to lag in changing its direction vs your other version
 
I find the smooth moxie lower to lag in changing its direction vs your other version

There's a couple of reasons that may happen...

The real Moxie, with the stair steps, rewrites history. It's using data from a higher timeframe. On a daily chart, it's looking at weekly. Each horizontal step is a week (5 days). If a stock spikes up on Friday, the whole step moves up and it looks like it happened Monday. It didn't. It's playing tricks on you. If a stock does nothing for 4 days and then spikes up on the 5th day, that higher closing price affects the whole week. And, for instance, in one of the calculations it's used in a 12 period average. That will become relevant in the next paragraph.

The smooth version, instead of using the higher timeframe, increases the number of periods it calculates averages on. Instead of 12 weeks it averages 60 days. If a stock does nothing for 4 days and then spikes up on the 5th day, that higher closing price affects only the current day. And, for instance, in one of the calculations it's used in a 60 period average (12 times 5 days in a week). Being 1 day out of 60 instead of 1 week out of 12, it has smaller impact on the average than in the weekly calculation.

The smooth one is experimental. It exists. You can use it if you want. I don't make any recommendation for or against it. I have both versions on my daily and hourly charts so I can compare and see which seems more accurate/useful. With the vertical lines on crossovers enabled, the results are very close and often the same. Without the crossover line, which I put at the end of the stair step period, the real Moxie tricks you into thinking it saw the move before it happened.
 
Last edited:
What is the indicator with stops and targets in your image? Is it auto fibonacci? Could you share where we could get that? Thanks so much!
Public Domain:

Code:
#This script will calculate and plot the stop loss and first profit target when the stock breaks out above the previous day's high or opening range high (whichever is higher) or vice versa to the low-side. This may be used with a 2 min chart as he described in his original post for a more aggressive entry point, or, as he recommended to me, on a 5 min chart for a more conservative entry point.

#Robert Payne   06/17/2014
#Public Domain


#This script will calculate and plot the stop loss and first profit target when the stock breaks out above the previous day's high or opening range high (whichever is higher) or vice versa to the low-side. This may be used with a 2 min chart as he described in his original post for a more aggressive entry point, or, as he recommended to me, on a 5 min chart for a more conservative entry point.

#---------------------------------------------------------------------------------------------


script OpenRange {
    input ORtime = 5;

    def FirstBar = GetDay() != GetDay()[1];
    def RangeTime = SecondsFromTime(0930) >= 0 and SecondsFromTime(0930) < 60 * ORtime;
    def Rhigh = if FirstBar then high else if RangeTime and high > Rhigh[1] then high else Rhigh[1];
    def Rlow = if FirstBar then low else if RangeTime and low < Rlow[1] then low else Rlow[1];

    plot h = if RangeTime then Double.NaN else Rhigh;
    plot l = if RangeTime then Double.NaN else Rlow;
}

def first30 = SecondsFromTime(0930) >= 0 and SecondsTillTime(1000) >= 0;
def today = GetLastDay() == GetDay();
def ATR = Average(TrueRange(high,  close,  low),  10);

plot yHigh = if !today then Double.NaN else high(period = "day" )[1];
yHigh.SetDefaultColor(Color.CYAN);
plot yLow = if !today then Double.NaN else low(period = "day" )[1];
yLow.SetDefaultColor(Color.PINK);

plot h5 = if !today then Double.NaN else if !first30 then Double.NaN else OpenRange(5).h;
h5.SetDefaultColor(Color.YELLOW);
plot l5 = if !today then Double.NaN else if !first30 then Double.NaN else OpenRange(5).l;
l5.SetDefaultColor(Color.YELLOW);
plot h30 = if !today then Double.NaN else OpenRange(30).h;
h30.SetDefaultColor(Color.YELLOW);
plot l30 = if !today then Double.NaN else OpenRange(30).l;
l30.SetDefaultColor(Color.YELLOW);

def lowConf = if first30 then Min(yLow, l5) - ATR else Min(yLow, l30) - ATR;
def highConf = if first30 then Max(yHigh, h5) + ATR else Max(yHigh, h30) + ATR;

plot lc1 = if first30 then lowConf else Double.NaN;
lc1.SetDefaultColor(Color.ORANGE);
plot lc2 = if !first30 then lowConf else Double.NaN;
lc2.SetDefaultColor(Color.ORANGE);
plot hc1 = if first30 then highConf else Double.NaN;
hc1.SetDefaultColor(Color.ORANGE);
plot hc2 = if !first30 then highConf else Double.NaN;
hc2.SetDefaultColor(Color.ORANGE);

def decisionL = if close > lowConf then Double.NaN else if close crosses below lowConf then low else decisionL[1];
def decisionH = if close < highConf then Double.NaN else if close crosses above highConf then high else decisionH[1];

plot dL = if !today then Double.NaN else decisionL;
dL.SetDefaultColor(Color.WHITE);
plot dH = if !today then Double.NaN else decisionH;
dH.SetDefaultColor(Color.WHITE);

def TL = CompoundValue(1, if IsNaN(dL) then Double.NaN else if !IsNaN(TL[1]) then TL[1] else if close crosses below dL then dL - 2 * ATR else Double.NaN, Double.NaN);
def SL = CompoundValue(1, if IsNaN(dL) then Double.NaN else if !IsNaN(SL[1]) then SL[1] else if close crosses below dL then dL + 2 * ATR else Double.NaN, Double.NaN);

plot Target1Low = if !today then Double.NaN else TL;
Target1Low.SetDefaultColor(Color.GREEN);
Target1Low.SetStyle(Curve.SHORT_DASH);
plot Stop1Low = if !today then Double.NaN else SL;
Stop1Low.SetDefaultColor(Color.RED);
Stop1Low.SetLineWeight(2);

AddChartBubble(IsNaN(TL[1]) and !IsNaN(TL), TL, "Target 1\n" + Round(TL, 2), Color.GREEN, no);
AddChartBubble(IsNaN(SL[1]) and !IsNaN(SL), SL, "Stop\n" + Round(SL, 2), Color.RED);

def TH = CompoundValue(1, if IsNaN(dH) then Double.NaN else if !IsNaN(TH[1]) then TH[1] else if close crosses above dH then dH + 2 * ATR else Double.NaN, Double.NaN);
def SH = CompoundValue(1, if IsNaN(dH) then Double.NaN else if !IsNaN(SH[1]) then SH[1] else if close crosses above dH then dH - 2 * ATR else Double.NaN, Double.NaN);

plot Target1High = if !today then Double.NaN else TH;
Target1High.SetDefaultColor(Color.GREEN);
Target1High.SetStyle(Curve.SHORT_DASH);
plot Stop1High = if !today then Double.NaN else SH;
Stop1High.SetDefaultColor(Color.RED);
Stop1High.SetLineWeight(2);

AddChartBubble(IsNaN(TH[1]) and !IsNaN(TH), TH, "Target 1\n" + Round(TH, 2), Color.GREEN);
AddChartBubble(IsNaN(SH[1]) and !IsNaN(SH), SH, "Stop\n" + Round(SH, 2), Color.RED, no);


def alertup = close[1] crosses above hc1 or close[1] crosses above hc2;
def alertdn = close[1] crosses below lc1 or close[1] crosses below lc2;
alert(alertup, getsymbol() + " UP", alert.bar, sound.bell);
alert(alertdn, getsymbol() + " DOWN", alert.bar, sound.bell);
 
I am new here but just tried it out the one that is posted by slippage, and It looks identical to MACD, when I have them side by side in my charts.

The only advantage I see here is maybe easier to see crossovers and a little easier to follow? And looks like the bigger the steps in the stairs the stronger the momentum. I am glad I did not buy this indicator, I was looking at it before I found this thread. I don't think I would have much use for it and would prefer MACD over this.
 
I am new here but just tried it out the one that is posted by slippage, and It looks identical to MACD, when I have them side by side in my charts.

The only advantage I see here is maybe easier to see crossovers and a little easier to follow? And looks like the bigger the steps in the stairs the stronger the momentum. I am glad I did not buy this indicator, I was looking at it before I found this thread. I don't think I would have much use for it and would prefer MACD over this.

Yes, it's been stated in this thread a few times Moxie is really just a MACD histogram of a higher timeframe drawn as a line instead of a histogram.

As a line, I find it easier to see divergences. Crossovers are also easier to see clearly. And, yes, taller steps are bigger increases in momentum. I guess it's like putting the histogram under a magnifying glass or microscope. The details are more visible this way, in my opinion. But it doesn't offer any information that we didn't already have in the stock indicators on every platform for free. Just a new way of looking at it.
 

Volatility Trading Range

VTR is a momentum indicator that shows if a stock is overbought or oversold based on its Weekly and Monthly average volatility trading range.

Download the indicator

Similar threads

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

87k+ Posts
462 Online
Create Post

Similar threads

Similar threads

The Market Trading Game Changer

Join 2,500+ subscribers inside the useThinkScript VIP Membership Club
  • Exclusive indicators
  • Proven strategies & setups
  • Private Discord community
  • ‘Buy The Dip’ signal alerts
  • Exclusive members-only content
  • Add-ons and resources
  • 1 full year of unlimited support

Frequently Asked Questions

What is useThinkScript?

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.

How do I get started?

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.

What are the benefits of VIP Membership?
VIP members get exclusive access to these proven and tested premium indicators: Buy the Dip, Advanced Market Moves 2.0, Take Profit, and Volatility Trading Range. In addition, VIP members get access to over 50 VIP-only custom indicators, add-ons, and strategies, private VIP-only forums, private Discord channel to discuss trades and strategies in real-time, customer support, trade alerts, and much more. Learn all about VIP membership here.
How can I access the premium indicators?
To access the premium indicators, which are plug and play ready, sign up for VIP membership here.
Back
Top