İçeriğe geç

Üç hata, üç geçen test, yakalanan yok

ETHUSDT sürekli sözleşmesinin 4 saatlik grafiği; yan yana çizilmiş iki geriye bakış penceresiyle, biri 23 mum, diğeri 22 mum, yani Pine kaynağının hesapladığı uzunluk ile Python yeniden yazımının aynı formülden hesapladığı uzunluk.
Aynı geriye bakış, iki kez hesaplandı. Pine 22,5'i sıfırdan uzağa yuvarlar ve 23 verir. Python 3 onu çift sayıya yuvarlar ve 22 verir. İki dilde de hiçbir şey size uzlaşımın değiştiğini söylemez.

Bir göstergeyi geriye dönük test etmek için Python'a taşıdıysanız ya da bir betiğe doğrulamayla geldiği için güvendiyseniz, burada konu o iki şeyin açık bıraktığı boşluk.

Üzerlerinde geriye dönük test koşabilmek için kendi göstergelerimizden üçünü yeniden yazdık. Üç yeniden yazımın da içinde yanlış bir sabit vardı. Üçü de doğrulamasını geçti. Hiçbiri bir teste yakalanmadı.

Bir göstergeyi neden yeniden yazalım ki

Bir Pine betiği grafiğinizde çalışır. Altı yıllık geçmişi bir döngüde baştan sona koşmaz ve bir sinyalin gerçekten kazandırıp kazandırmadığını yanıtlamaz. Bunu sormak için onu binlerce kez çalıştırabileceğiniz bir şeyde yeniden yazarsınız.

Bir göstergenin sessizce aynı gösterge olmaktan çıktığı yer, işte o yeniden yazımdır.

En pahalıya patlayan hata, üstelik tek bir mum

Volume Oracle içindeki uzunluklardan biri zaman diliminden türetilir:

target bars   = 36 hours × 60 / 240 minutes = 9
regime length = round(9 × 2.5) = round(22.5)

Pine'ın math.round işlevi eşitlikleri sıfırdan uzağa çözer. Verdiği sonuç 23. Python 3'ün round() işlevi bankacı yuvarlaması kullanır, yani eşitlikleri çift sayıya doğru çözer. Verdiği sonuç 22.

İkisi de yuvarlamanın doğru uygulamalarıdır. Yalnızca farklı uzlaşımlardır ve birinden diğerine geçtiğinizi size hiçbir şey haber vermez.

O sayıdan türeyen her geriye bakış onunla birlikte kaydı. 36 sinyallik bir taramanın en iyi desteklenen satırındaki sonuç:

sürüm48 saatlik avantajisabet oranın
yeniden yazım, uzunluk 22+%0,423511216
doğru sürüm, uzunluk 23+%0,260501223

Bir yuvarlama uzlaşımı yüzünden %38 kesinti.

Sonra dersi de yanlış kaydettik

Yazdığımız notta yalnızca 4H'de olduğu yazıyordu. O sırada test altında bulunan tek zaman diliminden yazılmıştı ve iki ay boyunca öyle kaldı.

Aynı aritmetiği her zaman diliminde koşturunca:

zaman dilimirejim uzunluğuakış uzunluğusonuç
5m45 ile 4523 ile 22ayrışır
2H45 ile 4523 ile 22ayrışır
4H23 ile 2212 ile 11ayrışır
8H53 ile 5227 ile 26ayrışır
1D18 ile 189 ile 9eşitlik, uyuşur
3D, 1W15 ile 158 ile 8eşitlik, uyuşur

On altıda dört, bir değil.

O tablodan, hiçbir akıl yürütmenin üretmediği iki şey düşüyor.

Eşitlik yeterli değildir. 1D, 3D ve 1W'nin hepsi tam olarak ,5 üzerine düşer ve uyuşur. Bankacı yuvarlaması yalnızca yukarı yuvarlanmış yanıtı tek sayı olan bir eşitliği kaydırır, dolayısıyla round(17.5) her hâlükârda 18'dir. Tüm eşitliklerin kabaca yarısı zararsızdır ve tam da bu yüzden birini örnekleme yoluyla denetlemek hiçbir şey kanıtlamaz.

