Existing offline corpus

Mean reversion vs momentum: what the existing corpus can compare

Compare buying weakness with buying strength using explicitly classified existing-corpus cohorts, complete-rule outcomes, assumptions and an actual strategy editor example.

As of 2026-10-10

The direction of the entry is the first difference

Mean reversion buys weakness under the hypothesis of a rebound. Momentum buys strength under the hypothesis of continuation. A rule's direction depends on its operator, threshold and action: RSI below 30 driving a Buy is different from RSI above 70 driving a Sell.

Each recorded outcome comes from a complete archived book with its own guards, exits and allocations. The comparison keeps recorded execution settings separate. In this 42,850-contract normalized archive, no pair clears the declared 20-contract floor for both styles under identical recorded execution fields. This evidence cannot name a directional winner.

Declared RSI classificationBuy with RSI ≤ 40 threshold and < or ≤ operatorBuy with RSI ≥ 60 threshold and > or ≥ operator
Declared rate-of-change classificationBuy below a nonpositive ROC thresholdBuy above a nonnegative ROC threshold
What remains separateExit rules and sizingExit rules and sizing
What is excludedMixed opposite Buy signalsMixed opposite Buy signals
Long moving-average filterA separate investment gateA separate investment gate, not automatically a momentum timing signal

Narrow operational classifications for this corpus analysis. They do not exhaust all mean-reversion or momentum strategies.

No qualifying matched directional cohort

This reviewed archive does not supply a pair of directional cohorts that clears the stated sample floor under identical ticker, dates, capital, fees, interval, baseline and stored risk-free settings. Unmatched books differ in inputs that can affect performance, so this archive does not establish which entry direction worked better under comparable conditions.

Use the condition ranking page to inspect complete condition/action associations. Do not interpret an RSI-type median as the performance of buying oversold RSI: it combines different thresholds, actions and surrounding rules.

Read two signals before copying a rule

Illustrative inputs: an unheld asset has RSI(14) = 25 and a 20-day rate of change of −5%. A declared RSI < 30 Buy qualifies; a ROC > 0 Buy does not. These are invented inputs for explaining rule evaluation, not historical quotes or performance results.

An entry still needs an exit and a size. Specify what fraction of buying power to spend, how to check held positions, and whether repeated evaluations can add exposure. RSI can stay low while a price falls; momentum signals can reverse in a sideways market.

Inspect a real product configuration

The library preview below is an actual public moving-average recipe. It illustrates inspecting saved rules and allocation units. It is not one of the private corpus configurations, and no aggregate performance claim is attached to it.

Inspect an actual NexusTrade strategy

  1. Buy 100% of the available cash in GOOG whenever GOOG's 50-day average price is at or above its 200-day average price and days since the last filled buy order of GOOG is above 14 and days since the last filled buy order of GOOG is above 3.

    Buy GOOG 50 Day GOOG SMA ≥ 200 Day GOOG SMA and # of Days Since the Last Filled Buy Order of GOOG > Constant 14 and # of Days Since the Last Filled Buy Order of GOOG > Constant 3

  2. Sell 100% of the portfolio worth of GOOG whenever GOOG's 50-day average price is at or below its 200-day average price and days since the last filled buy order of GOOG is above 14 and days since the last filled sell order of GOOG is above 3.

    Sell 100% GOOG 50 Day GOOG SMA ≤ 200 Day GOOG SMA and # of Days Since the Last Filled Buy Order of GOOG > Constant 14 and # of Days Since the Last Filled Sell Order of GOOG > Constant 3

NexusTrade library preview showing the actual Google moving-average buy and sell rule cards
Actual library preview captured October 10, 2026. Both saved rule cards are visible. This is a configuration example, not a backtest result.

What the saved rules mean

The buy rule checks whether the 50-day moving average is at least the 200-day average, with more than 14 days since the last buy and an additional more-than-3-day buy check. The sell rule checks the inverse state, with more than 14 days since the last buy and more than 3 days since the last sell. These are state checks with cooldowns. They do not require a new crossing event.

