@gabriel3615/ta_analysis
Version:
stock ta analysis
218 lines (217 loc) • 10.3 kB
JavaScript
/**
* 策略生成器模块(简化版)
* 负责根据信号汇总结果和关键位生成具体的交易策略
*/
import { TradeDirection, SignalStrength, } from '../../types.js';
import { determineEntryStrategy, determineExitStrategy, determineRiskManagement, } from '../../util/analysisUtils.js';
export class StrategyGenerator {
constructor(config) {
this.config = config;
}
/**
* 生成完整的交易策略(恢复原有完整功能)
*/
generateStrategy(input) {
// 使用原有的完整策略生成函数
const entryStrategy = determineEntryStrategy(input.signalResult.direction, input.currentPrice, input.keyLevels, input.analyses.pattern, input.signalResult.confidenceScore);
const exitStrategy = determineExitStrategy(input.signalResult.direction, input.keyLevels, entryStrategy.idealEntryPrice, input.analyses.chip, input.analyses.pattern, input.analyses?.volatility?.volatilityAnalysis);
const riskManagement = determineRiskManagement(input.signalResult.direction, entryStrategy, exitStrategy, input.signalResult.confidenceScore, input.signalResult.signalStrength, input.analyses?.volatility?.volatilityAnalysis);
// 生成增强的信号和条件
const confirmationSignals = this.generateEnhancedConfirmationSignals(input);
const invalidationConditions = this.generateEnhancedInvalidationConditions(input);
const keyObservations = this.generateEnhancedKeyObservations(input);
const warnings = this.generateEnhancedWarnings(input);
return {
entryStrategy,
exitStrategy,
riskManagement,
confirmationSignals,
invalidationConditions,
keyObservations,
warnings,
};
}
/**
* 生成增强的确认信号
*/
generateEnhancedConfirmationSignals(input) {
const { signalResult, analyses } = input;
const confirmationSignals = [];
// 基础方向确认
confirmationSignals.push({
type: 'pattern',
description: `${signalResult.direction === TradeDirection.Long ? '多头' : '空头'}信号确认`,
priority: 'important',
});
// 筹码分析确认
if (signalResult.direction === TradeDirection.Long) {
if (analyses.chip.combinedBuySignalStrength > 60) {
confirmationSignals.push({
type: 'chip',
description: `筹码买入强度${analyses.chip.combinedBuySignalStrength},支持做多`,
priority: 'important',
});
}
}
else if (signalResult.direction === TradeDirection.Short) {
if (analyses.chip.combinedShortSignalStrength > 60) {
confirmationSignals.push({
type: 'chip',
description: `筹码做空强度${analyses.chip.combinedShortSignalStrength},支持做空`,
priority: 'important',
});
}
}
// 波动率确认
const volatilityRegime = analyses?.volatility?.volatilityAnalysis?.volatilityAnalysis
?.volatilityRegime ?? 'unknown';
if (volatilityRegime === 'high' || volatilityRegime === 'extreme') {
confirmationSignals.push({
type: 'volatility',
description: `当前处于${volatilityRegime === 'extreme' ? '极高' : '高'}波动率环境,需要谨慎操作`,
priority: 'critical',
});
}
return confirmationSignals;
}
/**
* 生成增强的失效条件
*/
generateEnhancedInvalidationConditions(input) {
const { signalResult, currentPrice, keyLevels } = input;
const invalidationConditions = [];
// 基于关键位的失效条件
if (signalResult.direction === TradeDirection.Long) {
// 找到关键支撑位作为失效条件
const keySupport = keyLevels
.filter(level => level.type === 'support' && level.price < currentPrice)
.sort((a, b) => b.price - a.price)[0];
if (keySupport) {
invalidationConditions.push({
type: 'price',
description: `价格跌破关键支撑位 ${keySupport.price.toFixed(2)}`,
priority: 'critical',
});
}
else {
// 如果没有关键支撑位,使用百分比止损
const invalidationPrice = currentPrice * 0.95;
invalidationConditions.push({
type: 'price',
description: `价格跌破 ${invalidationPrice.toFixed(2)} (5%止损)`,
priority: 'critical',
});
}
}
else if (signalResult.direction === TradeDirection.Short) {
// 找到关键阻力位作为失效条件
const keyResistance = keyLevels
.filter(level => level.type === 'resistance' && level.price > currentPrice)
.sort((a, b) => a.price - b.price)[0];
if (keyResistance) {
invalidationConditions.push({
type: 'price',
description: `价格突破关键阻力位 ${keyResistance.price.toFixed(2)}`,
priority: 'critical',
});
}
else {
// 如果没有关键阻力位,使用百分比止损
const invalidationPrice = currentPrice * 1.05;
invalidationConditions.push({
type: 'price',
description: `价格突破 ${invalidationPrice.toFixed(2)} (5%止损)`,
priority: 'critical',
});
}
}
// 置信度失效条件
if (signalResult.confidenceScore < 50) {
invalidationConditions.push({
type: 'indicator',
description: '信号置信度过低,如果没有其他技术指标确认,应考虑退出',
priority: 'important',
});
}
return invalidationConditions;
}
/**
* 生成增强的关键观察点
*/
generateEnhancedKeyObservations(input) {
const { signalResult, analyses, keyLevels } = input;
const observations = [];
// 信号基础信息
observations.push(`当前${signalResult.direction === TradeDirection.Long ? '做多' : '做空'}信号,` +
`置信度: ${signalResult.confidenceScore.toFixed(1)}%,` +
`信号强度: ${signalResult.signalStrength}`);
// 筹码分析详情
observations.push(`筹码分析 - 买入强度: ${analyses.chip.combinedBuySignalStrength}, ` +
`做空强度: ${analyses.chip.combinedShortSignalStrength}`);
// 形态分析
if (analyses.pattern.signalStrength) {
observations.push(`形态分析 - 方向: ${analyses.pattern.combinedSignal}, ` +
`评分: ${analyses.pattern.signalStrength.toFixed(1)}`);
}
// 波动率状态
const volatilityRegime = analyses?.volatility?.volatilityAnalysis?.volatilityAnalysis
?.volatilityRegime ?? 'unknown';
const atrPercent = analyses?.volatility?.volatilityAnalysis?.volatilityAnalysis
?.atrPercent ?? 0;
observations.push(`波动率状态: ${volatilityRegime}, ATR百分比: ${atrPercent.toFixed(2)}%`);
// 关键位信息
const supportLevels = keyLevels.filter(level => level.type === 'support').length;
const resistanceLevels = keyLevels.filter(level => level.type === 'resistance').length;
observations.push(`关键位统计 - 支撑位: ${supportLevels}个, 阻力位: ${resistanceLevels}个`);
// BBSR分析
if (analyses.bbsr.dailyBBSRResult) {
observations.push(`BBSR日线强度: ${analyses.bbsr.dailyBBSRResult.strength.toFixed(1)}`);
}
return observations;
}
/**
* 生成增强的警告信息
*/
generateEnhancedWarnings(input) {
const { signalResult, analyses } = input;
const warnings = [];
// 置信度警告
if (signalResult.confidenceScore < 60) {
warnings.push(`信号置信度较低(${signalResult.confidenceScore.toFixed(1)}%),建议谨慎操作或等待更强信号`);
}
// 信号强度警告
if (signalResult.signalStrength === SignalStrength.Weak) {
warnings.push('当前信号强度较弱,建议降低仓位或等待信号增强');
}
// 波动率警告
const volatilityRegime = analyses?.volatility?.volatilityAnalysis
?.volatilityAnalysis?.volatilityRegime;
if (volatilityRegime === 'extreme') {
warnings.push('市场处于极高波动率状态,风险极大,建议大幅降低仓位');
}
else if (volatilityRegime === 'high') {
warnings.push('市场波动率较高,需要密切关注止损位');
}
else if (volatilityRegime === 'low') {
warnings.push('市场波动率较低,可能面临突然的波动率扩张');
}
// 筹码分析矛盾警告
const chipBuyStrength = analyses.chip.combinedBuySignalStrength;
const chipShortStrength = analyses.chip.combinedShortSignalStrength;
const strengthDiff = Math.abs(chipBuyStrength - chipShortStrength);
if (strengthDiff < 20) {
warnings.push('筹码分析显示买卖力量接近,市场方向不明确');
}
// 信号冲突警告
if (signalResult.signalStrength === SignalStrength.Conflicting) {
warnings.push('多个分析模块信号冲突,建议等待信号一致性提高后再操作');
}
// 成交量确认警告
const volumeConfirmation = analyses?.volatility?.volumeAnalysis
?.volumeAnalysis?.volumePriceConfirmation;
if (!volumeConfirmation) {
warnings.push('成交量未能确认价格走势,信号可靠性降低');
}
return warnings;
}
}