TL;DR
The five dividend growers returned 44.80% versus SPY's 33.99% from January 2, 2025 through October 7, 2026. Their displayed 2014-start result was 340.90% versus SPY's 419.23%. Both reinvest dividends; strategy transactions cost 0.1% while the stored SPY benchmark pays no candidate commissions. Grok Bot can validate the configuration and inspect a historical test once its tools and account are connected.
Explore the completed 2025 through 2026 test
Portfolio value (USD)
- Five dividend growers 2026-10-07
- $14,479.88
- SPY buy and hold 2026-10-07
- $13,399.03
Five dividend growers: 22.41% largest decline in plotted observations. 2025-02-13 ($10,415.39) to 2025-04-08 ($8,081.82).
- Strategy return
- 44.80%
- SPY return
- 33.99%
- Maximum drawdown
- 24.33%
- Strategy fees
- $24.15
Recorded historical simulation: Jan 02, 2025 to Oct 07, 2026. Initial capital was $10,000.
Recorded in NexusTrade on October 8, 2026. Strategy assumptions: fractional shares, reinvested dividends and a 0.1% stock transaction fee. The stored SPY benchmark pays no candidate commissions.
Try this example in Grok Bot
Inspect the request
Connect Grok Bot, then copy the request below. Review the returned result before continuing.
The rules behind this result

