Lookahead bias terjadi ketika keputusan pada waktu tertentu menggunakan informasi yang baru tersedia di masa depan. Strategi tampak sangat akurat dalam backtest karena ia secara tidak sengaja “melihat jawaban”.
Mengapa Dataframe Rentan Bias?
Freqtrade memberikan seluruh rentang dataframe kepada fungsi indikator. Ini efisien untuk perhitungan vektor, tetapi pembuat strategi harus memastikan setiap baris hanya memakai data sampai waktu baris tersebut.
Operasi pandas yang valid secara teknis belum tentu valid secara temporal.
Pola Kode Berbahaya
Negative Shift
dataframe["future_close"] = dataframe["close"].shift(-1)Baris sekarang memperoleh close candle berikutnya. Ini lookahead langsung.
Agregasi Seluruh Dataset
dataframe["normalized"] = (
dataframe["close"] - dataframe["close"].min()
) / (dataframe["close"].max() - dataframe["close"].min())Nilai minimum dan maksimum masa depan memengaruhi baris masa lalu. Gunakan rolling atau expanding window sesuai kebutuhan.
Merge Informative Timeframe yang Salah
Candle 4 jam yang berakhir pukul 12:00 tidak boleh diketahui sepenuhnya oleh candle 30 menit pukul 08:30. Merge manual tanpa pergeseran waktu dapat membocorkan high, low, atau close candle informative yang belum selesai.
Loop yang Mengakses Baris Berikutnya
Loop dengan indeks i + 1 atau pencarian puncak setelah sinyal juga dapat membawa informasi masa depan.
Machine Learning Leakage
Scaler, feature selection, atau model yang dilatih pada seluruh data sebelum split membuat informasi periode validasi masuk ke training.
Pola yang Lebih Aman
Gunakan data historis:
dataframe["previous_close"] = dataframe["close"].shift(1)
dataframe["rolling_high"] = dataframe["high"].rolling(20).max()
dataframe["expanding_mean"] = dataframe["close"].expanding().mean()Rolling window tetap perlu memerhatikan apakah candle saat ini sudah ditutup saat keputusan dibuat.
Untuk informative timeframe, gunakan helper resmi Freqtrade dan audit timestamp hasil merge.
Menjalankan Lookahead Analysis
Contoh:
freqtrade lookahead-analysis \
--config user_data/config.json \
--userdir user_data \
--strategy MyStrategy \
--timerange 20220101-20251231 \
--timeframe 30m \
--timeframe-detail 5m \
--minimum-trade-amount 20 \
--targeted-trade-amount 100Tool menjalankan baseline lalu membandingkan sinyal dan indikator melalui backtest terpisah. Hasilnya melaporkan apakah entry, exit, atau indikator berubah dengan cara yang menunjukkan bias.
Membaca Hasil
Kolom penting biasanya mencakup:
has_bias.- Jumlah total signal.
- Biased entry signals.
- Biased exit signals.
- Biased indicators.
Jika bias terdeteksi, jangan langsung menghapus indikator yang disebut. Telusuri bagaimana kolom tersebut dihitung dan digunakan.
Mengapa “No Bias Detected” Belum Final?
Tes otomatis memiliki batas:
- Sampel signal mungkin terlalu kecil.
- Cabang callback tertentu mungkin tidak aktif.
- Strategi dapat mengubah perilaku berdasarkan mode run.
- Kebocoran pada proses eksternal atau training model tidak selalu terlihat.
- Bias dapat muncul hanya pada pair atau periode tertentu.
Hindari kode yang sengaja mendeteksi mode lookahead lalu melewati aturan tertentu. Tes seharusnya sedekat mungkin dengan perilaku strategi normal.
Audit Manual yang Perlu Dilakukan
Cari pola:
shift(-atau indeks masa depan..max(),.min(),.mean()tanpa rolling/expanding.iloc[-1]dalam fungsi yang membangun seluruh dataframe.- Merge dataframe berdasarkan timestamp yang tidak jelas.
- Resampling tanpa memastikan candle telah selesai.
- Fitur ML yang di-fit sebelum data split.
- State global yang dipengaruhi urutan backtest.
Kemudian periksa beberapa timestamp secara manual: kapan candle tersedia dan kapan sinyal seharusnya dibuat.
Recursive Analysis
Selain lookahead, indikator dapat berubah ketika startup candle atau panjang data berubah. Recursive analysis membantu mengidentifikasi indikator yang nilainya tidak stabil karena warm-up tidak cukup atau perhitungan rekursif.
Kedua tes menyelesaikan masalah berbeda dan sebaiknya dijalankan bersama.
Checklist Lulus Bias
- Lookahead analysis tidak menemukan bias pada sampel memadai.
- Kode tidak memakai negative shift.
- Agregasi memiliki jendela historis.
- Informative timeframe digabung dengan timestamp aman.
- Training dan validasi model terpisah.
- Tidak ada perilaku khusus yang mempermudah tes.
- Hasil stabil ketika startup candle ditambah.
- Audit manual atas fitur utama selesai.
Penutup
Lookahead bias dapat mengubah strategi biasa menjadi tampak luar biasa. Karena itu, pemeriksaan bias harus dilakukan sebelum mengoptimalkan parameter lebih jauh atau mempertimbangkan dry-run.
Artikel berikutnya membahas Hyperopt dan cara menggunakannya tanpa mengubah proses optimasi menjadi mesin overfitting.
Bacaan lanjutan
Lulus alat deteksi bias adalah bukti penting, tetapi tetap membutuhkan audit kode dan validasi out-of-sample.




