Momentum and Fear Index Crossover Strategy

Author: ChaoZhang, Date: 2024-01-23 14:27:23



This strategy judges market trends by calculating the crossover between a momentum indicator and a fear index, and issues sell signals when the two indicators make specific crosses to catch sharp downturns.

Strategy Principle

  1. Calculate the 50-period momentum indicator. It represents the price change relative to 50 periods ago.

  2. Calculate the 22-period corrected fear index. It represents market panic through the ratio of highest and lowest prices.

  3. When the momentum indicator crosses below the fear index, it indicates downside pressure in the market.

  4. If the momentum continues to fall into the danger zone (between -5 and 5), a strong sell signal is issued.

Advantage Analysis

  1. Using the fear index, an indicator of market sentiment, can effectively determine structural changes in the market.

  2. The momentum indicator can judge the speed and magnitude of price changes and aid in determining trend changes.

  3. Combining two different types of indicators can improve the accuracy of identifying sudden events.

  4. Adjusting parameters allows flexible adaptation to different market environments.

Risk Analysis

  1. Crossovers of the fear index and momentum do not guarantee every large decline. Other indicators need to be considered to make the final decision.

  2. No stop loss after selling fails to effectively control losses.

  3. Reversals and re-entries are not considered. The strategy only suits capturing sudden crashes.

Optimization Directions

  1. Set a stop loss after selling to control losses.

  2. Add other indicators to judge and improve signal reliability, e.g. volume, Bollinger bands.

  3. Add re-entry signals to enable the strategy to run long-term cycles.

  4. Optimize parameters to find the best parameter combinations.


The strategy issues market decline alerts through crossovers of the momentum indicator and fear index. It can effectively capture sudden market crashes. But the strategy only suits short-term usage without exit mechanisms and risk control. Further improvements are needed to make it a sustainable long-term strategy.

start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 2h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]

// This source code is subject to the terms of the Mozilla Public License 2.0 at
// © gary_trades

//THIS SCRIPT HAS BEEN BUIL TO BE USED AS A S&P500 SPY CRASH INDICATOR (should not be used as a strategy).
//The script has been built to show as a lower indicator and also gives visual SELL signal on top when conditions are met. BARE IN MIND NO STOP LOSS, NOR ADVANCED EXIT STRATEGY HAS BEEN BUILT.
//As well as the chart SELL signal an alert has also been built into this script.
//The script utilizes a VIX indicator (marron line) and 50 period Momentum (blue line) and Danger/No trade zone(pink shading).
//When the Momentum line crosses down across the VIX this is a sell off but in order to only signal major sell offs the SELL signal only triggers if the momentum continues down through the danger zone.
//To use this indicator to identify ideal buying then you should only buy when Momentum line is crossed above the VIX and the Momentum line is above the Danger Zone. 
//This is best used as a daily time frame indicator

strategy(title="S&P Bear Warning", shorttitle="Bear Warning" )

len = input(50, minval=1, title="Length")
src = input(close, title="Source")
bandUpper = input( 5)
bandLower = input(-5)
// ————— Control plotting of each signal. You could use the same technique to be able to turn acc/dist on/off.
showVixFix = input(true)
showMomentum = input(true)
mom = src - src[len]
myAtr = atr(14)
plot(showMomentum ? mom : na,, title="MOM")
plot(showMomentum ? 0 : na, color=color.silver, title="MOM Zero line", style=plot.style_circles, transp=100)
plot(showMomentum ? myAtr : na,, title="ATR", transp=90)
VIXFixLength = input(22,title="VIX Fix Length")
VIXFix = (highest(close,VIXFixLength)-low)/(highest(close,VIXFixLength))*100
plot(showVixFix ? VIXFix : na, "VIXFix", color=color.maroon)
band1 = plot(showVixFix ? bandUpper : na, "Upper Band",, 1, plot.style_line, transp=90)
band0 = plot(showVixFix ? bandLower : na, "Lower Band",, 1, plot.style_line, transp=90) 
fill(band1, band0,, transp=85, title="Background")
//Identify Triggers
//Back Test Range
start = timestamp("America/New_York", 2000, 1, 1, 9,30)
end   = timestamp("America/New_York", 2020, 7, 1, 0, 0)

Long1 = mom > bandUpper
Short1 = mom < bandLower
Long2  = crossover(mom, VIXFix)
Short2 = crossunder(mom, VIXFix)

//Warning Alert
SellAlert = Short1
alertcondition(SellAlert, title="Sell SPY", message="Warning Selling off {{ticker}}, price= {{close}}") 

//Entry and Exit
if true
    strategy.entry("SELL", false, when = Short1)
strategy.close("SELL", when = Long2)