1 Kasım 2026 · araştırma

Lookback'i performansa saymadan bir backtest nasıl ısıtılır?

Lookback'i performansa saymadan bir backtest nasıl ısıtılır?

Spesifikasyonda 20 günlük bir Donchian zararsız durur. Ajan 20 barlık bir kayan maksimum yazar, backtest parquet dosyasının birinci satırından başlar ve ilk iki hafta boyunca "20 günlük yüksek" yalnızca o ana kadar var olan barların koşan maksimumudur. Dördüncü günde bu, dört günlük bir yüksektir. Test ettiğinizi sandığınız strateji, ilk düzine gerçekleşmeyi üreten strateji değildir.

ETHUSDT günlük barları üzerine bir notebook'um var; tam örneklem Sharpe'ı 1.4. İlk 20 seansı kesin, 0.6'ya düşer. O 20'yi tutup birinci yılın geri kalanını atın, 3.1 basar. Kimse yarını sızdırmadı. Strateji geçmişi kullandı, yeterince değil yalnızca ve rapor o yarı oluşmuş işlemleri kanıt saydı.

1.4tam örneklem Sharpe, tamamlanmamış pencere dahil
0.620 tamamlanmış seansın ardından aynı kod
3.1yalnızca ısınma işlemlerini tutarsanız Sharpe

Pencere henüz dolarken işlem yaptırmak

Olağan enkaz min_periods=1. Pandas'a bırakırsanız tek bir bar üzerinde kayan ortalama hesaplar. Ajanlar bunu sürekli yapar; çünkü çerçevenin tepesindeki bir NaN hata gibi durur ve onu doldurmak birim testi yeşile çevirir.

İki getiri gözlemiyle 20 günlük realized-vol hedefi bir pozisyon büyüklüğü patlamasıdır. İki sayının varyansı yazı turadır, tersini alırsınız ve ilk pozisyon amaçlanan riskin birkaç katıdır. Sıfıra yakın bir standart sapmaya karşı bir z-score aynı numarayı bir işaretle yapar: strateji, pencere dürüstleştiğinde bir daha hiç görünmeyen ustura gibi bir girişe sahip gibi durur.

Kırılımlar daha kötüdür, çünkü gerçek kurala benzerler. Altıncı bardaki 20 barlık kanal, altı barlık bir kanaldır. Hemen başlangıçta bir işlem kümesi alırsınız, çoğu zaman tamamlanmış göstergeyi tetiklemeyecek sakin bir dilimde. Sakin piyasalar biraz sürüklenir. Dar kanal ateşler. Özsermaye eğrisi, sonraki hiçbir yılın tekrarlamadığı bir çıkış avantajı yakalar.

Sıfırla doldurma ve ileri doldurma başka bir yalan uydurur. 0'daki RSI aşırı satım okunur. Eksik bir ATR'nin 0 olması birim büyüklüğünü patlatır ve backtest itaatkâr biçimde bir depo dolusu alır. Bir NaN'ın emri öldürmesini, bir 0'ın emir uydurmasına tercih ederim.

Hâlâ kendimi 0. satırdan çizdirirken yakalıyorum çünkü grafiğin solundaki boş ay bitmemiş görünür. Boş ay dürüst kısımdır.

Özsermaye eğrisini kırp, pozisyonu tut

Bu, kod incelemesinden sağ çıkar. 20 günlük özellikleri düzgün hesaplarsınız, çizilen eğriden ilk 20 satırı atarsınız ve 21 Ocak'tan yayımlarsınız. 21 Ocak'taki pozisyon 14 Ocak'ta açılmıştır. Trailing stop'un zirve seviyesi, piramit sayısı, o ısınma işlemlerinden sonraki nakit: hepsi "temiz" örneğe yürüyerek girmiştir.

Enkaz, yazıdaki tarihte başlatılamayan bir paper stratejidir. Raporlanan başlangıçta pozisyonsuz yeniden başlatın, ilk haftanın emirleri uyuşmaz. Bazen backtest, paper sistemin girmek için hiçbir nedeni olmadığı bir işlemde zaten duruyordur. Bazen paper sistem lookback'i soğuk olduğu için girer ve backtest gizli ayı kırılımı çoktan aldığı için kenarda bekler. İki açılış defteri, bir yayımlanmış başlangıç tarihi.