The JSON below retains the library conditions and actions while omitting editor forms, generated identifiers and timestamps. It is a semantic export for inspection, not a saved customer portfolio.

The buy spends 100% of buying power; the sell uses 100% of portfolio value. Equality meets both moving-average comparisons. There is no explicit zero-position entry guard. Review those details before changing the recipe or translating it to another engine.

json
View complete configuration
[
  {
    "name": "Buy 100% of the available cash in GOOG whenever GOOG's 50-day average price is at or above its 200-day average price and days since the last filled buy order of GOOG is above 14 and days since the last filled buy order of GOOG is above 3.",
    "userId": null,
    "active": true,
    "condition": {
      "name": "50 Day GOOG SMA ≥ 200 Day GOOG SMA and # of Days Since the Last Filled Buy Order of GOOG > Constant 14 and # of Days Since the Last Filled Buy Order of GOOG > Constant 3",
      "type": "And",
      "description": "All conditions must be true",
      "example": "If Apple's price is up today but down for the week.",
      "conditions": [
        {
          "lhs": {
            "compound": false,
            "targetAsset": {
              "name": "GOOG",
              "type": "Stock",
              "symbol": "GOOG"
            },
            "targetAssets": [],
            "window": {
              "length": 50,
              "interval": "Day"
            },
            "type": "SimpleMovingAverage",
            "name": "50 Day GOOG SMA"
          },
          "rhs": {
            "compound": false,
            "targetAsset": {
              "name": "GOOG",
              "type": "Stock",
              "symbol": "GOOG"
            },
            "targetAssets": [],
            "window": {
              "length": 200,
              "interval": "Day"
            },
            "type": "SimpleMovingAverage",
            "name": "200 Day GOOG SMA"
          },
          "name": "50 Day GOOG SMA ≥ 200 Day GOOG SMA",
          "comparison": "greaterThanOrEqual",
          "type": "Base",
          "description": "Left-Hand indicator (comparator) Right-Hand Indicator",
          "example": "If the Rate of Change of Apple's price is > the Value 0."
        },
        {
          "lhs": {
            "compound": false,
            "targetAssets": [
              {
                "name": "GOOG",
                "type": "Stock",
                "symbol": "GOOG"
              }
            ],
            "side": "Buy",
            "type": "DaysSinceOrder",
            "orderStatus": "Filled",
            "name": "# of Days Since the Last Filled Buy Order of GOOG"
          },
          "rhs": {
            "compound": false,
            "targetAssets": [],
            "value": 14,
            "type": "Value",
            "name": "Constant 14"
          },
          "name": "# of Days Since the Last Filled Buy Order of GOOG > Constant 14",
          "comparison": "greaterThan",
          "type": "Base",
          "description": "Left-Hand indicator (comparator) Right-Hand Indicator",
          "example": "If the Rate of Change of Apple's price is > the Value 0."
        },
        {
          "lhs": {
            "compound": false,
            "targetAssets": [
              {
                "name": "GOOG",
                "type": "Stock",
                "symbol": "GOOG"
              }
            ],
            "side": "Buy",
            "type": "DaysSinceOrder",
            "orderStatus": "Filled",
            "name": "# of Days Since the Last Filled Buy Order of GOOG"
          },
          "rhs": {
            "compound": false,
            "targetAssets": [],
            "value": 3,
            "type": "Value",
            "name": "Constant 3"
          },
          "name": "# of Days Since the Last Filled Buy Order of GOOG > Constant 3",
          "comparison": "greaterThan",
          "type": "Base",
          "description": "Left-Hand indicator (comparator) Right-Hand Indicator",
          "example": "If the Rate of Change of Apple's price is > the Value 0."
        }
      ]
    },
    "action": {
      "type": "Buy",
      "targetAsset": {
        "name": "GOOG",
        "type": "Stock",
        "symbol": "GOOG"
      },
      "amount": {
        "type": "percent of buying power",
        "amount": 100
      }
    },
    "orderExecution": {
      "type": "Market"
    },
    "automaticOrderApproval": false
  },
  {
    "name": "Sell 100% of the portfolio worth of GOOG whenever GOOG's 50-day average price is at or below its 200-day average price and days since the last filled buy order of GOOG is above 14 and days since the last filled sell order of GOOG is above 3.",
    "userId": null,
    "active": true,
    "condition": {
      "name": "50 Day GOOG SMA ≤ 200 Day GOOG SMA and # of Days Since the Last Filled Buy Order of GOOG > Constant 14 and # of Days Since the Last Filled Sell Order of GOOG > Constant 3",
      "type": "And",
      "description": "All conditions must be true",
      "example": "If Apple's price is up today but down for the week.",
      "conditions": [
        {
          "lhs": {
            "compound": false,
            "targetAsset": {
              "name": "GOOG",
              "type": "Stock",
              "symbol": "GOOG"
            },
            "targetAssets": [],
            "window": {
              "length": 50,
              "interval": "Day"
            },
            "type": "SimpleMovingAverage",
            "name": "50 Day GOOG SMA"
          },
          "rhs": {
            "compound": false,
            "targetAsset": {
              "name": "GOOG",
              "type": "Stock",
              "symbol": "GOOG"
            },
            "targetAssets": [],
            "window": {
              "length": 200,
              "interval": "Day"
            },
            "type": "SimpleMovingAverage",
            "name": "200 Day GOOG SMA"
          },
          "name": "50 Day GOOG SMA ≤ 200 Day GOOG SMA",
          "comparison": "lessThanOrEqual",
          "type": "Base",
          "description": "Left-Hand indicator (comparator) Right-Hand Indicator",
          "example": "If the Rate of Change of Apple's price is > the Value 0."
        },
        {
          "lhs": {
            "compound": false,
            "targetAssets": [
              {
                "name": "GOOG",
                "type": "Stock",
                "symbol": "GOOG"
              }
            ],
            "side": "Buy",
            "type": "DaysSinceOrder",
            "orderStatus": "Filled",
            "name": "# of Days Since the Last Filled Buy Order of GOOG"
          },
          "rhs": {
            "compound": false,
            "targetAssets": [],
            "value": 14,
            "type": "Value",
            "name": "Constant 14"
          },
          "name": "# of Days Since the Last Filled Buy Order of GOOG > Constant 14",
          "comparison": "greaterThan",
          "type": "Base",
          "description": "Left-Hand indicator (comparator) Right-Hand Indicator",
          "example": "If the Rate of Change of Apple's price is > the Value 0."
        },
        {
          "lhs": {
            "compound": false,
            "targetAssets": [
              {
                "name": "GOOG",
                "type": "Stock",
                "symbol": "GOOG"
              }
            ],
            "side": "Sell",
            "type": "DaysSinceOrder",
            "orderStatus": "Filled",
            "name": "# of Days Since the Last Filled Sell Order of GOOG"
          },
          "rhs": {
            "compound": false,
            "targetAssets": [],
            "value": 3,
            "type": "Value",
            "name": "Constant 3"
          },
          "name": "# of Days Since the Last Filled Sell Order of GOOG > Constant 3",
          "comparison": "greaterThan",
          "type": "Base",
          "description": "Left-Hand indicator (comparator) Right-Hand Indicator",
          "example": "If the Rate of Change of Apple's price is > the Value 0."
        }
      ]
    },
    "action": {
      "type": "Sell",
      "targetAsset": {
        "name": "GOOG",
        "type": "Stock",
        "symbol": "GOOG"
      },
      "amount": {
        "type": "percent of portfolio",
        "amount": 100
      }
    },
    "orderExecution": {
      "type": "Market"
    },
    "automaticOrderApproval": false
  }
]

