Algoritmik ticaret - sayfa 33

 

TensorFlow 2.0 ve TFX kullanarak baştan üretime kadar Derin Öğrenme Ticaret Stratejisi


TensorFlow 2.0 ve TFX kullanarak baştan üretime kadar Derin Öğrenme Ticaret Stratejisi

Kendimi Denis olarak tanıtmaktan mutluluk duyuyorum ve algoritmik ticaretle ilgili her şey için başvuracağınız kanal olan ClosetoAlgotrading'e sıcak bir şekilde hoş geldiniz.

Fikrin aklımda ilk kez alevlenmesinden bu yana oldukça zaman geçti: yalnızca derin öğrenmenin gücünden yararlanan bir ticaret stratejisi oluşturmak. Konsept, karlı alım satımları gerçekleştirmek için gerekli parametreleri otonom olarak tanımlayabilen bir sinir ağı geliştirme etrafında dönüyor. Bu heyecan verici yolculuğa çıkmak için, sizin de ilginizi çekeceğini umduğum canlı bir deney yapmaya karar verdim. Önümüzdeki bölümlerde, ilk aşamalardan nihai üretime kadar sağlam bir ticaret stratejisi oluşturmak için bir veri bilimi yaklaşımının uygulanmasına ilişkin her adımda size rehberlik edeceğim.

Amacım, veri hazırlama, titiz testler ve ötesi dahil olmak üzere tüm ara adımları kapsamlı bir şekilde ele almaktır. İleriye baktığımda, TensorFlow 2.0'ı kullanacağım ve tfx boru hattının sunduğu olasılıkları keşfedeceğim. Gerçekten karlı bir girişim yaratıp yaratamayacağımızı belirlemek için derin öğrenmenin gücüne güvenerek karmaşık hesaplamalardan veya kurallardan kaçınmayı düşünüyorum. Bu fikir size uyuyorsa, kanala abone olmanızı ve bu büyüleyici keşif gezisinde bana katılmanızı tavsiye ederim. Birlikte, algoritmik ticaretin kıvrımlarını ve dönüşlerini keşfedeceğiz ve gizli potansiyelini ortaya çıkarmak için çabalayacağız.

Veri bilimi yaklaşımını daha derinlemesine araştırmak isteyenler için basit bir Google araması, konuyu aydınlatan çeşitli kaynaklar sağlayacaktır. Sonuçlar arasında, bu metodolojiyi takip etmekle ilgili adımları özetleyen bilgilendirici makaleler ve görsel temsillerle karşılaşabilirsiniz.

Yolculuğumuzdaki ilk önemli blok, işi anlama aşamasıdır. Bu noktada, hedeflerimizi titizlikle belirlemeli ve stratejimizin bu hedeflere ulaşmadaki etkinliğini değerlendirmek için ölçülebilir değerler olarak işlev gören Anahtar Performans Göstergelerini (KPI) oluşturmalıyız. Bu aşamaya başlamak için, belirli iş alanınızın inceliklerini tam olarak kavramak için zaman ayırmanız çok önemlidir. Hedefiniz hakkında derin bir anlayış edinerek, netlik ve odaklanma ile ilerleyebilirsiniz. Belirli sonuçları tahmin etmeyi mi yoksa belirli fenomenleri sınıflandırmayı mı hedeflediğinizi ayırt etmek zorunludur.

Görevimizin doğasını belirlemek için temel sorulara cevaplar aramalıyız. Soruşturmamız "Ne Kadar" veya "Kaç Tane" etrafında dönüyorsa, bir gerileme göreviyle uğraşıyoruz demektir. Öte yandan, "hangi kategori" diye sorarsak, sınıflandırma vb. Gerçekleştirmeye çalıştığımız görevin türünü kavradığımızda, başarıyı gösterecek ölçütleri tanımlamamız çok önemlidir. Bizim durumumuzda, bu ölçümler Yatırım Getirisi (YG) ve doğruluğu içerebilir. Ne de olsa nihai hedefimiz, gelecekteki fiyat hareketlerini sağlam bir şekilde kavramayı gerektiren piyasadan kar elde etmektir.

Gelecekteki fiyat hareketini etkili bir şekilde tahmin etmek, yalnızca yönü belirlemeyi değil, aynı zamanda kesin fiyat seviyesini ve ona ulaşılacağı zamanı da belirlemeyi gerektirir. Ancak sadece yönü bilmek yeterli değildir. Kesin fiyat düzeyine ve bu düzeye ne zaman ulaşılacağına ihtiyacımız var. Hedef fiyatımız için bitmek bilmeyen bekleme sürelerinden kaçınmak için, bir minimum beklenen fiyat hedefi ve bir maksimum bekleme süresi tanımlayabiliriz. Başka bir deyişle, fiyatın yükselebileceği, düşebileceği veya aynı seviyede kalabileceği bir sınıflandırma görevine benzer şekilde, gelecekteki fiyat hareketlerinin yönünü belirlemeye çalışıyoruz.

Yönü tahmin etmede modelimizin performansını başlangıçta ölçmek için, sınıflandırma doğruluğunu kullanabiliriz. Bu metrik, doğru tahminlerin sayısını toplam tahmin sayısına bölerek 100 ile çarparak yüzde olarak ifade eder. Şimdi, hedef fiyat seviyemiz ne olacak? Alım satım stratejimiz için kar seviyesini yatırdığımız sermayenin yüzdesi olarak tanımlayabiliriz. Ek olarak, tek bir ticaret için kabul edilebilir maksimum risk olarak bir stop-loss seviyesi belirleyerek risk toleransımızı belirlemeliyiz. Kâr ve durdurma seviyelerimiz, her ticaret için ROI değerleri olarak işlev görür. Örneğin hisseleri 100$'dan alıp 105$'a gelince sattığımızı varsayalım. Bu %5'lik fiyat hareketi, yatırımımıza %5'lik bir getiri sağlayacaktır. Hem kar almayı hem de zararı durdurmayı kapsayan tanımlanmış çıkış seviyelerimizle, zaman konusunu ele almalıyız. Fiyatın arzu ettiğimiz seviyelere ulaşması için süresiz olarak beklemek istemiyoruz.

Bu nedenle, sabit bir zaman dilimi yerine işlem hacmini kullansak da maksimum bir elde tutma süresi belirliyoruz. Bu seçimin ardındaki mantık, veri hazırlamayı detaylı olarak anlatacağım bir sonraki bölümde daha da netleşecek.

Şimdiye kadarki yaklaşımımızı özetlemek gerekirse: Kârı al, zararı durdur ve pozisyonları kapatmak için maksimum tutma süresi kullanan bir gün içi stratejisi geliştiriyoruz. Alım satımları başlatmak için, gelecekteki fiyatın yönünü tahmin edebilen bir sınıflandırma modeli geliştireceğiz: yukarı, aşağı veya düz. Başlangıçta, modelimizin etkinliğinin ölçüsü olarak doğruluğu kullanacağız. Bu temelin yerine oturmasıyla, bugünkü tartışmamızı sonlandırıyoruz. Amaçlarımızı, hedeflerimizi ve performans metriklerimizi belirledik. Bir sonraki bölümde, daha fazla analiz ve geliştirme için veri kümeleri ve etiketler hazırlayarak verilerimizi derinlemesine inceleyeceğiz.

Yolculuğumuzun bir sonraki bölümünü kaçırmayın. O zamana kadar kendine iyi bak ve bir sonraki karşılaşmamızı sabırsızlıkla bekliyorum.

Deep Learning Trading Strategy from the beginning to the production using TensorFlow 2.0 and TFX
Deep Learning Trading Strategy from the beginning to the production using TensorFlow 2.0 and TFX
  • 2019.11.20
  • www.youtube.com
This is the first episode of the video series where we will try to create a trading strategy using the data science approach, deep learning models, TensorFlo...
 

Başından üretime kadar Derin Öğrenme Ticaret Stratejisi. Bölüm II.


Başından üretime kadar Derin Öğrenme Ticaret Stratejisi. Bölüm II.

Bir ticaret sistemi yaratma konusundaki büyüleyici yolculuğumuzun ikinci bölümüne hoş geldiniz demekten mutluluk duyuyorum. Bir önceki videoda hedeflerimizden bahsetmiştik ve bugün veri setimizi hazırlamaya ve etiketlemeye odaklanacağız. Öyleyse hemen dalalım!

Başlamak için, veri seti hazırlamamızda bize yardımcı olacak bir dizi fonksiyon tanımladım. Öncelikle verilerimizi yüklememiz gerekiyor. Bugünün gösterimi için, kodun çalışma zamanını yönetilebilir tutmak için küçük bir veri kümesi kullanacağım. Gördüğünüz gibi veri kümesi, Zaman, Fiyat, Hacim, Teklif ve Satış gibi bilgileri içeren tick verilerini içerir. Bu gösterinin amacı için, bir yıllık bir döneme ait verileri kullanacağım. Veri kümesinin özelliklerini anlamak için bazı istatistikleri inceleyerek başlayalım. Gözlemlediğimiz en önemli yönlerden biri, 100 $ civarında dolaşan minimum ve maksimum fiyattır. Bu, kar yüzdelerinin kolayca hesaplanmasına izin verdiği için avantajlıdır.

