1. Connect the NexusTrade app your dot will use
Open Plugins in ChatGPT, inspect the NexusTrade plugin if it is listed, and connect its included app through NexusTrade OAuth. On mobile, your dot's profile → Customize → Plugins opens shared settings. Your dot uses the connected account's enabled plugins and allowed actions.
For a private remote MCP connection, eligible ChatGPT web accounts use Settings → Apps → Advanced Settings → developer mode, then Settings → Apps → Create (or an administrator's Workspace settings → Apps → Create). Name it NexusTrade, choose OAuth, enter the URL below, select Scan Tools, finish sign-in and select Create. Full action access depends on the plan, workspace role and administrator settings; read/fetch access alone cannot submit a backtest or deploy a paper book.
Install Plugin Creator, mention @plugin-creator in a chat and ask it to include the connected NexusTrade app in a private research plugin. Review the app and instructions, finish creation and install it. In your dot, select that plugin for this task and perform the read check below. A plugin containing only instructions has no account tools.
NexusTrade MCP URL: https://nexustrade.io/api/mcp
Authentication: OAuth
Include the connected NexusTrade app, then verify owned portfolio reads before enabling actions.2. 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. Public stock commentary does not establish account access.
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
}3. Freeze AMD memo follow-up
Proposed mechanics example: one long-only AMD stock strategy pair, $10,000 starting simulated capital and a 50-trading-day simple moving average. The historical example uses interval Day. Enter only while flat when price is above that average; buy 20% of portfolio value. Exit the entire AMD holding when price is at or below the same average. Keep the remainder in cash; use no leverage, options or parameter search.
Have the agent show the complete condition and action objects, then call build_portfolio with that full JSON to validate and canonicalize without saving. Review valid, issues and the returned portfolio. Correct each reported issue before approving create_portfolio with the same accepted JSON. The flat-position guard prevents another purchase on every evaluation while the condition stays true. Record how the configuration handles missing prices, warmup and evaluation timing. These are proposed inputs, not a recommended allocation or a tested trading edge.
Draft exactly one new chat portfolio named "OpenAI Dots AMD SMA50 review" with initialValue 10000. Use daily AMD prices and a SimpleMovingAverage window of 50 Day bars. Entry: price > SMA50 AND held PositionValue = 0; buy 20% of portfolio value. Exit: price <= SMA50 AND held PositionValue > 0; sell 100% of that holding. No options, leverage or repeated purchases while held. Show the full condition/action configuration and the dividend policy. Call build_portfolio with the full JSON; inspect valid, issues and the canonicalized portfolio without saving. After I approve saving, call create_portfolio with the same accepted JSON, preserve portfolios[0].portfolioId and read that exact ID with get_portfolio. Do not backtest or deploy yet.4. Review the fixed historical request before submitting
Use January 1, 2021 through December 31, 2023 as the initial inspection window and AMD buy-and-hold as the baseline. The explicit stock fee is 0.1% of transaction notional. That fee is not a promise that spreads, slippage or live fills are reproduced. Inspect the result warnings and execution assumptions; this example adds no invented slippage parameter.
Use dividend_policy=cash and record that choice for both runs. For SPY, reinvest makes the candidate dividend treatment comparable with the total-return baseline. For a single stock, check the baseline dividend conventions before treating excess return as an identical dividend comparison.
Replace the placeholder with the exact saved chat ID, then approve one backtest_portfolio call. MCP submits the operation when called; it has no separate NexusTrade approval screen. Client approval must happen before the call.
{
"portfolio_id": "<RETURNED_CHAT_PORTFOLIO_ID>",
"start_date": "2021-01-01",
"end_date": "2023-12-31",
"baseline_symbol": "AMD",
"interval": "Day",
"initial_value": 10000,
"generate_events": false,
"fee_config": {
"Stock": {
"amount": 0.1,
"type": "percent"
}
},
"dividend_policy": "cash"
}The tool sequence
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.
| 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.
5. Read the accepted backtest and its warnings
Save the accepted ID from the backtest response and use backtest_id in query_backtest_status. PENDING or RUNNING means keep polling that ID. ERROR needs its error and configuration reviewed. Only after the completed status should query_backtest_history supply historical time, value, cash, positionValue and comparisonValue points.
Read the result for the saved configuration and dates. Use status and analysis to inspect return, drawdown, activity and warnings. Inspect a no-trade run before calling it successful: warmup, missing data or conditions may explain it. Missing reservedCollateral on an older run means not recorded, not zero. History retention is limited; keep the report while it is available.
If submission returns no visible ID, inspect the task transcript and the existing backtest record before repeating the call. A polling failure does not establish that submission failed. Preserve the accepted operation identity across connection repair.
Poll query_backtest_status with backtest_id equal to the accepted ID. If it is completed, call query_backtest_history with the same backtest_id, page 1 and page_size 500; follow pagination for the full requested period. Return configuration, cost assumptions, benchmark, drawdown, trades and every warning. Label the output historical simulation. Do not infer missing values or launch a replacement run.6. Reserve a separate evaluation window without revising the rule
Keep the exact saved rule and cost settings. A proposed second window is January 1, 2024 through December 31, 2025, with the same capital, interval, baseline and dividend policy. Submit that second run only after separate approval and retain its own backtest ID. Compare both records, including activity and drawdown.
Those dates are already public history. They count as a held-out evaluation only if the decision-maker has not inspected that rule on them before freezing it. If the agent or reviewer already saw those results, call it retrospective validation and reserve future paper observation instead. One candidate means a budget of one; any revised threshold is a new candidate that must be disclosed.
The 2026 AMD filing brief is useful current research, but none of its later facts may enter these earlier price-only tests. Historical returns cannot establish whether the earnings thesis will predict future prices.
Keep the experiment record in the dot task
Store the original strategy ID, both backtest IDs, inputs and review decision with your AMD memo. Open the task under Activity to inspect its output. A recurring memo update must not start another test or change the frozen rule. Keep Ask before taking action for compute and writes in Custom rules.