Keep the proposed test separate from the historical ranking

Open Aurora and send this request. Check the complete preview before saving a draft. For any later test, freeze a separate evaluation window before inspecting results, keep execution assumptions identical, and retain inactive and unsuccessful candidates in your research ledger.

prompt
Help me compare buying weakness with buying strength. First show the existing corpus cohorts, complete condition/action descriptions and their full-book assumptions. Do not infer a winner from indicator usage. If I want a new candidate, preview an inactive definition with build_portfolio: explicit asset, entry and exit comparisons, indicator windows, holding guards and allocation units. Show validation issues before saving. Do not run a backtest or deploy trading.

What these results measure

Each observation is a completed historical book from the existing offline corpus. Repeated submissions with the same normalized rules, actions and recorded execution settings count once, using the latest record. The analysis preserves complete typed condition trees, indicator parameters, asset selectors and allocation actions. It removes verified editor IDs, labels and forms and keeps child and rule order intact. Records with unknown fields are excluded. The normalized book, dates, tickers, capital, cadence, fees, baseline and recorded risk-free field define a distinct execution contract.

Condition rows preserve one complete condition tree and its action. Outcomes describe complete books containing that rule. They do not isolate the predicate's contribution. Books can appear in several condition rows; counts across rows are not additive. Strategy rows group one complete normalized rule set and separate recorded execution fields. Matching null fee fields does not establish that actual fees matched. Across-window distributions are historical observations, not unseen validation.

