“Hold when the price is above its ten-month average” sounds precise to Lin. Two tools nevertheless produce opposite signals in the same month. One includes the current month; the other counts backward from last month. Another comparison treats “not above” as “strictly below,” leaving equality unresolved.
The difference is in the unfinished sentence, not an advanced algorithm. Define the window, comparison, and information time before asking whether the signal works. First freeze a version that another person can calculate.
What you will be able to do
- Specify a time-series signal's input, window, frequency, direction, and delay.
- Distinguish a valid result, an equality case, and insufficient data without filling gaps to obtain a desired answer.
- Separate time-series and cross-sectional comparisons and save a reproducible signal definition.
An indicator describes; a signal adds a condition
An indicator or feature describes data: an average, past return, or profitability ratio, for example. A signal specifies the research judgment made when a description satisfies a condition. Calling every indicator a buy point skips direction, timing, and scope.
“Strong recent performance” might mean an asset exceeds its own earlier level or has fallen less than competitors. “Undervalued” also needs a reference. An economic mechanism helps select a question; a computational definition lets the question be checked. Neither replaces the other.
Trend research may investigate continuation in earlier movements. AQR's public trend-following material describes a time-series-momentum idea, but its instruments and long/short arrangements differ from this book's ETF-and-cash rule.[1] It does not establish profitability for an arbitrary window or simplified signal.
Before arguing whether ten or twelve months is best, record the version being examined and why it was chosen. Later changes need their own versions and a record of results already seen. Quietly replacing the old definition conceals a research attempt.
Which ten month-ends?
C2-A decides after the close of the last trading day of each month. The current total-return index value must be valid. Compare it with the simple average of the latest ten valid month-end values, including the current one. With sufficient valid inputs, strictly above means a holding target; equal or below means cash. Invalid current input or insufficient history produces no new target.
The target concerns the strategy subaccount, not the household's entire allocation. A signal says what that subaccount should aim for under a specified rule. It does not establish that the target is suitable for family funds.
Use independent synthetic index levels, not real SPY prices or a completed C2 backtest. Assume every row is consistently defined, verified, valid, and available at its historical month-end.
| Month-end | Index level |
|---|---|
| M1 | 100 |
| M2 | 102 |
| M3 | 101 |
| M4 | 103 |
| M5 | 104 |
| M6 | 102 |
| M7 | 105 |
| M8 | 106 |
| M9 | 108 |
| M10 | 109 |
After M10 closes, the ten levels sum to 1,040 and average 104. The current value, 109, is strictly greater, producing a holding target. Counting backward from M9 would select a different window, even if the resulting count is also ten.
The calculation averages index levels, not ten monthly returns, and is not a volatility estimate. Changing the input to raw closing prices or another dividend-adjustment policy can change the signal. A shared label such as price does not establish a shared definition.
Both sides of the comparison need the same units. An index level of 109 is not a promise to execute at $109. The account ledger requires the security's tradable price and corporate-action information. Dividing cash by the signal index level would not establish a valid order quantity.
Observation count and elapsed time are different fields
Ten daily closes, ten month-ends, and ten reporting periods do not define the same signal. Window length specifies historical observations; frequency specifies their spacing. A missing month cannot be repaired by substituting a daily row.
The C2 supplement requires a valid current value and the preceding nine valid month-ends, recording the dates and any wider calendar span caused by missing months. An old observation cannot impersonate a missing current value.
If one row in the displayed history becomes invalid and no earlier valid row is available, nine remaining values cannot be labeled a ten-value average. An invalid month-end decision first expires the old pending simulated target, leaves actual cash and holdings unchanged, and waits for a later valid month-end. Filling data midmonth does not create a new scheduled decision.
A simple average also gives each selected observation equal weight. A tool that weights recent data more heavily or smooths values first computes another feature. It might be worth investigating, but it needs another definition and version.
Warmup data supplies the history needed for the first calculation. It is not permission to use future observations. Establish how many real, available inputs precede the start date. If they are unavailable, record insufficiency instead of asking AI to invent a calm earlier series.
Equality is a decision, not a missing answer
Use a separate ten-value example with every level equal to 104. Both current level and average are 104. C2's strict comparison fails, so the valid target is cash. The tool has made a defined decision; it has not failed to decide.
Changing the rule to greater than or equal would produce a holding target instead. One boundary symbol can alter later trades and costs. Seeing which outcome looks better is not a reason to reinterpret the earlier rule.
Distinguish calculation precision from display precision. Two displayed values of 104.00 need not be identical internally. A rule must specify original inputs, fixed rounding, or a tolerance rather than let appearance decide. C2's current version compares verified input values strictly, without rounding to display digits or adding a new equality tolerance.
Another strategy can adopt another numerical policy. That requires a recorded version, not an implementer's unannounced choice. Matching screen values cannot authorize a different comparison from the frozen one.
The signal becomes known after the earlier prices have passed
The current month-end input is complete after the close. C2 attempts to adjust at the next normal trading day's open under its teaching execution model. A later closing level cannot support an earlier opening transaction merely because the earlier price is more attractive.
Signal frequency and execution delay answer different questions. Looking once per month does not permit trading at any time that day. A holding target does not guarantee a fill. Missing prices or inability to execute leave the actual account unchanged under the recorded policy, with the problem logged rather than an invented trade.
CFA Institute's public backtesting overview connects rules, portfolio formation, rebalancing, and evaluation.[2] This chapter stops at signal definition and timing. Costs, quantities, cash, and corporate actions still need the ledger that follows.
Compare an asset with itself—or with others
A time-series comparison follows one object's history, as with M10 and its own average. A cross-sectional comparison ranks multiple objects at one observation time, such as their returns over the same earlier month. The choices can differ without either calculation being broken.
In a separate synthetic comparison, A returns −3%, B −5%, and C −10%. Ranking from high to low puts A first. A rule requiring a strictly positive monthly return selects none. First place means the least negative result here, not that A rose.
Cross-sectional rules also need an eligible universe, ties, and missing-data policy. If A and B both return 5% and only one is selected, specify a stable tie rule. File order or an arbitrary tool choice cannot silently determine a result described as reproducible.
Standardization changes the measurement scale; outlier treatment changes unusual inputs; industry treatment might rank within groups or remove specified differences. These choices can change signals. They are not neutral cleaning, and standardized financial ratios do not automatically become comparable across fundamentally different businesses.
These are additional definition tasks for the factor route, not completed cross-sectional research. Financial factors require the relevant accounting prerequisites. Ranking alone is not return evidence; the later route connects construction, testing, exposures, and portfolios.
Preprocessing can import future information
Suppose an old observation is standardized using a mean and standard deviation calculated from all months, including later ones. The old signal now depends on information unavailable at that time. Future returns need not appear explicitly for preprocessing to leak information.
The scikit-learn documentation explains why preprocessing statistics learned from test data leak information into model construction or selection.[3] In a historical time-series problem, also restrict statistics to information available at the decision time. An arbitrary split into two groups does not by itself establish that condition.
Same-time cross-sectional processing does not necessarily use the future, but eligible objects and features still need availability checks. A financial period's end is not its report-release date. Later restatements cannot silently replace earlier knowledge. Completeness of today's table is not the criterion for historical availability.
Complete the rule yourself
Explanation question: Why does 109 exceeding 104 not establish a purchase at 109?
Application question: Every input equals 104, but a tool holds because “equal also means strength.” What should change under C2's rule? Answer before reading the guide.
Separate index units, the after-close signal, and the next execution opportunity, which needs price and quantity evidence. Equality produces cash under the strict rule. A researcher may register another version that includes equality before evaluating it, but cannot rewrite the old record's meaning.
One observation is invalid
Retain the main example except that M1's 100 is found invalid and no earlier month-end data is supplied. An assistant averages the nine remaining values, labels it a completed ten-month signal, and proposes executing at M10's open. Identify both issues without inventing a replacement value.
The remaining sum is 940 and the average about 104.44. The current 109 still exceeds it, but that is not the specified ten-valid-value average. Record insufficient inputs and investigate an eligible earlier observation and the complete missing-data policy. Do not relabel insufficiency as an economic cash signal.
The timing error remains separate: M10's closing input was unavailable at M10's open. Completing the historical window would not validate the early order, just as correcting execution time would not supply the missing observation.
Save a signal definition
Record object, input field and version, units, frequency, window endpoints, and minimum count. Include whether the current observation enters, the calculation, comparison direction, equality and precision policy, missing inputs, signal formation time, and earliest execution.
Recalculate the main and equality examples and save expected outputs. For the factor route, add eligible universe, ranking, ties, outlier and industry handling, and the historically available data behind each transformation. Another model's defaults are not your definition unless explicitly adopted.
Can another person select the same inputs and obtain the same result at the same time? If they must guess what strong means, finish the definition first. A consistent signal then becomes an input to a consistent ledger and a research evaluation, not a substitute for either.
Attach a time definition to every signal
Specify input, window, frequency, and direction; distinguish equality from insufficient evidence. Equal counts can cover different periods, and the highest rank can still represent a loss. Those distinctions determine which idea is being tested.
Then check that processing and execution use only information available at the relevant time. Reproducibility of a condition does not establish execution or profit. Preserve versions and gaps so later experiments can identify what a change actually did.
References
- Hurst, Ooi, and Pedersen: A Century of Evidence on Trend-Following Investing. Authors' institution page, 2017; conceptual context only, not evidence for C2 or any selected window.
- CFA Institute: Backtesting & Simulation. Public 2026 overview and summary; paid curriculum not reviewed.
- scikit-learn: Common Pitfalls—Data Leakage. Preprocessing information boundaries; no programming or use of this library is required.
Sources checked October 30, 2026. All displayed index and ranking values are independent synthetic inputs, not a completed real C2 backtest. AI-assisted draft; independent AI full-text and bilingual review is complete. Human financial review and target-reader testing have not been conducted and are not scheduled for this production round.