Moxie Indicator for ThinkorSwim

@Slippage Hard for me to say. I wouldn't rewrite the code you originally posted now that you have access to the official Moxie indicator. That would be considered piracy.
 

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

@Slippage Hard for me to say. I wouldn't rewrite the code you originally posted now that you have access to the official Moxie indicator. That would be considered piracy.
Alright. Here's what I'm thinking... I'm going to make two tweaks to the code I posted previously as a new post. That way the original dates are still on the code I posted before and if Simpler ever comes at us we can show that code was here before I signed up with them. So please don't nuke my earlier post even though it's obsolete and redundant. One of the tweaks isn't relevant to their code anyway since theirs doesn't handle multiple timeframes but the fix for the 15m timeframe is.
 
Last edited:
Hopefully this will be the final code. The code for the scans have not changed since they were posted earlier. I just wanted to bring all the pieces together in this post as the (hopefully) final and complete package.

1. This resolves a bug for 15m. It should use close price rather than high price.
2. This makes it so the second line is shown by default on 15m and no other timeframes. I changed this to stop the confusion some members ran into with why the second line didn't appear automatically on 15m.

Moxie Upper:
Ruby:
declare upper;

def currentAggPeriod = GetAggregationPeriod();
def higherAggPeriod =
  if currentAggPeriod <= AggregationPeriod.TWO_MIN then AggregationPeriod.FIVE_MIN
  else if currentAggPeriod <= AggregationPeriod.THREE_MIN then AggregationPeriod.TEN_MIN
  else if currentAggPeriod <= AggregationPeriod.FIVE_MIN then AggregationPeriod.FIFTEEN_MIN
  else if currentAggPeriod <= AggregationPeriod.TEN_MIN then AggregationPeriod.THIRTY_MIN
  else if currentAggPeriod <= AggregationPeriod.FIFTEEN_MIN then AggregationPeriod.HOUR
  else if currentAggPeriod <= AggregationPeriod.THIRTY_MIN then AggregationPeriod.TWO_HOURS
  else if currentAggPeriod <= AggregationPeriod.TWO_HOURS then AggregationPeriod.DAY
  else if currentAggPeriod <= AggregationPeriod.FOUR_HOURS then AggregationPeriod.TWO_DAYS
  else if currentAggPeriod <= AggregationPeriod.DAY then AggregationPeriod.WEEK
  else if currentAggPeriod <= AggregationPeriod.WEEK then AggregationPeriod.MONTH
  else AggregationPeriod.QUARTER
;

script MoxieFunc {
  input price = close;
  def vc1 = ExpAverage(price, 12) - ExpAverage(price , 26);
  def va1 = ExpAverage(vc1, 9);
  plot data = (vc1 - va1) * 3;
}

def Moxie = MoxieFunc(close(period = higherAggPeriod));

def longTrigger = if Moxie > 0 and Moxie[1] <= 0 then Moxie else Double.NaN;
def longArrowPosition =
  # first arrow
  if Moxie == longTrigger and Moxie != Moxie[1] then low
  # consecutive arrows at same position
  else if Moxie == longTrigger and Moxie == Moxie[1] then longArrowPosition[1]
  else Double.NaN;
plot long = longArrowPosition;
long.SetPaintingStrategy(PaintingStrategy.ARROW_UP);
long.SetDefaultColor(Color.GREEN);
long.SetLineWeight(3);
long.HideBubble();
long.HideTitle();

def shortTrigger = if Moxie < 0 and Moxie[1] >= 0 then Moxie else Double.NaN;
def shortArrowPosition =
  # first arrow
  if Moxie == shortTrigger and Moxie != Moxie[1] then high
  # consecutive arrows at same position
  else if Moxie == shortTrigger and Moxie == Moxie[1] then shortArrowPosition[1]
  else Double.NaN;
plot short = shortArrowPosition;
short.SetPaintingStrategy(PaintingStrategy.ARROW_DOWN);
short.SetDefaultColor(Color.LIGHT_RED);
short.SetLineWeight(3);
short.HideBubble();
short.HideTitle();

Moxie Lower:
Ruby:
declare lower;

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

plot ZeroLine = if !IsNaN(open) and !showSqueezeDots then 0 else Double.NaN;
ZeroLine.SetDefaultColor(Color.GRAY);
ZeroLine.SetLineWeight(2);
ZeroLine.HideBubble();
ZeroLine.HideTitle();