Ek olarak, veri kümesine çok önemli bir parametre ekledim: forma boyutu. Spread, Alış ve Alış fiyatları arasındaki fark olarak hesaplanır. Yayılma boyutu neden önemlidir? Açıklamak için, Alış fiyatının 100$ ve Satış fiyatının 101$ olduğu bir örneği ele alalım. Bu durumda, yayılma 1 ABD dolarına eşittir. Hisseyi alıp hemen satarsak, bu örnekte 1$'a ulaşan spread'i her zaman kaybederiz. Yayılma boyutunu anlamak için, her saniye için tüm günlere yayılan ortalama yayılmayı hesapladım. Grafikte gösterildiği gibi, spread tipik olarak 1 ila 2 sent arasında değişir ve ara sıra biraz daha büyük spreadler görülür. Bu analize dayanarak, yalnızca spread 3 sentin altındaysa alım satım yapmaya karar verebiliriz.

İlginç bir şekilde grafik, en büyük spreadlerin piyasa açıldıktan sonraki ilk birkaç dakika içinde ortaya çıkma eğiliminde olduğunu gösteriyor. Sonuç olarak, bir gün içi stratejisi uygularken ilk 10-15 dakikayı atlamak akıllıca olacaktır. Artık zaman aralığını tanımladığımıza ve spread'i incelediğimize göre, fiyat hareket yönünü tahmin edecek modelimiz için etiketler oluşturmaya geçebiliriz. Bu etiketleri nasıl oluşturuyoruz? Bir önceki videoda bahsedildiği gibi, pozisyon açmak için tetikleyicilerimiz olmadığı için, her çubuk için beklenen getiriye dayalı etiketler oluşturmamız gerekiyor.

Bunu başarmak için, fiyatların pencere bariyerlerini geçtiğinde etiketlerin üretildiği pencere yöntemini kullanacağız. İşte böyle çalışır: n çubuk uzunluğunda bir pencere tanımlarız ve yüzde olarak beklenen getirimize göre üst ve alt pencere engelleri belirleriz. Bu pencereyi tüm çubukların üzerinden bir çubuk adım büyüklüğünde kaydırdığımızda, fiyat pencerenin dışına çıkarsa, penceredeki ilk çubuk etiketi alır. Etiket oluşturmaya geçmeden önce, pencere için parametreleri belirleyelim. Arkasındaki fikir basit olsa da, optimum pencere boyutunu ve bariyer seviyelerini seçmek zor olabilir. Şahsen, bu sorunla boğuşmak için çok zaman harcadım ve henüz kesin bir çözüm bulamadım.

Bu zorluğun üstesinden gelmek için, gün içindeki tarihsel oynaklığı ve tüm veri setini hesaplayacağım. Örneğin, sunulan grafik, ilgili oynaklıkla birlikte bir gün içindeki her tikteki fiyat değişimini göstermektedir. Ayrıca, tüm veri kümesindeki oynaklığı değerlendirebiliriz. Gösterildiği gibi, ortalama oynaklık yalnızca %0,003'tür ve bu da mevcut fiyatın yaklaşık 30 sentine eşittir. Ancak, tüm günü kapsayan bir pencere kullanmayı düşünmüyorum. Pencere uzunluğunu belirlemek için rastgele boyutlarda 100 pencere oluşturmaya çalıştım ve her pencere içindeki ortalama değişkenliği değerlendirdim. Ortaya çıkan grafik, farklı uzunluklardaki pencereler için ortalama oynaklığı gösterir. Örneğin, 50 çubukluk bir pencere boyutu seçerek, yaklaşık %0,001'lik bir oynaklık öngörebiliriz.

Bu oynaklık değeri, minimum beklenen getirinin tanımlanmasında ve zararı durdur fiyatımızın boyutunun hesaplanmasında faydalı olur. Elimizdeki bu bilgilerle, tick verilerimizden hacim çubukları oluşturmaya devam edebiliriz. Tikler yerine çubukların kullanılması, pencere uzunluğunu daha kolay hesaplamamızı sağlar, çünkü bir çubuk tipik olarak benzer bir hacim içerir ve kararlı koşullar sağlar. Bir hacim çubuğu oluşturmak için, tikleri yineleriz ve önceden tanımlanmış bir hedef hacmi (örneğin, 1000) geçene veya ona eşit olana kadar hacmi biriktiririz. Bu biriktirme aşamasında karşılaşılan işaretler, bir hacim çubuğunu temsil eder. Örnek olarak tek bir gün için hacim çubukları oluşturalım. Gösterildiği gibi, seçilen gün için 179 çubuk elde ediyoruz.

Sonuç olarak, fiyat grafiği artık bu hacim çubuklarından oluşuyor. Ayrıca kapanış fiyatını kullanarak her çubuktaki yüzde değişimi ve günlük volatiliteyi hesaplayabiliriz. Ancak, tüm günü kapsayan bir pencere kullanmayı düşünmüyorum. Pencere uzunluğunu belirlemek için, tüm veri kümesi için ortalama oynaklığı ve rastgele oluşturulmuş pencereleri kullandım. Ortaya çıkan grafik, tüm veri kümesi üzerindeki pencere oynaklığını gösterir.

Bu hazırlık adımlarını tamamladığımıza göre artık etiketleri oluşturmaya hazırız. Bu gösterim için, 50 çubukluk bir pencere boyutu ve ortalama fiyata göre yaklaşık 30 sente karşılık gelen %0,003'lük bir beklenen getiri seçtim. Etiketleme işlemi sona erdikten sonra, çapraz etiketler olarak bilinen birkaç benzer etiket bulabiliriz. Farklı olaylar için aynı etiketlere sahip olmamak için, yalnızca pencerenin ilk çubuğu ile fiyatın pencere bariyerini geçtiği çubuk arasındaki en yakın mesafeye sahip etiketleri tutacağız. İncelediğimizde, üç kategoriye (yukarı, aşağı ve düz) eşit olarak dağılmış yaklaşık 700 etiketimiz olduğunu görüyoruz.

Şimdi veri setimizi kaydedelim. İki dosya oluşturacağız: biri ses çubuğu veri kümesini içeren, diğeri ise her bir çubuk için işaret bilgilerini içeren dosya. İkincisi, modelimizde faydalı olabilir, bu yüzden korumaya değer. Bununla, bugünlük tartışmamıza ara vereceğim. Yeterince yol kat ettiğimize inanıyorum ve veri etiketlemeyi daha derinlemesine araştırmak isteyenler için, Marcos Lopez de Prado'nun kitabının değerli içgörüler sağlayan 3. ve 4. Bölümlerini incelemelerini tavsiye ederim.

Bir sonraki adımımız, özellik mühendisliğini ve her şeyi tfx boru hattı üzerinden çalıştırmayı içerecektir. Daha ilgi çekici bilgileri paylaşmak için yakında yeni bir bölüm oluşturmayı umuyorum.

O zamana kadar kendine iyi bak ve bir sonraki videomuzu sabırsızlıkla bekliyorum.

Deep Learning Trading Strategy from the beginning to the production. Part II.
Deep Learning Trading Strategy from the beginning to the production. Part II.
  • 2019.12.11
  • www.youtube.com
This is the second episode of the video series where we will try to create a trading strategy using the data science approach, deep learning models, TensorFl...
 

Başından üretime kadar Derin Öğrenme Ticaret Stratejisi. Bölüm III. TFX Boru Hattı.


Başından üretime kadar Derin Öğrenme Ticaret Stratejisi. Bölüm III. TFX Boru Hattı.

Benimle "Close to AlgoTrading"in başka bir bölümünde sizi tekrar ağırlamaktan heyecan duyuyorum, Denis. Yılbaşı tatilinden sonra denememize devam ettik ve ilerleme yavaş olsa da hala ilerliyoruz. Bugünün videosunda, etiketlenmiş verilerimize daha yakından bakacağız ve TFX ardışık düzenini keşfedeceğiz. Öyleyse, hemen dalalım!

Bir önceki videoda, verilerimiz için etiketleri başarıyla oluşturduk, ancak grafikte nasıl göründüklerini size göstermeyi unuttum. Hızlı bir hatırlatma olarak, tüm verileri yeni bir veri çerçevesinde sakladık. Devam edelim ve bu veri çerçevesini okuyalım.

Veri çerçevemizde, 'dir' sütunu etiketleri içerirken, 'cross_idx' sütunu, fiyat tanımlı penceremizi geçtiğinde tick sayısını temsil eder. Bu sütunlara dayalı açık ve kapalı pozisyon olaylarını görsel olarak temsil etmek için basit bir fonksiyon yarattım. Grafikte, bir açık pozisyon olayı dolu bir üçgenle gösterilirken, kapalı bir pozisyon olayı doldurulmamış bir üçgenle temsil edilir.

Gördüğünüz gibi, açık olayların çoğu fiyat tablosundaki yerel maksimum veya minimum noktalarda gerçekleşir. Bundan sonra, daha önce kullandığımıza benzer şekilde küçük bir veri kümesiyle çalışmaya devam edeceğiz. Ek olarak, veri setini tren, değerlendirme ve test veri setlerine ayıracağım.

