Crypto · 10/29/2025
Backtest minimal (sanity check)

Espace publicitaire (in-article 1)
// tests/backtest-sma.ts (exécution node-ts)
import fs from 'node:fs'
import { sma } from '../src/indicators'
import { Candle } from '../src/strategy'
const data: Candle[] = JSON.parse(fs.readFileSync('data/BTCUSDT-1h.json', 'utf8'))
const closes = data.map(d => d.close)
const f = sma(closes, 20)
const s = sma(closes, 50)
let pos: 'long' | 'short' | null = null
let entry = 0
let pl = 0
for (let i = 51; i < closes.length; i++) {
const up = f[i-1] <= s[i-1] && f[i] > s[i]
const down = f[i-1] >= s[i-1] && f[i] < s[i]
const px = closes[i]
if (up && pos !== 'long') {
if (pos === 'short') pl += entry - px
pos = 'long'; entry = px
}
if (down && pos !== 'short') {
if (pos === 'long') pl += px - entry
pos = 'short'; entry = px
}
}
console.log('P&L approximatif (points):', pl.toFixed(2))
Espace publicitaire (in-article 2)