Walk-forward fold'ları bunu sessizce yapar. Her test penceresinin çizmediğiniz bir lookback kuyruğu vardır. O kuyruğu simüle etmeyi atlayın, ilk test işlemleri yine tamamlanmamış pencere işlemleridir. Simüle edip yalnızca test günlerini raporlayın, test gününün pozisyonu göstermediğiniz gerçekleşmelere koşulludur. Bu ikinci sürüm meşru bir araştırma tercihi olabilir. Fold'un ilk sabahına soğuk başlangıç demek, oysa kuyruktan bir trailing stop zaten canlıyken, iki araştırmacının tek bir konfigürasyondan iki Sharpe çıkarmasının yoludur.

Yayımlanan başlangıç tarihinde pozisyonsuz yeniden başlatmak P&L'yi değiştiriyorsa, ısındırma performans kaydının içindedir. Lookback verisi durabilir. Lookback işlemleri duramaz.

Özellik bir gün değilken takvim günleriyle ısıtmak

"Ona 30 gün verin" özelliği eksik belirtilmiş bırakır. 5 dakikalık bir Donchian üzerinde otuz takvim günü, 20 periyotluk lookback'in binlerce bar ötesidir. 20 seansa ihtiyaç duyan günlük bir özellikte otuz gün, hafta sonlarına ve boşluklara göre ya şişman ya cılızdır.

Perp piyasalarımızdan birindeki bir fonlama oranı z-score'u, spesifikasyon 30 periyot dediği ve birinin periyotları takvime çevirdiği için 30 günlük ısındırma aldı. Orada fonlama her sekiz saatte bir basılır. Otuz gün yaklaşık 90 fonlama ödemesidir. Otuz periyot on gündür. Fazladan iki aylık ısınma tesadüfen bir depeg haftasını içeriyordu. Onu düşürmek, canlı pencereyi stratejinin gerçek tarihinden daha sakin gösterdi. İnsanlar başlangıç tarihi duyarlılığını suçladı. Isındırma rejimi yemişti.

Kripto ile hisse senedi, kimse bir parametreyi düzenlemeden aynı sayının anlamını değiştirir. ETH'nin yirmi "günü" cumartesileri içerir. Yirmi hisse seansı neredeyse bir takvim ayıdır. Hisse notebook'undan 20 günlük bir lookback'i saatlik perpetual mumlara kopyalayın, 20 günlük adı taşıyan 20 saatlik bir kanalınız olur. İlk geçerli bar o zaman ya 20 saat içeridedir ya da sonraki bir fonksiyon yeniden örnekliyorsa 20 gün içeridedir; ikisini de aynı ajan diff'inde gördüm.

İlk işlem yapılabilir zaman damgasını sabitleyin

Isındırma bir veri gereksinimidir, bonus bir örneklem değil. Her özellik, hesaplandığı birimde ihtiyaç duyduğu tamamlanmış gözlem sayısını belirtir. İlk işlem yapılabilir zaman damgası, bunların hepsinin doğru olduğu ve pozisyonsuz bir hesabın emir göndermesine izin verileceği ilk bardır.

ÖzellikSpesifikasyonun genellikle dediğiGerçekte var olması gerekenSessiz ikame
20 günlük Donchian20 adet günlük yüksek20 tamamlanmış seansmin_periods=1 ile koşan maksimum
30 günlük realized vol30 günlük pencere30 kapanıştan-kapanışa getiriİki günlük varyans, büyüklüğe ters çevrilmiş
20 basımlı fonlama z-score20 gün20 fonlama ödemesi20 takvim günü (~90 basım) veya yanlış zaman diliminin 20 barı
5m üzerinde 14 periyotluk RSI14 periyot14 kapanmış beş dakikalık bar14 gün veya boşlukları ileri doldurulmuş 14 bar

O zaman damgasından önceki P&L performans kaydının dışında kalır. O zaman damgasından önceki durum hâlâ simüle edilmek zorunda olabilir; böylece saat ilk işlem yapılabilir bara geldiğinde bir trailing stop veya bir bekleme süresi gerçektir, ama o gerçekleşmeler Sharpe'a, işlem sayısına veya kapasite hesabına girmez. Sonra çirkin kontrolü çalıştırın: lookback yalnızca veri olarak duruyorken o zaman damgasında pozisyonsuz yeniden başlatın. Emirler değişiyorsa gizli işlemler gönderiyordunuz.

Paper trading aynı sözleşmede başlar. Her walk-forward test penceresi de öyle. Grafik bir ay eksikmiş gibi görünüyorsa, eksik bırakın.

backtestingveri mühendisliğiwalk-forwardAI ajanlarıpaper trading
← Tüm yazılar