Artık etiketlerimizi daha iyi anladığımıza göre, bir sonraki adıma geçelim ve TFX ardışık düzeniyle çalışmaya başlayalım. TFX'e aşina olmayanlar için, Tensorflow Extended anlamına gelir ve ölçeklenebilir ve yüksek performanslı makine öğrenimi görevleri için özel olarak tasarlanmış güçlü bir çerçevedir. TFX ardışık düzeni, makine öğrenimi iş akışının veri alma, modelleme, eğitim, hizmet çıkarımı ve devreye alma yönetimi gibi çeşitli aşamalarını gerçekleştiren bir dizi bileşenden oluşur.

Kendimizi TFX'e alıştırmak için, bileşenleri ve bunların birbirine nasıl bağlı olduğu hakkında ayrıntılı bilgi sağlayan resmi Tensorflow TFX web sayfasını keşfetmenizi tavsiye ederim. İlgili linkleri video açıklamasında bulabilirsiniz.

Ben de TFX'te yeni olduğum için her bölümde birlikte öğreneceğiz. Bugün, boru hattının ilk dört bileşenine odaklanacağız. Bunları kısaca tanıtalım:

  1. ExampleGen: Ardışık düzenin bu ilk girdi bileşeni, girdi veri kümesini alır ve isteğe bağlı olarak farklı alt kümelere böler. Bizim durumumuzda, özel zaman serisi bölmelerini doğrudan desteklemiyor, bu yüzden verileri manüel olarak tren, değerlendirme ve test veri kümelerine ayırdım.

  2. StatisticsGen: Bu bileşen, veri kümesi için istatistikleri hesaplayarak veri dağılımı, standart sapma, eksik değerler ve daha fazlası hakkında içgörü sağlar. Daha fazla analiz için istatistik eserler üretir.

  3. SchemaGen: İstatistikleri inceledikten sonra SchemaGen bileşeni, gözlemlenen veri özelliklerine dayalı bir veri şeması oluşturur. Şema, verilerimizin yapısını ve özelliklerini açıklar.

  4. ExampleValidator: Bu bileşen, istatistikleri ve şemayı referans olarak kullanarak veri kümesindeki anormallikleri ve eksik değerleri kontrol eder. Beklenmeyen veya tutarsız veri kalıplarının belirlenmesine yardımcı olur.

Doğru yolda olduğumuzdan emin olmak için şablon olarak Tensorflow ekibi tarafından sağlanan Chicago taksi örneğini kullanacağım. Bu örnek, veri analizi, doğrulama, dönüştürme, model eğitimi ve sunum dahil olmak üzere uçtan uca iş akışını gösterir.

Şimdi odağımızı tekrar kendi verilerimize çevirelim. Gerekli modülleri içe aktardıktan ve giriş ve çıkış veri klasörleri için gerekli değişkenleri ayarladıktan sonra, verilerimizi TFX boru hattına yüklemeyi deneyebiliriz. Girdi klasörü, değerlendirme, eğitim ve test veri kümeleri için alt klasörler içerir.

ExampleGen bileşenini kullanarak, verilerimizi ardışık düzene kolayca yükleyebilmeliyiz. Ancak öyle görünüyor ki, ExampleGen özel zaman serisi bölmelerini doğrudan desteklemiyor. Varsayılan olarak, verileri yalnızca eğitim ve değerlendirme kümelerine böler. Neyse ki, verileri manuel olarak bölebilir ve kendi girdi bölme yapılandırmamızı yapılandırarak girdi ve çıktı bölmeleri arasında bire bir eşleme sağlayabiliriz.

Sonuç olarak, ExampleGen bileşeni iki yapı oluşturur: biri eğitim veri kümesi için ve diğeri değerlendirme veri kümesi için. Orijinal veri kümemizle eşleştiğini doğrulamak için eğitim kümemizin ilk üç öğesini inceleyelim. Devam ederek, ExampleGen bileşeninden çıktıyı StatisticsGen bileşenine aktarıyoruz. Bu bileşen, hem eğitim hem de değerlendirme veri kümeleri için istatistik yapıtları oluşturur. Tek bir komutla, veri dağılımı, standart sapma, eksik değerler ve daha fazlasını içeren veri kümesi istatistiklerini görsel olarak temsil edebiliriz.

Burada, eğitim veri setinin istatistiklerini gözlemleyebilir ve veri özelliklerine ilişkin değerli içgörüler elde edebiliriz. Aynı istatistik setini değerlendirme seti için de inceleyebiliriz. İstatistiklere dayanarak, etiketlerimizin yalnızca %2'sinin sıfır olmadığını fark ettik, bu da karlı işlemler için giriş olaylarımızın aykırı değerler olabileceğini düşündürüyor. Bu, sınıflar arasındaki dengesizlik nedeniyle gelecekte bir zorluk teşkil edebilir.

Ardından, SchemaGen bileşenini kullanarak veri şemasını otomatik olarak oluşturuyoruz. Bu şema, gözlemlenen istatistiklerden türetilmiştir, ancak istenirse kendi veri açıklamamızı da tanımlayabiliriz. Çıktı, verilerimizin yapısının ve özelliklerinin kapsamlı bir açıklamasını sağlayan bir şemadır. Son olarak, oluşturulan istatistiklere ve şemaya dayalı olarak verileri doğrulayan ExampleValidator bileşenine ulaşıyoruz. Veri setinde herhangi bir anormallik veya tutarsızlık olup olmadığını kontrol eder. Örneğin, Chicago taksi örneğinde, '_company' özelliği beklenmeyen bir dize değerine sahipti. Kendi veri kümemizde bu tür sorunları tespit etmek için ExampleValidator'ı kullanabiliriz.

Bizim durumumuzda, neyse ki, veri setimizde herhangi bir anormallik veya tutarsızlıkla karşılaşmıyoruz. Bu, verilerimizin nispeten temiz ve beklentilerimizle uyumlu olduğunu gösteren olumlu bir işarettir. Bu, TFX'e hızlı girişimizi tamamlıyor. Bir sonraki bölümde, kalan TFX bileşenlerini daha derinlemesine inceleyeceğiz ve verilerimizi nasıl dönüştüreceğimizi ve modelimizi nasıl eğiteceğimizi keşfedeceğiz.

İzlediğiniz için teşekkürler, bir sonraki videoda görüşmek dileğiyle!

Deep Learning Trading Strategy from the beginning to the production. Part III. TFX Pipeline.
Deep Learning Trading Strategy from the beginning to the production. Part III. TFX Pipeline.
  • 2020.01.19
  • www.youtube.com
This is the third part of the Deep Learning Trading Strategy from the beginning to the production series.In this video we are going to review our generated l...
 

Kısım IV. Başından üretime kadar Derin Öğrenme Ticaret Stratejisi. TFX Boru Hattı 2.


Kısım IV. Başından üretime kadar Derin Öğrenme Ticaret Stratejisi. TFX Boru Hattı 2.

"Close to Algotrading"in başka bir bölümüne hoş geldiniz. Ben Denis ve bugün ticaret stratejisi oluşturmamızın bir parçası olarak TFX boru hattını keşfetmeye devam edeceğiz.

Önceki videoda, TFX işlem hattının ilk dört bileşenini ele aldık: ExampleGen, StatisticsGen, SchemaGen ve ExampleValidator. Bu bileşenler, veri doğrulama ve tutarlılık sağlayarak işlem hattımızın temelini oluşturdu.

Şimdi kalan bileşenlere geçelim: Transformer, Trainer, Evaluator, ModelValidator ve Pusher. Bu bileşenler, verilerimizi dönüştürmemize, modelimizi eğitmemize, performansını değerlendirmemize, modeli bir taban çizgisine göre doğrulamamıza ve son olarak doğrulanmış modeli bir üretim ortamına göndermemize olanak sağlayacaktır.

Ancak devam etmeden önce birkaç önemli noktaya değinmeme izin verin. TFX boru hattı güçlü bir çerçeve sunarken, hala bazı hatalara sahip olabileceğini ve bazı bileşenlerin yapım aşamasında olabileceğini belirtmekte fayda var. Ancak, her adıma dikkatlice yaklaşalım ve yol boyunca herhangi bir sınırlamayı tartışalım. Önceki videoda verilerimizi başarıyla doğruladık ve şimdi dönüşüm adımına geçme zamanı. Bu amaçla TFX tarafından sağlanan Transformer bileşenini kullanacağız.

Transform bileşeni, hem eğitim hem de sunum için tutarlı olan veri dönüşümlerini ve özellik mühendisliğini gerçekleştirmekten sorumludur. Bu, hem modeli eğitmek hem de üretimde kullanmak için aynı veri dönüştürme işlevini kullanabileceğimiz anlamına gelir. Bu işlevsellik, ilk etapta TFX'i keşfetmeye başlamamın ana nedenlerinden biridir.

