Backtest offline

Chạy backtest PineScript offline, trên data của riêng bạn

PineForge transpile PineScript v6 sang C++ native và chạy local trên máy bạn qua Docker. Local-first, reproducible từng byte, chạy mọi nơi Docker chạy được. BYOD OHLCV CSV.

Vì sao offline?

Backtest trên browser tốt cho iterate ngay trên chart. Backtest offline là cái bạn cần khi bước tiếp theo là đặt tiền vào strategy: khi cần audit trail, khi CI phải gate mỗi commit, khi một kết quả từ hai tháng trước phải reproduce bit-by-bit hôm nay.

Chạy backtest offline cho bạn những thứ tester browser không cho được: kết quả reproducible từng byte — cùng input, cùng output, mọi lúc. Bạn pin phiên bản engine, check kết quả vào repo, diff trade list giữa các commit, và chạy toàn bộ headless trong CI pipeline. CSV bạn feed vào là của bạn; binary chạy là local; report nhận lại audit được.

Danh sách thực dụng những thứ offline mở khóa: engine pin theo phiên bản nên commit hai tháng trước hôm nay vẫn ra cùng trade list; ingest data tùy chỉnh nên bạn test được với tick reconstruction của exchange, giá point-in-time của data vendor, hay bất kỳ alt-data nào bạn serialize được sang OHLCV; tích hợp CI nên regression fail build trước khi tới production; và portability đa broker vì logic strategy không khóa vào platform — nó là một file.

Nếu từng cần share kết quả backtest với đồng nghiệp và nhận ra cách "share" duy nhất là screenshot chart — chạy offline là cái bạn đang thiếu.

Cơ chế

Ba bước. Toàn bộ workflow từ Pine source tới JSON trade report mất dưới hai phút lần đầu và dưới ba mươi giây cho mỗi lần sau.

Bước 1 — Pull runtime. Một container image. Khỏi pip, khỏi key, khỏi đăng ký — transpile và backtest đều chạy bên trong nó, offline. Miễn phí cho personal trading.

Bước 2 — Transpile Pine của bạn sang C++. Chạy container ở chế độ transpile-only, nó biến PineScript v6 của bạn thành một file C++ source hoàn chỉnh, ngay trên máy. Không có Pine interpreter nào chạy lúc runtime — engine compile thẳng nó thành native machine code.

docker run --rm --network=none \
  -e PINEFORGE_TRANSPILE_ONLY=1 \
  -v "$(pwd)/my_strategy.pine":/in/strategy.pine:ro \
  ghcr.io/pineforge-4pass/pineforge-engine:latest > strategy.cpp

Bước 3 — Backtest. Mount file OHLCV CSV của bạn cạnh phần C++ đã sinh ra rồi chạy container. Engine đọc data file, chạy strategy bar-by-bar, rồi ghi JSON report ra stdout.

docker run --rm --network=none \
  -v "$(pwd)/strategy.cpp":/in/strategy.cpp:ro \
  -v "$(pwd)/ohlcv.csv":/in/ohlcv.csv:ro \
  ghcr.io/pineforge-4pass/pineforge-engine:latest > report.json

JSON output gồm full trade list với entry/exit price, bar index, position size, và summary block với net PnL, max drawdown, total trades, profit factor, Sharpe ratio. Mọi field đều stable across patch release của cùng major version — parse trong script an toàn.

Đó là toàn bộ workflow. Không GUI, không re-auth account, không load chart. Chạy được Docker là chạy được PineForge backtest offline.

Backtest được trên cái gì

Trả lời ngắn: bất kỳ thứ gì bạn serialize được dạng OHLCV. PineForge không kết nối tới market data provider nào. Bạn mang data; engine chạy strategy.

Crypto từ exchange của bạn. Pull raw trade data từ Binance, Bybit, Kraken, hay exchange nào có REST/WebSocket API. Aggregate sang timeframe strategy dùng. Feed CSV trực tiếp. Test trên đúng cặp-và-venue bạn sẽ trade.

Cổ phiếu từ data vendor. Polygon, Norgate, BarChart, Tiingo — chọn nguồn, export giá điều chỉnh point-in-time, chạy backtest với fill thật và universe survivorship-bias-free thật.

Tick reconstruction. Có Level 2 data và muốn test trên bar 1-giây synthetic dựng từ tick? Được. Sinh OHLCV từ tick data và feed vào. Engine không biết và không quan tâm bar đến từ đâu.

Alt-data. Sentiment score, on-chain metric, funding rate, options skew — nếu express được thành time series align với bar index, bạn nhúng được vào Pine qua custom data column và test offline.

Bộ 246 strategy tham chiếu trong gallery được backtest với CSV xuất từ TradingView (cho parity validation) và dataset CSV tùy chỉnh (cho regression test). 245/246 đạt tier strict-excellent chuẩn (PnL drift ≤ 0.5% trên cửa sổ so sánh). 1 case còn lại là TV-side anomaly đã được ghi nhận — chart-state non-determinism — đã deep-analyze và trace ngược về state của TradingView. Zero engine bug thực sự còn lại.

Bắt đầu