import { z } from 'zod';
import { TimeframeSchema, LimitSchema } from './base.schema.js';
export const FindTASignalsSchema = z.object({
quoteAsset: z.string().default('USDT'),
minVolume: z.number().nonnegative().default(50000),
timeframe: TimeframeSchema.default('1h'),
minConfidence: z.number().int().min(0).max(100).default(60),
maxPairs: LimitSchema.default(50)
});
export const ScanSpreadsSchema = z.object({
quoteAsset: z.string().default('USDT'),
minVolume: z.number().nonnegative().default(50000),
minSpread: z.number().min(0).max(100).default(0.1),
maxPairs: LimitSchema.default(50)
});
export const ScanBestOpportunitiesSchema = z.object({
quoteAsset: z.string().default('USDT'),
minVolume: z.number().nonnegative().default(100000),
timeframe: TimeframeSchema.default('1h'),
minTAConfidence: z.number().int().min(0).max(100).default(60),
minSpread: z.number().min(0).max(100).default(0.15),
maxResults: z.number().int().min(1).max(20).default(10)
});
export const AnalyzeSymbolTASchema = z.object({
symbol: z.string().regex(
/^[A-Z0-9]+\/[A-Z0-9]+(:[A-Z0-9]+)?$/,
'Symbol must be BASE/QUOTE (spot) or BASE/QUOTE:SETTLE (perpetual)'
),
timeframe: TimeframeSchema.default('1h'),
limit: LimitSchema.default(100)
});
export const GetIndicatorSchema = z.object({
symbol: z.string().regex(
/^[A-Z0-9]+\/[A-Z0-9]+(:[A-Z0-9]+)?$/,
'Symbol must be BASE/QUOTE (spot) or BASE/QUOTE:SETTLE (perpetual)'
),
indicator: z.enum(['rsi', 'macd', 'ema', 'bollinger', 'stochastic']),
timeframe: TimeframeSchema.default('1h'),
period: z.number().int().min(2).max(200).optional()
});