TL;DR
This watchlist rule follows positive officer or director equity purchases made public within ninety days. Its October 2026 validation accepted the configuration but saved no producer and refreshed no list. The MannKind example meets the purchase criteria yet lies outside a later ninety-day SEC-publication window. After choosing to start maintenance, verify the separate paper producer, successful refresh and source availability before treating the members as current. Membership alerts are research leads rather than orders.
Recorded illustrations
Open the original receipt illustrations
Read a real purchase before building the list
Show the table · 4 rows, 3 columns
Scroll sideways to compare all columns. Select a heading to sort.
| Role and transaction | CEO/director; P; acquired A | Meets the officer/director purchase definition |
| Approximate disclosed value | 100,000 × $2.59 | $259,000; reported weighted-average price |
| Following direct shares | 2,575,911 | Do not add the spouse's 1,500 indirect shares as a second purchase |
| SEC filing date → October 12 | March 10 → October 12: 216 days | Outside a 90-day SEC-publication window; check the product's exact availableAt separately |
No matching rows. Clear the filter to see all records.
MannKind CEO and director Michael Castagna reported a March 10, 2026 common-stock purchase. The original Form 4 lists transaction code P, acquisition A, 100,000 shares and a $2.59 weighted-average price. This is a disclosed purchase, not a prediction or an executed NexusTrade list refresh.
The SEC index gives March 10 as the filing date, accepted at 21:30:02. A source purchase can meet role and transaction criteria while failing a later rolling public-availability window. Check the retained product's availableAt before reproducing an as-of list; transaction date alone does not determine membership.
Preview the exact maintained-list definition
The copied draft explains the source and notification choices and requests validation. Inspect all returned issues before saving or starting maintenance.
Define the maintained list separately from the source observation
The template follows disclosed insider purchases by officers or directors within a 90-day public-availability window. Its October 10 build_portfolio response validated the configuration. No saved producer, generated watchlist or refresh history was created by that preview.
Evidence result
A source record and a valid configuration establish what can be followed. They do not establish a maintained list's contents or investment performance.
After creation
Verify the returned producer and list identity, compare as-of contents with source availability, and inspect the first actual refresh before treating the list as maintained.
Choose what counts as an insider purchase
This example includes positive disclosed equity purchases by officers or directors that became publicly available within 90 days. It does not treat grants, every transaction on a Form 4, or the transaction date as a new public purchase signal. Add an exact ownerCik or issuerCik only when that narrower scope is intended.
- Open Watchlists in NexusTrade and inspect your existing lists before choosing a new name.
- Choose one stable producer key for this list; the key below belongs to its portfolio, not your entire account.
- Keep this first example producer-only. It contains no Buy, Sell or DynamicRebalance action.
What this example has actually verified
Show what this example has actually verified
On October 10, 2026, the complete insider draft below passed NexusTrade’s actual build_portfolio preview: valid true, no issues, nothing saved. That proves the configuration is accepted. It is not evidence that an insider list was refreshed, an alert was delivered, or a paper producer was activated.
Preview the complete producer before saving
Show preview the complete producer before saving
Copy this entire JSON into watchlist-draft.json. The strategy wrapper is name plus action; UpdateWatchlist takes no condition because it refreshes on each portfolio tick. initialValue is zero because this portfolio maintains a research list rather than allocating capital. The output starts with in-app membership alerts enabled, email off and Aurora briefs off.
In your connected MCP client, call build_portfolio with this exact object. Continue only when valid is true and issues is empty. Both published examples passed that real preview. build_portfolio saves nothing and does not invoke a text model; its validation receipt is not a quote for maintaining a deployed portfolio. Review account limits and any displayed plan or compute charge before activation.
{
"name": "Public guide preview - insider watchlist",
"initialValue": 0,
"strategies": [
{
"name": "Maintain insider-purchases",
"action": {
"type": "UpdateWatchlist",
"watchlistKey": "insider-purchases",
"source": {
"type": "InsiderPurchases",
"windowDays": 90,
"role": "OfficerOrDirector"
},
"output": {
"name": "Insider purchase research",
"purpose": "Review positive disclosed equity purchases by officers or directors within 90 days of public availability.",
"alertSettings": {
"onChange": true,
"inApp": true,
"email": false,
"briefCadence": "never"
}
}
}
}
],
"supportsCrypto": false,
"alertsEnabled": false
}Save once, then read the saved draft
Install the Python SDK and configure its documented account authentication first. This code saves the complete JSON as a chat draft and reads it back. Keep the same idempotency key when recovering an uncertain response; change the key only for a deliberately new draft. Saving does not create a running managed list.
import json
from pathlib import Path
from nexustrade import NexusTradeClient
client = NexusTradeClient.from_environment()
# Copy this complete JSON unchanged into watchlist-draft.json.
draft = json.loads(Path("watchlist-draft.json").read_text())
# Saving creates a chat draft, not a running paper producer.
saved = client.create_portfolio(
draft, idempotency_key="managed-insider-guide-v1"
)
chat_id = saved["portfolioId"]
readback = client.get_portfolio(chat_id)
assert readback["type"] == "chat"
assert readback["isActive"] is False
assert readback["strategies"][0]["action"]["source"] == draft["strategies"][0]["action"]["source"]
print(json.dumps(readback, indent=2))
# Stop here. Review the saved draft before deciding to deploy.Start maintenance only after reviewing the draft
No successful membership refresh recorded yet is an unconfirmed output, not a completed empty list. Portfolio needs attention or Portfolio status unavailable means inspect the producer. Coverage failure blocks new allocation rather than claiming a partial book is complete. The guide’s validation run stopped before saving or activation; these are instructions for your explicitly chosen continuation.
- Check the readback: type = chat, isActive = false, one UpdateWatchlist strategy and the exact source/window above.
- To maintain the list, explicitly deploy that reviewed draft to paper. With the SDK, use
deployment = client.deploy(chat_id, frequency="OpenClose"). This starts a paper producer; it is not another preview. OpenClose checks at market open and close, not once daily. - Save
paper_id = deployment["portfolioId"]; it differs from the chat draft ID. Readclient.get_portfolio(paper_id)and verify type = paper, isActive = true and the intended producer. - Open Watchlists after a successful producer tick. Select the named list and inspect Portfolio producer. Verify the intended portfolio, a successful membership refresh and the disclosed source before using the members.
- In MCP,
fetch_watchlists({"watchlist_ids": [], "asset_offset": 0})returns your lists. Match the name and managed = true, then use its returned watchlistId to scope subsequent reads. Follow nextAssetOffset when membership exceeds one page.
Review changes, pause safely and recover
A later DynamicRebalance consumer can use the committed list, but it introduces allocation rules and needs its own review. Backtests keep membership within the historical run; they do not publish the account’s durable watchlist. Subsequent edits to the list name, purpose and notifications remain authoritative.
- Compare added and removed symbols with their source filings. A membership alert is a research lead, not an order.
- Choose email and scheduled Aurora briefs separately in the list’s Notifications settings; save and reload to check persistence.
- To pause maintenance, call
client.undeploy(paper_id)with the verified paper ID. Read it back and confirm isActive = false. Keep the list/history for inspection. - If saving timed out, recover using the original idempotency key and read the draft. If deployment returned uncertainly, inspect existing paper portfolios before starting a second producer. Never create a duplicate producer to repair an unknown state.
No comments yet.