79 lines
3.9 KiB
Markdown
79 lines
3.9 KiB
Markdown
|
|
---
|
||
|
|
name: piker-fsp-expert
|
||
|
|
description: Piker financial signal processing expertise. Apply when changing or debugging FSP definitions, Cascade execution, derived shared-memory arrays, history/realtime handoff, backfill synchronization, FSP graph composition, online financial algorithms, or FSP chart lifecycle and scaling.
|
||
|
|
---
|
||
|
|
|
||
|
|
# Piker FSP Expertise
|
||
|
|
|
||
|
|
Treat financial signal processing as causal, revision-aware processing of
|
||
|
|
event-time market data, not as generic batch array manipulation.
|
||
|
|
|
||
|
|
## Start Here
|
||
|
|
|
||
|
|
1. Identify the source `Flume`, timeframe, event clock, and writer actor.
|
||
|
|
2. State whether the operation is historical bootstrap, backfill revision,
|
||
|
|
current-sample mutation, or sample-step append.
|
||
|
|
3. Record source and destination absolute SHM bounds before reasoning from
|
||
|
|
lengths or `ShmArray.index`.
|
||
|
|
4. Separate compute, SHM publication, IPC wakeup, and graphics costs before
|
||
|
|
optimizing.
|
||
|
|
5. Preserve causality, warm-up behavior, missing-data semantics, and output
|
||
|
|
schema in every implementation and test.
|
||
|
|
|
||
|
|
Read [architecture.md](architecture.md) before modifying runtime code. Read
|
||
|
|
[signal-processing.md](signal-processing.md) before adding an algorithm. Use
|
||
|
|
[roadmap-and-research.md](roadmap-and-research.md) for design and dependency
|
||
|
|
work, and [test-map.md](test-map.md) for verification.
|
||
|
|
|
||
|
|
## Core Contracts
|
||
|
|
|
||
|
|
- `piker.data` owns provider ingestion, source `Flume`s, history publication,
|
||
|
|
quote fan-out, OHLC mutation, and `samplerd` step events.
|
||
|
|
- `piker.fsp` owns operator declarations, historical computation, realtime
|
||
|
|
state updates, and destination SHM publication.
|
||
|
|
- `piker.ui._fsp.FspAdmin` currently owns FSP worker selection, destination
|
||
|
|
allocation, cascade lifetime, and chart attachment.
|
||
|
|
- One logical writer owns each destination FSP array.
|
||
|
|
- Output event time and absolute indices derive from the source series, not
|
||
|
|
task scheduling or quote arrival order.
|
||
|
|
- A source prepend changes historical provenance even when the current sample
|
||
|
|
index is unchanged. Recompute or patch the affected destination range.
|
||
|
|
- One-step destination lag is normal between source sampling and destination
|
||
|
|
append. A destination lead or unexplained bound shift is not.
|
||
|
|
- Backfill notifications are source and timeframe specific even though the
|
||
|
|
current sampler transport broadcasts them globally.
|
||
|
|
- Only graphics backed by a rebuilt destination should refresh. Never use an
|
||
|
|
FSP update as an unconditional whole-chart redraw request.
|
||
|
|
|
||
|
|
## Editing Workflow
|
||
|
|
|
||
|
|
1. Trace the operator from `@fsp` declaration through `cascade()`,
|
||
|
|
`connect_streams()`, destination SHM, `FspAdmin`, and every consuming
|
||
|
|
`Viz`.
|
||
|
|
2. Write an event-order table covering source writes, bound publication,
|
||
|
|
notifications, cancellation, recomputation, and destination publication.
|
||
|
|
3. Add deterministic tests for history and realtime phases independently.
|
||
|
|
4. Add a controlled interleaving test for every race fix.
|
||
|
|
5. Profile representative visible ranges and feed rates before adding a
|
||
|
|
dependency or native boundary.
|
||
|
|
|
||
|
|
## Companion Skills
|
||
|
|
|
||
|
|
- Use `piker-conc-expert` for Tractor contexts, actor topology, cancellation,
|
||
|
|
service ownership, and cross-actor state.
|
||
|
|
- Use `timeseries-optimization` for NumPy/Polars lookup and vectorization.
|
||
|
|
- Use `piker-profiling` for distributed performance measurements.
|
||
|
|
- Use `pyqtgraph-optimization` for renderer and graphics batching work.
|
||
|
|
- Use `piker-clearing-expert` when a derived signal reaches EMS or accounting.
|
||
|
|
|
||
|
|
## Do Not
|
||
|
|
|
||
|
|
- Do not hide a historical mismatch merely to stop a resync log.
|
||
|
|
- Do not infer a complete synchronization state from array length alone.
|
||
|
|
- Do not run Python loops over historical numeric arrays without evidence.
|
||
|
|
- Do not apply regular-grid DSP blindly to irregular tick arrival times.
|
||
|
|
- Do not introduce an external stream runtime that duplicates Tractor before
|
||
|
|
measuring an isolated protocol or kernel prototype.
|
||
|
|
- Do not route strategy signals directly around EMS order-state, risk, or
|
||
|
|
accounting contracts.
|