12 beğenilme 0 beğenilmeme
6,909 kez görüntülendi

                           IQ VE BACK TEST VE TERMİNAL İLE FARKLAR

 

Merhabalar,

IQ tarafında, algoritma yapısı, veri terminaline göre daha farklı, daha serbesttir. 

Bu sebeple, bazı detaylar için, kurgunun kullanıcı tarafından belirlenmesi / hedefe bağlı olarak tanımlanması gerekir.

 

Veri terminali tarafında kullanıcılarımızda alışkanlık şöyledir:

AL’madan SAT’maz. Bir AL oluştuktan sonra SAT’madan bir daha AL’maz. Bakiye verilir ise, tümünü kullanır.

Kademeli alım söz konusu değildir. Strateji içinde birden fazla sembole emir gönderimi söz konusu değildir. 

 

IQ tarafında ise, 

Yazacağınız koda bağlı olarak çoklu seçenekler mümkündür.

Peş peşe alım olabilir. Bakiyeye bağlı kalmak mecburiyeti yoktur. 

Kademeli alım yapılabilir vb.

 

Bu gibi detaylardan dolayı, IQ içinde standart durumlar oluşturulmak istenirse, bazı seçenekler / durumlar buna göre belirlenmelidir.

Seçimler, hedefe yönelik yapılabilir. Kodun içine talebe göre çalışmayı sağlayacak eklemeler yapılabilir. 

 

Standart sonuçlar için, her durumda emirlerin sıralı gönderimi seçilmelidir. 

Kodun içinde bu seçim, şu komut ile yapılır:

SendOrderSequential(true);

Bu komut true olarak tanımlanırsa, emirler AL ile başlayacak ve sıralı gönderilecektir. 

Bu konuda ek seçenekler / bilgilendirme için:

https://destek.matriksdata.com/?qa=5332/emirleri-sirali-g%C3%B6nder-se%C3%A7imi-%C3%B6zellikleri-sonu%C3%A7lari

 

OVERALL / BAKİYE TARAFI İÇİN: 

 

Seçenek1: 

Başlangıç bakiyesini sıfır yapmak.  Emir gönderim miktarlarını 1 AL – 1 SAT şeklinde yapmak

Test sonucundaki overall rakamı 1 AL – 1 SAT ile elde edilecek getiriyi gösterecektir. Bu getirinin sembolün fiyatına oranı, getiri oranı olarak baz alınabilir. 

 

Seçenek2: 

Baktest içinde kaç adet AL-SAT miktarı tanımlayacak isek, başlangıç bakiyesini sembolün bu miktarının bedeline eşitlemek. 

İpucu: Esasen, testin başlangıç tarihindeki bedelin baz alınması daha doğru olacaktır. Bu durum, sistem tester’daki puan testine karşılık gelir. 

 

Seçenek 3: 

Kodun içine gerekli komutları girerek, verilen bakiyenin tümünün kullanılmasını sağlamak.

Bunun için örnek bir kod linkte yer almaktadır.

https://destek.matriksdata.com/?qa=1144/stratejide-bakiyeye-g%C3%B6re-al-sat-yapt%C4%B1rmak&show=1169#c1169 

 

DİKKAT: Tüm testler açısından, şöyle bir durum söz konusudur. Son emir SAT olmaz ise, OVERALL ve BAKİYE arasında bir fark oluşur. Baz almanız gereken değer, overall olacaktır. Aşağıda örnekler vardır. 

Örnek 1: 

AL ile başlayan bir strateji için, İşlem sayısı çift rakam olursa:

OVERALL=BAKİYE 

 

İşlem sayısı tek rakam olursa, overall ve bakiye farklı olur.  

Bunun açıklaması şudur: 

AL ile başlayan bir stratejide, tek sayıda işlem, son işlemin AL olması anlamına gelir. 

Overall – Son Alım Tutarı = Bakiye.

Getiri hesabında, overall baz alınmalıdır / alınmaktadır zaten. 

*

 

Optimizasyon değil de, back test de yapılsa, durum / yorum aynı şekildedir. 

 

Yukarıda emir sayısı çift sayıdır ve overall = bakiyedir. 

 

*

 

Aşağıda ise emir sayısı tek sayıdır. Ve overall ile bakiye farklıdır. 

 

BİR ÖRNEK ÜZERİNDEN DETAYLI AÇIKLAMA :

Genelde şu 2 durum ile karşılaşılmaktadır:

• Backtestlerin başlangıç bakiyesini 1000 yapıyorum. Sonuç, 1300-1400 çıkması gerekirken hep 995-1005 arası bir şey çıkıyor.

• Backtest sonucunda aşırı yüksek getiri çıkıyor.

 

Her 2 durumun da asli sebebi, Bakiye ile Miktar uyumsuzluğudur. 

Bakiyeyi 1.000 TL (Birim yapıp), bedeli 1 TL olan bir sembolden 10 AL – 10 SAT yaparsak, 1.000 TL bakiyenin sadece 10 TL sini kullanmış oluruz.