def currentAggPeriod = GetAggregationPeriod();
def higherAggPeriod =
  if currentAggPeriod <= AggregationPeriod.TWO_MIN then AggregationPeriod.FIVE_MIN
  else if currentAggPeriod <= AggregationPeriod.THREE_MIN then AggregationPeriod.TEN_MIN
  else if currentAggPeriod <= AggregationPeriod.FIVE_MIN then AggregationPeriod.FIFTEEN_MIN
  else if currentAggPeriod <= AggregationPeriod.TEN_MIN then AggregationPeriod.THIRTY_MIN
  else if currentAggPeriod <= AggregationPeriod.FIFTEEN_MIN then AggregationPeriod.HOUR
  else if currentAggPeriod <= AggregationPeriod.THIRTY_MIN then AggregationPeriod.TWO_HOURS
  else if currentAggPeriod <= AggregationPeriod.TWO_HOURS then AggregationPeriod.DAY
  else if currentAggPeriod <= AggregationPeriod.FOUR_HOURS then AggregationPeriod.TWO_DAYS
  else if currentAggPeriod <= AggregationPeriod.DAY then AggregationPeriod.WEEK
  else if currentAggPeriod <= AggregationPeriod.WEEK then AggregationPeriod.MONTH
  else AggregationPeriod.QUARTER
;

script MoxieFunc {
  input price = close;
  def vc1 = ExpAverage(price, 12) - ExpAverage(price , 26);
  def va1 = ExpAverage(vc1, 9);
  plot data = (vc1 - va1) * 3;
}

plot Moxie = MoxieFunc(close(period = higherAggPeriod));
Moxie.SetLineWeight(2);
Moxie.DefineColor("Up", Color.GREEN);
Moxie.DefineColor("Down", Color.RED);
def lastChange = if Moxie < Moxie[1] then 1 else 0;
Moxie.AssignValueColor(
  if lastChange == 1 then Moxie.Color("Down")
  else Moxie.Color("Up")
);

# Watkins uses a different setup for Moxie on his 15 minute charts.
# He uses two lines derived from two higher timeframes.
# For timeframes other than 15 minutes we'll use the same data as
# first Moxie line to reduce data requested from the server and
# improve performance.
def secondAggPeriod =
  if currentAggPeriod == AggregationPeriod.FIFTEEN_MIN
  then AggregationPeriod.TWO_HOURS
  else currentAggPeriod
;

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

MoxieSecondLine.SetLineWeight(2);
MoxieSecondLine.DefineColor("Up", Color.GREEN);
MoxieSecondLine.DefineColor("Down", Color.RED);
def lastChangeSecondLine = if MoxieSecondLine < MoxieSecondLine[1] then 1 else 0;
MoxieSecondLine.AssignValueColor(
  if lastChangeSecondLine == 1 then MoxieSecondLine.Color("Down")
  else MoxieSecondLine.Color("Up")
);
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 if !IsNaN(open) then 0 else Double.NaN;
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.SetLineWeight(2);
Squeeze.HideTitle();
Squeeze.HideBubble();

AddLabel(
  yes,
  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
);

Trigger scan:
Ruby:
# because Moxie calculates from higher time frame
# to find daily entries, run this scan on weekly
# to find hourly entries, run this on daily
script Moxie {
    input priceC = close;
    def vc1 = ExpAverage(priceC , 12) - ExpAverage(priceC , 26);
    def va1 = ExpAverage(vc1, 9);
    plot sData = (vc1 - va1) * 3;
}
def m = Moxie();
def moxieUpArrow = m > 0 and m[1] <= 0;
plot scan = moxieUpArrow within 1 bars;

Trampoline scan from @Sneaky_Swings earlier in this thread:
Ruby:
# because Moxie calculates from higher time frame
# to find daily entries, run this scan on weekly
# to find hourly entries, run this on daily

def ap1 = close;

script MoxieFunc {
    input priceC = close;
    def vc1 = ExpAverage(priceC , 12) - ExpAverage(priceC , 26);
    def va1 = ExpAverage(vc1, 9);
    plot sData = (vc1 - va1) * 3;
}

def price = close;
def s2 = MoxieFunc(price);

def ZeroLine = 0;
def Moxie = s2;

# Indicate the Trampoline setup
def sma50 = SimpleMovingAvg(close, 50);

plot trampoline = (Moxie > 0.1 and close < sma50);

EDIT 3/1/21 to add squeeze dots on zero line
 
Last edited:
I'm not in his group yet but I may join. You can find lots of his videos on the Simpler Trading channel on YouTube and he has a Moxie Trader channel on YouTube, where he's a bit less secretive, from before he joined Simpler Trading.

If you watch more of his videos you'll find Squeeze didn't exist on his charts before he joined Simpler Trading and I believe it's there primarily to market SqueezePro. His strategy doesn't depend on squeeze at all though he does occasionally mention it if he happens to notice the stock he's looking at is in a squeeze in addition to meeting his strategy's criteria. He specifically stated he rarely uses the stochastics. In the dozens of videos I've watched he's never referred to volume except in a case where someone asked him to look at a stock and he mentioned it's too low volume. It was 200k for the day or something like that.

