The laboratory

Does combining two indicators actually help?

The laboratory tests every indicator on its own and finds that almost none of them clear their costs. The obvious objection is that nobody trades one indicator alone. So this runs every pair of them: one indicator fires the entry, a second has to already agree, and the only question asked is whether the pair beats the first indicator by itself.

The answer in 30 seconds

802 of 2878 pairs beat the indicator that fires them, when chance alone would give about 1439. Adding a second indicator helps less often than a coin toss.

But the ones that help tend to keep helping. Of the 802 winning pairs scored out of sample, 582 still beat their trigger on the last 30% of each window — data they were not selected on — where chance would leave about 401. Filtering is not free and it is not generally useful, and it is also not nothing.

What was tested

56,239Pair backtests
2,878Distinct pairs
4Instruments
6Timeframes
14,326,491Trades
What is R? R is one unit of risk — whatever you decided to lose if the trade went against you. +1R means you made that amount; −1R means you lost it. So a lift of +0.05R is, risking $100 a trade, about $5 more per trade than the indicator managed alone. Results are in R rather than pips because forty pips on gold and forty on EURUSD are not the same trade.
What “lift” means here. Every pair is scored against the indicator that fires it, on the same instrument, the same timeframe, the same candles and the same spread: lift = expectancy(A filtered by B) − expectancy(A alone). A positive lift means the second indicator earned its place. This is the only honest way to ask the question: a raw expectancy would reward a pair for trading a slow chart, and the laboratory already showed that slow charts flatter a coin flip just as much as an indicator.

By timeframe

Bar chart of the average lift from adding a filter indicator, by
  timeframe, showing it close to zero on every chart speed.
TimeframePairs tested Average liftHelpedChance
5 minute11,423−0.0149R41%50%
15 minute11,012−0.0345R38%50%
30 minute10,910−0.0067R45%50%
1 hour10,912−0.0092R47%50%
4 hour9,991−0.0042R49%50%
Daily1,991−0.0133R47%50%

“Helped” is the share of pairs on that timeframe where the filter beat the trigger alone. A filter that did nothing at all would land near 50%, which is the column beside it.

Why this page distrusts its own table

Running 2,878 pairs guarantees winners. If every filter were pure noise, about 1439 of them would still beat their trigger, some by a wide margin, and the top of any ranking would look compelling. That is not a flaw in the test, it is arithmetic, and it is the reason most published indicator combinations are worthless: somebody searched until something looked good and then stopped.

So the column that decides anything is the last one. Every window has its final 30% scored separately, and a pair is only interesting if it still beats its trigger there. 582 of 802 did, against roughly 401 expected from chance. That gap is real and it is the one result on this page worth acting on.

One caveat we cannot test away. The out-of-sample third is the most recent third, so it sits next to the data it is being compared against. A filter that suits one market regime can survive the split simply because the regime did. Treat the survivors as worth investigating, not as settled.

What separates the filters that work

Not which indicators they are. How much they refuse. Splitting every pair by the share of the trigger's own entries the filter let through:

The filter let through PairsHelped the trigger Distance from chance
Under 30% of entries112 49% -0.2σ
70% or more of entries2,276 27% -22.3σ

A filter that agrees with almost everything is worse than no filter. The 2,276 pairs that let through 70% or more of the trigger's entries helped only 27% of the time — 22 standard deviations below a coin toss, so this is not noise. An indicator that rarely disagrees adds its own lag and its own cost and contributes no information, and that describes most of the pairs in this study.

The selective end looks better, and the sample is too small to bank it. The 112 pairs rejecting more than 70% of entries helped 49% of the time, which sounds decisive and is only 0.2 standard deviations from chance on 112 pairs. Selective filters also produce fewer trades, and fewer trades means noisier estimates in both directions. It is the most promising thing on this page and it is not yet a result.

What the two rows together do say, with more confidence than any individual pair in the table: if a second indicator is going to earn its place, it earns it by declining setups, not by nodding along.

Every pair, ranked by lift

Pairs with at least 300 trades, best first. Read the last two columns together: a large lift with a negative out-of-sample lift is a pair that worked until it was asked to prove it.

