@gabriel3615/ta_analysis
Version:
stock ta analysis
312 lines (311 loc) • 8.99 kB
TypeScript
import type { TrendReversalSignal } from './analysis/analyzer/trendReversal/multiTimeFrameTrendReversal.js';
import type { PatternDirection } from './analysis/basic/patterns/analyzeMultiTimeframePatterns.js';
export type Position = {
quantity: number;
price: number;
};
export type Weight = {
regularMarketPrice: number;
regularMarketChangePercent: number;
volumeRatio: number;
sharesOutstanding: number;
breakoutStrength: number;
};
export type AnalysisObject = {
stockCode: string;
historicalPrices: string;
userCapital: number;
fundamentalData: string;
imagesData?: ChartImg[];
position?: Position;
};
export interface PatternResult {
date: Date;
patternType: PatternDirection.Bullish | PatternDirection.Bearish;
priceLevel: number;
strength: number;
patternNames: string[];
}
export interface SRSignal {
symbol: string;
SRLevel: number;
signalDate: Date;
currentPrice: number;
strength: number;
signal: PatternResult;
}
export interface SupportResistanceResult {
symbol: string;
dynamicSupport: number | null;
dynamicResistance: number | null;
}
export interface MultiTimeFrameBBSRAnalysisResult {
weeklyBBSRResult?: SRSignal;
dailyBBSRResult?: SRSignal;
}
export interface TradeRecord {
code: string;
market: string;
exchange: string;
tradeType: string;
quantity: number;
price: number;
amount: number;
realizedPnL: number;
tradeTime: string;
settlementDate: string;
currency: string;
}
export interface TradesReport {
trades: TradeRecord[];
totalPnL: number;
totalQuantity: number;
}
export interface BreakSignal {
time: Date;
type: 'support_break' | 'resistance_break' | 'bull_wick' | 'bear_wick';
price: number;
strength: number;
breakPriceLevel: number;
}
export interface PatternFeatures {
trendType: 'up' | 'down' | 'sideways';
volatilityLevel: 'high' | 'medium' | 'low';
volumePattern: 'increasing' | 'decreasing' | 'stable' | 'spikes';
rsiState: 'overbought' | 'oversold' | 'neutral';
supportResistanceCount: number;
maConfiguration: 'above' | 'below' | 'crossing';
volatilityTrend: 'decreasing' | 'increasing' | 'stable';
priceVolatilityPattern: 'low_volatility_upper_range' | 'low_volatility_lower_range' | 'low_volatility_mid_range' | 'other';
priceAction: 'breakout' | 'breakdown' | 'consolidation' | 'pullback' | 'other';
candlePatterns: string[];
gapPresent: boolean;
volumePriceRelationship: 'rising_price_rising_volume' | 'rising_price_falling_volume' | 'falling_price_rising_volume' | 'falling_price_falling_volume' | 'neutral';
swingHighsLows: 'higher_highs_higher_lows' | 'lower_highs_lower_lows' | 'higher_highs_lower_lows' | 'lower_highs_higher_lows' | 'flat';
priceChannelType: 'ascending' | 'descending' | 'horizontal' | 'expanding' | 'contracting' | 'none';
}
export interface PatternMatchResult {
symbol: string;
isMatch: boolean;
matchScore: string;
featureMatches: {
[feature: string]: boolean;
};
features: PatternFeatures;
}
export interface AnalysisResult {
trendSlope: number;
trendDirection: string;
supportLevels: number[];
resistanceLevels: number[];
goldenCrossDates: Date[];
deathCrossDates: Date[];
highVolumeDates: Date[];
avgVolumeRatio: number;
volatility: number;
currentRsi: number;
overboughtDays: number;
oversoldDays: number;
}
export interface Candle {
symbol: string;
open: number;
high: number;
low: number;
close: number;
volume: number;
timestamp: Date;
}
/**
* 综合交易信号强度枚举
*/
export declare enum SignalStrength {
Strong = "strong",// 强信号
Moderate = "moderate",// 中等信号
Weak = "weak",// 弱信号
Neutral = "neutral",// 中性信号
Conflicting = "conflicting"
}
/**
* 综合交易方向枚举
*/
export declare enum TradeDirection {
Long = "long",// 做多
Short = "short",// 做空
Neutral = "neutral"
}
/**
* 风险等级枚举
*/
export declare enum RiskLevel {
High = "high",
Medium = "medium",
Low = "low"
}
/**
* 时间周期优先级
*/
export declare enum TimeframePriority {
Primary = "primary",// 主要时间周期
Secondary = "secondary",// 次要时间周期
Tertiary = "tertiary"
}
/**
* 关键价位类型
*/
export interface KeyLevel {
price: number;
type: 'support' | 'resistance';
strength: 'strong' | 'moderate' | 'weak';
source: 'chip' | 'pattern' | 'combined' | 'bbsr' | 'structure' | 'supplyDemand' | 'range' | 'trendline';
timeframe: 'weekly' | 'daily' | '1hour';
description: string;
}
/**
* 交易条件接口
*/
export interface TradeCondition {
type: 'price' | 'pattern' | 'indicator' | 'volume' | 'time';
description: string;
priority: 'critical' | 'important' | 'optional';
}
/**
* 综合交易计划接口
*/
export interface IntegratedTradePlan {
symbol: string;
currentPrice: number;
date: Date;
direction: TradeDirection;
signalStrength: SignalStrength;
confidenceScore: number;
chipAnalysisWeight: number;
patternAnalysisWeight: number;
volumeAnalysisWeight: number;
bbsrAnalysisWeight: number;
structureAnalysisWeight?: number;
supplyDemandAnalysisWeight?: number;
rangeAnalysisWeight?: number;
chipAnalysisContribution: number;
patternAnalysisContribution: number;
volumeAnalysisContribution: number;
bbsrAnalysisContribution: number;
summary: string;
primaryRationale: string;
secondaryRationale: string;
warnings: string[];
primaryTimeframe: 'weekly' | 'daily' | '1hour';
timeframeConsistency: string;
shortTermOutlook: string;
mediumTermOutlook: string;
longTermOutlook: string;
entryStrategy: {
idealEntryPrice: number;
alternativeEntryPrice: number;
entryType: 'immediate' | 'pullback' | 'breakout';
entryConditions: TradeCondition[];
priceZones: {
ideal: [number, number];
acceptable: [number, number];
};
timeWindow: string;
riskLevel: RiskLevel;
};
exitStrategy: {
takeProfitLevels: {
price: number;
proportion: number;
reasoning: string;
}[];
stopLossLevels: {
price: number;
type: 'fixed' | 'trailing';
reasoning: string;
}[];
timeBasedExit: string;
maximumHoldingPeriod: string;
};
riskManagement: {
suggestionPosition: number;
riskRewardRatio: number;
maxLoss: string;
volatilityConsideration: string;
adjustmentTriggers: string[];
};
keyLevels: KeyLevel[];
bbsrAnalysis: MultiTimeFrameBBSRAnalysisResult;
confirmationSignals: TradeCondition[];
invalidationConditions: TradeCondition[];
trendReversalInfo?: {
hasReversalSignal: boolean;
primaryReversalSignal?: TrendReversalSignal;
reversalSignalStrength?: number;
smallTimeframe?: string;
largeTimeframe?: string;
reversalDirection?: number;
entryPrice?: number;
stopLoss?: number;
description: string;
targets?: {
target1: number;
target2: number;
target3: number;
riskRewardRatio1: number;
riskRewardRatio2: number;
riskRewardRatio3: number;
};
};
keyObservations: string[];
summaries: {
chipSummary: string;
patternSummary: string;
bbsrSummary: string;
vvSummary: string;
structureSummary?: string;
supplyDemandSummary?: string;
rangeSummary?: string;
trendlineSummary?: string;
};
vvInsights?: {
volumeAnalysisReason: string;
volatilityAnalysisReason: string;
combinedAnalysisSummary: string;
};
}
export interface VolatilityAnalysisResult {
historicalVolatility: number;
bollingerBandWidth: number;
atr: number;
atrPercent: number;
volatilityRegime: 'low' | 'medium' | 'high' | 'extreme';
isVolatilityIncreasing: boolean;
impliedVolatility?: number;
volatilityPercentile: number;
volatilityTrend: string;
recentRanges: {
daily: number;
weekly: number;
monthly: number;
};
riskMetrics: {
sharpeRatio?: number;
maxDrawdown: number;
downsideDeviation: number;
};
}
export type ChartImg = {
title: string;
url: string;
size?: number;
expireAt?: string;
createdAt?: string;
media_type: string;
imageBase64?: string;
};
export type Interval = '1m' | '3m' | '5m' | '15m' | '30m' | '1h' | '2h' | '3h' | '1D' | '1W' | '1M' | '3M' | '1Y';
export type TimeFrameConfig = {
interval: Interval;
studies?: Array<{
name: string;
}>;
};