Ayrışma bir adım geç gelebilir. 5m ve 2H'de ilk uzunluk 45'te uyuşur. Sonraki satır, round(45 × 0.5), yine 22,5 eder ve asıl ayrışan odur. İlk sabiti denetleyip yolunuza devam ederseniz, iki zaman dilimini de haksız yere temize çıkarırsınız.

Diğer ikisi, kısaca

Harmonic bir osilatörü kayan bir banda kırparak normalleştirir. Kaynakta her mum kendi bandıyla kırpılır. Yeniden yazım, 200 mumluk bütün bir pencereyi geçerli mumun bandını kullanarak kırpıyordu ki bu başka bir işlevdir. 11.497 mum boyunca ölçülen fark: ortalama 0,47 puan. Maddi etkisi olmayan, gerçek bir aktarım hatası.

Üstelik bunu ölçmeden önce şişirdik. Yalnızca kodu okuyarak, neredeyse kesinlikle %9'luk sapma olduğu duyurulmuştu. Sayı 0,47 çıktı. Gerçek bir hata ile maddi bir hata farklı iddialardır ve etkiye ad verilmeden önce büyüklük ölçülür.

Plutus Flow sıçramaları bulmak için hacmi 50 mum boyunca ortalar. Yeniden yazım 20 kullandı, çünkü bildiğimizi sandığımız sayı buydu. Etki: yüzde puanın onda birinden az, işaret değişimi yok. Hüküm kıpırdamadı, ama sayı yanlıştı ve artık doğru; önemli olan tek ölçüt de bu.

Asıl ders olan kısım

Her yeniden yazımın doğrulaması o sırada şunu bildirdi.

yeniden yazımkendi denetimibunun anlamı
Volume Oracleöncesinde 3/3, sonrasında 3/3ikisini ayırt edemedi
Harmonicöncesinde 6/8, sonrasında 5/8hatalı sürüme daha yüksek puan verdi
Plutus Flowhiç çalıştırılmadı

Üzerinde durulması gereken orta satır. Doğrulama yanlış kodu yeğledi. Kararı denetime bıraksaydık, bizi gerekçelerle hatanın içine geri döndürürdü.

Tek bir çıktı değerini karşılaştıran bir doğrulama, yanlış bir girdi sabitini saptayamaz. Çıktı fazlasıyla kaba bir elektir. Birbirinden farklı pek çok yanlış parametre kümesi bugün aynı rejim etiketini, aynı kesişme durumunu, grafikte aynı rengi üretir. Ayrıldıkları yer, şu anda bakmadığınız mumlardır; geriye dönük testin yaşadığı yer de tam olarak orasıdır.

Bunun yerine ne yapmalı

Türetilmiş her parametreyi yazdırın. Her uzunluğu, her eşiği, her çarpanı. Herhangi bir şeye not vermeden önce bunları kaynakla satır satır karşılaştırın.

Çıktı denetimini koruyun. Başka bir hata sınıfını yakalar ve gereklidir. Yalnızca yeterli olmaktan çok uzaktır ve bu üçü de önünden rahatça geçip gitti.

Dürüst kapsam

Pine kodu üç durumda da doğruydu. Yanlış olan, onu sınamak için kurulan düzenekti; bu da sorunun daha rahatsız edici hâlidir: ölçüm aleti kaydı ve aletin kendi öz denetimi kaymadığını söyledi.

%38 rakamı tek bir satır, tek bir tarama, tek bir zaman dilimi ve örneklem içidir; yeniden koşulmak yerine kendi kaydımızdan alıntılanmıştır. Yuvarlama sonucu tek bir komutla yeniden üretilebilir ve onu düzeltmek, konuyla ilgili kendi notumuzun iki aydır yanlış olduğunu ortaya çıkardı.


Kendi araçlarımıza ait geçmiş bir ölçüm, olaydan sonra anlatılmıştır. Buradaki hiçbir şey bir tavsiye ya da gelecekteki sonuçların göstergesi değildir.