My impression is his strategy is almost entirely based on the 1 hour chart's MAs and price action. D/W/M MAs are filters to avoid immediate overhead resistance. 15m charts are just for tighter entries. And then Moxie on all those timeframes as a filter (above/below zero) and for divergence. I need to pay closer attention to see if he's even really watching Moxie on weekly. I believe his strategy can be reduced to just 3 charts, D/H/15m, if you select stocks from a scan that avoids the higher timeframe MAs or plot the weekly and monthly MAs on your D/H/15 charts so you won't need to refer to M and W.

Regarding your comments on OsMA, I appreciate that. I figured Moxie was based on something already well known and I was curious what it is but I hadn't taken any time to dig into it. Watkins seems like a smart guy. He graduated as a mechanical engineer so he must be able to do some math. But he doesn't strike me as the mathemagician type who would be capable of inventing something completely new and useful.
You are absolutely correct in your observations. He only uses the squeeze to make John Carter happy. He uses D, H and 15 charts, Moxie and 4 moving averages. He triggers base on price in relationship to Moxie and 50 SMA primarily on an hourly chart. He uses 15 min and D for confirmation.
 
@Homemadeitmyself Do you have the Mastery subscription or one of the training packages? Is Mastery just trade signals and once a month live sessions? Or is there a chat room and more resources to help actually learn the strategy? I've watched a lot of his videos and I've mostly reverse engineered his strategy from those but I'm wondering if the training would be worthwhile anyway.

I noticed with the way they price the 4 or 5 hour training session the best value is to pay for the basic level training and then pay for one quarter of Mastery. That's the same price as paying for the Elite training and you get 3 months of trade signals while losing just one of the four live trading sessions from Elite.
I have the mastery subscription and the indicator and some older strategy videos. Frankly, his strategy is SUPER simple. I've only been in his mastery program for a little over two weeks and I've lost money. I'm starting to get a little mad. But I think it's because he ONLY takes long entries and he is used to things exploding upward. The last two weeks have been rough as you all know. So most of his group is sitting flat right now. I think he needs to figure out what other sectors might start working in the near future. I'm not sure that the subscription is worth it, but I've only been with them for a short time. The old timers claim to have seen gains on 900% esp when they pair his callouts with options. I will report back once things in the market stabilize a little. I don't think he is effective in the market that's selling off. But it has nothing to do with the indicator. He is just unwilling to short.

I don't think I answered your question: you do get access to a chat room that is extremely active. There are a number of old timers who provide very valuable feedback. But sometimes you have to look for them between all the new people asking how to use computers. You are able to mute certain people I just haven't gotten there yet. I think if you are willing to overlook the sales driven culture at Simpler, the room could be a good resource. They do try to sell you **** nonstop lol
 
I have the mastery subscription and the indicator and some older strategy videos. Frankly, his strategy is SUPER simple. I've only been in his mastery program for a little over two weeks and I've lost money. I'm starting to get a little mad. But I think it's because he ONLY takes long
Thanks for the info @Homemadeitmyself. I'll be interested in your feedback on the service as the market picks up a bit. Watching a lot of TG's videos, I picked up on the same thing - a lot of his triggers are based on the Moxie Indicator and price in relation to the Hourly 50 SMA.

I'm not a proficient TOS programmer but it seems if a scan could search for Moxie Indicator > 0 on both Daily and Hourly chart AND price passing the 50 SMA. I think either passing above or below are interesting - if to the upside, you would have a potential trigger to buy, if to the downside put it on your watchlist for the potential trampoline bounce.

I think the most challenging aspect of this indicator is the scan. Does TG talk about that at all or is it discussed in the chat?

Thanks for the post. Also thanks to @Slippage for the info and continued conversation as we figure it out.
 
Last edited:
Yes, he does often mention a strong preference for the two lines on 15m to be "in agreement" with each other. Another unknown I've been watching for is how far from zero should Moxie be for a trampoline setup to be valid or some other criteria for trampolines. You'll often see trampoline conditions as Moxie approaches the zero line to cross over and they fail quickly.
Hi Slippage, thank you for the code. I m still learning how to use the indicator n had watched some of the videos. Is it common to have the moxie indicator above zeros on the hourly (per your code) but below the zero on the 15min chart?
& also how do i use the 2nd plot on the 15m? does that serve as a confirmation for the 1st plot on the 15min?
 
Is it common to have the moxie indicator above zeros on the hourly (per your code) but below the zero on the 15min chart?
& also how do i use the 2nd plot on the 15m? does that serve as a confirmation for the 1st plot on the 15min?

Yes, it's normal that Moxie is in different states on different timeframes.

For the 2 lines on 15m, he says when they are pretty close together, "in agreement with each other," you can trust whatever they are signaling and if they are wide apart it's probably a false signal.

