@gabriel3615/ta_analysis
Version:
stock ta analysis
45 lines (44 loc) • 1.8 kB
JavaScript
import { TradeDirection } from '../../../types.js';
import { PatternDirection } from '../../basic/patterns/analyzeMultiTimeframePatterns.js';
function clamp(value, min = 0, max = 100) {
return Math.max(min, Math.min(max, value));
}
export function createPatternPlugin() {
return {
id: 'pattern',
category: 'main',
extract(input, _context) {
const p = input.analyses.pattern;
const dir = p.combinedSignal;
const direction = dir === PatternDirection.Bullish
? TradeDirection.Long
: dir === PatternDirection.Bearish
? TradeDirection.Short
: TradeDirection.Neutral;
const tfWeights = {
weekly: 0.4,
daily: 0.4,
'1hour': 0.2,
};
let statusAdj = 0;
for (const tf of p.timeframeAnalyses ?? []) {
const w = tfWeights[tf.timeframe] ?? 0.2;
const st = tf.dominantPattern?.status;
if (st === 'confirmed')
statusAdj += 20 * w;
else if (st === 'completed')
statusAdj += 10 * w;
else if (st === 'forming')
statusAdj += -10 * w;
else if (st === 'failed')
statusAdj += -20 * w;
}
const confidence = Math.abs(p.signalStrength ?? 0) + statusAdj;
return { direction, confidence: clamp(confidence), source: 'pattern' };
},
summarize(input) {
const pattern = input.analyses.pattern;
return `形态综合方向:${pattern.combinedSignal} 强度:${pattern.signalStrength?.toFixed?.(1) ?? pattern.signalStrength}`;
},
};
}