@gabriel3615/ta_analysis
Version:
stock ta analysis
51 lines (50 loc) • 2.22 kB
JavaScript
import { bullishengulfingpattern, bullishhammerstick, bullishharami, bullishharamicross, bullishinvertedhammerstick, bullishmarubozu, downsidetasukigap, hammerpattern, hammerpatternunconfirmed, morningdojistar, morningstar, piercingline, threewhitesoldiers, tweezerbottom, } from 'technicalindicators';
const bullishPatterns = [
bullishengulfingpattern,
downsidetasukigap,
bullishharami,
bullishharamicross,
morningdojistar,
morningstar,
bullishmarubozu,
piercingline,
threewhitesoldiers,
bullishhammerstick,
bullishinvertedhammerstick,
hammerpattern,
hammerpatternunconfirmed,
tweezerbottom,
];
const patternNameZhMap = [
{ name: '看涨吞没', pattern: bullishengulfingpattern },
{ name: '下降跳空缺口', pattern: downsidetasukigap },
{ name: '看涨孕线', pattern: bullishharami },
{ name: '看涨十字星', pattern: bullishharamicross },
{ name: '晨星十字星', pattern: morningdojistar },
{ name: '晨星', pattern: morningstar },
{ name: '看涨光脚实体', pattern: bullishmarubozu },
{ name: '刺透线', pattern: piercingline },
{ name: '三只白兵', pattern: threewhitesoldiers },
{ name: '看涨锤子线', pattern: bullishhammerstick },
{ name: '锤子线', pattern: hammerpattern },
{ name: '倒锤子线', pattern: bullishinvertedhammerstick },
{ name: '锤子线(未确认)', pattern: hammerpatternunconfirmed },
{ name: '镊子底', pattern: tweezerbottom },
];
export default class EnhancedBullishPatterns {
hasPattern(windowCandles) {
const data = {
open: windowCandles.map(candle => candle.open),
high: windowCandles.map(candle => candle.high),
low: windowCandles.map(candle => candle.low),
close: windowCandles.map(candle => candle.close),
timestamp: windowCandles.map(candle => candle.timestamp),
};
return bullishPatterns
.filter(pattern => pattern(data))
.map(pattern => patternNameZhMap.find(n => n.pattern === pattern)?.name ?? '');
}
}
export function bullish(windowCandles) {
return new EnhancedBullishPatterns().hasPattern(windowCandles);
}