You can learn both of these answers and other parts of his strategy from his YouTube videos in the Simpler Trading channel and in the Moxie Trader channel.
 
I think the most challenging aspect of this indicator is the scan. Does TG talk about that at all or is it discussed in the chat?

Sorry, @Fenway1353, I didn't realize you're still not comfortable building a scan with the steps I posted. Here's the code for the individual pieces of the scan I created. This scan isn't looking for triggers and won't find trampolines. It's looking for stocks that are almost ready to trade with normal, non-trampoline, setups regardless of how long ago Moxie crossed over.

For each of these pieces, add a new study filter to the scan, set the timeframe as listed here and paste the code.

1. Set to 1H. This handles the 1 hour moving averages.
This code could be simplified but I originally was just requiring price touched near 50 with or without closing above and I wanted to keep this easy to modify in case I want to change it back.
Ruby:
# near and close above 50
# close above 200
def range = reference ATR / 3;

def sma50 = Average(close, 50);
def near50 = Between(sma50, low - range, high + range);

def sma200 = Average(close, 200);

plot scan = near50 and close > sma50 and close > sma200;

2. Set to D. This makes sure we closed above the daily SMA 50.
Ruby:
close > Average(close, 50)

3. Set to W. This checks whether Moxie is above 0 on the daily chart.
Ruby:
# weekly for daily moxie
input price = close;
def vc1 = ExpAverage(price, 12) - ExpAverage(price , 26);
def va1 = ExpAverage(vc1, 9);
def moxie = (vc1 - va1) * 3;

plot scan = moxie > 0;

4. Set to W. This handles the weekly moving averages.
Ruby:
# weekly MA
def ema8 = ExpAverage(close, 8);
def ema21 = ExpAverage(close, 21);
def sma30 = Average(close, 30);
def sma50 = Average(close, 50);

plot scan =
  close > sma50
  and close > sma30
  and close > ema21
  and close > ema8
  and ema8 > ema21
;

5. Set to M. This checks whether Moxie is above 0 on the weekly chart.
Ruby:
# monthly for weekly moxie
input price = close;
def vc1 = ExpAverage(price, 12) - ExpAverage(price , 26);
def va1 = ExpAverage(vc1, 9);
def moxie = (vc1 - va1) * 3;

plot scan = moxie > 0;

6. Set to M. This makes sure we're above 10 SMA on monthly chart.
Ruby:
# month 10 sma
Average(close, 10) < close

7. Set to D. This checks whether Moxie is above 0 on the hourly chart.
Ruby:
# daily for hourly moxie
input price = close;
def vc1 = ExpAverage(price, 12) - ExpAverage(price , 26);
def va1 = ExpAverage(vc1, 9);
def moxie = (vc1 - va1) * 3;

plot scan = moxie > 0;

As I noted earlier in this thread, my "Scan in" is set to a different scan where I have criteria for average volume, price, etc. You can add average volume and such to this scan if you don't want a separate scan. If you only trade end of day then you can probably just scan for volume instead of average volume.
 
Last edited:
Yes, it's normal that Moxie is in different states on different timeframes.

For the 2 lines on 15m, he says when they are pretty close together, "in agreement with each other," you can trust whatever they are signaling and if they are wide apart it's probably a false signal.

You can learn both of these answers and other parts of his strategy from his YouTube videos in the Simpler Trading channel and in the Moxie Trader channel.
Thank you Slippage. Appreciate.
 
I have the mastery subscription and the indicator and some older strategy videos. Frankly, his strategy is SUPER simple. I've only been in his mastery program for a little over two weeks and I've lost money. I'm starting to get a little mad. But I think it's because he ONLY takes long entries and he is used to things exploding upward. The last two weeks have been rough as you all know. So most of his group is sitting flat right now. I think he needs to figure out what other sectors might start working in the near future. I'm not sure that the subscription is worth it, but I've only been with them for a short time. The old timers claim to have seen gains on 900% esp when they pair his callouts with options. I will report back once things in the market stabilize a little. I don't think he is effective in the market that's selling off. But it has nothing to do with the indicator. He is just unwilling to short.

I don't think I answered your question: you do get access to a chat room that is extremely active. There are a number of old timers who provide very valuable feedback. But sometimes you have to look for them between all the new people asking how to use computers. You are able to mute certain people I just haven't gotten there yet. I think if you are willing to overlook the sales driven culture at Simpler, the room could be a good resource. They do try to sell you **** nonstop lol
Yeah I'd be interested in your feedback as well. I have been listening to him recently but I am more in Options Room and he always sounds like he is there to promote "trampoline move" SMH. I cant say much as he has made much more than I have on those trampoline move but.. just saying. I think it more whose trading style fits your personality.
 
