Makine Öğrenmesine Dayalı İşlem Stratejilerine Python’da Gelecek Veri Yanlılığı Olmadan Nasıl Backtest Yapılır?
Çalıştırılmış bir Python ML backtesti: olgunlaşmış etiketler, aylık eğitim, bilgi zamanlaması testleri, işlem kayıtlarının muhasebesi ve maliyet sonrası zarar. Altı özellik; geleceğe ait girdi yok.
Bir ML işlem stratejisini test ederken her karar anında hangi bilginin mevcut olduğunu yeniden kurun: tamamlanmış özellikler, sonucu belli olmuş eğitim etiketleri, yalnızca eğitim verisiyle öğrenilmiş dönüşümler ve sinyalden sonra gerçekleşen emirler. Günlük Bitcoin lojistik regresyon stratejisinde bu süreci çalıştırdık. Strateji 2024–25 döneminde modellenen maliyetlerden sonra −1.67% getirdi; başlangıç tahsisli al ve tut hesabı +96.28% sağladı. Gelecekteki getirileri girdi olarak kullanan, bilerek geçersiz kılınmış sürüm ise görünürde +867.06% kazandı. Bu fark, kârlılığı yorumlamadan önce bilgi takviminin neden sınanması gerektiğini gösteriyor.
BU ARAŞTIRMANIN ORTAYA KOYDUKLARI
- Kronolojik bölmede de sızıntı olabilir: her aylık sınırdaki beş eğitim satırının etiketleri henüz tamamlanmamıştı.
- Her ay uygun geçmiş satırlarda yeni bir ölçekleyici ve model eğitildi; değerlendirme döneminin önceki etiketleri sonraki eğitimlere ancak gözlemlenebilir olduktan sonra girdi.
- Gelecekteki gözlemler değiştirildiğinde geçerli uygulamanın önceki tahmin ve emirleri aynı kaldı; geçersiz kontrol bu testi geçemedi.
- Sabit strateji, komisyon ve kayma olmadan +17.51% kazandı; maliyetlerden sonra 66 kapanmış işlemde −1.67% kaybetti.
- Tahmin puanları, zarar eden bir işlem, dokuz geliştirme seçeneği ve koşullu bootstrap yolları, bu sonucun canlı sermayeyi neden gerekçelendirmediğini açıklıyor.
Önce zaman damgasını belirleyin, sonra tahminin mümkün olup olmadığını sorun
Önceki gelecek veri yanlılığı rehberimiz yaygın hata türlerini açıklar. Bu araştırma, gerçekten eğitilen bir ML işlem hattı kurup çalıştırır ve tahminleri nakit hesabına kadar izler. Soru somuttur: tamamlanmış günlük fiyat ve hacimden türetilen altı özellik, basit bir modelin maliyet sonrası kârlı beş günlük Bitcoin işlemleri seçmesine yardımcı oluyor mu?
İlk yararlı kontrol, somut bir kabul örneğidir. 1 Ocak 2024 gününün tamamlanmış kapanışında, eğitime alınabilecek en son özellik tarihi 26 Aralık 2023’tür. Bu satırın sonucu 27 Aralık açılışından 1 Ocak açılışına uzanır; dolayısıyla zaten bilinmektedir. 27 Aralık tarihli özellik satırı ise 2 Ocak açılışına ihtiyaç duyar ve dışlanmalıdır. Çalıştırdığımız eğitim 725 satır içerir, 26 Aralık’ta biter ve 1 Ocak özellik satırı için 0.452770 tahmin eder: sabit 0.55 işlem eşiğinin altında.
Bir yeniden üretim denemesi eğitimi 31 Aralık’a kadar götürüyorsa, kârı karşılaştırmadan önce etiket bitiş filtresini inceleyin. Olasılık farklıysa UTC günlük girdisini, özellik sırasını, ölçekleyici istatistiklerini ve paket sürümlerini karşılaştırın. Bu yaklaşım, okuyucudan çekici bir son eğriye güvenmesini istemek yerine daha başlangıçta bir hata ayıklama hedefi verir. Tam uygulama, protokol, atıf yapılan girdi, eğitim kayıtları ve işlem kayıtları depodaki araştırma kayıtlarında korunur.
Getiriyi ölçmeden önce hipotezi ve hesap kurallarını sabitleyin
Ekonomik hipotez bilinçli olarak sınırlıdır: yakın geçmişin getirileri, oynaklığı, fiyat aralığı ve göreli işlem etkinliği, sonraki beş açılıştan açılışa gün hakkında tekrarlanan gidiş-dönüş maliyetlerini karşılayacak kadar bilgi taşıyabilir. Lojistik regresyon, katsayıları tek tek incelenebilecek kadar şeffaftır. Hipotezin sınanması makuldür; bu, bir avantajın kanıtı değildir.
Protokolü ve yapılandırmayı bu çalışmanın performansını hesaplamadan önce kaydettik. C = 1 ve 0.55 eşiği, en iyi sonuca bakılarak seçilmedi; önceden sabitlendi. Sınırlı geliştirme tablosunu ileride açıklıyoruz. Geliştirme ve değerlendirme fiyatları önceki TensorParadigm projelerinde zaten kullanılmıştı; bu nedenle çalışma daha önce hiç görülmemiş bir keşif örneklemi değil, geriye dönük bir yöntem gösterimidir.
| Karar | Sabit tanım |
|---|---|
| Piyasa ve saat | BTCUSDT; günlük UTC; spot benzeri uzun/pozisyonsuz nakit hesabı |
| Tahmin | Tamamlanmış kapanış t’de; open[t+6] / open[t+1] − 1 > 0 olasılığı |
| Eğitim | Aylık; önceki 730 takvim günü; yalnızca sonucu belli etiketler; en az 252 eksiksiz satır ve iki sınıf |
| Model | StandardScaler → LogisticRegression; C = 1, lbfgs, max_iter = 2000 |
| Giriş ve çıkış | Pozisyonsuz, p ≥ 0.55: t+1 açılışında al; t+6 açılışında sat; çıkış gerçekleşme gününde sinyal yok |
| Miktar | Giriş komisyonu dahil mevcut nakdin 90% kadarı; kesirli BTC; tek pozisyon; kaldıraç yok |
| Her yönde maliyet | 10 baz puan komisyon; 5 baz puan olumsuz gerçekleşme; ayrıca spread çıkarılmaz |
| Geliştirme | 2021; 365 günlük mum; önceki 2020 gözlemleri ilk eğitimi sağlar |
| Doğrulama | 2022–23; 730 mum; yıllık pozisyonsuz başlangıç bölümleri de raporlanır |
| Değerlendirme | 2024–25; 731 mum; aylık yeniden eğitim süreci ve ayarlar dondurulmuştur |
Her dönem 10,000 USDT ve sıfır pozisyonla başlar. Planlanmış beş günlük çıkış, sonraki model tahmini ters yönde olsa da çıkış olarak kalır. Son izin verilen giriş sinyali bilinen takvimden belirlenir; böylece her strateji işlemi raporlama döneminde tamamlanabilir. Son altı tarihte tahmin üretilebilir, ancak yeni işlem açılamaz ve sonucu henüz belli olmayan etiket dönem sınıflandırma puanlarına katılamaz.
Verinin neyi temsil ettiğini ve hangi kısmının doğrulanmadığını belirleyin
Girdi, 20 Şubat 2020 ile 31 Aralık 2025 arasındaki 2,142 eksiksiz günlük mumu içerir. Yayıncısı CC BY 4.0 beyan eden humblefool06 BTC-USDT dört saatlik arşivinin 9f491eb5340dd6a24f27fde24edf098e1e785443 sürümünü yeniden kullanıyoruz. Günlük mumlar altı UTC gözlemini birleştirir: ilk açılış, en yüksek yüksek, en düşük düşük, son kapanış ve toplam baz varlık hacmi. Önceki eksik gün dışlanır. Normalleştirilmiş CSV’nin SHA-256 özeti 43655a51e6cb41c2ee087bd947f4cefb7dd4151617a29d7f75a3cda471ae5cbb değeridir. [5]
Önceki bir çalışmanın korunan 18 Ekim 2026 çapraz kontrolü, değerlendirme döneminin 731 mumunu, yani 3,655 OHLCV hücresini ondalık karşılaştırmayla Binance’in günlük veri uç noktasına tam olarak eşleştirdi. Aynı girdiyle bu kaydı devralıyoruz; bu makale için yeni bir bağımsız denetim yapmadık. Arşiv, veriyi aldığı asıl işlem platformunu açıkça belirtmiyor. Binance ile eşleşme fiyat uyumunu gösterir; bağımsız borsa kapsamını veya asıl kaynak atfını doğrulamaz. 2020–23 eğitim ve doğrulama gözlemleri dış kaynakla doğrulanmamış durumdadır. Binance mumları açılış zaman damgasıyla tanımlar; tablolarımızdaki günlük tarih UTC seansını belirtir. [6]
Program; tarihlerin benzersiz ve artan olmasını, kesintisiz günlük aralığı, sonlu OHLCV değerlerini, pozitif fiyatları ve tutarlı yüksek/düşük sınırlarını kontrol eder. Bu kontroller bozuk girdiyi yakalar; her hatalı gözlemi yakalamaz. Hâlen var olan tek bir kripto enstrümanı, geçmişte yatırım yapılabilir bir evrenin performansı hakkında da bilgi vermez. Raporlanan hesaplamalar Python 3.13.3, pandas 2.2.3, NumPy 2.2.6 ve scikit-learn 1.6.1 ile üretildi.
Gelecek fiyatları sonucu tanımlamak için kullanın, tahmine girdi vermek için değil
Altı girdi şunlardır: bir, beş ve yirmi günlük kapanış getirileri; son yirmi adet bir günlük getirinin anakütle standart sapması; tamamlanmış günün yüksek–düşük aralığının kapanışa oranı; hacmin son yirmi günlük ortalamasına oranı eksi bir. Tüm pencereler yeni tamamlanan seansı içerir. Eksik ısınma satırlarını geriye doldurmak yerine çıkarıyoruz. Mevcut kapanış, o kapanıştan sonraki karar için geçerli girdidir; aynı günün önceki açılışında verilecek karar için mevcut değildir.
Aşağıdaki özellik ifadeleri, çalıştırılan Python uygulamasından alıntılardır. Pencerenin geriye bakması gerekir. Bunu ortalanmış bir pencereyle değiştirmek veya dönüşümü tüm geçmişte tahmin etmek, karar anında mevcut bilgiyi değiştirir. Scikit-learn’ün veri sızıntısı rehberi de dönüşümlerin eğitim alt kümesinden öğrenilmesini gerektirir. [1]
returns = close.pct_change(fill_method=None)
X = pd.DataFrame({
"return_1": returns,
"return_5": close.pct_change(5, fill_method=None),
"return_20": close.pct_change(20, fill_method=None),
"volatility_20": returns.rolling(20).std(ddof=0),
"range_to_close": (high - low) / close,
"relative_volume_20": volume / volume.rolling(20).mean() - 1,
})Hedef, tahmin edilen sonucu tanımladığı için gelecekteki açılışları kullanır. Etiket 1, ham çıkış açılışının ham giriş açılışından yüksek olduğunu belirtir; eşitlik sınıf 0’dır. Bu, işlemin komisyon sonrası para kazandığı anlamına gelmez. Aşağıdaki negatif kaydırmalar yalnızca hedef oluşturmaya aittir. Son eksik sonuçlar eksik bırakılır: yalnızca karşılaştırma yapmak, bilinmeyen sonuçları sessizce yanlış sınıf-0 gözlemlerine dönüştürürdü.
target_return = open_price.shift(-6) / open_price.shift(-1) - 1
y = (target_return > 0).where(target_return.notna())
label_end = X.index + pd.Timedelta(days=6)
train_mask = (
(X.index >= fit_date - pd.Timedelta(days=730))
& (X.index < fit_date)
& (label_end <= fit_date)
& y.notna()
& X.notna().all(axis=1)
)Eğitim etiketleri geleceğe uzanıyorsa tarih bölmesi yeterli değildir
1 Ocak 2024 kapanışında, etiket bitişine bakmadan önceki 730 günü alan bir filtre 1 Ocak 2022 ile 31 Aralık 2023 arasındaki özellik tarihlerini seçer. Beş satır uygun değildir: sonuçları 2–6 Ocak 2024 tarihlerinde biter. Olgunlaşma koşulu bunları çıkarır ve 26 Aralık’a kadar 725 gözlem bırakır. Değerlendirme kaydındaki her aylık eğitimde aynı beş satır dışlanır.
Şema, gözlemlenmiş bir sonuçla karar sınırını aşan sonucu ayırır. Tarihler, uydurulmuş bir fiyat yolunu değil, gerçek protokolü anlatır. Sınırın iki tarafı da anlatımda Ocak diye geçse de 1 Ocak açılışı o günün kapanışında mevcuttur; 2 Ocak açılışı mevcut değildir.
Bu eksiksiz günlük takvimde ilk test özelliği t tarihinde olan bir TimeSeriesSplit, son eğitim özelliğini t−6 yapmak için beş örneklik boşluğa ihtiyaç duyar. Altı örneklik boşluk daha ihtiyatlı olurdu. Scikit-learn gap değerini geçen takvim süresiyle değil, örnek sayısıyla tanımlar. Değişken elde tutma süreleri, eksik seanslar ve gecikmeli verilerde bu tamsayıyı kopyalamak yerine gerçek kullanılabilirlik zaman damgaları gerekir. Kaydedilen eğitimlerde TimeSeriesSplit değil, açık etiket bitiş maskeleri kullandık. [2]
Bu ileriye dönük işlem deneyi kronolojiyi korumalıdır. Bu, zaman serisi istatistiğindeki her rastgele çapraz doğrulama kullanımına ilişkin evrensel bir iddia değildir. Burada bitişik beş günlük sonuçlar örtüşür; test kümesinden önce tarihli bir satır da henüz bilinmeyen hedef içerebilir. Eğitim sınırındaki sızıntıyı gidermek, kalan test sonuçlarını istatistiksel olarak bağımsız yapmaz.
Ölçekleyiciyi ve sınıflandırıcıyı aynı uygun eğitim penceresinde eğitin
Her ayın ilk tahmin gününde yeni bir işlem hattı kurar, yalnızca olgunlaşmış geçmiş satırlarla eğitir ve bir sonraki aylık eğitime kadar durumunu koruruz. Bugünün özellik satırı, öğrenilen bu istatistiklerle dönüştürülür; ölçekleyici eğitimine eklenmez. İşlem hattı bu sınırı uygulamaya yardımcı olur, ancak gelecekteki veriden türetilmiş özelliği veya yanlış seçilmiş eğitim kümesini düzeltemez. [1]
pipeline = Pipeline([
("scale", StandardScaler()),
("model", LogisticRegression(
C=1, solver="lbfgs", max_iter=2000, random_state=6142026
)),
])
pipeline.fit(X.loc[train_mask], y.loc[train_mask].astype(int))
assert pipeline.named_steps["model"].classes_.tolist() == [0, 1]
p_up = pipeline.predict_proba(X.loc[[signal_date]])[0, 1]C, düzenlileştirme gücünün tersidir: daha küçük değer daha güçlü düzenlileştirme uygular. Pozitif olasılık sütunu, classes_ = [0, 1] sırasına göre kontrol edilir. Özellik sırasını, eğitim satırlarının özetini, ölçekleyici ortalama ve ölçeklerini, katsayıları, sabit terimi ve optimizasyon yinelemelerini kaydederiz. lbfgs çözücüsü kullanılır; random_state verilmesi onun belirlenimliliğini açıklamaz. [3]
Aylık yeniden eğitim, önceki değerlendirme sonuçlarını olgunlaştıktan sonra meşru biçimde kullanır. Örneğin Şubat eğitimi, uygun Ocak gözlemlerinden öğrenebilir. Bu, iki yıl boyunca sabit kalan tek bir model değil, zamanda ileri doğru değerlendirilen sabit bir güncelleme sürecidir. C, eşik, özellikler veya eğitim takvimini değiştirmek için sonraki değerlendirme sonuçlarını hiç kullanmadık. Bu tercihleri yeniden ayarlamak yeni bir değerlendirme protokolü gerektirir.
predict_proba sonucuna güvenmek yerine ilk kabul edilen tahmini yeniden kurun
İlk kabul edilen değerlendirme sinyali 12 Ocak 2024 kapanışında oluşur. Hâlâ 1 Ocak eğitimini kullanır: 1 Ocak 2022 ile 26 Aralık 2023 arasındaki 725 satır; son eğitim sonucu 1 Ocak açılışında biter. Tablo, gerçek özellik vektörünü, eğitim istatistikleriyle standartlaştırılmış değerlerini ve öğrenilmiş katsayıları gösterir. Buradaki değerler yuvarlanmıştır; denetim tam hassasiyet kullanır.
| Özellik | Ham değer | Standartlaştırılmış z | Katsayı |
|---|---|---|---|
| return_1 | −0.076748 | −2.672794 | −0.103549 |
| return_5 | −0.026094 | −0.417899 | −0.111867 |
| return_20 | −0.021039 | −0.200837 | +0.039253 |
| volatility_20 | 0.030521 | 0.420563 | +0.026111 |
| range_to_close | 0.117233 | 2.754973 | −0.019805 |
| relative_volume_20 | 0.778955 | 1.552860 | +0.037502 |
Her özellik için z = (x − eğitim ortalaması) / eğitim ölçeği. 0.014133035 sabit terimine z ile katsayı çarpımlarının toplamı eklendiğinde logit 0.344416426 olur. 1 / (1 + exp(−logit)) dönüşümü 0.585262925 verir. Bu, 0.55’i aştığından pozisyonsuz hesap 13 Ocak açılışı için alım emri gönderir. Bu sayı, modelin pozitif brüt fiyat hareketi olasılığıdır; net işlem kârının kalibre edilmiş olasılığı değildir.
İlk değerlendirme gününün olasılığı 0.452769888’dir ve kurala uygun olarak işlem üretmez. Bu iki denetim noktası, özellik veya eğitim farkını emir işleme farkından ayırmaya yardımcı olur. Gerçekleşme, nakit tahsisi veya çıkış takvimi yanlışsa doğru bir tahmin bile hatalı backteste dönüştürülebilir.
Tahmini, emri ve nakit hesabını ayrı tutun
Uygun bir kapanış sinyali, sonraki açılışta giriş ve beş açılıştan açılışa gün sonra çıkış planlar. Simülasyon nakdi gerçek gerçekleşme anında tahsis eder: miktar = 0.90 × nakit / (alış gerçekleşmesi × 1.001). Bu, dün yarının bilinmeyen açılışı kullanılarak hesaplanan miktarı değil, aracı kurum tarafında nakit tahsisini tanımlar. Alış gerçekleşmesi ham açılış × 1.0005; satış gerçekleşmesi ham açılış × 0.9995’tir. Her komisyon, kayma uygulanmış işlem tutarının 0.001 katıdır.
if flat and not exited_today and p_up >= 0.55:
entry_date = signal_date + pd.Timedelta(days=1)
exit_date = signal_date + pd.Timedelta(days=6)
if exit_date <= evaluation_end: # known calendar, not future prices
pending_buy = (entry_date, exit_date)
# At the entry open:
fill = open_price * 1.0005
quantity = 0.90 * cash / (fill * 1.001)Her günlük kapanışta özsermaye, nakit ile BTC miktarı çarpı ham kapanışın toplamıdır. Zirveden düşüş, başlangıç bakiyesi de dahil bu günlük kapanış hesabının ulaştığı en yüksek değere göre ölçülür. Kayma fiyatların içine gömülüdür; tekrar çıkarılmaz. Strateji pozisyonlarının hepsi raporlama aralığında tamamlanır; al ve tut ise BTC’yi son kapanışla değerleyerek elde tutar, giriş komisyonunu içerir ve kurgusal çıkış komisyonu ödemez.
Kriptonun günlük kapanışı ile sonraki açılışı bitişiktir. Tam o açılışta gerçekleşme idealize bir varsayımdır: bu çalışma, model hesaplama, borsa veya ağ gecikmesinin o anda uygulanabilir olduğunu göstermez. Beş baz puan gözlemlenmiş emir defteri ölçümü değil, duyarlılık varsayımıdır. Kaldıraç, kısa pozisyon, stop, fonlama, nakit faizi, vergiler, sabit işletme giderleri ve USDT dönüşümünü dışlıyoruz; kesirli miktarlar borsa filtrelerini dikkate almaz. Bu tercihler simülasyonun kapsamını tanımlar.
Sabit model maliyet sonrası zarar ediyor ve basit al ve tut hesabının gerisinde kalıyor
Brüt sonuçlar, hem komisyonun hem kaymanın sıfırlandığı ayrı bir hesap çalıştırmasından gelir. Net sonuçlar, her yönde sabit on artı beş baz puan varsayımlarını kullanır. Geliştirme, doğrulama ve değerlendirme hesaplarının her biri 10,000 USDT ile başlar. Tablo, modelin beklenen değerlerini değil, ölçülen sonuçları verir.
| Dönem | Brüt ML getirisi | Net ML getirisi | ML azami düşüşü | Kapanmış işlemler | Net al ve tut |
|---|---|---|---|---|---|
| Geliştirme 2021 | +26.88% | +10.56% | 41.81% | 51 | +53.60% |
| Doğrulama 2022–23 | −40.06% | −46.76% | 54.13% | 44 | −7.78% |
| Değerlendirme 2024–25 | +17.51% | −1.67% | 27.82% | 66 | +96.28% |
Değerlendirmede ML hesabı, açık BTC olmadan 9,832.51 USDT ile biter; kapanmış işlem kâr/zararı −167.49 USDT’dir. Ortalama yatırılmış özsermaye oranı 40.63% olmasına rağmen 27.82% günlük kapanış azami düşüşü, al ve tut hesabının 30.86% değerinin yalnızca biraz altındadır. 731 günlük kapanışın 330 tanesinde BTC tutar. Daha düşük piyasa maruziyeti, kendiliğinden çekici bir risk düzeltilmiş alternatif anlamına gelmez.
İki karar kuralı karşılaştırması aynı beş günlük elde tutma, bekleme, miktar ve maliyet kurallarını kullanır. Tamamlanmış yirmi günlük getiri pozitifken alım yapmak, 71 işlemde −11.63% getirir; düşüşü 33.99% olur. Aylık olgunlaşmış eğitim örnekleminin pozitif etiket sıklığı 0.55’e ulaştığında işlem yapmak, 36 işlemde −26.56% getirir; düşüşü 37.85% olur. ML kuralı burada bu iki politikayı geçer, ancak zarar eder ve al ve tut hesabının çok gerisinde kalır. Bu, özelliklerin kalıcı ekonomik avantaj sağladığını göstermek için yetersizdir.
Grafikteki hesaplar, gerçekten hesaplanmış günlük özsermayeyi kullanır. Al ve tut ilk dönem açılışında aynı giriş maliyetleriyle 90% yatırır ve 10% nakit bırakır. Çok daha yüksek piyasa maruziyeti karşılaştırmanın bir parçasıdır; ML’nin nedensel katkısının kontrollü tahmini değildir. Daha geniş yorum için ML ve kural tabanlı işlem araştırmamıza bakın.
Tahmin doğruluğu ile işlem kârlılığı farklı ölçümlerdir
Hesap zaten BTC tutarken üretilenler de dahil, sonucu tam gözlemlenmiş 725 değerlendirme tahminini puanlıyoruz. Kalan altı sonuç dönem dışına uzandığı için çıkarılır. 390 pozitif etiket vardır; oran 53.79% olur. Sıklık karşılaştırması, altı özelliği kullanmadan her ayın olgunlaşmış eğitim pozitif oranını tahmin olarak verir.
Doğruluk hesabı 0.50 sınıflandırma eşiğini, emirler 0.55’i kullanır. Brier puanı karesel olasılık hatasını ölçer; log loss olasılık hatalarını logaritmik biçimde cezalandırır, ROC AUC sıralamayı ölçer. Bu değerler miktarı veya komisyonları içermez. Daha düşük Brier puanı da tek başına daha iyi kalibrasyon göstermez: kalibrasyondan fazlasını yansıtır. Olasılıklarımız ayrıca kalibre edilmedi. [4]
| Değerlendirme tahmini | 0.50 eşiğinde doğruluk | Brier ↓ | Log loss ↓ | ROC AUC |
|---|---|---|---|---|
| Altı özellikli lojistik regresyon | 50.76% | 0.251416 | 0.695919 | 0.502044 |
| Olgunlaşmış eğitim sıklığı karşılaştırması | 53.79% | 0.249933 | 0.693033 | 0.476881 |
ML modeli, sıklık karşılaştırmasının Brier puanını veya log loss değerini iyileştirmez. 0.5020 AUC değeri 0.5’e yakındır; ancak örtüşen bu sonuçlara bağımsız gözlem varsayımıyla anlamlılık iddiası eklemiyoruz. 725 tahmin, 725 bağımsız işlem de değildir: hesap gerçekte 66 işlem kapatır. Puanlardaki küçük farklar, ekonomik sonuca karşı ikna edici bir tahmin başarısı sunmaz.
Zarar eden ilk işlemi iki gerçekleşme ve nakit bakiyesi boyunca izleyin
12 Ocak’ın 0.585262925 tahmini ilk işlemi tetikler. 13 Ocak’ta ham giriş açılışı 42,782.74 USDT’dir. Beş baz puan olumsuz gerçekleşmeden sonra alış fiyatı 42,804.131370 olur. Miktar 0.210050027959 BTC’dir. Giriş işlem tutarı 8,991.008991 USDT, komisyon 8.991009’dur; tam 1,000 USDT nakit kalır.
Zorunlu 18 Ocak çıkışı, 42,776.09 ham açılışını ve 42,754.701955 satış gerçekleşmesini kullanır. Komisyonu 8.980626 USDT’dir. Kayma uygulanmış fiyatlar arasındaki kâr/zarar −10.382650; iki komisyon çıkarıldığında sonuç −28.354285 USDT’dir. Son nakit 9,971.645715 olur. Bu, başlangıçtaki 10,000 ve sıfır pozisyonla uzlaşır; model olasılığı planlanan çıkışı geçersiz kılmamıştır.
66 değerlendirme işleminin 32 tanesi maliyet sonrası kazanır, 34 tanesi kaybeder: kazanma oranı 48.48% olur. Ortalama kazanan +332.83 USDT, ortalama kaybeden −318.18; kazanç/kayıp büyüklüğü oranı yaklaşık 1.05’tir. Ortalama işlem −2.54 USDT, kâr faktörü 0.9845’tir. Ne kazanma oranı ne de brüt yön tahmini tek başına nakit sonucunu açıklar; komisyonlar, gerçekleşme fiyatları, değişen sermaye ve kazanç/kayıp büyüklükleri de belirleyicidir.
Getirisi harika görünse bile veri sızdıran modelin bir testte başarısız olmasını sağlayın
15 Haziran 2024 sonrasındaki her gözlemi değiştirdik: OHLC fiyatları iki, hacim üç katına çıktı; önceki değerler sabit kaldı. Geçerli model yeniden kurulduğunda önceki özellikler, uygun eğitim matrisleri, ölçekleyici/model durumu, tahminler, kararlar ve gerçekleşmeler değişmedi. Önceki olasılıklardaki en büyük fark tam sıfırdı. Bu, bu uygulama için çalıştırılmış bir değişmezlik kontrolüdür; olası bütün yanlılıkların giderildiğinin kanıtı değildir.
changed = bars.copy()
future = changed.index > cutoff
changed.loc[future, ["open", "high", "low", "close"]] *= 2
changed.loc[future, "volume"] *= 3
# Valid: past features, fit states, predictions and orders are identical.
# INVALID control: X also contains target_return, so this check fails.Negatif kontrol, gerçekleşmiş gelecekteki açılıştan açılışa getiriyi bilerek yedinci girdi yapar. Aynı aylık işlem hattını ve hesap kurallarını korur, ancak tahmin anındaki bilgi kullanılabilirliğini ihlal eder. Görünürde +867.06% net getiri, 97.66% sınıflandırma doğruluğu ve 0.998676 AUC bildirir. Bunlar GEÇERSİZ bir backtestin ölçümleridir; strateji adayı veya seçimde kullanılan sonuç değildir.
Aynı gelecek veri değişikliği, geçersiz modelin önceki olasılıklarını 0.998626629 kadar değiştirir. Kontrol, doğru ölçekleme, kronolojik eğitim ve makul emir muhasebesinin henüz mevcut olmayan girdiyi kurtaramayacağını gösterir. Sınırdaki beş olgunlaşmamış etiket ise daha sessiz bir hatadır: takvim, dikkat çekici bir performans farkına gerek kalmadan bunların geçersizliğini kanıtlar.
Araştırma testleri; geriye bakan özellik zamanlamasını, son eksik etiketleri, kesin etiket olgunlaşma sınırlarını, yalnızca eğitimde ölçeklemeyi, aylık modelin yeniden kullanımını, sınıflandırma dönem sınırlarını, örtüşmeyen emirleri, çıkış günü beklemesini, komisyon dahil miktarı, nakit/kâr-zarar uzlaştırmasını ve belirlenimli blok yeniden örneklemeyi de kapsar. Bilgi zamanlaması testi, bozuk olduğu bilinen sürümde başarısız olmalıdır; kodun çalıştığını görmek tek başına zayıf kanıttır.
Geliştirme tablosunu açıklayın ve başarısız doğrulama bölümlerini koruyun
Yalnızca dokuz geliştirme birleşimini değerlendirdik: C için {0.1, 1, 10}, giriş eşiği için {0.50, 0.55, 0.60}. Tablo net 2021 getirilerini gösterir. Eşik değişince çekiciliğini kaybedenler de dahil her seçenek korunur. Diğer geliştirme ayarları daha iyi görünse de önceden belirlenen C = 1, eşik = 0.55 yapılandırması makalenin stratejisi olarak kalır.
| C | Eşik 0.50 | Eşik 0.55 | Eşik 0.60 |
|---|---|---|---|
| 0.1 | +7.81% | +10.56% | +25.24% |
| 1 | +7.81% | +10.56% | +55.01% |
| 10 | +7.81% | +10.56% | +55.01% |
0.50 ve 0.55 eşiklerinde üç C değeri de aynı gerçekleşmiş işlem yolunu üretir; bu, olasılıklarının aynı olduğu anlamına gelmez. 0.60’ta C = 0.1 yolu farklılaşır. Eşik değişimleri işlem uygunluğunu ve sonraki bekleme fırsatlarını değiştirir; küçük tahmin farklarının birikimli getiriyi neden değiştirebildiğini açıklar. Bu tablo, farklı piyasa dönemlerinde istikrarlı biçimde kârlı bir bölge saptamaz.
Doğrulama, aylık kayan eğitimlerle sabit süreci kullanır. Ayrı yıllık hesaplar 2022’de 37 işlemde −44.04%, 2023’te yedi işlemde −4.87% kaybeder. Azami düşüşleri 54.13% ve 8.60% olur. Bunlar kendi son takvim kısıtları olan, pozisyonsuz başlayan bölümlerdir; getirilerini bileşikleştirmek kesintisiz 2022–23 hesabına tam eşit değildir. Kesintisiz değerlendirme hesabında 2024 getirisi −1.14%, 2025 getirisi −0.54% olur.
Tarihsel olarak en iyi seçeneği seçmek, tek bir sabit kuralı değerlendirmekten farklı bir araştırma süreci yaratır. Bailey ve çalışma arkadaşları, backtestler arasından seçimin aşırı uyuma nasıl yol açabileceğini biçimsel olarak inceler. Küçük tablomuzu ve olumsuz bölümleri açıklıyoruz; dokuz ayardan resmî bir backtest aşırı uyum olasılığı hesapladığımızı iddia etmiyoruz. Bu rapordan sonra yapılandırmayı değiştirmek, bu dönemleri geliştirme kanıtına dönüştürür. [7]
İşlem devri brüt kazancı tüketiyor; birkaç işlem sonucu belirgin biçimde etkiliyor
Değerlendirme hesabında 132 gerçekleşme vardır. Alış ve satış işlem tutarları toplamı başlangıç özsermayesinin 122.29 katıdır; bu tek yönlü devir tanımı iki tarafı da içerir ve hesabın tamamının 122 kez döndürülmesi değildir. Komisyonlar toplamı 1,222.92 USDT’dir. Ham açılışlara göre fiyatlara gömülü gerçekleşme kaybı 611.46 USDT’dir. Maliyet değişimi sonraki miktarları da değiştirdiğinden bu kayıt toplamlarını ayrı brüt hesaptan çıkarmak, net sonucu tam olarak yeniden kurmaz.
Duyarlılık tablosu, her yöndeki on baz puan komisyonu ve aynı model kararlarını korurken yalnızca olumsuz kaymayı değiştirir. Sıfır kayma bile yalnızca +4.34% getirir; on baz puan −7.34% verir. Dolayısıyla çalışma rahat bir gerçekleşme payı ortaya koymaz. Komisyonsuz ve kaymasız +17.51% sonucu muhasebe hakkında bilgi verir; elde edilebilir net getirinin tahmini değildir.
| Her yönde komisyon | Her yönde kayma | Net değerlendirme getirisi | Azami düşüş |
|---|---|---|---|
| 10 bp | 0 bp | +4.34% | 27.37% |
| 10 bp | 5 bp | −1.67% | 27.82% |
| 10 bp | 10 bp | −7.34% | 28.27% |
| 10 bp | 20 bp | −17.72% | 30.67% |
Net kârı en yüksek üç işlem +2,764.12 USDT katkı yapar. Diğer tüm kapanmış işlemler −2,931.61 eder. Bu, gözlenen kayıtla yapılan betimleyici yoğunlaşma hesabıdır; bu işlemlerin silindiği ve sonraki nakdin değiştiği bir tekrar değildir. Önerilecek iyileştirme, önceden mevcut bilgiyle kazançları nasıl koruyacağını veya devri nasıl azaltacağını açıklamalıdır; tarihsel kaybedenleri silmek yalnızca başka bir yanlı sonuç yaratır.
Yeni kanıt üretmiş gibi davranmadan hesap yollarını yeniden örnekleyin
Pozisyonsuz günler de dahil, art arda yirmi net günlük hesap getirisinden oluşan dairesel blokları çekerek her biri 731 gün içeren 5,000 koşullu yol ürettik. 6142026 tohumu hesaplamayı sabitler. Örneklem sonunda başa dönmek ve ardışık blokları korumak, Politis ve White’ın açıkladığı dairesel yeniden örnekleme yapısıyla yerel bağımlılığın bir kısmını korur. Blok uzunluğumuz yirmi günde sabittir; onların otomatik seçim yöntemini kullanmadık. Bu tercih, ilgili tüm bağımlılığın yakalandığını veya getiri sürecinin durağan olduğunu garanti etmez. [8]
Dönem sonu getirinin beşinci yüzdeliği, ortancası ve doksan beşinci yüzdeliği −42.11%, −1.03% ve +61.61% olur. Azami düşüş için bunlar 16.79%, 30.26% ve 51.19%’dur. Yeniden örneklenen yolların 51.44% kadarı başlangıç özsermayesinin altında biter. Bu oran tarihsel örnekleme ve yeniden örnekleme kuralına koşulludur; stratejinin gerçek dünyada zarar etme olasılığının tahmini değildir.
Bu bootstrap, gerçekleşmiş hesap getiri serisini yeniden sıralar. Fiyat üretmez, modeli yeniden eğitmez veya emirleri yeniden hesaplamaz; örneklediği diziler uygulanabilir işlem geçmişleri olmak zorunda değildir. Olanlara koşullu yol duyarlılığını araştırır. Daha fazla yeniden örneklenen yol simülasyon gürültüsünü azaltır, fakat yeni piyasa gözlemi, bağımsız işlem veya tahmin avantajı kanıtı eklemez.
Yapay zekâ işbirlikçisine gerçekten kontrol edebileceği kabul koşulları verin
ChatGPT veya Claude, işlem fikrini kesin bir tanıma dönüştürmeye ve belirsizlikleri sorgulamaya yardımcı olabilir. Codex veya Claude Code depo dosyalarıyla çalışabilir, hesaplamaları yürütebilir ve hataları inceleyebilir. Resmî ürün belgeleri bu geliştirme rollerini destekler; bu yeteneklerin hiçbiri işlem avantajı kanıtlamaz. Proje Codex desteği ve yerel Python hesaplamaları kullandı. Kontrollü ChatGPT–Claude karşılaştırması yürütmedik, piyasa tahmini üretmek için LLM kullanmadık veya bağımsız uzman incelemesi almadık. [9] [10]
Aşağıdaki istemler dört farklı işi incelenebilir kılar. Her isteğe dondurulmuş tanımı ve ilgili kodu ekleyin. Piyasa verisi gözlemleri sağlar, çalıştırılabilir programlar sonuçları hesaplar; varsayımların ve kanıtın yeni bir testi gerekçelendirip gerekçelendirmediğine araştırmacı karar verir. Kendinden emin bir anlatı, uzlaştırılmış kayıtların yerini tutamaz. Daha geniş geliştirme süreci için işlem algoritması geliştirme ve test etme araştırmasına bakın.
Günlük UTC BTCUSDT uzun/pozisyonsuz ML deneyini tanımla. Tamamlanmış kapanış t’de open[t+6]/open[t+1]-1 işaretini tahmin et. Her özelliğin kullanılabilirliğini, hedefin olgunlaşmasını, aylık eğitim penceresini, giriş/çıkış takvimini, nakit tahsisini ve maliyetleri tanımla. Yeniden eğitimi hiperparametre seçiminden ayır. Belirsizlikleri listele ve 2024-01-01 kapanışında eğitime alınabilecek son özellik tarihini ver. Performans hesaplama veya ayarları getiriye göre seçme.Ekli dondurulmuş tanımı; ayrı özellik/etiket, aylık eğitim ve nakit hesabı işlevleriyle uygula. StandardScaler’ı yalnızca olgunlaşmış eğitim diliminde eğit. Son eksik etiketleri koru. Uygun tarihleri, özellik sırasını, ölçekleyici durumunu, katsayıları, olasılıkları, kararları ve gerçekleşmeleri kaydet. C=1 veya threshold=0.55 değerlerini yeniden ayarlama. Gelecekteki OHLCV değişimlerinin önceki her geçerli tahmini ve emri aynı bıraktığı test ekle; bilerek eklenen target_return özelliğinin bu testte başarısız olduğunu göster.Stratejiyi değiştirmeden 2024-01-12 sinyalini denetle. Standartlaştırılmış özelliklerini, logitini ve olasılığını 2024-01-01 eğitiminden yeniden kur. 13 Ocak girişini ve 18 Ocak çıkışını on baz puan komisyon ve beş baz puan olumsuz gerçekleşmeyle izle. Miktarı, nakdi, iki komisyonu ve net kâr/zararı göster. Son özsermayeyi başlangıç nakdi artı kapanmış ve açık piyasa değerli kâr/zararla uzlaştır. Yalnızca son getiriyi açıklamak yerine ilk ayrışan kaydı bul.Kaydedilen çıktılardan araştırma raporu yaz. Her geliştirme seçeneğini, kronolojik dönemleri, brüt/net getirileri, karşılaştırma hesaplarını, tahmin puanlarını, düşüşü, yatırılmış oranı, işlem devrini, kazanç/kayıp asimetrisini, maliyetleri ve yoğunlaşmayı ekle. Örtüşen etiketleri ve koşullu blok-bootstrap sınırlarını açıkla. Gelecek özellik kontrolünü her raporlandığı yerde GEÇERSİZ olarak işaretle. Çalıştırılmış hesaplamaları açıklama amaçlı alıntılardan ve çalıştırılmamış bileşenlerden ayır. Fiyatlara önceden aşinalığı ve veri doğrulama sınırlarını açıkla. Kazanan başlık elde etmek için optimizasyon yapma.Bu kayan scikit-learn işlem hattı için eşleşen bir Pine uygulaması sunmadık veya çalıştırmadık. Tek bir ayda öğrenilmiş katsayıları kopyalamak farklı bir stratejiyi dondurur; doğru karşılaştırma eğitim penceresini, ölçeklemeyi, etiket olgunlaşmasını, yeniden eğitimleri ve gerçekleşme kurallarını yeniden üretmelidir. Bu, araştırmanın kapsam sınırıdır; Pine’ın makine öğrenmesi hesaplarını ifade edemeyeceği iddiası değildir. Python–Pine backtest araştırmamız, yalnızca sinyal formülünü eşleştirmenin neden yetersiz olduğunu açıklar.
Gerekçeli sonraki adım canlı kullanım değil, kayıtlı ileriye dönük testtir
Uygulama sınadığımız bilgi zamanlaması özelliklerini geçiyor; fakat sabit strateji maliyet sonrası kaybediyor, temel olasılık puanlarını iyileştirmiyor ve doğrulamada ağır düşüş yaşıyor. Bu bulgular canlı sermayeyi gerekçelendirmez. Makalenin yararlı sonucu, geçerli tarihsel ölçümü kârlı görünen bilgi sızıntısından ayıran yöntemdir.
Araştırma sürecekse, yeni bir ileriye dönük kâğıt üzerinde işlem dönemini başlamadan kaydedin. Özellik kümesini, olgunlaşma kuralını, yeniden eğitim takvimini, maliyetleri ve raporlama ölçütlerini dondurun. Tamamlanmış her girdiye, öğrenilmiş duruma, sinyale ve uygulanabilir sonraki gerçekleşmeye zaman damgası koyun; gerçek gecikmeyi ve kotasyon spreadini ölçün. Hem eğitim sıklığı tahminiyle hem basit al ve tut hesabıyla karşılaştırın. Önerilen her seçeneği koruyun ve sonraki veriyi, sonucu olgunlaştıktan sonra değerlendirmeye atayın.
Maliyetler bu sonucu belirgin biçimde değiştirdiği için daha düşük devirli tasarım makul bir yeni hipotezdir; fakat kendi sonraki testini kazanmalıdır. Farklı eşik veya elde tutma süresi seçmek için 2024–25’i yeniden kullanmak, bu tarihleri geliştirme verisi yapar. Tek piyasa, dışarıdan doğrulanmamış erken veri, bağımlı sonuçlar, idealize gerçekleşmeler ve canlı uygulama olmaması bu araştırmanın çıkarımlarını sınırlar. Gelecek veri kontrolünü geçmek backtesti yorumlamak için gereklidir; kârlılık yine ayrı kanıt gerektirir.
ML işlem backtesti için inceleme listesi
- Gerçek bir tahmin için kesin gözlem, eğitim, karar ve gerçekleşme zaman damgalarını belirleyin.
- Her eğitim hedefinin eğitimden önce tamamlandığını gösterin; yalnızca özellik tarihlerinin sırasına güvenmeyin.
- Dönüşümleri uygun eğitim satırlarında öğrenin, özellik sırasını koruyun ve her aylık model durumunu saklayın.
- Sonucu belli olmayan son etiketleri eksik bırakın; tahmin puanlamasını gerçekleşmiş işlemlerden ayırın.
- Gelecek verideki değişikliklerin önceki çıktıları aynı bırakmasını sağlayın; sızdırdığı bilinen kontrolün testi geçemediğini doğrulayın.
- Fiyatlara gömülü kayma ve açık piyasa değerli pozisyonlar dahil gerçekleşme maliyetlerini ve nakdi uzlaştırın.
- Denenen tüm ayarları, olumsuz dönemleri, uygun karşılaştırmaları ve gerçekçi maliyet duyarlılığını raporlayın.
- Bir sonraki ileriye dönük süreci, onu değerlendirecek kanıtı görmeden önce dondurun.
ML backtesti hakkında pratik sorular
Kronolojik eğitim/test bölmesi gelecek veri yanlılığını önler mi?
Gelecekten geçmişe karışmanın bir kısmını önler, ancak yeterli değildir. Sınırdan önceki eğitim satırının sonucu sınırdan sonra bitebilir. Beş günlük hedefimiz her eğitimde beş olgunlaşmamış satırın dışlanmasını gerektirir. Ön işleme, özellik kullanılabilirliği ve emir zamanlaması da ayrı kontroller ister.
Her özellik bir gün kaydırılmalı mı?
Hayır. Gerekli kaydırmayı zamanlama belirler. Bugünün tamamlanmış kapanışı ve toplam hacmi, bugünün kapanışından sonra daha sonraki bir gerçekleşme için sinyali destekleyebilir. Bugünün önceki açılışındaki emri destekleyemezler. Tüm girdileri körlemesine kaydırmak, diğer sızıntıları çözmeden amaçlanan stratejiyi değiştirebilir.
Değerlendirme dönemi gözlemi sonraki aylık eğitim kümesine girebilir mi?
Evet; güncelleme süreci önceden sabitlendiyse ve gözlemin hedefi o eğitim anına kadar olgunlaştıysa. Bu, işletimdeki bir modelin yeni kullanılabilir geçmişten öğrenmesini simüle eder. Değerlendirme sonuçlarını gördükten sonra hiperparametre değiştirmek farklı bir seçim kararıdır ve yeni değerlendirme kanıtı gerektirir.
0.55’in üzerindeki tahmin olasılığı, işlemin beklenen kârının pozitif olduğu anlamına gelir mi?
Hayır. Etiketimiz pozitif ham beş günlük açılıştan açılışa getiriyi tanımlar. Net beklenen değer, kazanç ve kayıp büyüklüklerine, maliyetlere, sermayeye ve gerçekleşmeye de bağlıdır. Model olasılıkları ayrıca kalibre edilmedi ve geçerli strateji modellenen maliyetlerden sonra kaybetti.
İşlem etiketlerinde TimeSeriesSplit ne kadar boşluk kullanmalı?
Bunu gerçek etiket kullanılabilirliğinden türetin. Eksiksiz günlük verimizde ve kapanış-t kararında son eğitim özelliği t−6’dır; bu, ilk test özelliği t’den önce beş satırlık boşluğa eşdeğerdir. Başka hedefler, seans takvimleri ve raporlama gecikmeleri farklı boşluk veya açık zaman damgası filtresi gerektirebilir.
ChatGPT veya Claude bir ML işlem botunun kârlı olduğunu doğrulayabilir mi?
Deneyi tanımlamaya, kodu incelemeye ve kaydedilen çıktıları açıklamaya yardımcı olabilirler. Kârlılık, doğru zamanlanmış gözlemler üzerinde çalıştırılabilir hesaplamalardan ve ardından gerçekçi koşullarda ek kanıttan gelmelidir. Bu çalışma Codex desteği kullandı, sabit kuralda olumsuz sonuç buldu; karşılaştırmalı yapay zekâ yatırım yeteneğini veya canlı işlemi sınamadı.
Kaynaklar ve araştırma kayıtları
Getiriler, model çıktıları ve hesap örnekleri TensorParadigm’ın çalıştırılmış hesaplamalarıdır. Depo kayıtları performans öncesi protokolü, yapılandırmayı, atıf yapılan normalleştirilmiş veriyi, çalıştırılabilir Python uygulamasını, testleri, tüm eğitimleri ve eksiksiz işlem kayıtlarını korur. Aşağıdaki birincil kaynaklar yöntemleri, veriyi ve araç açıklamalarını destekler; stratejiyi onaylamaz. Scikit-learn atıfları, çalıştırılan 1.6.1 ortamına karşılık gelen 1.6 belgelerini kullanır.
- Scikit-learn 1.6: yaygın hatalar, yalnızca eğitimde öğrenilen dönüşümler ve veri sızıntısı
- Scikit-learn 1.6: TimeSeriesSplit ve örnek sayısına dayalı gap
- Scikit-learn 1.6: LogisticRegression yapılandırması ve olasılık sınıf sırası
- Scikit-learn 1.6: sınıflandırma ve olasılık puanlama ölçüleri
- humblefool06: BTC-USDT dört saatlik arşivi, sabitlenmiş yayıncı sürümü ve lisans beyanı
- Binance Spot API: mum zaman damgaları ve piyasa verisi uç noktası
- Bailey ve diğerleri: Backtest Aşırı Uyum Olasılığı
- Politis ve White: Dairesel Yeniden Örnekleme Dahil Bağımlı Bootstrap için Otomatik Blok Uzunluğu Seçimi
- OpenAI: kod üretimi ve Codex geliştirme rehberi
- Anthropic: Claude Code genel bakış
Modellenen değişken maliyetler ve idealize gerçekleşmelerle yapılmış geriye dönük eğitsel araştırmadır. Canlı işlem, bağımsız uzman incelemesi veya karşılaştırmalı yapay zekâ yatırım deneyi yürütülmedi. Tarihsel ve yeniden örneklenen sonuçlar gelecekteki kârlılığı kanıtlamaz.