TriggerFilterTrades KeptTrigger alone FilteredLift Lift out of sample
Keltner breakoutStochastic RSI39317%−0.1426R+0.0672R+0.2098R+0.2439R
CCI 100Momentum30511%−0.1115R+0.0446R+0.1561R−0.2366R
Bollinger reversionDEMA crossover1,41425%−0.0221R+0.1277R+0.1499R+0.1753R
Bollinger reversionFisher transform32113%−0.0684R+0.0638R+0.1321R+0.1712R
Bollinger reversionTrue strength index37816%−0.0715R+0.0565R+0.1280R+0.0917R
Bollinger reversionStochastic32113%−0.0724R+0.0550R+0.1274R−0.0638R
RSI 30/70 reversionEngulfing candle76226%−0.0178R+0.1060R+0.1238R+0.1459R
SuperTrendWilliams %R32517%−0.0799R+0.0363R+0.1162R+0.0960R
CCI 100MACD signal cross2,35135%−0.0554R+0.0583R+0.1137R+0.1063R
Donchian breakoutStochastic RSI43716%−0.0694R+0.0434R+0.1127R+0.2707R
RSI 30/70 reversionChaikin money flow39921%−0.0314R+0.0789R+0.1103R+0.0459R
CCI 100DEMA crossover2,84242%−0.0496R+0.0575R+0.1072R+0.0799R
Ultimate oscillatorHeikin-Ashi flip55031%−0.0218R+0.0796R+0.1014R−0.0026R
Choppiness breakoutBollinger reversion53825%−0.1622R−0.0658R+0.0964R+0.1797R
Bollinger breakoutRSI 30/70 reversion4,02061%−0.0741R+0.0142R+0.0884R+0.0379R
RSI 30/70 reversionTRIX zero cross33317%−0.0280R+0.0598R+0.0878R+0.1407R
CCI 100True strength index2,19735%−0.0528R+0.0319R+0.0846R+0.0571R
RSI 30/70 reversionVWMA vs SMA1,47239%−0.0056R+0.0752R+0.0808R+0.0998R
CCI 100Stochastic1,02320%−0.0656R+0.0132R+0.0789R+0.0209R
CCI 100Hull MA crossover4,21061%−0.0462R+0.0321R+0.0782R+0.0669R
ATR breakoutStochastic RSI1,02930%−0.1522R−0.0765R+0.0757R+0.0854R
Choppiness breakoutRSI 30/70 reversion1,94444%−0.1083R−0.0328R+0.0755R+0.0902R
Pin barRSI 30/70 reversion3,49744%−0.0824R−0.0081R+0.0744R+0.0229R
TTM squeezeRSI 30/70 reversion2,91162%−0.0748R−0.0011R+0.0737R+0.0663R
Williams alligatorRSI 30/70 reversion5,34973%−0.0670R+0.0035R+0.0705R+0.0585R
Hull MA crossoverRSI 30/70 reversion6,23188%−0.0661R+0.0022R+0.0683R+0.0462R
CCI 100Rate of change30911%−0.1128R−0.0483R+0.0645R+0.0037R
Bollinger reversionOBV vs its average1,50027%−0.0218R+0.0419R+0.0637R+0.0248R
Donchian breakoutRSI 30/70 reversion4,05159%−0.0524R+0.0100R+0.0624R+0.0421R
OBV vs its averageRSI 30/70 reversion6,64594%−0.0732R−0.0122R+0.0609R+0.0619R
RSI 30/70 reversionHull MA crossover80527%−0.0162R+0.0445R+0.0607R+0.0328R
ATR breakoutRSI 30/70 reversion2,77457%−0.1186R−0.0614R+0.0572R−0.0090R
Chaikin money flowRSI 30/70 reversion5,26775%−0.0633R−0.0060R+0.0572R+0.0324R
Ultimate oscillatorVWMA vs SMA1,24946%−0.0232R+0.0330R+0.0562R+0.0050R
MACD signal crossStochastic RSI3,33646%−0.0595R−0.0048R+0.0547R+0.0388R
Choppiness breakoutChande momentum1,40033%−0.1157R−0.0611R+0.0546R+0.0020R
Hull MA crossoverWilliams %R5,84882%−0.0662R−0.0118R+0.0543R+0.0399R
Bollinger reversionEase of movement33919%−0.0354R+0.0181R+0.0535R−0.0813R
Chaikin volatilityRSI 30/70 reversion3,51760%−0.0747R−0.0219R+0.0528R+0.0401R
Price vs SMA 200Chande momentum2,05779%−0.0458R+0.0066R+0.0524R+0.0512R
Williams %RMACD signal cross3,39543%−0.0192R+0.0329R+0.0520R+0.0952R
OBV vs its averageBollinger reversion6,72695%−0.0734R−0.0218R+0.0516R+0.0650R
Hull MA crossoverVolume oscillator5,31474%−0.0669R−0.0159R+0.0510R+0.0541R
Williams alligatorCCI 1003,68049%−0.0677R−0.0173R+0.0504R+0.0134R
SMA crossoverStochastic RSI47554%−0.0670R−0.0170R+0.0499R+0.0810R
ATR breakoutCCI 1002,13845%−0.1266R−0.0767R+0.0499R+0.0080R
Hull MA crossoverStochastic RSI1,77827%−0.0679R−0.0191R+0.0488R+0.0220R
Bollinger reversionAccumulation/distribution1,24424%−0.0330R+0.0158R+0.0488R+0.0592R
Volume oscillatorRSI 30/70 reversion4,16668%−0.0365R+0.0118R+0.0483R+0.0185R
Hull MA crossoverBollinger reversion6,35190%−0.0660R−0.0179R+0.0481R+0.0424R
Bollinger reversionMACD signal cross46918%−0.0544R−0.0071R+0.0473R+0.0416R
MACD signal crossRSI 30/70 reversion6,47492%−0.0571R−0.0103R+0.0468R+0.0066R
Chaikin volatilityWilliams %R2,47142%−0.0789R−0.0324R+0.0465R+0.0460R
ATR breakoutTRIX zero cross3,48670%−0.1156R−0.0693R+0.0463R+0.0851R
Bollinger reversionHull MA crossover2,64444%−0.0188R+0.0273R+0.0461R+0.1029R
Williams %RTrue strength index3,32642%−0.0192R+0.0259R+0.0450R+0.0713R
Price vs SMA 200CCI 1001,85170%−0.0473R−0.0024R+0.0449R+0.0420R
MACD signal crossBollinger reversion6,61394%−0.0571R−0.0124R+0.0448R+0.0281R
CCI 100Vortex crossover40915%−0.1128R−0.0685R+0.0442R+0.1206R
ATR breakoutChande momentum2,90960%−0.1187R−0.0754R+0.0433R−0.0417R
Price vs SMA 200RSI 30/70 reversion2,16082%−0.0461R−0.0032R+0.0429R+0.0483R
Bollinger breakoutChande momentum3,86158%−0.0742R−0.0312R+0.0429R+0.0129R
Williams alligatorBollinger reversion4,70164%−0.0672R−0.0245R+0.0427R+0.0397R
TTM squeezeChande momentum2,70459%−0.0737R−0.0310R+0.0427R+0.0025R
Ultimate oscillatorFisher transform1,72952%−0.0245R+0.0179R+0.0424R+0.0244R
Money flow indexADX / DI crossover54450%−0.0572R−0.0150R+0.0422R+0.0746R
Bollinger reversionRSI 30/70 reversion4,82278%−0.0168R+0.0253R+0.0421R+0.0272R
Money flow indexInside-bar breakout31732%−0.0595R−0.0176R+0.0420R−0.0715R
VWMA vs SMARSI 30/70 reversion5,41788%−0.0309R+0.0110R+0.0419R+0.0374R
CCI 100TEMA crossover3,45549%−0.0483R−0.0065R+0.0418R+0.0206R
Price vs SMA 200Stochastic RSI1,72565%−0.0467R−0.0051R+0.0416R+0.0809R
VWMA vs SMAWilliams %R5,03082%−0.0315R+0.0101R+0.0415R+0.0137R
DEMA crossoverStochastic RSI1,86831%−0.0275R+0.0132R+0.0408R+0.0691R
Ultimate oscillatorLeast-squares MA84040%−0.0276R+0.0131R+0.0407R−0.0366R
Hull MA crossoverChande momentum6,40590%−0.0661R−0.0255R+0.0406R+0.0475R
ATR breakoutWilliams %R1,85339%−0.1277R−0.0872R+0.0405R−0.0049R
MACD signal crossCCI 1006,67695%−0.0571R−0.0170R+0.0401R+0.0236R
ATR breakoutPin bar3,38367%−0.1166R−0.0767R+0.0399R+0.0875R
Chande momentumInside-bar breakout2,89051%−0.0286R+0.0112R+0.0398R−0.0157R
ATR breakoutAccumulation/distribution4,31088%−0.1137R−0.0739R+0.0398R+0.0646R
Hull MA crossoverCCI 1006,33189%−0.0662R−0.0269R+0.0393R+0.0465R
CCI 100RSI 30/70 reversion5,44680%−0.0444R−0.0053R+0.0391R+0.0103R
CCI 100Least-squares MA1,87429%−0.0558R−0.0167R+0.0391R+0.0227R
ATR breakoutEngulfing candle3,69775%−0.1148R−0.0761R+0.0387R+0.0894R
Keltner breakoutRSI 30/70 reversion2,16342%−0.0965R−0.0579R+0.0386R+0.0053R
Bollinger reversionTEMA crossover1,54827%−0.0217R+0.0165R+0.0382R+0.0361R
Chaikin money flowDEMA crossover6,03686%−0.0631R−0.0250R+0.0381R+0.0320R
OBV vs its averageCCI 1006,71195%−0.0733R−0.0357R+0.0377R+0.0445R
MACD signal crossWilliams %R6,40491%−0.0570R−0.0199R+0.0371R+0.0421R
Chande momentumTEMA crossover91622%−0.0384R−0.0019R+0.0365R+0.0697R
ATR breakoutVWMA vs SMA4,06683%−0.1145R−0.0780R+0.0364R+0.0773R
Ultimate oscillatorRSI 30/70 reversion2,82681%−0.0265R+0.0097R+0.0362R+0.0212R
True strength indexWilliams %R6,41490%−0.0391R−0.0032R+0.0360R+0.0163R
DEMA crossoverWilliams %R5,18580%−0.0228R+0.0132R+0.0359R+0.0631R
ATR breakoutWilliams alligator3,38068%−0.1152R−0.0792R+0.0359R+0.0687R
Chaikin money flowChande momentum5,14473%−0.0630R−0.0275R+0.0355R+0.0065R
Elder rayRSI 30/70 reversion4,41264%−0.0643R−0.0292R+0.0351R+0.0442R
Choppiness breakoutVWMA vs SMA3,45674%−0.0955R−0.0604R+0.0351R+0.0504R
MACD signal crossInside-bar breakout5,57279%−0.0576R−0.0225R+0.0350R+0.0196R
ATR breakoutChoppiness breakout3,72975%−0.1153R−0.0803R+0.0350R+0.0706R
ATR breakoutVolume oscillator3,69575%−0.1162R−0.0812R+0.0350R+0.0404R
Inside-bar breakoutCCI 1005,31675%−0.0380R−0.0034R+0.0346R+0.0671R
TTM squeezeVWMA vs SMA3,72978%−0.0680R−0.0336R+0.0344R+0.0144R
Least-squares MARSI 30/70 reversion7,91793%−0.0518R−0.0177R+0.0341R+0.0084R
True strength indexStochastic RSI3,15143%−0.0399R−0.0060R+0.0339R+0.0030R
ATR breakoutIchimoku TK cross3,65174%−0.1147R−0.0811R+0.0336R+0.0598R
SMA crossoverVWMA vs SMA71070%−0.0845R−0.0512R+0.0333R−0.0312R
Least-squares MABollinger reversion8,07395%−0.0518R−0.0191R+0.0327R+0.0193R
Engulfing candleRSI 30/70 reversion3,41947%−0.0531R−0.0205R+0.0327R+0.0004R
Coppock curveWilliams alligator64221%−0.0409R−0.0084R+0.0325R+0.0525R
SuperTrendRSI 30/70 reversion3,99386%−0.0369R−0.0045R+0.0324R+0.0250R
Price vs SMA 200Accumulation/distribution2,49795%−0.0459R−0.0137R+0.0322R+0.0538R
ATR breakoutBollinger reversion2,10544%−0.1275R−0.0954R+0.0321R−0.0351R
CCI 100Accumulation/distribution2,81540%−0.0475R−0.0158R+0.0318R−0.0246R
Hull MA crossoverOBV vs its average5,62078%−0.0676R−0.0359R+0.0317R+0.0647R
Chande momentumRSI 30/70 reversion4,51780%−0.0300R+0.0017R+0.0317R+0.0299R
ATR breakoutChaikin money flow3,75275%−0.1139R−0.0822R+0.0317R+0.0815R
ATR breakoutInside-bar breakout3,52971%−0.1160R−0.0844R+0.0316R+0.0308R
RSI 30/70 reversionWilliams alligator1,18431%−0.0017R+0.0295R+0.0312R−0.0655R
MACD signal crossChande momentum6,62595%−0.0571R−0.0262R+0.0309R+0.0250R
Williams alligatorChande momentum5,05068%−0.0671R−0.0364R+0.0308R+0.0072R
True strength indexCCI 1006,75396%−0.0393R−0.0088R+0.0305R+0.0105R
Bollinger breakoutStochastic RSI30011%−0.1200R−0.0896R+0.0304R+0.3213R
CCI 100Williams alligator5,03774%−0.0443R−0.0143R+0.0300R−0.0297R
True strength indexBollinger reversion6,72695%−0.0392R−0.0092R+0.0300R+0.0129R
RSI 30/70 reversionPrice vs SMA 20035418%−0.0293R+0.0006R+0.0299R−0.0016R
Relative vigour indexBollinger reversion8,93696%−0.0365R−0.0069R+0.0296R+0.0313R
OBV vs its averageStochastic RSI6,16287%−0.0737R−0.0442R+0.0295R+0.0278R
TEMA crossoverBollinger reversion6,81193%−0.0282R+0.0011R+0.0292R−0.0071R
ATR breakoutOBV vs its average3,96980%−0.1153R−0.0861R+0.0292R+0.0599R
MACD signal crossDEMA crossover4,23459%−0.0588R−0.0298R+0.0290R+0.0210R
OBV vs its averageInside-bar breakout6,47492%−0.0732R−0.0444R+0.0288R+0.0085R
CCI 100OBV vs its average2,74841%−0.0441R−0.0155R+0.0286R−0.0671R
Bollinger breakoutVolume oscillator5,02878%−0.0732R−0.0446R+0.0286R+0.0389R
ATR breakoutCoppock curve3,76776%−0.1158R−0.0873R+0.0285R+0.0456R
Chaikin volatilityStochastic RSI1,86034%−0.0799R−0.0513R+0.0285R+0.0177R
Relative vigour indexRSI 30/70 reversion8,85195%−0.0359R−0.0077R+0.0282R−0.0050R
Hull MA crossoverInside-bar breakout5,48577%−0.0666R−0.0386R+0.0281R+0.0213R
ATR breakoutEMA crossover3,89378%−0.1154R−0.0873R+0.0281R+0.0751R
ATR breakoutMACD zero cross3,89378%−0.1154R−0.0873R+0.0281R+0.0751R
Hull MA crossoverRelative vigour index6,66494%−0.0671R−0.0391R+0.0280R+0.0243R
Chande momentumFisher transform2,12141%−0.0310R−0.0031R+0.0279R+0.0837R
OBV vs its averageChande momentum6,76796%−0.0733R−0.0454R+0.0279R+0.0373R
True strength indexDEMA crossover4,40861%−0.0393R−0.0114R+0.0279R+0.0325R
Hull MA crossoverDEMA crossover5,02770%−0.0678R−0.0399R+0.0278R+0.0317R
Parabolic SARRSI 30/70 reversion6,93893%−0.0427R−0.0150R+0.0277R+0.0257R
Stochastic RSIRSI 30/70 reversion6,28875%−0.0239R+0.0037R+0.0276R−0.0142R
TEMA crossoverRSI 30/70 reversion6,60390%−0.0281R−0.0006R+0.0274R−0.0191R
OBV vs its averageLeast-squares MA6,82897%−0.0731R−0.0460R+0.0271R+0.0385R
Fisher transformBollinger reversion9,20897%−0.0435R−0.0166R+0.0269R+0.0423R
True strength indexRSI 30/70 reversion6,56292%−0.0392R−0.0124R+0.0268R−0.0010R
Chande momentumChaikin money flow1,73633%−0.0323R−0.0057R+0.0266R−0.0216R
Inside-bar breakoutBollinger reversion5,37476%−0.0378R−0.0112R+0.0266R+0.0661R
TEMA crossoverWilliams %R6,81193%−0.0282R−0.0018R+0.0264R+0.0086R
Stochastic RSIMACD signal cross5,94172%−0.0269R−0.0007R+0.0263R−0.0028R
ATR breakoutAwesome oscillator3,66974%−0.1158R−0.0896R+0.0263R+0.0593R
OBV vs its averageMACD signal cross6,41691%−0.0734R−0.0470R+0.0263R+0.0203R
Ichimoku TK crossDEMA crossover5,75397%−0.0320R−0.0061R+0.0259R+0.0378R
Choppiness breakoutInside-bar breakout3,45774%−0.0961R−0.0703R+0.0258R+0.0309R
SMA crossoverRelative vigour index46253%−0.0614R−0.0357R+0.0257R+0.0195R
OBV vs its averageHull MA crossover6,21688%−0.0739R−0.0485R+0.0255R+0.0284R
ATR breakoutVortex crossover4,20985%−0.1150R−0.0898R+0.0253R+0.0438R
Hull MA crossoverMoney flow index6,04885%−0.0665R−0.0413R+0.0252R+0.0152R
Parabolic SARMACD signal cross5,92778%−0.0431R−0.0179R+0.0252R+0.0142R
StochasticTrue strength index6,40195%−0.0401R−0.0149R+0.0252R+0.0420R
Aroon crossoverMACD signal cross5,21397%−0.0260R−0.0009R+0.0251R+0.0264R
OBV vs its averageWilliams %R6,55993%−0.0734R−0.0487R+0.0247R+0.0171R
Choppiness breakoutMoney flow index2,58656%−0.1036R−0.0790R+0.0246R−0.0481R
DEMA crossoverRSI 30/70 reversion5,96391%−0.0230R+0.0015R+0.0245R+0.0196R
ATR breakoutDEMA crossover4,11083%−0.1150R−0.0905R+0.0245R+0.0315R
RSI 30/70 reversionTEMA crossover87926%−0.0050R+0.0192R+0.0243R+0.1038R
Least-squares MAVolume oscillator7,18684%−0.0522R−0.0279R+0.0243R+0.0122R
OBV vs its averageMoney flow index6,59093%−0.0736R−0.0494R+0.0242R+0.0211R
ATR breakoutBollinger breakout4,22686%−0.1148R−0.0907R+0.0241R+0.0621R
VWMA vs SMAStochastic RSI4,80577%−0.0331R−0.0091R+0.0241R−0.0249R
Hull MA crossoverVWMA vs SMA5,23973%−0.0667R−0.0427R+0.0240R+0.0753R
VWMA vs SMABollinger reversion5,25685%−0.0306R−0.0068R+0.0238R+0.0249R
OBV vs its averageChaikin money flow6,14687%−0.0732R−0.0497R+0.0236R+0.0457R
Hull MA crossoverAccumulation/distribution5,60078%−0.0678R−0.0443R+0.0235R+0.0263R
Chande momentumVolume oscillator3,01854%−0.0308R−0.0074R+0.0234R+0.0104R
Aroon crossoverWilliams %R1,90638%−0.0287R−0.0054R+0.0232R−0.0795R
StochasticRSI 30/70 reversion6,30394%−0.0404R−0.0173R+0.0231R+0.0090R
Ultimate oscillatorBollinger reversion3,21292%−0.0266R−0.0035R+0.0231R+0.0078R
Inside-bar breakoutRSI 30/70 reversion5,32574%−0.0380R−0.0149R+0.0231R+0.0433R
OBV vs its averageAccumulation/distribution6,54893%−0.0733R−0.0504R+0.0229R+0.0113R
Chaikin volatilityChaikin money flow4,71980%−0.0745R−0.0516R+0.0229R+0.0244R
Ichimoku TK crossMACD signal cross5,81298%−0.0320R−0.0093R+0.0227R+0.0215R
Least-squares MAChande momentum8,03094%−0.0517R−0.0291R+0.0226R+0.0354R
KAMA crossoverRSI 30/70 reversion6,63197%−0.0516R−0.0292R+0.0224R+0.0188R
SMA crossoverCoppock curve1,31279%−0.0728R−0.0504R+0.0223R−0.0192R
CCI 100Chaikin money flow4,46665%−0.0456R−0.0235R+0.0221R+0.0373R
Relative vigour indexCCI 1008,94596%−0.0363R−0.0142R+0.0221R+0.0194R
Hull MA crossoverTTM squeeze5,13071%−0.0678R−0.0462R+0.0216R+0.0358R
Price vs SMA 200Chaikin money flow2,37390%−0.0466R−0.0251R+0.0215R+0.0079R
Chaikin money flowMACD signal cross6,07787%−0.0630R−0.0416R+0.0215R−0.0059R
TEMA crossoverStochastic RSI4,83366%−0.0281R−0.0067R+0.0214R+0.0560R
ATR breakoutAroon crossover4,05882%−0.1152R−0.0938R+0.0214R+0.0594R
TTM squeezeChaikin money flow3,95881%−0.0708R−0.0494R+0.0214R+0.0390R
TEMA crossoverCCI 1006,92695%−0.0283R−0.0070R+0.0213R−0.0116R
MACD signal crossWilliams alligator3,53349%−0.0596R−0.0383R+0.0213R+0.0783R

