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