export type StrategyMode = 'backtest' | 'paper' | 'live';
export interface StrategyMarketContext {
    price(instrument: string): Promise<number>;
    fundingRate(instrument: string): Promise<number>;
    ohlcv?(instrument: string, days?: number): Promise<readonly number[]>;
}
export interface StrategySignalContext {
    mode: StrategyMode;
    now: Date;
    market: StrategyMarketContext;
}
export interface StrategyRisk {
    maxNotionalUsd?: number;
    maxDrawdownPct?: number;
    killSwitch?: boolean;
    [key: string]: unknown;
}
export interface StrategySchedule {
    every: string;
    [key: string]: unknown;
}
export interface StrategyDefinition<TSignal = unknown, TContext extends StrategySignalContext = StrategySignalContext> {
    name: string;
    universe: readonly string[];
    signal(ctx: TContext): TSignal | null | Promise<TSignal | null>;
    risk?: StrategyRisk;
    schedule?: StrategySchedule;
    metadata?: Record<string, unknown>;
}
/**
 * defineStrategy is the stable author-facing DSL entry point. The runtime is
 * still evolving, but package consumers can already import this helper to
 * validate and type a strategy artifact consistently.
 */
export declare function defineStrategy<TSignal = unknown, TContext extends StrategySignalContext = StrategySignalContext>(strategy: StrategyDefinition<TSignal, TContext>): Readonly<StrategyDefinition<TSignal, TContext>>;