Dönüşüm sürecine başlamak için birkaç Python dosyası oluşturmamız gerekiyor. İlk dosya, sayısal özellikler ve etiketler listesi gibi sabitlerimizi içerecektir. İkinci dosya, giriş verilerini önceden işlemek için tf.Transform tarafından kullanılan bir geri arama işlevi olan bir ön işleme işlevi (preprocessing_fn) içerecektir. Bu fonksiyonda, veri dönüştürme ve özellik oluşturma adımlarını tanımlayacağız. Şimdilik, tüm sayısal giriş özelliklerini z-puanlarına dönüştürmeye ve etiket değerlerini -1, 0 ve 1'den sırasıyla 0, 1 ve 2'ye değiştirmeye odaklanalım. TensorFlow tahmincisi pozitif değerler beklediği için bu etiket dönüşümü gereklidir.

TFX'in mevcut sürümünde yalnızca TensorFlow tahmincilerinin desteklendiğini unutmamak önemlidir. Bir Keras modeli kullanmayı tercih ederseniz, model_to_estimator API'sini kullanarak onu bir tahmin ediciye dönüştürmeniz gerekir. TFX sürüm 0.21, Trainer bileşeni için Keras modellerini desteklediğini iddia etse de, etkileşimli bağlam işleviyle ilgili bazı sorunlarla karşılaştım. Umarız, TFX ekibi yakında bu sorunları çözecek ve istikrarlı ve tamamen işlevsel bir araç sağlayacaktır.

Şimdi veri dönüştürmeye geçelim. Gördüğünüz gibi, Transform bileşeni girdi olarak şu parametreleri bekler: oluşturulan örnekler, veri şeması ve preprocessing_fn işlevini içeren dosyanın yolu. Dönüşüm tamamlandıktan sonra modelimizi oluşturmaya ve eğitmeye geçebiliriz. Eğitmen bileşeni, tanımladığımız özelliklere göre modeli eğitmekten sorumlu olacaktır.

Model ve girdi fonksiyonlarımızı içeren Python dosyasında Trainer bileşeni tarafından çağrılacak bir trainer_fn fonksiyonu tanımlıyoruz. Bu işlev, aşağıdaki öğeleri içeren bir sözlük döndürmelidir:

  • tahmin edici: Modeli eğitmek için kullanılan TensorFlow tahmincisi.
  • train_spec: TensorFlow train_and_evaluate() çağrısının eğitim kısmı için yapılandırma.
  • eval_spec: TensorFlow train_and_evaluate() çağrısının değerlendirme kısmı için yapılandırma.
  • eval_input_receiver_fn: Modeli doğrularken ModelValidator bileşeni tarafından kullanılan yapılandırma.

Bu dosyada, hem eğitim hem de değerlendirme için girdi özelliklerini ve etiketleri oluşturan _input_fn işlevini tanımlarız. Ayrıca sunum girdilerini oluşturan _example_serving_receiver_fn ve TensorFlow Model Analizi (TFMA) için gerekli girdileri hazırlayan _eval_input_receiver_fn gibi ek işlevlerimiz de vardır.

Tahmincimizi oluşturmak için bir build_estimator işlevi tanımlarız. Bu fonksiyonda giriş özellik setini kuruyoruz ve tahmincimizi oluşturuyoruz. DNNClassifier ve DNNEstimator, TensorFlow 1'den geçiş özellikleriyle ilgili hatalara neden olduğu için DNNLinearCombinedEstimator kullandığımı belirtmekte fayda var. TensorFlow 2 yöntemlerini kullandığımız için durumun böyle olmadığına inanıyorum. Ne yazık ki, bu soruna bir çözüm bulamadım. Ancak, Doğrusal tahmin edici iyi çalışıyor gibi görünüyor.

Artık modelimiz tanımlandığına göre, Trainer bileşenini kullanarak onu eğitmeye devam edebiliriz. Gördüğünüz gibi, Trainer bileşeni, trainer_fn işlevini içeren bir module_file ile birlikte transformer_examples, veri şeması, dönüşüm grafiği ve eğitim ve değerlendirme bağımsız değişkenleri gibi diğer parametreleri bekler. Şimdilik sadece eğitim ve değerlendirme için adım sayısını belirledik. Model eğitimi tamamlandıktan sonra TensorFlow Model Analysis (TFMA) kullanarak model analizine geçebiliriz. Devam etmeden önce, sağlanan bağlantıyı izleyerek TFMA'yı kurduğunuzdan emin olun. TFMA, tüm veri kümesinde veya belirli özellik dilimlerinde modelimiz üzerinde analiz yapmamızı sağlar. Bu durumda, üç dilim üzerinde analiz gerçekleştireceğiz: tam veri kümesi, etiket ve iki özel özellik.

Tüm veri setini analiz ettiğimizde, yüzde 98 gibi dikkate değer bir doğruluk gözlemliyoruz. Ancak, etiketlere dayalı olarak modelin performansını incelediğimizde, etiket 0'ı tutarlı bir şekilde tahmin ettiğini fark ettik. Bu sonuç, dengesiz etiketler ve modelimizde kullanışlı özelliklerin olmaması nedeniyle bekleniyordu. Yine de TFMA, modelin performansını değerlendirmek için uygun bir yol sağlar.

İleriye dönük olarak, dışa aktarılan modellerimizi doğrulamamıza yardımcı olan ModelValidator bileşenine sahibiz. Yeni modelleri bir taban çizgisiyle (şu anda hizmet veren model gibi) karşılaştırır ve önceden tanımlanmış kriterleri karşılayıp karşılamadıklarını belirler. Bu doğrulama, bir değerlendirme veri kümesindeki modellerin değerlendirilmesini ve AUC ve kayıp gibi hesaplama ölçümlerini içerir. Yeni modelin metrikleri, taban çizgisine göre geliştirici tarafından belirlenen kriterleri karşılıyorsa, model "yeterince iyi" olarak kabul edilir ve bu şekilde işaretlenir.

Son olarak, modelin doğrulamayı geçip geçmediğini kontrol eden İtici bileşenimiz var. Model doğrulama kriterlerini karşılıyorsa, belirtilen bir dosya hedefine gönderilir. Bu adım, yalnızca doğrulanmış modellerin üretim ortamına dağıtılmasını sağlar.

İşlem hattımızı tamamlamak için tüm bileşenleri bir Apache Beam işlem hattına aktarabiliriz. Daha sonra gerekli tüm dosyaları bir zip arşivinde paketleyebiliriz. Dosyaları arşivden sunucudaki çalışma dizinimize açarak işlem hattını çalıştırabiliriz. Yürütme tamamlandığında, TensorFlow Serving ile kullanıma hazır, eğitilmiş bir modelimiz olacak. Bir Docker konteynerinden TensorFlow Sunumunu nasıl başlatacağınızı ve kullanacağınızı öğrenmekle ilgileniyorsanız, kanalımda bir eğitim videosu bulabilirsiniz.

Bu dizide çok yol kat etmiş olsak da, TFX'in mevcut sürümünün hâlâ belirli sınırlamaları olduğunu unutmamak önemlidir. Özel gereksinimlerinize bağlı olarak, yalnızca bir Keras modeliyle dönüştürme işlevine dayanan bir ardışık düzen uygulamak gerekebilir. Ancak, umarım bu TFX araştırması bilgilendirici ve faydalı olmuştur.

Bir sonraki videoda, ticaret stratejisi geliştirmeye yönelik ana hedefimize geri döneceğiz. Bunun için bizi izlemeye devam edin! Yorum yapmayı, abone olmayı ve bu videoyu beğenmeyi unutmayın. İzlediğiniz için teşekkürler, bir sonrakinde görüşmek üzere!

Part IV. Deep Learning Trading Strategy from the beginning to the production. TFX Pipeline 2.
Part IV. Deep Learning Trading Strategy from the beginning to the production. TFX Pipeline 2.
  • 2020.02.13
  • www.youtube.com
This is the part IV of the Deep Learning Trading Strategy from the beginning to the production series.In this video we are going to diving deeper into the TF...
 

Bölüm V. GIGO. Başından üretime kadar Derin Öğrenme Ticaret Stratejisi.


Bölüm V. GIGO. Başından üretime kadar Derin Öğrenme Ticaret Stratejisi.

"Close to Algotrading"in başka bir bölümüne tekrar hoş geldiniz. Benim adım Denis ve derin öğrenme ticaret sistemi geliştirme konusundaki deneyimlerimi ve başarısızlıklarımı paylaşmak için buradayım.

Tüm sistemi TensorFlow kullanarak uygulamak için önemli miktarda zaman ayırdım, ancak kitaplığın kalitesinden oldukça hayal kırıklığına uğradığımı itiraf etmeliyim. Konsepti takdir etsem de, TensorFlow tarafından sağlanan belgeler bir hayal kırıklığı kaynağı oldu. Görünüşe göre doktoralı parlak beyinler bile iyi yapılandırılmış bir belge yazmakta zorlanıyor. Eskiye göre iyileşme gösterse de birkaç noktada kafa karıştırıcı olmaya devam ediyor.

Ancak belgeler, karşılaştığım daha büyük sorunla karşılaştırıldığında yalnızca küçük bir sorun. Pek çok işlev, kullanmaya çalıştığımda beklendiği gibi çalışmıyor ve hatta resmi örnekler bile bazen düzgün çalışmıyor. Bu, bu çerçevenin bazı temel noktalarını gözden kaçırmış olabileceğimi sorgulamama neden oldu. Ama bu videonun ana konusuna geri dönelim: başarısızlıklarım. Hatırlayacağınız üzere fiyat hareketi için belirli bir yüzdeye dayalı etiketler oluşturmaya karar verdim. Bu etiketlerin çoğunun verilerdeki yerel minimumlar veya maksimumlar olduğu ortaya çıktı.

