Explore more topics
AI trading workflows

Paper trade with Meta Muse

Preview this exact candidate, review a separate Paper deployment, then inspect and pause the running book.

As of 2026-10-10

Jump to a section

TL;DR

Connect Muse to NexusTrade, validate the SPY rules and deploy a separate paper portfolio only after reviewing its identity and settings. The example enters with 20% of portfolio value above a 50 day average and exits at or below it. October 10, 2026 validation produced no forward paper history. Inspect simulated orders manually and request a read of the running book; a conversational reminder does not establish a saved recurring task.

Create and monitor a separate paper deployment

  1. Preview the candidate

    NexusTrade tool

    build_portfolio

    Identity boundary

    Review the canonical configuration and fix validation issues before saving

  2. Author the candidate

    NexusTrade tool

    create_portfolio

    Identity boundary

    A newly authored chat portfolio, not an existing live account

  3. Inspect the target

    NexusTrade tool

    get_portfolio

    Identity boundary

    Read the exact returned ID and strategies before activation

  4. Deploy the chat book

    NexusTrade tool

    update_portfolio

    Identity boundary

    operations: [{type: "deploy", portfolioId: returnedChatId}] creates paper

  5. Find the running book

    NexusTrade tool

    fetch_portfolios

    Identity boundary

    Keep the resulting deployment ID separately from the original chat/draft ID

  6. Read actual paper history

    NexusTrade tool

    query_portfolio_history

    Identity boundary

    The deployed portfolio curve; never substitute a backtest curve

Show the table · 6 rows, 3 columns

Scroll sideways to compare all columns. Select a heading to sort.

Preview the candidatebuild_portfolioReview the canonical configuration and fix validation issues before saving
Author the candidatecreate_portfolioA newly authored chat portfolio, not an existing live account
Inspect the targetget_portfolioRead the exact returned ID and strategies before activation
Deploy the chat bookupdate_portfoliooperations: [{type: "deploy", portfolioId: returnedChatId}] creates paper
Find the running bookfetch_portfoliosKeep the resulting deployment ID separately from the original chat/draft ID
Read actual paper historyquery_portfolio_historyThe deployed portfolio curve; never substitute a backtest curve

Deploying an existing live portfolio ID can reactivate real brokerage trading. For this workflow use the newly authored chat candidate and verify the returned deployment is paper. The SDK also separates saved draft IDs from deployment.portfolioId.

Validated example: SPY entry and exit

Starting capital
$10,000

NexusTrade validation recorded October 10, 2026 returned valid:true with no issues. This preview saved nothing and has no forward Paper history.

  1. Entry

    Buy 20% of the portfolio in SPY whenever SPY's price is above its 50-day average price and the portfolio holds no SPY.

  2. Exit

    Sell 100% of the current SPY position whenever SPY's price is at or below its 50-day average price and the portfolio holds SPY.

  3. Rule decision example

    Hypothetical: SPY at $110, its 50-day average at $100, no SPY held, and a $10,000 portfolio. The entry proposes $2,000 of SPY before whole-share rounding and execution costs.

  4. Exit and equality

    At price equal to the average, entry is false; with a holding, the exit passes because its comparison includes equality.

Try this example in Meta Muse

Inspect the request

Connect Meta Muse, then copy the request below. Review the returned result before continuing.

Ask Muse to create the NexusTrade custom connector

Open a Muse personal-agent conversation and send the connection request below. Meta documents creating a Custom Connector by asking Muse in chat. Follow its authentication handoff and sign in to the intended NexusTrade account; review access before consent. Use the secure credential flow if requested, and keep passwords and tokens out of chat.

Discover the actual NexusTrade tools after authentication. Keep approval for portfolio changes and paid tests in Muse Settings; manage or disconnect the connection under Settings → Connectors. After Muse creates the connector, run the account read below before asking it to work with your portfolio.

Create a Custom Connector named NexusTrade using the Streamable HTTP MCP URL https://nexustrade.io/api/mcp. Use server OAuth discovery and guide me through sign-in. List the tools after authentication. Start with read-only owned portfolio access; do not run research jobs, backtests, edit portfolios, deploy 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.

JSON
{
  "include_live": false,
  "include_paper": true,
  "include_chat_portfolios": true,
  "include_inactive": true,
  "include_positions": false,
  "limit": 50,
  "page": 1
}

Freeze one SPY candidate

Proposed mechanics example: one long-only SPY 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 SPY 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.