Öte yandan,

Bakiyeyi 1.000 birim yapıp mesela, BTC ile 1 AL – 1 SAT bile yapsak, her alış veriş, takriben 50.000 birimlik olacaktır. 

Her 2 durum da, getiri oranı verisini çok fazla etkiler. 

 

Somut bir örnek üzerinden gidelim. GARAN için yapılmış olan testlerin sonuçlarını irdeleyelim. 

İlk testte miktarlar 1 AL 1 SAT. Başlangıç bakiyesi sıfır. 

 

Gelen rapor: 

 

Başlangıç bakiyesini sıfır verdiğimiz için, yüzdelik rakam ona göre hesaplanıyor. 

Bununla beraber, esas olarak, 

1 alıp 1 satarak, fiyatı şu anda takriben 8 TL olan Garan ile 2.09 TL kazanmışız. Bu da yaklaşık 26 % getiri demektir. 

Burada getiri sembolün fiyatı ile bağlantılıdır. 

 

*

 

AL-SAT miktarlarını  100 yapıp

 

Başkangıç bakiyesini 800 yapalım. 

 

Elde ettiğimiz sonuç:

 

Gene yaklaşık yüzde 26 olacaktır. 

 

Dikkat: Getiri, 100* 2.094783. 

 

yani 1 AL 1 SAT ile elde edilen overall un 100 AL-100 SAT için olacak doğal sonucudur. Başlangıç bakiyesini de 800 aldığımız için, bu sefer yüzdelik getiri doğrudan sonucu vermektedir. 

Lütfen, IQ tarafında back testlerinizi, bu şekilde inceleyin, değerlendirin, yorumlayın. 

Hayırlı kazançlar dileriz.

Algoritmik Trading kategorisinde (13,600 puan) tarafından
tarafından düzenlendi | 6,909 kez görüntülendi
0 0

Diğer bir soruya yazdığımı buraya da kopyalayayım, belki fikir verir bir başkasına,

ben şöyle birşey yaptım. Yapılan kâr ve zarar ile tüm overall ile maksimum lot miktarına işlem girerek backtest yapma çabalarım,

 

GetOverall(); fonksiyonunu kullanarak başlangıçta belirlediğimiz tutar örneğin 100000 tl ise

o an emri gönderdiği bar fiyatı ne ise örneğin (100000 tl / sinyalin geldiği fiyat) olacak şekilde her işlemde kaç lot alabiliyorsa o kadar aldırarak sistem testini yapmaya çalışıyorum.

veya (overall * 0.8) /güncelFiyat yaparak her işlemi sermayenizin %80 i ile alabileceği kadar lot almasını sağlayarak sinyal gönderttirebilirsiniz.

Örneğin şöyle bir yapı kullanıyorum

        private decimal HesaplaPozisyonMiktari(decimal guncelFiyat)
        {
            decimal overall = GetOverall();
            if (guncelFiyat != 0)
            {
                return (overall * 0.8m) / guncelFiyat;
            }
            return 0;
        }

 

koşullarda emir gönderirken ise

                decimal pozisyonMiktari = HesaplaPozisyonMiktari(c);
                SendMarketOrder(Symbol, pozisyonMiktari, OrderSide.Buy);

aynı şekilde sell

                decimal pozisyonMiktari = HesaplaPozisyonMiktari(c);
                SendMarketOrder(Symbol, pozisyonMiktari, OrderSide.Sell);

 

Tabiki eklemeden geçmemeliyim, pozisyon sayılarına da özel kodlama yapmanız gerekiyor, yani ilk alım sinyali geldiğinde örneğin 10500 lot aldı ise satarken de 10500 lot satabilmesi için koşullar ve eşlemeler kurmanız lazım, yoksa alım koşullarınız boyunca her olumlu koşulda fiyat miktarları güncellenip sıradaki sat sinyalinde koşulların son barındaki fiyatı baz alır matriks iq ve 10500 lot satış yapması gerekirken 9500 satış yapar, o şartlarında düzgün kurgulanması gerekmekte, 


örneğin 

pozisyonAcik adında bir değişken ekleyebilirsiniz. Bu değişkenle, pozisyonun açık olup olmadığını takip edersiniz.

şöyle yapabilirsiniz alım koşulu gerçekleştiğinde, pozisyonAcik true olur ve bu sayede tekrarlanan alım sinyalleri işlenmez. Satım koşulu gerçekleştiğinde, sonAlimMiktari, ne ise o kadarlık bir satış emri gönderilir ve sonra pozisyonAcik false olarak ayarlanır, ve bu sayede alınmış olan miktar kadar satılmış olur, bunlara dikkat edilmezse simulasyon yanlış sonuçlar verir,

 

aşağıda pozisyonAcik true , sonAlimMiktari gibi konulara dikkat edilmeden yapılan overall hesaplamasıyla  dikkat edilip kurgulanan arasındaki fark