Bazı basit veri işleme ve hazırlık işlemlerini gerçekleştirdikten sonra, basit bir LSTM ağı oluşturdum ve onu test ettim. Beklentilerim son derece yüksek değildi, ancak sonuçlar gerçekten hayal kırıklığı yarattı. Ekteki görselde de görebileceğiniz gibi, ağ anlamlı bir şey öğrenemedi.

Şimdi, bir sinir ağının mucizeler gerçekleştirmek için tasarlanmadığını hatırlamak önemlidir. Belki de yaklaşımımızı yeniden değerlendirmenin zamanı gelmiştir. Tahmin etmeye çalıştığımız olaylar tüm veri setinin sadece %2'sini temsil ediyor. Bu olaylar aykırı değerler olarak kabul edilebilir ve basit ağımız bunları verilerin geri kalanından ayırmakta zorlanır. Ayrıca, bu olayların ilgisiz olma ve farklı nedenlere sahip olma olasılığı yüksektir, bu da onları doğru bir şekilde tahmin eden bir model oluşturmayı zorlaştırır.

Bu zorluklar göz önüne alındığında, verileri daha iyi anlamaya ve tahmin gücüne sahip özellikleri belirlemeye odaklanmamız gerektiği aşikar hale geldi. Bunu aklımda tutarak, basit bir hareketli ortalama stratejisini tekrar gözden geçirmeye karar verdim. İlk yaklaşımımızda, neden bir pozisyona girmemiz gerektiğine dair net bir anlayıştan yoksunduk. Ancak artık pozisyon açmak için bir stratejimiz var. Mükemmel olmasa da, yararlanabileceğimiz yaygın olarak kullanılan bir stratejidir. Veri setimize iki hareketli ortalama ve bir RSI (Göreceli Güç Endeksi) göstergesi ekledim ve hareketli ortalamaların kesiştiği tüm olayları topladım. Bu, fiyat hareket yönlerini tahmin etmemizi sağladı.

Daha sonra, öncekiyle aynı etiketleme yöntemini kullanarak meta etiketler oluşturdum, ancak bu sefer yalnızca hareketli ortalamaların birbiriyle kesiştiği çubukları etiketledim. Burada önemli bir fark var: konum yönünü (uzun veya kısa) zaten bildiğimiz için etiketlerimizin anlamı farklı olacaktır. 1 etiketi kârı, -1 zararı gösterir ve diğer durumlar için 255 atanır. Güncellenen veri seti ve etiketlerle basit bir LSTM modeli eğittim ve mükemmel bir ROC (Alıcı Çalışma Karakteristik) eğrisi elde ettim. ROC eğrisi, bir sınıflandırma modelinin farklı sınıflandırma eşiklerindeki performansını gösterir. ROC eğrisinin AUC (Eğri Altındaki Alan) değeri, modelin sınıflar arasında ne kadar iyi ayrım yaptığını değerlendirmemize yardımcı olur.

Ancak, modelin tahminlerini incelerken, tutarlı bir şekilde sınıf 0'ı tahmin ettiğini fark ettim. Bu sonuç, bir kez daha, yalnızca ilgili olaylar yerine tüm veri setini kullandığım için ortaya çıktı. Veri setimiz dengesiz kaldı ve özellikler tahmin yeteneğinden yoksundu. ROC eğrileri, modelin diğer sınıfları tahmin etmedeki zayıf performansını maskeleyebildikleri için dengesiz veri kümeleri için ideal değildir.

Verilerdeki dengesizliği gidermek için ayarlamalar yaptım ve yalnızca açık olaylarla ilgili verilere odaklandım. Ne yazık ki, bu değişikliklerden sonra bile modelim öngörü gücü gösteremedi. Rastgele bir modelle aynı sonuçları üretti. Ayrıca, biraz daha iyi ancak yine de tatmin edici olmayan sonuçlar gösteren basit bir ileri besleme modeli denedim. Sonuç olarak, görebileceğiniz gibi, modelinizi düşük kaliteli verilerle beslerseniz derin öğrenmede sihir yoktur. "Çöp içeri, çöp dışarı" ilkesi bu bağlamda geçerlidir. Ayrıca, oldukça dengesiz veri kümeleriyle ve güçlü tahmin gücüne sahip eksik özelliklerle uğraşırken, bir sınıflandırma modeli, veri kümesinin çoğunluğunu oluşturan sınıfı tahmin etme eğiliminde olacaktır.

Daha önce de belirttiğim gibi, verilerimizi anlamamız ve piyasayı yenmenin bir yolunu bulmamıza yardımcı olabilecek süreçleri belirlememiz çok önemlidir.

Bu, bugünkü bölümü tamamlıyor. Umarım anlayışlı ve bilgilendirici bulmuşsunuzdur. Kendinize iyi bakın, evde kalın ve sağlıklı kalın.

Part V. GIGO. Deep Learning Trading Strategy from the beginning to the production.
Part V. GIGO. Deep Learning Trading Strategy from the beginning to the production.
  • 2020.03.21
  • www.youtube.com
This is the part V of the Deep Learning Trading Strategy from the beginning to the production series.In this video we are going to have a look at my fails. W...
 

Bölüm VI. Takviyeli Öğrenme. Başından üretime kadar Derin Öğrenme Ticaret Stratejisi


Bölüm VI. Takviyeli Öğrenme. Başından üretime kadar Derin Öğrenme Ticaret Stratejisi

Ben Denis, "Close to Alga Trading"in başka bir bölümüne hoş geldiniz. Önceki bölümlerimizde, derin öğrenmeyi kullanarak kârlı bir ticaret stratejisi oluşturmak için çalışıyorduk. Şimdiye kadarki ilerlememizi özetleyelim.

Verimsizlik arayışına piyasa koşullarını gözlemleyerek başladık. Tanımlandıktan sonra basit kurallar oluşturduk ve verileri derin öğrenme modellerimiz için hazırladık. Ancak, doğrudan yaklaşımımızı uyguladığımızda bunun istenen sonuçları vermediğini keşfettik. Bu, yaklaşımımızı yeniden düşünmemiz ve alternatif stratejiler düşünmemiz gerektiğini fark etmemizi sağladı.

Bugünkü bölümde yeni bir yön keşfedeceğiz: pekiştirmeli öğrenme. Takviyeli öğrenme, satranç, Dota ve Go gibi oyunlarda insan performansını geride bırakarak çeşitli alanlarda önemli başarılar elde etti. Ayrıca kontrol robotlarında ve sürücüsüz arabalarda da kullanılır. Öyleyse neden ticarete uygulamıyorsunuz? Başarısını garanti edemesem de, keşfedilmesi gereken ilgi çekici bir yol.

Başlamak için, pekiştirmeli öğrenmeye kısa bir giriş yapalım ve temel tanımlara aşina olalım.

Takviyeli öğrenme, optimum kontrol problemlerini çözmek için deneme yanılma yoluyla öğrenme olarak tanımlanabilir. Daha basit bir ifadeyle, nihai bir sayısal ödülü en üst düzeye çıkarmak için belirli bir ortam durumunda gerçekleştirilecek en iyi eylemi bulmayı içerir. Bu kavramı daha iyi anlamak için basit bir benzetme ile görselleştirelim.

Bir monitörün önünde oturan, hisse senedi alıp satan bir tacir düşünün. Burada tacir aracıyı temsil ederken grafik fiyatı ve komisyoncu ortamı oluşturur. Temsilci, ortamın mevcut durumunu gözlemler ve hisse senedi satın almak gibi eylemlerde bulunur. Buna karşılık, aracı komisyoncu ücretleri olabilecek bir ödül alır. Ortam değiştikçe temsilci daha fazla hisse senedi alabilir, satabilir veya hiçbir şey yapamaz. İşlem gününün sonunda aracı, olumlu veya olumsuz olabilen nihai bir ödül alır. Temsilcinin amacı, bu nihai ödülü en üst düzeye çıkarmaktır.

Takviyeli öğrenmede amacımız, bir çevre ile etkileşime girerek öğrenebilen etmenler tasarlamaktır. Şimdi, yolculuğumuz boyunca karşılaşacağımız ana tanımları tanıyalım.

  1. Ajan: Karar veren, eylemleri gerçekleştiren, çevreyi gözlemleyen, geri bildirim alan ve ödülü maksimize etmeyi amaçlayan algoritma.

  2. Çevre: Ajanın ikamet ettiği dünya. Temsilcimizin karar vermesi için mevcut olan tüm verileri kapsar.

  3. Durum: Aracının algıladığı ortamın yapılandırması.

  4. Ödül: Temsilcinin bir işlem yaptıktan sonra aldığı geri bildirim. Temsilcinin maksimize etmeye çalıştığı bir değerdir. Daha da önemlisi, pekiştirmeli öğrenmede ödül mutlaka para veya fiziksel bir ödül anlamına gelmez. Bu, negatif de olabilen sayısal bir değerdir ve amacımız bu değeri maksimize etmektir.

  5. Eylem: Ajanın verilen ortamda yapabileceği her şey. Basit olması için üç eylemi ele alalım: satın al, sat ya da hiçbir şey yapma.

  6. Bölüm: Tüm görevin tam bir çalışması.