I guess I'll post some first day impressions of the training and mastery subscription before I forget what the first day was like.

1. The member dashboard makes whatever you've paid for easy to find. Indicators, classes, mastery all are easy to navigate.
2. The chatroom tech is not the worst web-based chatroom I've seen but Discord and Slack are much better.
3. TG Watkins is very responsive throughout the day directly answering questions targeted to him.
4. Paying for the class gave me access to two things. Moxie Stock Method and Moxie Stock Method e-Learning Module. At first glance it appears they may have the same content in different structure or may be redundant if not the exact same videos. I'm not sure yet. I started with Moxie Stock Method.
5. The first training video is beginner level how to set up charts for the strategy.
6. The next video was a Q&A session that seems out of order. Like it skipped all of the training. That video was very, very similar to what's on YouTube for free but with small nuggets of information I didn't pick up before. Probably all the same info is in the YouTube videos but presented more concisely in this video.
7. It seems there are some knowledgeable traders in the chatroom but a lot of newbies as well and it's going to take a little time to recognize names that say useful things and ones who are a waste of time. Everyone in the chatroom seems friendly and helpful. A couple of new people mentioned their displeasure with having mostly or all losses in the short time since they joined. From one guy it was as a complaint but the others were keeping an open mind and asking about the experiences of longer term members. It's no surprise to me since the market is pretty erratic the last several days.
8. I got around 10 to 12 alerts throughout the day, as push notifications on my mobile device and in the alerts panel in the chatroom I had open in a browser on my PC. A few alerts were for stop outs or early exits. A few were market commentary. None were for new trades given the behavior of the market leading into his last hour trading style.

That's as far as I've gotten so far. Overall, my first impression is pretty good. If I was John Carter I'd probably fire everybody who isn't one of the faces of Simpler Trading. Here's why.

1. Fire the marketing department. As much as Simpler Trading seems to be more marketing than substance, there's actually more included in what I paid for than is indicated in their intricate spiderweb of pages (with older cheaper pricing) that redirect to new pages (with newer more expensive pricing) and seemingly lots of redundant pages selling this stuff.

For instance, nowhere on this Mastery page https://www.simplertrading.com/moxie/ does it say there's a "trading room" (chatroom) where TG Watkins will answer your questions all day and you can interact with other members nearly 24 hours a day. In Mastery, aside from the once a month live trading sessions, it appears I have access to recordings of all the previous live trading sessions going back to August 2019. Mastery also has a "Learning Center" with 20 topic-specific videos such as "Profit Exits, The Moxie Way" which is 38 minutes. None of these things are mentioned in the marketing. By the way, my early impression is you can probably learn everything from Mastery and skip the training course unless you want the real Moxie indicator.

The Moxie Stock Method class (not Mastery, the class), seems to be in line with the marketing. I haven't noticed extras there. There looks to be about 7.5 hours of training videos and 9 hours of recorded live trading sessions. There's also PowerPoint slides and PDF copies of those PowerPoint slides. I didn't total up the videos or really look at anything in the e-Learning section.

2. Fire their third party chatroom service. Their chat room seems to be an external service. A while ago an admin posted a message that they're clearing the room in 5 minutes. I presume that's a nightly thing. WTF? Even if you decided it was okay to purge messages to reduce the data and improve performance why would you nuke things people posted minutes earlier? And why is that a manual process? It could automatically purge messages over x days old or only keep the last x messages. They should get Discord or Slack.
[Edit weeks later to add: It's automated and gives a link to the day's chat log for download but still weird to clear the chat daily.]

3. Fire their customer support. They still have not answered my email from Saturday asking exactly what is included in Mastery.
[Edit weeks later to add: They never responded.]

4. Fire their ThinkScript programmers. I've already posted about how much their Moxie indicator code ****s compared to what we have in this thread. The real Moxie has a variation of the code for 15m specifically for day trading that I only know about because of the class so I won't post it here. I'm thinking about implementing that variation in my copy of our Moxie and then offering it to Watkins either for free or maybe try to get some free months of Mastery for it. Our solution being just 2 ThinkScript studies compared to his 10 is much easier for newbies to install and much less tedious for everyone. His requires matching up the right indicator with the chart timeframe which means it's also useless if you want to switch to a different timeframe momentarily to look at something.
 
Last edited:
I think the most challenging aspect of this indicator is the scan. Does TG talk about that at all or is it discussed in the chat?

I just watched the class video where he discusses the scans and I can tell you that unless he has learned since the time when that was recorded he barely knows how to work the scanner. I wouldn't count on getting any useful information from him about scans beyond the 8 scans (same scans repeated on several timeframes) he provides in the class for Moxie crossovers and for trampolines.

Edit to add: I just watched the first live trading video in the class. He used the same scan he gives you, which has just Moxie, volume and price. No moving averages.
 
