Balls of Steel: VXX Trading System

A volatility system is only interesting if it reduces noise instead of adding more of it. The core idea here is simple: if VXX gets too rich relative to VIX, the fade becomes worth your attention.

Jeff used to talk about algorithms.

This was the phone room era — 300 calls a day, 3am wake-ups, commission checks that looked like ransom notes. Jeff kept saying algos were where it was going. I kept saying we sell. That's the job. No algorithm closes a reluctant client on a Friday afternoon. We sell.

Jeff had a point I wasn't ready to hear yet.

Wolf of Wall Street was a documentary if you swapped a few zip codes. My boss knew Belfort. Half the desk could actually trade. The other half could talk anyone into anything and never lifted a chart in their life. The honest distinction was which side of that line you were on, and everyone knew within a month. The talkers made more money in the short run. The traders survived 2008. That's the lesson the book is about.

Years later my father asked me why I didn't build a trading app with AI. Not a pitch. Just a question. He thinks in mathematical systems. He does not understand why you would trade anything without a model underneath it. The question sat with me long enough that I eventually stopped ignoring it and built the thing.

This is that thing. It works. Not every trade. The stretched trade.


Quick Note on the Name

The system is called Balls of Steel because that's what we called it at the desk and that's what the book is called. The App Store made me change the name on the product. So when it ships on iPhone, iPad, and Mac it's Steel Trading Desk — same system, same SPY/VXX setup, same refusal-is-the-edge philosophy, less swearing for the Apple reviewer. The book stays Balls of Steel because Apple does not run the bookstore.

Status: App Store listing started, submission pending. Source repo went private during release prep. The article you're reading is, among other things, the marketing — I'm not going to pretend otherwise. The system is also real, the trades are also real, and the discipline the app enforces is the one I use myself every morning. Both can be true.

The Spine

The whole system sits on one number: the VXX/VIX ratio.

VXX tracks short-term VIX futures. VIX measures implied volatility in the S&P 500 options market. In a normal environment, VXX trades close to VIX. When panic accelerates, VXX can run hotter — fear puts a premium on the trade itself, separate from what the underlying volatility index is actually reading. That gap is the signal.

When VXX gets rich enough relative to VIX, mean reversion starts mattering. The emotional price has outrun the underlying measure. The fade has teeth.

The ratio does not tell you when. It tells you whether the conversation is even worth having.

The same setup runs on SPY. The index is the same nervous system, just measured at a different layer. The ratio is VXX/VIX either way — pick the instrument that fits the size of the trade and the risk you actually want to carry. SPY for the cleaner directional, VXX for the leveraged fear-spike fade. Both honor the same gates.

def vxx_vix_ratio(vxx_price, vix_level):
    """
    Core signal. Ratio above threshold = fade candidate.
    Below threshold = don't force it.
    """
    ratio = vxx_price / vix_level
    return ratio

def is_fade_candidate(ratio, threshold=1.15):
    """
    Threshold tuned to your risk tolerance.
    Higher threshold = fewer trades, higher conviction.
    Lower threshold = more trades, more noise.
    """
    return ratio >= threshold

def check_entry_conditions(ratio, volume_confirmed, timing_window, no_breaking_news):
    """
    The ratio is the gate. Everything else is the filter.
    All four must be true or there is no trade.
    """
    return (
        is_fade_candidate(ratio) and
        volume_confirmed and
        timing_window and
        no_breaking_news
    )

That is the skeleton. Simple enough to explain in one conversation. Strict enough to kill most possible trades before they get to feel important.

The Filters

Volume matters because retail noise and institutional positioning do not leave the same footprint. Thin volume on a spike looks like opportunity. It is usually a trap.

Timing windows matter because the market behaves differently when real money is repositioning near the close than it does in dead air between sessions. The same ratio reading at 11am and 3:45pm is two different conversations.

Technical structure matters because even a good fade can be a stupid entry if there is no sign of exhaustion in the move. The ratio says the price is stretched. The chart tells you if it is still stretching or starting to buckle.

And then there is news.

News is the filter that kills the most setups, and it is the right one to lose. There is no point fading a VXX premium while fresh information is still changing the price of fear. A geopolitical event, a Fed surprise, a print that blows the consensus — these do not care about your ratio. The setup that looked clean at 2pm can be genuinely different information at 2:07pm.

The companion piece to this system is exactly that problem: Yesterday's News. Public information is always late, but breaking information is a different animal. The system needs to know which one it is dealing with before it takes the trade.

Two more pieces nobody ships systems with because they sound boring. VWAP gives you positioning — price above VWAP means you're fighting institutional flow, below means you're with it. The fade we want is the move that's already crossed VWAP the wrong way and is starting to look stretched against it. That's where the ratio and the chart agree before you do.

HACK LOVE BETRAY
COMING SOON

HACK LOVE BETRAY

Mobile-first arcade trench run through leverage, trace burn, and betrayal. The City moves first. You keep up or you get swallowed.

VIEW GAME FILE