Bunlar, yolculuğumuz boyunca kullanacağımız ana tanımlar. Gelecekteki videolarda ele alacağımız başka önemli terimler de var.

Takviyeli öğrenmeye bu girişle, bir sonraki videoda çevre hakkında bilgi edinmeye ve TensorFlow'u kullanarak kendi ortamımızı yaratmaya devam edeceğiz.

Bugün bana katıldığınız için teşekkür ederim ve sizinle birlikte pekiştirmeli öğrenmeyi keşfetmeyi dört gözle bekliyorum. Yakında görüşürüz!

Part VI. Reinforcement Learning. Deep Learning Trading Strategy from the beginning to the production
Part VI. Reinforcement Learning. Deep Learning Trading Strategy from the beginning to the production
  • 2020.07.29
  • www.youtube.com
This is the part VI of the Deep Learning Trading Strategy from the beginning to the production series.In this video we are going to have a look at the main d...
 

Bölüm VII. Takviyeli Öğrenme. Ticaret Ortamı.


Bölüm VII. Takviyeli Öğrenme. Ticaret Ortamı.

Ben Denis ve "Close to AlgoTrading" izliyorsunuz. Geçen bölümümüzde pekiştirmeli öğrenmeye kısa bir giriş yapmıştık. Bugün, acentemiz için basit bir ticaret ortamı oluşturmaya başlayacağız. Ayrıntıları keşfedelim.

İlk olarak, ticaret ortamının neyi temsil ettiğini düşünmeliyiz. Yalnızca fiyat verilerine mi dayalıdır yoksa sipariş defterinin tamamı, haberler ve hatta Twitter'dan gelen söylentiler gibi ek faktörleri dahil etmeli miyiz? Bu karar çevremizin karmaşıklığını şekillendirecek.

Ardından, aracımızın gerçekleştirebileceği eylemleri belirlememiz gerekiyor. "Al" ve "Sat" işlemleriyle sınırlı mı kalmalı yoksa belirli adımları da atlayabilir mi? Eylem alanını tanımlamak, temsilcimizin karar verme süreci için çok önemlidir.

Şimdi hedefi ve ödülleri nasıl tanımlayacağımızı tartışalım. Gerçek dünyada, ticaret ortamı sürekli bir durum uzayına sahiptir. Bununla birlikte, basit olması için, ortamı mümkün olduğu kadar basit tutalım ve onun iç işleyişini ve uygulamasını anlamamıza olanak tanıyalım.

Başlamak için, gerçek fiyat verilerini kullanmak yerine, yalnızca 20 değerden oluşan rastgele bir yürüyüş süreci oluşturacağız. Bu simüle edilmiş günlük fiyatlar bizim girdimiz olacak. Bölüm, bu fiyat dizisinin ortasından başlayacak, yani ilk durum 10 tarihi fiyatı içerecek. Kalan görünmez fiyatlar sıfırlarla doldurulacaktır. Her adımda diziye yeni bir fiyat eklenecektir. Bölüm, 20 fiyatın tamamı acente tarafından görünür hale geldiğinde sona erecek. Bu nedenle, bölümün tamamlanmasına kadar toplam 10 adımımız var.

Fiyat verilerine ek olarak, devlet açık pozisyonumuz hakkında bilgi içerecektir. Pozisyonu tek sıcak kodlama kullanarak temsil edelim: [0,0] açık pozisyon yok, [1,0] uzun pozisyon ve [0,1] kısa pozisyon için.

Tipik alım satım işlemlerini göz önünde bulundurarak, hiçbir pozisyonun açık olmadığı durumlar için "al" ve "sat" işlemlerini dahil edeceğiz. Ancak, zaten açık bir pozisyon varsa, temsilci yalnızca pozisyonu atlamayı veya pozisyonu kapatmayı seçebilir. Dolayısıyla bu senaryoda "sat" veya "satın al" eylemi "atla" ile eşdeğerdir.

Temsilcimizin hedefi, 10 günlük süre boyunca kar ve zararı (PnL) maksimize etmektir. Bu nedenle ödülü günlük PnL olarak tanımlayacağız.

Çevremizin yapısını ve davranışını net bir şekilde anlayarak, artık uygulama aşamasına geçebiliriz. Daha önce belirtildiği gibi, TensorFlow (tf-agent) çerçevesini kullanacağız. tf-agent ekibi, tf-agent için uygun bir ortam geliştirmeye yönelik kapsamlı bir kılavuz sağladı; kodu daha iyi anlamak için incelemenizi tavsiye ederim.

Ortamımızı oluşturmak için, tüm Python ortamlarının uygulaması gereken arabirimi tanımladığı için PyEnvironment sınıfını devralarak başlayacağız. Init işlevinde değişkenleri başlatacağız, başlangıç durumlarını ayarlayacağız ve en önemlisi, eylem ve gözlem özelliklerini belirleyeceğiz. Bizim durumumuzda, eylem alanı, sırasıyla 0 ve 3 olarak ayarlanmış minimum ve maksimum değerlerle dört farklı eylemden oluşacaktır. Gözlem belirtimi, fiyatı 0'dan başlayan ve maksimum limit içermeyen ortam durumunu açıklayacaktır. Fiyatlar için veri tipi değişken olacaktır. Eylem ve gözlem belirtimlerinin döndürülmesi, tf-agent ile sorunsuz entegrasyon için çok önemlidir.

Uygulanacak bir sonraki önemli işlev sıfırlamadır. Bu işlev, ortamı ilk durumuna sıfırlar. Bu işlevin doğru uygulanması, ortamın düzgün çalışması için hayati önem taşır.

Şimdi en kritik işlevi tartışalım: adım. Adım işlevi, girdi parametresi olarak bir eylem alır ve ortamın durum geçişlerini yönetmekten sorumludur. Bu işlevde, olası tüm eylemleri ele alacağız ve PnL'yi (ödül) hesaplayacağız. İşlev, gözlemden (aracının bir sonraki adımda eylemlerini seçmek için gözlemleyebileceği çevre durumunun bir kısmı), ödülden (aracının öğrenme hedefi), adım_türünden (bu zaman adımının son adım olup olmadığını gösteren) oluşan bir zaman_adım döndürür. sıradaki ilk, ara veya son) ve indirim.

Adım fonksiyonunda iki farklı dönüş senaryomuz var: biri ara adımlar için, diğeri bölümdeki son adım için.

Ortamı oluşturduktan sonra, herhangi bir hatayı belirlemek ve düzeltmek için ortamı doğrulamak önemlidir. util paketi, bu amaçla kullanılabilecek olan valide_py_environment adlı bir işlev sağlar. Ek olarak, ortam belirtimlerinin kontrol edilmesi, her şeyin beklendiği gibi çalıştığından emin olmanıza yardımcı olacaktır.

Ortamımız kullanıma hazır olduğunda hata ayıklamak ve davranışını doğrulamak için onu farklı eylemlerle test etmek iyi bir fikirdir.

Basit bir DQN tf aracısı kullanarak bazı testler yaptım ve işte sonuçlar. Aracı, 20.000 adımdan sonra kabul edilebilir bir performans gösterdi. Ancak, aracının öğrenmesi için yalnızca bir zaman serimiz olduğunu ve bunun da onu nispeten basit hale getirdiğini unutmayın. İkinci bir zaman serisi başlatır ve 20.000 adım çalıştırırsak, sonuçlar o kadar umut verici olmayabilir. Ancak yaklaşık 100.000 adımda, aracının performansı önemli ölçüde arttı.

Part VII. Reinforcement Learning. Trading Environment.
Part VII. Reinforcement Learning. Trading Environment.
  • 2020.09.07
  • www.youtube.com
This is the part VII of the Deep Learning Trading Strategy from the beginning to the production series.In this video we are going to have a look at the tradi...
 

Bölüm VIII. Takviye Öğrenme Ticaret Stratejisi. DQN: QNetwork, QRNNNetwork


Bölüm VIII. Takviye Öğrenme Ticaret Stratejisi. DQN: QNetwork, QRNNNetwork

Merhaba, benim adım Denis ve "Close to AlgoTrading" izliyorsunuz. Bu videoda pekiştirmeli öğrenme aracısı için önceki ortamımız hakkında kısa bir güncelleme sunacağız. Ayrıca Q-Learning ve DQN aracısının kısa bir tanımını yapacağız. Ardından, tf-agents kitaplığından bir rDQN aracısı için ana öğrenme adımlarını uygulamaya devam edeceğiz ve test sonuçlarını tartışacağız.

Başlamak için, önceki videoda oluşturduğumuz ticaret ortamını tekrar ziyaret edelim. O ortamda sentetik olarak üretilmiş veriler kullandık. Ancak, bu güncellenmiş sürümde ortamımız, giriş parametreleri olarak geçmiş verileri içeren bir veri çerçevesi alacaktır. Ortam için gözlem_belirtimi, iki anahtarı olan bir sözlüktür: "Fiyat" ve "Konum." "Fiyat" tuşu, açık, kapalı, yüksek, düşük ve hacim verilerini içeren 20 öğe içerir. "Pos" tuşu açık pozisyonumuz hakkında bilgi içerir.