Last edited:
@tradegeek IMO, I would just move on. Never buy an indicator. Find a system that works for you and keep working it. There are many hundred of them on this website to research. Start in the Tutorials as well as Look at the built in Strategies.

Code:
# Moxie_PriceChannel_Adjustable
# Built on 5/11/20
# For use on a All Time Frames

input channelLength = 34;
input averageType = AverageType.EXPONENTIAL;
input PriceChannel_Aggregation = AggregationPeriod.FIFTEEN_MIN;
input Moxie_highestAggregation = AggregationPeriod.TEN_MIN;
input Moxie_lowestAggregation = AggregationPeriod.FIVE_MIN;

def MovAvg_H = MovingAverage(averageType, high, channelLength);
def MovAvg_C = MovingAverage(averageType, close, channelLength);
def MovAvg_L = MovingAverage(averageType, low, channelLength);

def MovAvg_H1x = (MovAvg_H - MovAvg_L) + MovAvg_H;
def MovAvg_L1x = MovAvg_L - (MovAvg_H - MovAvg_L);

# HTF_Ergodic Momentum ----------------------------------------------
def diff = close(period=PriceChannel_Aggregation) - close(period=PriceChannel_Aggregation)[1];
def TSI  = (ExpAverage(ExpAverage(diff, 32), 5)) / (ExpAverage(ExpAverage(AbsValue(diff), 32), 5)) * 100;
def Signal = ExpAverage(TSI, 5);
def Momentum = TSI - Signal;
def LHMult = If (.01 <> 0, (1 / 0.01), 0);
def TSVBlues = If (Momentum >= 0, Momentum, 0);
def TSVMomentum_Pos = TSVBlues * LHMult;
def TSVReds = If (Momentum < 0, Momentum, 0);
def TSVMomentum_Neg = TSVReds * LHMult;

# HTF ERGODIC Price Channel Momentum Indicator ----------------------------------------
plot PC_H = MovAvg_H;
plot PC_L = MovAvg_L;

PC_H.DefineColor("SlopeUp", CreateColor(0, 153, 0)); #createColor(0,153,0)); GREEN
PC_H.DefineColor("NoSlope", Color.GRAY);
PC_H.DefineColor("SlopeDown", Color.RED);
PC_H.AssignValueColor(if TSVmomentum_Pos then PC_H.Color("SlopeUp") else if TSVmomentum_Neg then PC_L.Color("SlopeDown") else PC_H.Color("NoSlope"));
PC_H.SetLineWeight(2);
PC_H.HideBubble();

PC_L.DefineColor("SlopeUp", CreateColor(0, 153, 0));#createColor(0,153,0)); GREEN
PC_L.DefineColor("NoSlope", Color.GRAY);
PC_L.DefineColor("SlopeDown", Color.RED);
PC_L.AssignValueColor(if TSVmomentum_Pos then PC_L.Color("SlopeUp") else if TSVmomentum_Neg then PC_L.Color("SlopeDown") else PC_L.Color("NoSlope"));
PC_L.SetLineWeight(2);
PC_L.HideBubble();

# MOXIE - This section is for the medium term MACD ---------------------------------------------
def midTermFastAvg = ExpAverage(close(period = Moxie_lowestAggregation), 12);
def midTermSlowAvg = ExpAverage(close(period = Moxie_lowestAggregation), 26);
def midTermValue = midTermFastAvg - midTermSlowAvg;
def midTermAvg = ExpAverage(midTermValue, 9);
def midTermDiff = (midTermValue - midTermAvg)*3;

# MOXIE - This section is for the long term MACD -----------------------------------------------
def longTermFastAvg = ExpAverage(close(period = Moxie_highestAggregation), 12);
def longTermSlowAvg = ExpAverage(close(period = Moxie_highestAggregation) , 26);
def longTermValue = longTermFastAvg - longTermSlowAvg;
def longTermAvg = ExpAverage(longTermValue, 9);
def longTermDiff = (longTermValue - longTermAvg)*3;

# Signal Criteria -----------------------------------------------------------------------
def midTermLower = midTermDiff < 0 and midTermDiff < midTermDiff[1];
def midTermHigher = midTermDiff > 0 and midTermDiff > midTermDiff[1];

def longTermLower = longTermDiff < 0 and longTermDiff < longTermDiff[1];
def longTermHigher = longTermDiff > 0 and longTermDiff > longTermDiff[1];

#########################################################################
plot BuySignal = if midTermHigher and LongTermHigher then MovAvg_L1x else Double.NaN;
BuySignal.SetDefaultColor (Color.White); #(CreateColor(0, 153, 0));
BuySignal.SetPaintingStrategy(PaintingStrategy.POINTS);
BuySignal.SetLineWeight(2);
BuySignal.HideBubble();
BuySignal.HideTitle();