- Allocation trigger
- Review allocations when portfolio value equals its initial value OR at least 30 days have passed since a filled buy. This is not an exact monthly schedule.
- Equal weights
- Each selected company has the same weight: five qualifying companies would target 20% each before execution effects.
- Execution assumptions
- Fractional shares and reinvested dividends; the original stock fee was 0.1% per transaction.
From the S&P 500 universe, keep companies meeting the ten-year annual dividend-increase filter, select the five largest by market value and weight them equally. The target is 100% invested.
Create and read back the exact strategy
Use the reviewed configuration at https://nexustrade-prod.nyc3.cdn.digitaloceanspaces.com/Explore/Data/existing-dividend-five-configuration-20261010-2468740bdaf783a8.json. Ask your client to pass that complete object to build_portfolio, inspect valid and issues, then show the canonical portfolio. After reviewing it, save the same JSON with create_portfolio and read the returned chat draft with get_portfolio. Keep the draft ID in your experiment record.
Check the SP500 universe, dividend filter, market-cap ranking, five selected names, equal weights, full deployment, 30-day trigger, fractional shares and reinvestment against the reviewed configuration. Keep the new draft undeployed while testing.
Reproduce the five-dividend-growers experiment in Grok Bot. Read the exact configuration at https://nexustrade-prod.nyc3.cdn.digitaloceanspaces.com/Explore/Data/existing-dividend-five-configuration-20261010-2468740bdaf783a8.json. Pass the complete configuration to build_portfolio. Show valid, issues and canonical rules. Preserve the universe, filter, ranking, weighting, rebalance trigger, fractional shares and dividend policy. After I approve the rules, save the same JSON with create_portfolio, then read the returned portfolio_id with get_portfolio. Record that chat draft ID. Stop before backtesting or deployment.Submit the matching historical test
Continue only when the connected client has the required authoring and backtest tools. Review the dates, capital, fee and dividend assumptions, and research-token cost before approving one test.
Replace the placeholder with the returned chat draft ID. Review these inputs, then approve one backtest_portfolio call. They match the displayed 2025 run. Save the accepted backtest ID before leaving the conversation.
generate_events is false for the curve comparison. Enable it when you want to inspect individual signals and orders; detailed event capture uses more credits. Keep all other settings fixed when making that inspection run.
Show the table · 7 rows, 2 columns
| Input | Explicit choice |
|---|---|
| portfolio_id | Exact returned chat draft ID |
| start_date / end_date | 2025-01-02 / 2026-10-07 |
| interval | Day |
| initial_value | 10000 |
| baseline_symbol | SPY |
| fee_config / dividend_policy | Stock: 0.1 percent; reinvest |
| generate_events | false for the curve; true for detailed signal and order inspection |
No matching rows. Clear the filter to see all records.
{
"portfolio_id": "REPLACE_WITH_RETURNED_CHAT_ID",
"start_date": "2025-01-02",
"end_date": "2026-10-07",
"interval": "Day",
"initial_value": 10000,
"baseline_symbol": "SPY",
"generate_events": false,
"dividend_policy": "reinvest",
"fee_config": {
"Stock": {
"amount": 0.1,
"type": "percent"
}
}
}Tool reference
Validate a new candidate
NexusTrade toolbuild_portfolio
ReviewCanonical configuration and component issues; nothing is saved
Save the validated draft
NexusTrade toolcreate_portfolio
ReviewUse the reviewed configuration and retain the returned chat portfolio ID
Read the saved book
NexusTrade toolget_portfolio
ReviewExact strategies, action sizing, and portfolio identity
Submit the historical test
NexusTrade toolbacktest_portfolio
ReviewExplicit dates, interval, capital and benchmark
Poll the same operation
NexusTrade toolquery_backtest_status
ReviewTerminal state and warnings; do not resubmit while running
Inspect the curve
NexusTrade toolquery_backtest_history
ReviewHistorical values for the returned backtest_id
Compare candidates
NexusTrade toolcompare_backtests
ReviewIdentical period and assumptions, with activity and risk
Inspect the tool operations for this experiment
Scroll sideways to compare all columns. Select a heading to sort.
| Validate a new candidate | build_portfolio | Canonical configuration and component issues; nothing is saved |
| Save the validated draft | create_portfolio | Use the reviewed configuration and retain the returned chat portfolio ID |
| Read the saved book | get_portfolio | Exact strategies, action sizing, and portfolio identity |
| Submit the historical test | backtest_portfolio | Explicit dates, interval, capital and benchmark |
| Poll the same operation | query_backtest_status | Terminal state and warnings; do not resubmit while running |
| Inspect the curve | query_backtest_history | Historical values for the returned backtest_id |
| Compare candidates | compare_backtests | Identical period and assumptions, with activity and risk |
No matching rows. Clear the filter to see all records.
Inspect the discovered inputs before submitting a call. For a new candidate, validate and save it first; for a saved candidate, start with get_portfolio. Record the portfolio and backtest identifiers returned by the account tools.
Inspect the completed curve and explain a rebalance
Poll query_backtest_status with the accepted backtest_id. PENDING or RUNNING means continue with that same ID. Resolve a reported ERROR before changing the experiment. Once complete, read query_backtest_history and follow pagination for the full period. Save the completed statistics and history with the rules and inputs.
Compare value with comparisonValue, then follow cash and positionValue around a rebalance or drawdown. With detailed events enabled, ask the client to read query_backtest_events and explain which condition fired, which stocks qualified, how weights changed and which orders filled. Keep the explanation tied to returned records.
Detailed signal traces
The original example used generate_events:false. A new generate_events:true test costs 5× research tokens; review that request before submitting it and read query_backtest_events while its three-day traces are retained.
Use the accepted backtest_id to poll query_backtest_status until complete. Then read query_backtest_history with that same ID, page 1 and page_size 500; follow all pages. Show the strategy and SPY curves, return, maximum drawdown and fees for 2025-01-02 through 2026-10-07. Explain one rebalance or drawdown using cash, holdings and recorded order events when available. Preserve the returned IDs and source fields in the experiment record. Keep polling the existing test rather than submitting another.Compare the other recorded periods
Each bar uses an exact recorded return through October 7, 2026. These are overlapping tests starting with $10,000. Both reinvest dividends; the candidate pays 0.1% per stock transaction and SPY pays no candidate commissions. Labels are rounded; the full table retains exact percentages.
Show the table · 3 rows, 6 columns
Scroll sideways to compare all columns. Select a heading to sort.
| 2025-01-02 | 44.80% | 33.99% | 24.33% | 49 | $24.15 |
| 2022-01-03 | 134.94% | 73.13% | 24.16% | 153 | $103.47 |
| 2014-01-02 | 340.90% | 419.23% | 24.16% | 422 | $331.98 |
No matching rows. Clear the filter to see all records.
The same rules also have completed runs starting in 2022 and 2014. Compare the full period table before selecting a variant; the long 2014 run returned less than SPY.
Inspect the longer recorded period
Portfolio value (USD)
- Five dividend growers 2026-10-07
- $44,089.69
- SPY buy and hold 2026-10-07
- $51,922.83
Five dividend growers: 22.80% largest decline in plotted observations. 2014-11-21 ($10,674.15) to 2015-08-25 ($8,240.24).
- Strategy return
- 340.90%
- SPY return
- 419.23%
- Maximum drawdown
- 24.16%
- Strategy fees
- $331.98
Recorded historical simulation: Jan 02, 2014 to Oct 07, 2026. Initial capital was $10,000.
These examined periods are development evidence. Historical S&P 500 membership at each date is not established by this receipt; the 2014 run is a retrospective simulation rather than proof of an investable selection.
Connect the Bot and keep writes behind approval
In Grok Bot, open Connect apps in the sidebar. If a NexusTrade connector is available, select Add, complete its browser authentication and attach it with @ in this task. For your existing or custom MCP connection, give the Bot the current NexusTrade endpoint below and ask it to complete OAuth discovery. This is a connection request; verify the returned tools and account before continuing.
For sign-in or two-factor authentication, open Agent Computer, take control, finish the sensitive step and return control. Browser sessions and command-line credentials are shared by your account's Bots. Keep the experiment notes in a named folder under /workspace.
Open Settings → General → Auto-review and add Ask first rules for paid research, backtests, portfolio changes and deployment. Review the exact inputs on the approval card and use Allow once for a single accepted operation. The published NexusTrade case study documents Grok Bot MCP and Python SDK use. The SDK guide provides a terminal route when the current connector cannot finish authentication; its API key is separate from MCP OAuth.
Connect this Grok Bot task to NexusTrade MCP at https://nexustrade.io/api/mcp using OAuth discovery. Complete the sign-in handoff with me, list discovered tools, then run only the account read check. Do not launch research or backtests, activate a portfolio or place orders.Check the account with an owned portfolio read
Ask the agent to call fetch_portfolios with the arguments below. Compare the returned portfolio names, IDs and types with your NexusTrade account. fetch_portfolios returns portfolioId; pass that exact value as portfolio_id to get_portfolio. Inspect the structured portfolio.portfolioId, portfolio.type, portfolio.isActive, portfolio.strategies, portfolio.initialValue and portfolio.deployment. For a new account, an authenticated empty list is a valid result.
This request excludes live books and positions, includes chat drafts and inactive paper books, and returns up to 50 records per page. Follow subsequent pages before concluding a named book is absent. If OAuth expired, reconnect and repeat this read. For a missing tool, inspect the included app, environment and action permissions. An account mismatch must be fixed before a write.
{
"include_live": false,
"include_paper": true,
"include_chat_portfolios": true,
"include_inactive": true,
"include_positions": false,
"limit": 50,
"page": 1
}Create one variant, then test unseen dates
Save a separate variant that changes only SelectTop.limit from five to ten. Keep the universe, dividend filter, weights, capital, fees, interval and development dates fixed. Record both configurations and their completed backtest IDs before comparing return, drawdown, holdings and turnover.
After choosing a candidate, freeze its configuration and decision criteria. The three displayed historical periods have already been inspected. Select another chronological period you have not used in the example, corpus search or variant selection, then evaluate the frozen candidate once. Keep further revisions in a new research cycle. An optional final lockbox follows the same rule.
Keep the recorded experiment
Save the exact configuration, draft ID, accepted backtest ID, inputs and completed result together. Reopen that record after a connection interruption and continue polling the accepted run. Before paper trading, review a separate paper draft and observe its actual deployed history.
Exact strategy configuration
Inspect the complete strategy JSON
{
"initialValue": 10000,
"supportsFractionalShares": true,
"dividendPolicy": "reinvest",
"strategies": [
{
"active": true,
"condition": {
"lhs": null,
"rhs": null,
"comparison": null,
"type": "Or",
"conditions": [
{
"lhs": {
"compound": false,
"targetAssets": [],
"type": "PortfolioValue"
},
"rhs": {
"compound": false,
"targetAssets": [],
"type": "InitialValue"
},
"comparison": "equal",
"type": "Base"
},
{
"lhs": {
"compound": false,
"targetAssets": [],
"side": "Buy",
"type": "DaysSinceOrder",
"orderStatus": "Filled"
},
"rhs": {
"compound": false,
"targetAssets": [],
"value": 30,
"type": "Value"
},
"comparison": "greaterThanOrEqual",
"type": "Base"
}
]
},
"action": {
"type": "DynamicRebalance",
"universe": {
"source": "SP500"
},
"pipeline": [
{
"type": "Filter",
"condition": {
"lhs": {
"compound": true,
"targetAssets": [],
"type": "ConsecutiveIncrease",
"maxLength": 1,
"period": "Year",
"lookback": 10,
"indicators": [
{
"compound": false,
"targetAsset": {
"type": "",
"symbol": ""
},
"targetAssets": [],
"type": "LastDividend"
}
]
},
"rhs": {
"compound": false,
"targetAssets": [],
"value": 10,
"type": "Value"
},
"comparison": "greaterThanOrEqual",
"type": "Base"
}
},
{
"type": "SelectTop",
"metric": {
"compound": false,
"targetAsset": {
"type": "",
"symbol": ""
},
"targetAssets": [],
"type": "Fundamental",
"metric": "marketCap"
},
"limit": 5,
"direction": "Highest"
}
],
"weightIndicator": {
"compound": false,
"targetAssets": [],
"value": 1,
"type": "Value"
},
"deploymentPercent": {
"compound": false,
"targetAssets": [],
"value": 100,
"type": "Value"
}
},
"orderExecution": {
"type": "Market"
},
"automaticOrderApproval": false
}
],
"name": "Five largest dividend growers",
"cash": 10000,
"buyingPower": 10000,
"supportsCrypto": false,
"alertsEnabled": false
}Chart range diagnostics
Inspect plotted ranges and their baseline
Five dividend growers plotted range
-18.18% to 48.99% from its first stored close.
SPY buy and hold plotted range
-15.08% to 35.08% from its first stored close.
Five dividend growers plotted range
-16.96% to 351.51% from its first stored close.
SPY buy and hold plotted range
-4.78% to 422.24% from its first stored close.

No comments yet.