
Introducing Signal Stream
Signal Stream Client
Signal Stream lets you run a server, local or hosted, that receives open Astronomer trading signals as they are created.
Signals are only sent live, so keep your server up through signal delivery hours (10:00 AM to 3:00 PM Eastern on weekdays) or catch anything you miss on the Astronomer website.
Install
npm install @astronomer-app/signals
The examples below use TypeScript. Python, Go, and Rust examples are coming soon.
Run A Server
Put your Signal Stream key in an environment variable:
ASTRONOMER_SIGNAL_STREAM_KEY=ast_live_...
Create the client and open the connection. The process stays alive and handles signals as they arrive:
import { AstronomerSignals } from '@astronomer-app/signals';
const client = new AstronomerSignals({
apiKey: process.env.ASTRONOMER_SIGNAL_STREAM_KEY!,
});
const listener = client.signals.listen({
onSignal(event) {
console.log(event.signal);
},
onError(error) {
console.error(error);
},
});
process.on('SIGINT', async () => {
await listener.close();
process.exit(0);
});
What A Signal Contains
Each event wraps the signal that triggered it:
{
"type": "signal.created",
"createdAt": "2026-06-18T11:00:00",
"signal": {
"id": "209",
"symbol": "SPY",
"optionType": "C",
"strikePrice": 746,
"openedAt": "2026-06-18T11:38:00"
}
}
The symbol, optionType, and strikePrice fields name a single option contract, which is everything you need to build an order.
Place Orders Automatically
Since each signal fully describes a contract, you can submit an order straight from the onSignal callback.
const listener = client.signals.listen({
async onSignal({ signal }) {
try {
await broker.placeOptionOrder({
symbol: signal.symbol,
right: signal.optionType,
strike: signal.strikePrice,
side: 'buy',
quantity: 1,
type: 'limit',
limitPrice: 1.5,
});
} catch (error) {
console.error(`Order failed for signal ${signal.symbol}:`, error);
}
},
onError(error) {
console.error(error);
},
});
In the example broker is your broker's SDK, such as Alpaca, Interactive Brokers, etc.
You can also integrate this flow into your IRA accounts on ETrade, or Thinkorswim. We will cover all integrations in separate blog posts.