plot SellSignal = if midTermLower and LongTermLower then MovAvg_H1x else Double.NaN;
SellSignal.SetDefaultColor(Color.White);
SellSignal.SetPaintingStrategy(PaintingStrategy.POINTS);
SellSignal.SetLineWeight(2);
SellSignal.HideBubble();
SellSignal.HideTitle();

# Cloud Fill -----------------------------
AddCloud(MovAvg_H, MovAvg_L, Color.LIGHT_GRAY);

alert (close>BuySignal,"ChannelDotup", alert.bar,Sound.ding);
alert (close<SellSignal,"ChannelDotdown", alert.bar,Sound.ding);

#alert (close>BuySignal,"ChannelDotup", alert.once,Sound.ding);
#alert (close<SellSignal,"ChannelDotdown", alert.once,Sound.ding);
I have been looking at this indicator all day to see if the "slopeUp" and "SlopeDown" repaint, but I am not seeing any signs. Can you confirm if they do or not? I understand the buy signals may repaint because of the aggregation periods, but im only interested in the slope. I program a lot of indicators, but the "If (.01 <> 0, (1 / 0.01), 0);" is throwing me off.

EDIT:
It looks like the indicator does repaint, but it only repaints as far as the price channel length.
 
Last edited:
I have been looking at this indicator all day to see if the "slopeUp" and "SlopeDown" repaint, but I am not seeing any signs. Can you confirm if they do or not? I understand the buy signals may repaint because of the aggregation periods, but im only interested in the slope. I program a lot of indicators, but the "If (.01 <> 0, (1 / 0.01), 0);" is throwing me off.

EDIT:
It looks like the indicator does repaint, but it only repaints as far as the price channel length.

Yes, it repaints until the higher timeframe closes. So on daily it repaints during all of the current week. Once the week closes it starts the next week of repainting and past weeks remain static.
 
Sorry, @Fenway1353, I didn't realize you're still not comfortable building a scan with the steps I posted. Here's the code for the individual pieces of the scan I created. This scan isn't looking for triggers and won't find trampolines. It's looking for stocks that are almost ready to trade with normal, non-trampoline, setups regardless of how long ago Moxie crossed over.

For each of these pieces, add a new study filter to the scan, set the timeframe as listed here and paste the code.

1. Set to 1H. This handles the 1 hour moving averages.
@Slippage I really appreciate you taking the time to write out the scans. The way you laid it out was easy to input into TOS. Thanks again.

I took a look at a few other videos today. I noticed TG primarily uses the hourly and commonly enters trades when the Moxie Indicator goes positive on the hourly. I noticed on the posted scan that the Moxie Indicator is already positive. Do you think it's beneficial to include the situations where the indicator is just below zero so that the trade can potentially be entered as it crosses above.

Again, thanks for all you continue to do. Please don't take the above as criticism - I used the scanner all day and loved it. I was just thinking of a way to ensure we don't miss a potential entry point when the Moxie Indicator goes positive on the hourly.

Thanks again!
 
Yes, it repaints until the higher timeframe closes. So on daily it repaints during all of the current week. Once the week closes it starts the next week of repainting and past weeks remain static.
@Slippage First and foremost, thank you for all your efforts.. they are truly appreciated.

I am not a coder so please forgive the nature of the question. Is it possible to have the indicator not repaint? Is there a minor code change I can make for that? Or is this not possible given the core nature of the indicator?

Thanks
 
@Slippage I really appreciate you taking the time to write out the scans. The way you laid it out was easy to input into TOS. Thanks again.

No problem. I'm glad it helped.

I took a look at a few other videos today. I noticed TG primarily uses the hourly and commonly enters trades when the Moxie Indicator goes positive on the hourly. I noticed on the posted scan that the Moxie Indicator is already positive. Do you think it's beneficial to include the situations where the indicator is just below zero so that the trade can potentially be entered as it crosses above.

A few things here:

1. To find stocks that haven't quite crossed yet you can change the Moxie pieces of the scan to whatever value you want. Where it has plot scan = moxie > 0; you can change the 0 to -0.1 or -0.2 or whatever you want.

2. The scan code in my most recent post that has all the indicator code, not the trampoline scan but the other one, will find when Moxie crosses over zero -- when the arrows first appear on the chart -- if you prefer that. You can add that as another study on the scan you already built and set it for whatever timeframe you want. Like the other Moxie pieces, it needs to be set for the higher timeframe compared to the chart you're thinking about. Watkins scans based on that trigger, at least in videos he recorded two years ago.

3. Remember that Watkins only enters trades in the last hour of the day. I think that's at least partly because Moxie repaints. Moxie may trigger at 10am but by 2pm the price fell and the trigger isn't there any more. He doesn't start scanning until 2pm.