The normalized analysis retains 42,850 contracts from 102,781 eligible archive rows. 12,233 rows are excluded for incomplete execution inputs or unsupported rule fields. 14,061 distinct normalized books remain.

Sharpe and Sortino are ratios. Return and drawdown are percentages over the recorded period. Benchmark excess return is paired within each record, in percentage points; its denominator is shown. Benchmark execution conventions may differ from candidate conventions. Lower drawdown describes a smaller historical loss, not proof of a better future strategy.

The completed-source tables do not provide a failed-job denominator, exposure/time invested or closed-trade counts. Those fields are unavailable here. The recorded risk-free values are kept exactly as stored; historical unit conventions cannot be established from this archive. Zero-return completed records remain eligible when their Sharpe is finite.

Source and limits

October 10, 2026 reanalysis of the existing September archive: 222,010 recorded runs, including 74,518 marked optimizer runs. The latest archived record is September 6; object uploads are September 21. This is not newly generated research.

Eligible inputs are non-optimizer-labelled equity records without options, evaluated daily for 365 to 2,000 days with finite Sharpe. All retained author labels are unknown: excluding known optimizers cannot prove these inputs were never optimized or identify a public owner.

Exact condition descriptions retain the complete recorded typed tree, operand assets, thresholds, windows, logical ordering and associated allocation action. Legacy recorded parameters remain visible; the archive does not establish their interpretation under the current engine. Only allowlisted built-in fields appear. Each displayed rule needs at least 20 distinct normalized full-book execution contracts. Outcomes belong to those complete books, not the condition alone.

Full strategy identity uses the complete ordered normalized book internally. Public strategy rows disclose anonymous structural summaries and aggregate statistics, not customer full configurations, names, IDs or copyable private rules. Different windows may overlap.

Stock fees and paired benchmark results are unrecorded in these displayed cohorts. Null is unknown, not zero. Dividend, fill and engine-policy versions are unavailable. Stored risk-free values vary in apparent units and are kept separate without claiming comparable Sharpe conventions.

This typed-rule-action-execution-v2 normalization removes verified editor metadata and excludes incomplete or unsupported records. Its 42,850 retained execution contracts differ from the conservative exact-stored-JSON indicator analysis's 61,340. These populations and medians must not be treated as interchangeable.

The 20-contract display floor is descriptive, not a significance threshold or proof of independent observations. Ticker, calendar, capital, allocation, leverage and research selection differ across rows; a sorted table does not establish a controlled best strategy.

No matched single-ticker mean-reversion and momentum pair meets the 20-contract floor under the same recorded execution fields. Unmatched groups are not pooled into a directional winner.

Continue exploring

Aurora · AI research assistant

Try this in Aurora

Edit the request, then open it in Aurora. You choose when to send it.