TL;DR
A custom signal needs timestamp and value, plus ticker for asset scope and an explicit account of when each value became available. Observations, period aggregates and disclosures have different timing rules. Create the dataset, inspect saved rows and content version, then confirm its promoted indicator before using it in a strategy. The worked Friday flag is a two-row calendar example, not evidence of a profitable trading signal.
Follow one worked path
Inspect the teaching rows
Use the exact calendar example below. Friday=1 and Monday=0 are teaching observations, not market prices or a profitable signal.
The example declares its row shape and public-availability semantics explicitly.
Create the dataset deliberately
Review the complete request and target dataset before submission. Keep observation, aggregate and disclosed timing consistent with the source.
A successful response identifies your dataset and content version. Another person's identifier cannot address your dataset.
Create the same dataset
Connect your MCP client, call create_dataset with this JSON and save the response. indicator_name requests promotion; global scope omits ticker. For an asset-scoped signal, use scope asset and a ticker on every row. Keep observation, aggregate and disclosed timing declarations consistent with the source.
- 2024-01-05 00:00
- Value: 1 · Meaning: Friday
- 2024-01-08 00:00
- Value: 0 · Meaning: Monday
The actual stored rows and version agree with the intended request. Restore or append only after checking the current saved head.
{
"name": "Public SEO example - calendar permission",
"description": "Teaching calendar flag: Friday=1, Monday=0. This is a deterministic calendar example, not market data or a trading forecast.",
"request": "Manual calendar dates verified with Python datetime.weekday; no financial source or private account data.",
"indicator_name": "Public SEO example - Friday calendar flag",
"point_kind": "observation",
"scope": "global",
"rows": [
{
"timestamp": "2024-01-05T00:00:00.000Z",
"value": 1,
"row_id": "calendar-2024-01-05"
},
{
"timestamp": "2024-01-08T00:00:00.000Z",
"value": 0,
"row_id": "calendar-2024-01-08"
}
]
}Inspect the complete workflow outline
The calendar dataset we saved
Show the table · 2 rows, 3 columns
Scroll sideways to compare all columns. Select a heading to sort.
| 2024-01-05 00:00 | 1 | Friday |
| 2024-01-08 00:00 | 0 | Monday |
No matching rows. Clear the filter to see all records.
We created this dedicated teaching dataset in NexusTrade on October 10, 2026. Its value is a Friday calendar flag: 1 on Friday, 0 on Monday. These are calendar observations, not prices, model predictions or a claim that Fridays produce profitable trades. The dates were checked with Python datetime.weekday.
The product saved two signal rows and promoted a global indicator. get_dataset returned status ready, rowCount 2 and contentVersion 2. The saved samples had availableAt equal to timestamp for these observation points. No portfolio uses this demonstration, and creating it placed no order.
Create the same dataset
Connect your MCP client, call create_dataset with this JSON and save the response. indicator_name requests promotion; global scope omits ticker. For an asset-scoped signal, use scope asset and a ticker on every row. Keep observation, aggregate and disclosed timing declarations consistent with the source.
{
"name": "Public SEO example - calendar permission",
"description": "Teaching calendar flag: Friday=1, Monday=0. This is a deterministic calendar example, not market data or a trading forecast.",
"request": "Manual calendar dates verified with Python datetime.weekday; no financial source or private account data.",
"indicator_name": "Public SEO example - Friday calendar flag",
"point_kind": "observation",
"scope": "global",
"rows": [
{
"timestamp": "2024-01-05T00:00:00.000Z",
"value": 1,
"row_id": "calendar-2024-01-05"
},
{
"timestamp": "2024-01-08T00:00:00.000Z",
"value": 0,
"row_id": "calendar-2024-01-08"
}
]
}Read your saved rows
Replace YOUR_DATASET_ID with the response's datasetId, then call get_dataset. The response field is datasetId; the read argument is dataset_id. Verify name, status, rowCount and head/tail samples. Keep the returned customIndicatorId if you later author a CustomIndicator; another reader's identifier cannot address your own dataset.
Our actual saved samples were timestamp/value/row_id plus a materialized availableAt. The initial upload was version 1; availability materialization produced version 2. Do not assume a successful create always leaves contentVersion 1.
{
"dataset_id": "YOUR_DATASET_ID"
}Choose the row shape
A signal uses timestamp and value, with ticker for asset scope and row_id for distinct same-time records. Generic tables remain datasets; they are not automatically signal indicators. Name the indicator after what value actually measures, such as disclosed dollars instead of an unexplained binary.
Set when each value became available
observation is a point available at timestamp. period_aggregate becomes available at the end of its declared period. disclosed requires every row to carry availableAt because the event happened before its publication. Declaring timing prevents a research model from reading a fact before it was public.
Supported aggregate periods are 1min, 1d, 1w, 1mo and 1q. A minute aggregate uses an explicit-zone bar-open timestamp and becomes available at bar close.
Save and check the indicator
Create the dataset using the supported create_dataset tool or the custom-data interface. Supply indicator_name only when you intend promotion, and set scope and point_kind deliberately. The validator rejects invalid signal rows before they can be used for research.
After creation, pass the returned datasetId as dataset_id to get_dataset to inspect metadata and head/tail samples. Check the timestamp, value and ticker fields against the intended signal. Use list_custom_indicators to confirm the promoted indicator's ID, point count and scope. If promotion fails, read the validation error and correct the row shape or availability declaration before resubmitting. Inspect the saved rows and version before referencing the indicator in a strategy. Account-specific dataset bytes stay private; this guide publishes the workflow only.
No comments yet.