Take the data: download all 56,239 rows as CSV — free to reuse under CC BY 4.0, which asks only that you say where it came from.

“Kept” is the share of the trigger's own entries that survived the filter. A filter keeping 95% of them is barely a filter; one keeping 20% is a different strategy wearing the trigger's name.

Citing this study

56,239 backtests of 2,878 indicator pairs over 14,326,491 trades, each pair scored against the indicator that fires it rather than against zero. The full dataset is downloadable and free to reuse under CC BY 4.0 — which asks only that you say where it came from.

Suggested citation
TeachTrades. “Does combining two indicators help? 2,878 pairs tested.” Updated 18 October 2026. https://teachtrades.com/lab/combinations
Data: https://teachtrades.com/data/combinations.csv (CSV) · Licence: CC BY 4.0 · Method: https://teachtrades.com/lab/combinations

How this was measured

The filter is not required to fire on the same candle as the trigger. Crossovers are rare, and asking two of them to land on the same bar would test coincidence rather than agreement. What a trader means by “the filter agrees” is the indicator's standing opinion — its most recent signal — and that is what is used.

The pairing is asymmetric on purpose. “Enter on RSI, but only while the trend indicator agrees” is a different rule from the reverse, and both appear in the table separately.

Everything else matches the single-indicator laboratory: published settings, entries at the next bar's open, the stop four median bars wide with the target at twice it, the real per-pair spread charged on every trade, and the last 30% of each window scored separately. Pairs taking fewer than 60 trades on a chart are not recorded at all.

It runs on 4 instruments rather than the laboratory's fifteen, because 2,878 pairs on six timeframes is already 56,239 backtests. The instruments are a major, a second major, a yen major and the most volatile cross we carry, so a result that holds on one and fails on the rest is visible in the table.

Want the setups, not just the maths?

Our own signals are not a pair of indicators either - they combine several factors that must agree and decline far more setups than they take. The difference is on the public record, with the losses left in.

See today’s signals →