Her bölümün başında, verilerimizden rastgele 20 fiyatlık bir dilim seçiyoruz. Bu değişiklik, takviyeli öğrenme aracımızın gerçek tarihsel verilerden öğrenmesine olanak tanır.

Devam ederek, Q-Learning'i ve Q-Table kavramını tartışalım. Q-Learning, her bir çifte (durum, eylem) bir Q değeri atamayı içerir. Q-Table olarak bilinen bu tablo, ajan tarafından mevcut durumda maksimum Q değerine sahip eylemleri seçmek için kullanılır. Temsilci çevreyi keşfeder, ödüller alır ve gözlemlenen ödüllere göre Q değerlerini günceller.

Q-değerlerini güncellemek için eski Q-değerini ve gelecekteki Q-değerini içeren bir formül kullanırız. Q-Tablomuzdaki bir sonraki durum için maksimum Q-değerine bakarak gelecekteki Q-değerini hesaplıyoruz. Elde edilen gelecekteki Q değeriyle, başlangıç çifti (durum, eylem) ile ilişkili Q değerini güncelleriz.

Bununla birlikte, bizim durumumuzda, finansal piyasanın çok geniş bir durum alanı vardır, bu da bir Q-Table kullanmayı pratik yapmaz. Bu zorluğun üstesinden gelmek için, belirli bir durum için Q değerlerini tahmin etmek üzere derin bir sinir ağı kullanabiliriz. DQN aracısı (Deep Q-Network aracısı) olarak bilinen bu yaklaşım, Q-değerlerinin geri yayılım yoluyla kaybı en aza indirerek güncellendiği bir Q-Network kullanır. DQN aracısında kullanılan kayıp fonksiyonu, belirli bir denklemle verilir.

Artık Q-Learning ve DQN aracısını iyi anladığımıza göre, tf-agents kitaplığını kullanarak rDQN aracısı için ana öğrenme adımlarını uygulamaya geçelim.

Genel eğitim algoritması şu adımları takip eder:

  1. Bir ortam yaratın.
  2. Bir aracı oluşturun.
  3. Bazı politikalar kullanarak ortamdan veri toplayın.
  4. Aracıyı toplanan verileri kullanarak eğitin.
  5. Aracının performansını doğrulayın.
  6. 3. adımdan itibaren tekrarlayın.

Ortamı oluşturmak basit bir iştir. Alım satım ortamımızı, tf-agent'larla sorunsuz entegrasyona izin veren TFPyEnvironment'a sarıyoruz.

Ardından, DQN aracısı için bir Q-Network oluşturuyoruz. tf-agents kütüphanesi, Q-ağımızı tanımlamak için kullanabileceğimiz bir Q-Network sınıfı sağlar. 40 nörondan oluşan gizli, tamamen bağlı bir katmana sahip basit bir Q ağı tanımlıyoruz. Gözlemimiz bir sözlük olduğundan, bunun için basit bir ön işleme katmanı da tanımlıyoruz.

Oluşturulan Q-Network ile DQN aracısı oluşturmaya devam ediyoruz. Q-ağımızı bir parametre olarak geçirerek tf_agents.agents.dqn.dqn_agent sınıfını başlatıyoruz. Ayrıca modeli eğitmek için optimize ediciyi ve kayıp fonksiyonunu tanımlıyoruz.

Aracıyı eğitmek için ortamdan verilere ihtiyacımız var. Bu verileri bir politika kullanarak topluyoruz ve bu adım için eylemleri rastgele seçebiliyoruz. DQN aracısının iki ilkesi vardır: değerlendirme ve devreye alma için kullanılan agent.policy ve veri toplama için kullanılan agent.collect_policy.

Veri toplama, mevcut durumu almayı, bir eylem seçmeyi, bir sonraki durumu ve ödülü almayı ve bu bilgiyi bir arabellekte depolamayı içerir. Yörüngeler oluşturan birden fazla adım veya bölüm topluyoruz. tf-agents kitaplığı, bir bölümün sonuna kadar adımları toplayan DynamicEpisodeDriver adlı bir sürücü sağlar. Sürücü, bir yanıt arabelleği de dahil olmak üzere gözlemcileri günceller.

Verileri depolamak için, tf-agents kitaplığından yaygın olarak kullanılan TFUniformReplayBuffer'ı kullanabiliriz. Tamponun saklayacağı veri öğelerinin özelliklerini, parti boyutunu ve her bir parti segmentinin maksimum uzunluğunu tanımlarız.

Veri toplama adımı tamamlandığında aracımızı eğitebiliriz. Aracı, yeniden oynatma arabelleğine erişim gerektiriyor. Aracıya veri beslemek için bir tf.data.Dataset işlem hattı oluşturuyoruz. Yeniden yürütme arabelleğinin her satırı tek bir yörünge depolar, ancak DQN aracısının kaybı hesaplamak için hem mevcut hem de sonraki gözlemlere ihtiyacı vardır. Bu nedenle, veri kümesi işlem hattının toplu işteki her öğe için iki satırı örneklemesine izin veren num_steps parametresini 2 olarak ayarladık.

Bu noktada, iki DQN aracısını aynı veriler üzerinde eğitmek ve performanslarını değerlendirmek için her şeye sahibiz. Bir ajan basit bir Q-Network kullanırken diğeri bir QRNNNetwork kullanır. Her iki aracı da 200 günlük geçmiş fiyat verileri kullanılarak eğitilir.

700 eğitim adımından sonra, basit Q-Network aracısının fazla bir şey öğrenmediğini ve çoğunlukla negatif bir ortalama getiri gösterdiğini gözlemliyoruz. Bununla birlikte, QRNNNetwork aracısı çoğunlukla pozitif ortalama getiriler gösterir. RNN aracısı verilerdeki bazı dinamikleri yakalayabildiği ve daha hızlı öğrenebildiği için bu sonuç beklentilerle uyumludur.

Bu basit deney, karlı bir temsilci oluşturmak için takviyeli öğrenmeyi kullanmak için biraz umut verse de, aracının performansını değerlendirmek için dikkate alınması gereken başka ölçütler de var. Bunları gelecekteki bir videoda inceleyeceğiz.

İzlediğiniz için teşekkürler, bir sonraki bölümde görüşmek üzere.

Part VIII. Reinforcement Learning Trading Strategy. DQN: QNetwork, QRNNNetwork
Part VIII. Reinforcement Learning Trading Strategy. DQN: QNetwork, QRNNNetwork
  • 2020.10.31
  • www.youtube.com
This is the part VIII of the Deep Learning Trading Strategy from the beginning to the production series.In this video we are going to explore the training st...
 

Kısım IX Takviyeli Öğrenme Ticaret Stratejisi. DQN: Temsilci Politikasına Dayalı Ticaret Stratejisini Test Etme


Kısım IX Takviyeli Öğrenme Ticaret Stratejisi. DQN: Temsilci Politikasına Dayalı Ticaret Stratejisini Test Etme

Yolculuğumuzda önemli bir dönüm noktasına ulaştığımızı duyurmaktan heyecan duyuyorum: stratejimizi test etme. Bu amaçla, testlerimizi yürütmek için basit bir geriye dönük test Python çerçevesi kullanacağız. Başlamak için, "pip install" komutunu ve ardından çerçeve adını uygulayarak çerçeveyi kurabilirsiniz.

Çerçevenin yazarı, onu etkili bir şekilde nasıl kullanacağınızı gösteren basit bir örnek sağlamıştır. Ancak, buna dalmadan önce kendi stratejimizi uygulamamız gerekiyor. Stratejimiz için ihtiyaç duyacağımız tüm değişkenleri başlatıp tanımlayarak başlayalım.

İlginç bir özellik, kaydedilen politikamızı TensorFlow API kullanarak yükleyebilmemizdir. Bir QRNNNetwork kullandığımız için, politikanın ilk durumunu elde etmemiz gerekiyor. Sonuç olarak, başlatma işlevini uyguladık. Şimdi, her yeni adımda çağrılacak olan "sonraki" işlevini uygulama zamanı. Başlangıçta ilk 10 gün için veri toplamamız gerekiyor ve sonrasında gözlem sözlüğümüzü besleyebiliriz. Her adımda, gözlemi günceller ve politikaya aktarırız.

Gözlem sözlüğünü oluşturduktan sonra, ilke modelimiz girdi olarak gerektirdiğinden, bir zaman adımı nesnesi oluşturmamız gerekir. Bu süreci kolaylaştırmak için, gözlem verilerimizi zaman adımı nesnesine dönüştüren basit bir işlev yarattım. Buradaki en önemli unsurlar, gözlem verileri ve step_type'dir. Zaman adımı nesnemizi elde ettikten sonra, politikadan bir eylem alabiliriz. Gördüğünüz gibi, "runPolicy" işlevi, adım_türü 0'a eşitse ilke durumunu sıfırlar ve eylemi ve yeni ilke_durumunu döndürür.

