@gabriel3615/ta_analysis
Version: 
stock ta analysis
40 lines (36 loc) • 1.38 kB
text/typescript
import { describe, it, expect } from 'vitest';
import { calculateVolatilityAnalysis } from '../src/analysis/analyzer/volatility/volatilityAnalysis.js';
import { volatilityConfig } from '../src/analysis/analyzer/volatility/volatilityConfig.js';
import type { Candle } from '../src/types.js';
function makeFlatData(n: number, price = 100): Candle[] {
  const now = Date.now();
  return Array.from({ length: n }, (_, i) => ({
    symbol: 'TEST',
    open: price,
    high: price,
    low: price,
    close: price,
    volume: 0,
    timestamp: new Date(now + i * 86400000),
  }));
}
describe('volatility analysis', () => {
  it('handles zero-variance data without NaN', () => {
    const data = makeFlatData(60, 100);
    const res = calculateVolatilityAnalysis(data, 20);
    expect(Number.isFinite(res.historicalVolatility)).toBe(true);
    expect(Number.isFinite(res.bollingerBandWidth)).toBe(true);
    expect(Number.isFinite(res.atrPercent)).toBe(true);
    expect(['low', 'medium', 'high', 'extreme']).toContain(
      res.volatilityRegime
    );
  });
  it('respects config thresholds for squeeze', () => {
    const data = makeFlatData(100, 100);
    const res = calculateVolatilityAnalysis(data, 20);
    // 布林带宽度约为0,应小于 squeeze 阈值
    expect(res.bollingerBandWidth).toBeLessThanOrEqual(
      volatilityConfig.trend.bbSqueezeWidth
    );
  });
});