yani

               SendMarketOrder(Symbol, pozisyonMiktari, OrderSide.Buy);

                _sonAlimMiktari = pozisyonMiktari; // Alım miktarını kaydediyoruz burada
                _pozisyonAcik = true; // Pozisyon açıldı olarak işaretleyip
                Debug("Alım gerçekleşti: " + pozisyonMiktari); buradan veya backtest sonucundan işlemleri kontrol edebiliriz

                SendMarketOrder(Symbol, _sonAlimMiktari, OrderSide.Sell); // Önceki alınan miktarı satıyoruz
                _pozisyonAcik = false; // Pozisyon kapandı olarak işaretliyoruz
                Debug("Satım gerçekleşti: " + _sonAlimMiktari);

her pozisyona overall miktarının %80 i ile o anki alım sinyalinden alınabilecek maksimum lot 

1 cevap

0 beğenilme 0 beğenilmeme
Bakiyeye göre al-sat yapan bir sistemde; bakiyeyi ve kasayı 100 olarak seçtikten sonra, 100 liranın tamamını kullanarak test yapması için minimum adet bilgisini 0.0001 gibi bir değerde tutarsak puan testine oldukça yakın bir sonuç almış olur muyuz?

Teşekkürler..
(271 puan) tarafından
0 0
Merhaba,

Biraz belirsizlik var. Hangi sembol?

Minimum adet bilgisinden kastınız? Emir miktarı olmalıdır konu.

Örnek olarak:

Bakiyeyi 100 yaptınız diyelim. BTC testi yapacaksanız, takriben 40.000 USD olsa fiyatı, emir miktarını 0.025 yaparsanız gerçeğe yakın sonuç alırsınız.

Benim önerim, bakiyeyi sıfır, emir miktarını da daima 1 yapmanız. Böylece 1 alıp 1 satmanın getiri tutarını görürsünüz. Yüzde oranını buna göre kendiniz hesaplayabilirsiniz.

Hangisini uygun bulursanız.

iyi çalışmalar.
0 0
Ben tam da dediğiniz gibi yapıyorum; yani 1 Adet aldırıp 1 Adet sattırıyorum. Yüzde'yi stratejinin içinde hesaplattırıp Log ekranına yazdırıyorum. Bir kaç grafikte IQ ile Prime'da yaptığım backtestlerde uyuşmazlık olunca IQ'daki sıralamanın doğruluğundan şüphelendim de o yüzden sordum. Teşekkür ederim cevap için.
0 0
Merhaba, 1 Al, 1 Sat yapıp, Bakiye 0 alıp, komisyonunda eklediğimizde daha gerçekçi sonuç alırız değil mi? Burada hiç komisyon yazılmamış. ondan sordum. Örneğin 0.4 olarak alırsak.
2 0
Merhaba,

Tabii ki, komisyonu da yazarsanız, esasen daha gerçekçi sonuç alırsınız.

Burada şuna dikkat ediniz. Bir standart belirleyip, hep aynı biçimde test yapmak.

Çünkü, asıl hedef sistemleri karşılaştırmaktır.

Bir de, gerçek hayatta, emirler gerçekleşirken 1-3 kademe kaymalar olabilir.

Bu sebeple, dilerseniz, komisyonu biraz daha yüksek koyunuz.

İyi çalışmalar.
0 0
böyle yapıyorum komisyonu veriyorum. neden yuzde 1500 kar gözüküyor.
0 0

Merhaba,

Ne yaptığınızı / nasıl yaptığınızı görmeden bir şey diyemeyiz.

Şu dokümanı inceleyiniz:

https://destek.matriksdata.com/?qa=5500/iq-back-test-detaylar-terminal-ile-farklar

Gene de sorularınız olur ise, eğitim birime ile irtibata geçiniz.

İyi çalışmalar

 

0 0
merhaba, BTC fiyatı takriben 40 bin dolar olsa demişsiniz ama testin ilk emirdeki fiyatını bilmek gerekir bu da optimizasyonda zaten belli oluyor. veri terminaline göre bana çok karışık geldi.
0 0
Merhaba,

IQ tarafında yapı daha serbest olduğu için, bazı detaylar veri terminaline göre daha zor olabiliyor.

Arkadaşlarımız bu yönde bir alternatif üzerinde çalışıyorlar.

Dilerseniz eğitim birimi ile irtibat kurunuz. 1 tane hesaplama örneğini birlikte deneyiniz.

İyi çalışmalar dileriz.
Hoş geldiniz, Matriks Destek Platformu sizlere sorularınızın hızlıca cevaplanması için bir ortam sağlar. Sorduğunuz ve cevapladığınız soruların ve yorumlarınızın aldığı oylar üzerinden puan kazanırsınız. Puan sistemine bağlı kampanyamızla ücretsiz kullanım avantajlarından faydalanabilirsiniz.



8,632 soru
8,586 cevap
4,819 yorum
19,773 kullanıcı