Ardından, konum durumlarımızı güncellememiz ve eylemi gerçekleştirmemiz gerekiyor. Son olarak, "sonraki" işlevinin sonunda, yeni bir bölümün başlangıcını simüle etmek için sayacı artırıyoruz ve her şeyi başlangıç durumlarına sıfırlıyoruz. Harika! Stratejimizi başarıyla uyguladık. Şimdi, test amacıyla bazı verilere ihtiyacımız var. Yahoo Finance'ten günlük verileri almak için panda_datareader kitaplığını kullanabiliriz. Bir yıllık geçmiş verileri kullanarak stratejimizi Intel hissesi üzerinde test ederek başlayalım.

Bir backtest nesnesi oluşturuyoruz ve test etmeye başlıyoruz. Test sonuçları, etkileyici olan %106'lık bir getiri gösteriyor. Ancak, geriye dönük test çerçevesinin hesaplamaları %100'den başlattığını, yani gerçek getirimizin yalnızca %6 olduğunu not etmek önemlidir. Bununla birlikte, politikamızın kapsamlı bir şekilde eğitilmediği düşünüldüğünde, bu kötü bir sonuç değildir. Daha kapsamlı bir değerlendirme sağlamak için, stratejimizi AMD hissesi üzerinde de test edelim. Gördüğünüz gibi, AMD için sonuç yaklaşık %40'lık bir düşüş gösteriyor. Böylece, stratejimizin performansını AMD ve Intel hisse senetleri üzerinde yan yana karşılaştırabiliriz.

Artık ajan politikasını bir geriye dönük test çerçevesiyle nasıl kullanacağınızı biliyorsunuz. Benzer şekilde, gerçek ticaret ortamınız için Python kullanıyorsanız, politikayı da aynı şekilde kullanabilirsiniz. Ancak, diğer dilleri kullananlar için Flask çerçevesini kullanarak politikayı dağıtabilir ve ona bir REST API aracılığıyla erişebilirsiniz.

Umarım bu videoları ilginç ve bilgilendirici bulmuşsunuzdur. Eğer yaptıysanız, lütfen abone olmayı düşünün, bir sonraki bölümde görüşürüz.

Part IX Reinforcement Learning Trading Strategy. DQN: Testing Trading Strategy based on Agent Policy
Part IX Reinforcement Learning Trading Strategy. DQN: Testing Trading Strategy based on Agent Policy
  • 2020.12.13
  • www.youtube.com
This is the final episode of the Deep Learning Trading Strategy from the beginning to the production series.In this video we are going to see how to use the ...
 

Kantitatif Ticaret Sistemi nedir? Yapı ve açıklama.


Kantitatif Ticaret Sistemi nedir? Yapı ve açıklama.

Herkese merhaba! Umarım hepiniz iyisinizdir. En son video yayınlamayalı epey zaman oldu ama sizi temin ederim ki sizi unutmadım. Bugün, yeni ve ilginç bir konuya başlamanın heyecanını yaşıyorum: otomatik ticaret sisteminin yazılım mimarisi.

Yazılım mimarisinin ayrıntılarına girmeden önce, ticaret sisteminin ne olduğunu ve nelerden oluştuğunu anlayalım. Bu videoda, otomatik ticaret sisteminin yapısını ve öğelerini keşfedeceğiz. Şimdi, söylendiği gibi, "Güneşin altında yeni bir şey yok." Bu alandaki yolculuğuma başladığımda, bir ticaret sisteminin iyi yapılandırılmış bir tanımını bulma arayışındaydım. Hangi blokların uygulanacağını ve sağlam bir yazılım çözümünün nasıl oluşturulacağını anlamayı kolaylaştıracak bir şey istedim.

Rishi K. Narang'ın beş ortak bloktan oluşan nicel bir sistemi tanımladığı "Kara Kutunun İçinde" adlı bir kitabına rastladım: alfa modeli, risk modeli, işlem maliyeti modeli, portföy oluşturma modeli ve yürütme modeli. Ek olarak, bir temel blok daha vardır: data.

Veri bloğundan başlayarak bu yapıya daha yakından bakalım. Veri bloğu, teknik olarak ticaret sisteminin bir parçası olmasa da, sistemin tüm bileşenlerinin güvendiği oksijen olarak hayati bir rol oynar. Veri bloğu, ticaret sisteminin gerektirdiği çeşitli veri türlerini kapsar. Bu veriler, borsalar, düzenleyiciler, haber ajansları gibi farklı kaynaklardan ve mikroekonomik veriler, komisyoncu ücretleri veya portföy bilgileri gibi diğer ilgili kaynaklardan gelebilir.

Artık veri bloğunu anladığımıza göre, ticaret sisteminin unsurlarını ve aralarındaki ilişkileri inceleyelim. Diyagramda, bilgi akışını temsil eden okları görebilirsiniz. Alfa modeli, risk modeli ve işlem maliyeti modeli nihai kararları vermez; bunun yerine portföy oluşturma modeline bilgi sağlarlar ve bu da yürütme modelini tetikler. Bu öğelerin yalnızca bir alt kümesinin bulunduğu stratejiler olduğunu ve öğeler arasındaki ilişkilerin değişebileceğini not etmek önemlidir. Ancak, bu yapı bize bir ticaret sisteminin ana unsurlarının bütünsel bir görünümünü verir.

Bu yapıdaki ilk öğe alfa modelidir. Alfa modeli, gelecekteki sonuçları tahmin etmek için tasarlanmış ticaret fikrini veya stratejisini temsil eder. Tipik olarak, bu modelin çıktısı bir dönüş veya yön tahminidir. İyi bilinen iki ticaret modeli türü vardır: fiyat verileri ve teknik analize dayalı teknik modeller ve finansal veriler ile temel analizden yararlanan temel modeller. Her ikisinin özelliklerini birleştiren hibrit modellerimiz de olabilir. Karmaşıklığına bakılmaksızın, alfa modelinin birincil amacı, tahmin şeklinde tavsiye sağlamaktır.

Ardından, risk modelimiz var. Risk modeli, kayıplara yol açabilecek faktörlere maruz kalmayı azaltmaya veya en aza indirmeye yardımcı olmak için tasarlanmıştır. Risk modelleri iki türe ayrılabilir. İlk tip, katı boyutlandırma veya karmaşık işlevler gibi stratejiler kullanarak riskleri azaltmak için konum boyutlandırmaya odaklanır. Bu tür risk modelinin çıktısı, pozisyon büyüklüğüdür. İkinci tip risk modeli, piyasa yönü riski gibi belirli risk türlerini azaltmayı amaçlar. Bu gibi durumlarda, model çıktı olarak bir koruma pozisyonu önerebilir.

Üçüncü unsur, işlem maliyeti modelidir. Bu model, bir ticaretin yürütülmesiyle ilgili maliyet hakkında bilgi sağlar. Üç ana maliyet vardır: komisyonlar ve ücretler, kayma ve piyasa etkisi. İşlem maliyeti modelleri, düz bir maliyet değeri döndüren basit modellerden, fiili maliyeti olabildiğince doğru bir şekilde tahmin etmeyi amaçlayan Karesel Maliyet Fonksiyonları gibi daha karmaşık modellere kadar değişebilir. Aşağıdaki grafik, farklı maliyet fonksiyonlarının nasıl çalışabileceğini göstermektedir.

Bilgi sağlayan tüm unsurlara sahip olduğumuzda, portföy oluşturma modeline geçiyoruz. Bu model, alfa modeli, risk modeli ve işlem maliyeti modelinden girdiler alır ve fonların farklı varlıklar arasında nasıl tahsis edileceğine karar verir. Bazı amaç fonksiyonlarına dayalı bir portföy oluşturmayı amaçlar. İki temel portföy oluşturma modeli türü vardır: kural tabanlı modeller (örneğin, eşit ağırlıklar, eşit risk, karar ağacı yöntemleri) ve portföy optimize ediciler. İkincisi, portföyde daha optimal bir varlık tahsisi elde etmek için bir amaç fonksiyonunu optimize etmeyi içerir.

Son olarak, portföy oluşturma modelinden bilgi alan ve emirleri mümkün olan en iyi fiyattan gerçekleştirmeye odaklanan yürütme modeline sahibiz. Basit piyasa veya limit emirlerden piyasa mikro yapısını analiz eden ve makine öğrenimi algoritmalarını kullanan daha karmaşık emirlere kadar çeşitli uygulama modelleri vardır.

Bu, kantitatif bir ticaret sisteminin ana unsurlarının kısa açıklamasını sonuçlandırıyor. Umarım bu genel bakış, ticaret sistemi yapısını ve genel olarak nasıl çalıştığını daha iyi anlamanızı sağlamıştır.

Sonraki videolarda bu anlatımdan yola çıkarak bir yazılım sistem mimarisi oluşturmaya çalışacağım. Bu konuyu ilginç bulursanız, lütfen gelecekteki güncellemeler için kanala abone olmayı düşünün. İzlediğiniz için teşekkürler, bir sonraki videoda görüşmek üzere.
What is a Quantitative Trading System? Structure and description.
What is a Quantitative Trading System? Structure and description.
  • 2019.10.14
  • www.youtube.com
This video briefly describes the common structure of a Quantitative Trading System. Also, it provides the information about the relationships between the ele...