feat: strategy builder

This commit is contained in:
OpenSquared
2026-07-30 13:51:15 +02:00
parent 81165581d7
commit d85c0348d8
3 changed files with 58 additions and 16 deletions

View File

@@ -1822,12 +1822,12 @@ export const DEFAULT_GREEK_PROFILE: GreekProfile = {
export const useOptionChainSlice = (
symbol: string, horizonDays: number, nExpiries = 3, enabled = true,
dteMin?: number | null, dteMax?: number | null,
dteMin?: number | null, dteMax?: number | null, asOf?: string | null,
) =>
useQuery<ChainSlice>({
queryKey: ['strategy-builder-chain', symbol, horizonDays, nExpiries, dteMin, dteMax],
queryKey: ['strategy-builder-chain', symbol, horizonDays, nExpiries, dteMin, dteMax, asOf],
queryFn: () => api.get('/strategy-builder/chain', {
params: { symbol, horizon_days: horizonDays, n_expiries: nExpiries, dte_min: dteMin ?? undefined, dte_max: dteMax ?? undefined },
params: { symbol, horizon_days: horizonDays, n_expiries: nExpiries, dte_min: dteMin ?? undefined, dte_max: dteMax ?? undefined, as_of: asOf || undefined },
}).then(r => r.data),
enabled: enabled && !!symbol,
staleTime: 30_000,
@@ -1845,11 +1845,14 @@ export const usePriceStrategy = () =>
// can't be built right now (e.g. calendar/diagonal with only one real expiry available)
// is simply absent from the response.
export type StrategyPreset = { key: string; label: string; n_legs: number; legs: StrategyLeg[] }
export const usePresets = (symbol: string, horizonDays: number, enabled: boolean, dteMin?: number | null, dteMax?: number | null) =>
export const usePresets = (
symbol: string, horizonDays: number, enabled: boolean,
dteMin?: number | null, dteMax?: number | null, asOf?: string | null,
) =>
useQuery<StrategyPreset[]>({
queryKey: ['strategy-builder-presets', symbol, horizonDays, dteMin, dteMax],
queryKey: ['strategy-builder-presets', symbol, horizonDays, dteMin, dteMax, asOf],
queryFn: () => api.get('/strategy-builder/presets', {
params: { symbol, horizon_days: horizonDays, dte_min: dteMin ?? undefined, dte_max: dteMax ?? undefined },
params: { symbol, horizon_days: horizonDays, dte_min: dteMin ?? undefined, dte_max: dteMax ?? undefined, as_of: asOf || undefined },
}).then(r => r.data),
enabled: enabled && !!symbol,
staleTime: 30_000,