Prompt
Draft exactly one new chat portfolio named "Meta Muse SPY SMA50 review" with initialValue 10000. Use daily SPY 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.

Approve one paper-copy operation

Read the newly created chat portfolio again and confirm its type, $10,000 simulated capital and complete strategy pair. Keep the saved draft ID and any historical backtest ID in separate fields. After you approve activation, call update_portfolio with only the chat ID below. Deploying that chat candidate creates a paper book; targeting an existing live portfolio can reactivate real brokerage trading.

Record the returned deployment result, then use fetch_portfolios with include_paper=true, include_live=false and include_chat_portfolios=false to find the deployed book. Read its exact ID with get_portfolio and verify paper type, copied strategies and state. Keep the running paper ID separately from the original chat ID. Inspect its evaluation state after the copy, even if the approval succeeded.

JSON
{
  "operations": [
    {
      "type": "deploy",
      "portfolioId": "<RETURNED_CHAT_PORTFOLIO_ID>"
    }
  ]
}

Confirm evaluation and the first paper record

Open /portfolio/<RETURNED_PAPER_PORTFOLIO_ID> in NexusTrade. Review the Deployment Center on that paper book. Its Automated Trading switch controls strategy evaluation. If it is off and you choose to begin evaluation, enable it for this verified paper target and select Save Changes. Read back the same portfolio and its active state before reporting it running. This is separate from the live-only Autonomous Trading approval policy; paper orders remain on manual review. When a simulated order is pending approval, open Order Management, select Paper, inspect the portfolio, symbol, side and size, then choose Confirm only after review. Read its order state and paper history before claiming a fill.

Keep SPY, the 50-day rule, 20% entry allocation and $10,000 initial value fixed during observation. Read the actual deployment frequency: the Day historical interval and a Day indicator window do not set paper cadence. Constant and OpenClose are different evaluation schedules; OpenClose evaluates at both open and close. Record that frequency, when evaluation began and what data was available. Paper behavior is simulated forward execution. A historical curve remains a separate artifact.

Monitor the deployed curve, not a replay

Use query_portfolio_history with the exact paper ID below and actual observation dates when applying filters. The expected result identifies the deployed portfolio and paper kind and returns {time, value} points. Follow pagination; an empty first result can mean no history yet. Check evaluation state, market timing and the same ID before diagnosing failure.

Keep a journal of signal, simulated order, holding, cash and history timestamps from the available portfolio and event tools. If the rule does not trade, report that observation. Do not invent a fill or launch a backtest to make the paper curve appear.

JSON
{
  "portfolio_id": "<RETURNED_PAPER_PORTFOLIO_ID>",
  "page": 1,
  "page_size": 500
}

Ask Muse for the next SPY observation

Run the first observation as a single read-only task in Muse. Ask for the verified SPY paper ID, its type and latest history timestamp, then compare the configured 50-day rule with the saved candidate. Keep Muse's connector approval rules on for writes. A conversational reminder should not be treated as proof that a server-side recurring observation was saved.

For each follow-up, reuse the same paper ID and request the new history interval. If authentication expired, reconnect the custom connector and repeat the owned read before resuming. Review the actual tool output; the agent's summary alone cannot verify an activation or simulated fill.

Prompt
Read my verified SPY paper portfolio <RETURNED_PAPER_PORTFOLIO_ID> using the NexusTrade connector. Show paper type, copied strategy names, evaluation state and latest query_portfolio_history timestamp/value. Compare with my previous observation and report new simulated activity only when the tools establish it. Do not activate another copy, change rules, run a backtest or place broker orders.

Recover or stop without a duplicate activation

If the deploy response is missing, read the original draft, list paper books including inactive ones and compare the copied strategy set and creation record. Reuse the existing paper ID when found. An ambiguous timeout is not permission to issue another deploy operation; reconcile the task and account first.

To stop strategy evaluation, turn Automated Trading off in that paper book’s Deployment Center and select Save Changes. Read the same ID and policy to verify the stop. update_portfolio also exposes undeploy for the verified deployed ID when you explicitly choose to stop that deployment. Review existing simulated orders and holdings separately; stopping evaluation does not mean liquidation.

Stopping the external agent or canceling its observation schedule is separate from stopping the NexusTrade book. Save the final paper ID and its observed state before ending the assignment.

Stop this paper deployment and verify its state

After approving a stop, send this update_portfolio request only for the verified running paper ID. Read get_portfolio again and check portfolio.type is paper and portfolio.isActive is false. Retain the ID and history; undeploy is different from delete. Confirm the trading policy separately if you changed Automated Trading in the UI.