And the one most retail systems get wrong: the 15:55 ET signal is an alert, not a forced exit. The close is a decision point — take the daytime gain off, or carry the position into the extended-hours session. SPY and VXX both keep trading after 4pm, and that's frequently where the institutional repositioning actually resolves the move you were already in. Some of the cleanest trades run to 16:14 and past. That's the play. The 15:55 alert exists because if you don't see the close coming, you're not making a decision — you're getting carried. The decision is the entire point.

Build Your Own Version

Here is the thing the code cannot do: sit on its hands when everything in your body is telling you to trade.

The automation enforces the conditions. It does not supply the discipline to honor them when the market is moving and your ego wants in. That discipline is the actual edge. It is not a system. It is not an indicator. It is not a ratio. It is the capacity to watch a setup fail one condition and walk away without manufacturing a reason why this time is different. That is what "balls of steel" means in practice. The code is scaffolding for that capacity. It is not a substitute for it.

With that said — the automation is worth building. Not because it makes the decisions, but because a terminal saying NO-GO is harder to argue with than your own hesitation.

Here is how to get there with AI doing the heavy lifting on the build.

Start with the alert:

Build a Python script that monitors the VXX/VIX ratio in real time 
using Yahoo Finance data (yfinance library). 

Alert me when:
- The VXX/VIX ratio exceeds [your threshold, start at 1.15]
- 20-day average volume on VXX is above current session volume (thin volume filter)
- Market is in the last 90 minutes of the session (timing window)

Output a simple terminal alert with: current ratio, volume status, 
time remaining, and a yes/no on whether all three conditions are met.
No dashboard. No graphics. Just the signal.

Add the news filter:

Before I take any VXX fade trade, I want to check whether breaking news
is still actively moving the market. 

Build a function that:
1. Pulls the last 30 minutes of financial headlines from a free API (NewsAPI or similar)
2. Scores them for market-moving potential: Fed language, geopolitical events, 
   major economic prints, earnings surprises
3. Returns a simple verdict: CLEAR (nothing new in 30 min) or HOLD (fresh catalyst present)

If HOLD, explain in one sentence what the catalyst is.
If CLEAR, confirm the coast is clean and timestamp it.

Combine into a pre-trade checklist:

I have a volatility fade system based on the VXX/VIX ratio. 
Before I take any trade, I want a terminal command that checks 
all four conditions and gives me a single GO or NO-GO.

Conditions:
1. VXX/VIX ratio above threshold
2. Volume above session average
3. Within timing window (last 90 minutes)
4. No breaking news in last 30 minutes (use news function above)

Output: GO / NO-GO and which condition failed if NO-GO.
Nothing else. No encouragement. No caveats. Just the verdict.

The automation does not replace judgment. It removes the temptation to override your own rules when the setup is 3 out of 4 and your appetite is pushing for 4 out of 4. The system saying NO-GO to your face is harder to argue with than your own hesitation.

One more thing about every person selling you a system that beats the market: they do not exist. The market pays for surviving uncertainty, not for eventually being right. Anytime you do not lose, you win. That is not a consolation prize. That is the real edge most people never figure out because they are too busy looking for the shortcut the guru is selling.

The system above does not beat the market. It keeps you from getting beaten by the noise inside your own head. That is enough.

A Model That Says No More Often Than Yes

The point of a trading system is not to sound sophisticated. It is to take something messy and reduce it to a decision you can actually live with.

This one creates refusal. Most possible trades die before they get to feel important. Ratio weak — no trade. Volume thin — no trade. Timing wrong — no trade. Headline just detonated the afternoon — no trade. That is the majority of days. Survival in this kind of work comes from designing a process that says "not this one" more often than your own appetite will.

That is also why I never found it interesting as a brute-force checklist. The checklist is the visible shell. The real value is psychological. It narrows the field enough that you stop improvising reasons to participate. Once the setup is there, execution gets quieter. You are not making a fresh argument every time. You are recognizing a condition you already decided mattered.

Jeff was right about the algos. Not in the way he meant it — not as a replacement for selling, for reading the room, for the human judgment that still closes the reluctant client. But as infrastructure underneath that judgment. A model that says no more often than yes is not a limitation. It is the design.

My father asked why I didn't build it sooner.

Fair question.

The full system, the philosophy behind it, and the actual trade psychology is in the book: Balls of Steel — Howard Tucker. Pen name, satirical, kinda true, almost all true.

The point of putting the system into an app was simple: cut the trading-system bullshit. Every chart guru on the internet is selling you the same recycled lagging indicator with a different ribbon on it. This isn't that. The app gives you structure — the four gates, the timing window, the VWAP positioning check, the 15:55 close-of-session alert, and the extended-hours follow-through window where SPY and VXX often resolve. You give it discipline. It works for high-risk trading specifically because it refuses most of it. The structure cuts the noise; the discipline costs you nothing and saves you the worst trade of your week.

Coming to the App Store — Steel Trading Desk for iPhone, iPad, and Mac. Same system, App Store-friendly name. Source repo went private during release prep; ship date is queued behind the synth and ahead of the games.


GhostInThePrompt.com // The edge isn't in every move. It's in the stretched move. Refusal is the real algorithm.