4. MOST IMPORTANT.... I found through watching his videos from varying time periods his entries matured and became more conservative over time. In his oldest Moxie Trader videos he talked about entering on the hourly trigger, as long as the other criteria are met. In later videos he talked about entering half position on the hourly trigger and the other half after a retest of support, usually the 50 SMA on the hourly chart. In his most recent videos on YouTube he doesn't enter any trade until the retest happens. That's why I figured I'd set my scan to just make sure Moxie is above zero and not really care when it got there. And it's why my scan looks for stocks that are very close to SMA 50 on the hourly chart. That way either they retested very recently or they're probably about to retest. I'm sure I'll end up adjusting my scan as I get more experience in this, especially if it's not finding the stocks he calls trades on.

It all depends on your style, though. Watkins seems to keep a large list of stocks, in Excel or something rather than as watchlists in TOS, and he checks on them at regular intervals with the frequency depending on how close to ready they look. It seems sometimes he's watching a stock for several weeks before it sets up. I'm not really interested in spending my time that way. I'd rather not see them until they're ready to trade. He does enter early sometimes in anticipation of the final pieces of the setup falling into place so there is some benefit to spending that extra time. Since I'm new to the strategy I don't want to bend/break rules yet anyway.

Again, thanks for all you continue to do. Please don't take the above as criticism - I used the scanner all day and loved it. I was just thinking of a way to ensure we don't miss a potential entry point when the Moxie Indicator goes positive on the hourly.

Don't worry, I didn't find anything negative in your post and I'm not the emotional type anyway. And it's natural different people have different criteria for what they want to look at and potentially trade.
 
Last edited:
nowhere on this Mastery page https://www.simplertrading.com/moxie/ does it say there's a "trading room" (chatroom) where TG Watkins will answer your questions all day and you can interact with other members nearly 24 hours a day

Coincidentally, another member in that room happened to mention that we're lucky Watkins lets us stay in there and answers our questions. That Moxie Mastery really is supposed to be just an alert service, not a trading room subscription. I'm not sure whether that's true or an assumption but it would explain why it's not mentioned in the marketing materials.
 
I decided to just YOLO it and get the Elite package. I should get the money back from the Mastery alerts anyway, in theory. I'll let you know what I think of it once I've consumed the materials and understand the scope of what exactly is included. Now that I have the actual Moxie code I wouldn't feel right to share it or to make any updates to what I've already posted here but I'll let you know if I see anything the code here has wrong so someone can chase it down and fix it if they have an interest.

The real Moxie has different code for every timeframe that Watkins charts with the referenced higher timeframe hard coded -- terrible code management. Of course, the first thing I did was grab the official version for daily charts. and compare it to the code we have here. Our formula is an exact match, down to variable naming which leads me to believe whoever posted it on TradingView had access to the real Moxie. Assuming our code is correct across timeframes, I plan to use that instead of the real Moxie so I don't have to have the literally ten different studies they gave me to download.

I can also tell you our code is a lot cleaner than the official Moxie. There's a few variables in their code doing unnecessary math where the result never gets used. And a few global colors defined that also never get used. I commented out that stuff to eliminate unnecessary CPU/memory utilization.

Having reviewed all of the official code for Moxie I can say I'm 100% comfortable using the code posted here instead.
Yes, I agree that you should not port any concepts or IP of moxie into the code here, as that would not be nice.

And wrt to TradingView code, you never know, it is possible that Moxie was copied from it .) I have seen very similar OsMA HTF code in Metatrader and elsewhere. I've also coded many multi-timeframe indicators and systems using MACD and OsMA and many of the false triggers and thrashing and weak moves have not been addressed. That I suspect is why he is looking at HTF 50 MA S/R and multi-TF charts and only entering half orders (as you mention in future response). Because if you take too many false entries that get stopped out, it eats the account balance and impacts your moral and psychology. And then on the other hand, if you try to get too many things to align, you may never find a trade. The most important thing in this strategy seems to be to find entities that are about to explode. I would think that if you don't find about 25% of these (that give something like a 5:1 R:R explosion) for all the triggers you get, that it will be tough to break even.

I would think that from a system standpoint that another indicator would be very useful, maybe something like a squeeze, to detect pre-explosion compression, and another to try to filter out these OsMA zero cross-recross on shallow sideways markets and weak moves. Maybe squeeze could do both, by only acting on reasonably coincident OsMA cross and squeeze breakouts (this takes a bit of fiddling when one triggers to checking back to see if the other(s) most recently fired within N bars and are still in the same fired direction/state).

And finally, as the market seems to be getting to a point where many stocks are going to be going down, I agree that looking for downside exploders will be needed pretty soon...

And thanks for your observations on the course, team, etc, very helpful and interesting :)
 

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
486 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