UNPKG

@sunrise1002/tats

Version:

Techincal Indicators written in javascript

64 lines (63 loc) 2.61 kB
import CandlestickFinder from './CandlestickFinder'; import { averageloss } from '../Utils/AverageLoss'; import { averagegain } from '../Utils/AverageGain'; import { bearishhammerstick } from './BearishHammerStick'; import { bearishinvertedhammerstick } from './BearishInvertedHammerStick'; import { bullishhammerstick } from './BullishHammerStick'; import { bullishinvertedhammerstick } from './BullishInvertedHammerStick'; export default class HammerPattern extends CandlestickFinder { constructor() { super(); this.name = 'HammerPattern'; this.requiredCount = 5; } logic(data) { let isPattern = this.downwardTrend(data); isPattern = isPattern && this.includesHammer(data); isPattern = isPattern && this.hasConfirmation(data); return isPattern; } downwardTrend(data, confirm = true) { let end = confirm ? 3 : 4; // Analyze trends in closing prices of the first three or four candlesticks let gains = averagegain({ values: data.close.slice(0, end), period: end - 1 }); let losses = averageloss({ values: data.close.slice(0, end), period: end - 1 }); // Downward trend, so more losses than gains return losses > gains; } includesHammer(data, confirm = true) { let start = confirm ? 3 : 4; let end = confirm ? 4 : undefined; let possibleHammerData = { open: data.open.slice(start, end), close: data.close.slice(start, end), low: data.low.slice(start, end), high: data.high.slice(start, end), }; let isPattern = bearishhammerstick(possibleHammerData); isPattern = isPattern || bearishinvertedhammerstick(possibleHammerData); isPattern = isPattern || bullishhammerstick(possibleHammerData); isPattern = isPattern || bullishinvertedhammerstick(possibleHammerData); return isPattern; } hasConfirmation(data) { let possibleHammer = { open: data.open[3], close: data.close[3], low: data.low[3], high: data.high[3], }; let possibleConfirmation = { open: data.open[4], close: data.close[4], low: data.low[4], high: data.high[4], }; // Confirmation candlestick is bullish let isPattern = possibleConfirmation.open < possibleConfirmation.close; return isPattern && possibleHammer.close < possibleConfirmation.close; } } export function hammerpattern(data) { return new HammerPattern().hasPattern(data); }