Feeding a random forest 19 correlated technical features cost it six correct calls on 2024 CSI 300 direction compared with using four lagged returns. Zhang's own paired bootstrap cannot distinguish the results. The stronger lesson concerns redundant inputs in a lightly tuned tree ensemble; the case against technical indicators is weaker. Section 4.10 explicitly rejects that interpretation. It attributes the decline to technical indicators as a whole failing to supply incremental information.
What went into Zhang's models?
Zhang starts with the familiar weak-form question: can lagged prices and their transforms detect short-horizon structure in daily index direction? Each day receives a label of 1 when tomorrow's close is higher than today's. Ties count as down. Sina Finance daily OHLCV supplies the data for 19 inputs:
- 1, 2, 5 and 10-day returns
- MA5 and MA20 deviations plus a crossover signal
- RSI14, the three MACD lines and Bollinger position
- KDJ K, D and J
- two volume measures and two return volatilities
The training period extends from July 2020 to December 2023, with 831 days and 48.13% up days. Calendar 2024 supplies the test: 242 days, 49.17% up.
Five models enter the comparison. The naive rule carries yesterday's direction forward. Alongside L2 and L1 logistic regressions are a random forest with 100 trees, depth 5 and seed 42, and a depth-3 forest used to control capacity. Both the L2 regression and the depth-5 forest are fitted twice, using the four returns alone and then all 19 features. The L1 regression and depth-3 forest receive only the full feature set.
56.20% accuracy and an AUC of 0.5890 put the returns-only forest first among the seven headline configurations. With all 19 features, the same forest raises training accuracy from 0.7052 to 0.7858. Test accuracy drops to 0.5372. Zhang describes this as the paradox of feature increase, attributing it to redundancy in a small sample. There are 43 feature pairs with |r| above 0.7; the correlation between MACD DIF and DEA is 0.953. The best model also has a bearish lean: it predicts up on 27.69% of test days, against 49.17% actually up. Zhang links that lean to the training market's 26.92% loss.
Six calls out of 242
136 of 242 days are correct for the returns-only forest, compared with 130 for the full-feature forest. Their paired bootstrap produces a one-sided p of 0.244.
These figures measure direction alone.
The authors acknowledge that their analysis covers accuracy, without a backtest, costs or excess-return analysis. A 56.20% hit rate leaves unanswered whether the model gets the large-move days right or collects its hits on flat days.
Which question does each p-value answer: 0.123 or 0.244?
The discussion runs together three questions: whether a model beats chance, whether it beats yesterday's direction, and whether indicators improve on returns alone. For the first, the returns-only forest has a bootstrap interval of [0.5041, 0.6240]. Its lower bound exceeds 50% by 0.41 points, equivalent to one correct call in 242. The paper selects it as best after scoring seven configurations on the same 2024 test year. Against yesterday's direction, its mean advantage is 5.71 pp, with a CI of [-3.72, 15.29] pp and p = 0.123.
The paper uses that 0.123 to describe the indicators' incremental value as "statistically fragile". Yet the comparison involves a returns-only model and a naive rule. It contains no indicator. For the third question, the one posed by the paper's title, the relevant number is 0.244. Section 4.6 reports 0.244, while the abstract and conclusion carry forward only 0.123. An always-down prediction would score 50.83% (123 of 242), also exceeding the naive baseline's 0.5041. We did not find that majority-class benchmark in the tables.
Zhang states the weak overall result plainly: "Our study does not claim that technical indicators can effectively predict the CSI 300 Index." I agree. The mechanism offered for the result is where I disagree. The paradox rests on a generalization gap widening from 14.32 to 24.86 pp. An 8.06 pp increase in training accuracy, from 0.7052 to 0.7858, accounts for most of that widening. The test-side contribution is the six calls.
Bollinger Bands interrupt the decline
The group-by-group additions produce an uneven sequence. Moving averages take the forest to 7 features and 0.5661 accuracy. Bollinger Bands bring it to 12 features and 0.5702. Each exceeds the 0.5620 score of the model crowned by the paper. Ranking deteriorates even as thresholded accuracy improves: the 12-feature AUC is 0.5811, against 0.5890. Adding KDJ then takes accuracy down to 0.5124.
Section 4.5 acknowledges Bollinger as an exception and calls the sequence an "overall fluctuating downward trend". The conflicting claim appears in Section 4.4, which offers as evidence "the gradient pattern in which the generalization gap expands monotonically as the number of features increases". Table 4 shows the gap shrinking from 0.2233 to 0.1819 when Bollinger enters. It shrinks again, from 0.2493 to 0.2486, between 17 and 19 features. The paper's clean 4, 9, 19 gradient belongs to a separate de-duplicated run, with scores of 0.5620, 0.5496, 0.5372.
Changing model capacity reverses the direction of the result. Indicators lift L2 logistic regression from 0.4959 to 0.5455 accuracy, although AUC slips from 0.4940 to 0.4869. Reducing the full-feature forest to depth 3 raises test accuracy from 0.5372 to 0.5496. Its gap contracts from 24.86 to 5.93 pp. The learner matters to feature value here, and the authors acknowledge using empirical defaults for hyperparameters rather than a grid search. Seven models, an eight-step ablation and a de-duplicated set all face the same 242-day test year. Their rankings are exploratory, subject to the multiple-testing problem for which the paper itself cites Harvey et al.
Reproduction leaves some choices open
The paper specifies the label and feature list, tree count, depth and seed. It also specifies train-only scaling and 2,000 bootstrap draws. Other choices remain unclear. For the depth-3 forest, we found only that the minimum-leaf setting was "increased", without its value. We did not find the identities of the nine features retained after de-duplication.
The last 60 training days serve as validation, where the full forest scores 0.8167 against its training score of 0.7858. Such an ordering is odd for held-out data. Those 60 days "are separated as a validation set", according to the paper. Yet the reported training set still contains 831 samples through December 29, 2023. We could not determine from the text whether the final fit included those days. The bootstrap resamples days independently, although the 5 and 10-day return features overlap. A block bootstrap would account for the overlap.
The -26.92% training market and a bearish lean
The best model calls down 175 times and up 67 times. Up recall is 33.61%; down recall is 78.05%. With up precision at 0.5970, whatever edge exists is concentrated in infrequent, confident up calls. Down recall exceeds up recall in all five rolling windows reported by the paper, with margins of 18 to 70 pp. Separately, accuracy for the returns-only forest ranges from 49.18% to 68.75%.
Sections 4.9 and 5.1 describe the returns-only forest's 7.42% window standard deviation as the largest. Section 4.9 interprets this as a mean-variance tradeoff. But the full-feature forest's window results in Table 7 are 56.67%, 41.38%, 61.02%, 62.50% and 45.90%. They imply about 8.4%, removing the claimed mean-variance tradeoff.
A 26.92% training loss followed by a +16.20% test year gives the regime explanation some plausibility. It is still one episode. We did not find a threshold recalibration or class-reweighting test, a cheap way to distinguish a learned regime prior from a calibration artifact. The authors identify adaptive thresholds as future research.
We could not rerun any of these results. Our data contains no CSI 300 daily series, and no Chinese-listed index funds or CSI 300 futures are available for trading the signal. Using a US index as a substitute would test a different market.
I would change my view if an indicator set beat returns-only in a block-bootstrapped paired test across three or more test years. The paper's out-of-sample period extends from 2023Q4 through 2024.