JSON
{
  "operations": [
    {
      "type": "undeploy",
      "portfolioId": "<RETURNED_PAPER_PORTFOLIO_ID>"
    }
  ]
}

Exact validation request and provenance

Inspect the complete paper-candidate JSON and validation provenance

On October 10, 2026, we constructed this complete SPY configuration with the NexusTrade Python SDK and sent it to the product's build_portfolio tool. It returned valid: true and an empty issues list. The returned rules are summarized below; generated identifiers and editor metadata are omitted.

The preview saved nothing. Inspect these accepted rule definitions before creating your own paper draft. Copy the complete request below into build_portfolio to inspect the same candidate before saving it.

The entry sizes from total portfolio value, rather than remaining cash. Its zero-position guard prevents repeated purchases while held. The exit closes the current holding, rather than selling a percentage of total account value. The request specifies its dividend policy; the preview's compact result does not repeat every portfolio setting, so confirm those settings after saving.

Product responseObserved value
Validationvalid: true; issues: []
CapitalinitialValue: 10000
EntryBuy 20% of the portfolio in SPY whenever SPY's price is above its 50-day average price and the portfolio holds no SPY.
ExitSell 100% of the current SPY position whenever SPY's price is at or below its 50-day average price and the portfolio holds SPY.
Order approvalautomaticOrderApproval: false on both returned rules
PersistenceNothing was saved
JSON
{
  "name": "Public SEO example - meta-muse SPY SMA50",
  "initialValue": 10000,
  "cash": 10000,
  "buyingPower": 10000,
  "strategies": [
    {
      "name": "Enter while flat",
      "condition": {
        "type": "And",
        "conditions": [
          {
            "type": "Base",
            "lhs": {
              "type": "Price",
              "targetAsset": {
                "type": "Stock",
                "symbol": "SPY",
                "name": "SPY"
              }
            },
            "comparison": "greaterThan",
            "rhs": {
              "type": "SimpleMovingAverage",
              "targetAsset": {
                "type": "Stock",
                "symbol": "SPY",
                "name": "SPY"
              },
              "window": {
                "length": 50,
                "interval": "Day"
              }
            }
          },
          {
            "type": "Base",
            "lhs": {
              "type": "PositionValue",
              "targetAssets": [
                {
                  "type": "Stock",
                  "symbol": "SPY",
                  "name": "SPY"
                }
              ]
            },
            "comparison": "equal",
            "rhs": {
              "type": "Value",
              "value": 0
            }
          }
        ]
      },
      "action": {
        "type": "Buy",
        "targetAsset": {
          "type": "Stock",
          "symbol": "SPY",
          "name": "SPY"
        },
        "amount": {
          "type": "percent of portfolio",
          "amount": 20
        }
      },
      "orderExecution": {
        "type": "Market"
      }
    },
    {
      "name": "Exit held position",
      "condition": {
        "type": "And",
        "conditions": [
          {
            "type": "Base",
            "lhs": {
              "type": "Price",
              "targetAsset": {
                "type": "Stock",
                "symbol": "SPY",
                "name": "SPY"
              }
            },
            "comparison": "lessThanOrEqual",
            "rhs": {
              "type": "SimpleMovingAverage",
              "targetAsset": {
                "type": "Stock",
                "symbol": "SPY",
                "name": "SPY"
              },
              "window": {
                "length": 50,
                "interval": "Day"
              }
            }
          },
          {
            "type": "Base",
            "lhs": {
              "type": "PositionValue",
              "targetAssets": [
                {
                  "type": "Stock",
                  "symbol": "SPY",
                  "name": "SPY"
                }
              ]
            },
            "comparison": "greaterThan",
            "rhs": {
              "type": "Value",
              "value": 0
            }
          }
        ]
      },
      "action": {
        "type": "Sell",
        "targetAsset": {
          "type": "Stock",
          "symbol": "SPY",
          "name": "SPY"
        },
        "amount": {
          "type": "percent of current positions",
          "amount": 100
        }
      },
      "orderExecution": {
        "type": "Market"
      }
    }
  ],
  "supportsFractionalShares": false,
  "supportsCrypto": false,
  "alertsEnabled": false,
  "dividendPolicy": "reinvest"
}

Compare a historical example

Continue exploring

Discussion

Sign in or create a free account to join the discussion.

No comments yet.

Aurora · AI research assistant

Try this in Aurora

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