Makine öğrenimini kullanarak finansal zamanları tahmin etmeyi öğrenmenin ilk adımları


12

Gelecekte finansal zamanlamaları 1 veya daha fazla adım tahmin etmek için makine öğrenmeyi nasıl kullanacağımı kavramaya çalışıyorum.

Bazı açıklayıcı verilerle mali zamanlamalarım var ve bir model oluşturmak ve daha sonra n ileriye yönelik n-adımları tahmin etmek için modeli kullanmak istiyorum.

Şimdiye kadar yaptığım şey:

getSymbols("GOOG")

GOOG$sma <- SMA(Cl(GOOG))
GOOG$range <- GOOG$GOOG.High-GOOG$GOOG.Low

tail(GOOG)

           GOOG.Open GOOG.High GOOG.Low GOOG.Close GOOG.Volume GOOG.Adjusted     sma range
2013-05-07    863.01    863.87   850.67     857.23     1959000        857.23 828.214 13.20
2013-05-08    857.00    873.88   852.91     873.63     2468300        873.63 834.232 20.97
2013-05-09    870.84    879.66   868.23     871.48     2200600        871.48 840.470 11.43
2013-05-10    875.31    880.54   872.16     880.23     1897700        880.23 848.351  8.38
2013-05-13    878.89    882.47   873.38     877.53     1448500        877.53 854.198  9.09
2013-05-14    877.50    888.69   877.14     887.10     1579300        887.10 860.451 11.55

Sonra bu verilere rastgele bir ForFor modeli ekledim.

fit <- randomForest(GOOG$GOOG.Close ~ GOOG$sma + GOOG$range, GOOG)

Bu şaşırtıcı derecede iyi görünüyor:

> fit

Call:
 randomForest(formula = GOOG$GOOG.Close ~ GOOG$sma + GOOG$range,      data = GOOG) 
               Type of random forest: regression
                     Number of trees: 500
No. of variables tried at each split: 1

          Mean of squared residuals: 353.9844
                    % Var explained: 97.28

Ve bunu tahmin etmek için kullanmaya çalıştı:

predict(fit, GOOG, n.ahead=2)

Ancak bu tahmin işe yaramadı.

Kapat tahmin etmeye çalışıyorum, diğer değişkenleri modele uymadan önce tahmin etmek istediğim kadar adım atmalı mıyım?

Muhtemelen dikkate almam gereken başka şeyler de var ama bunlar gerçekten makine öğrenmeyi denemek için ilk adımım.

Yanıtlar:


16

İlk gözlemim, girdileri kapanış fiyatına göre geciktirmemeniz ve bu yüzden böyle iyi bir uyum gözlemlediniz. SMA (basit hareketli ortalama) hesaplamada kapanış fiyatını kullanır ve yüksek düşük aralık kapanış fiyatını kapsar, bu nedenle bunları kapanış fiyatını tahmin etmek için kullanmak, ileriye yönelik bir önyargı verir. Bence kapanış fiyatını iki gün önceden tahmin etmeye çalışıyorsanız, modelinizi kapanış fiyatından en az iki gün gecikmeli girdilerle oluşturmalısınız. Girişlerden bazıları iki günden fazla gecikebilir, ancak basit bir şekilde başlayacağım ve sadece bir avuç giriş kullanmaya çalışacağım.

Kapanış fiyatını tahmin etme amacınıza gelince, kapanış fiyatlarının hedef değişken olarak kullanılamayacak kadar gürültülü olduğunu ve bunları kullanmanın yanlış hedefin aşırı takılmasına veya optimizasyonuna yol açacağını düşünüyorum. Bunun yerine, kapanış fiyatını hareketli bir ortalama ile düzelterek ve önümüzdeki iki gün boyunca fiyat değişim yönünü tahmin ederek başlayacağım. Örneğin, kapatmayı kapatmanın 5 günlük bir SMA'sı ile değiştirebilir ve sonraki iki gün boyunca pozitifse SMA'nın fiyat değişikliğini 1 ve aksi takdirde 0 olarak kodlayabilirim. Çıktı değişkeni artık 1 veya 0 olarak kodlandığından, kullandığınız rastgele orman işleviyle bu sorunu çözmeye çalışmak iyi bir sorundur. Ayrıca lojistik regresyon, sinir ağları ve SVM'ler gibi diğer sınıflandırma algoritmalarını deneyebilir ve performansınızı artırmak için birkaçını bir toplulukta birleştirebilirsiniz. Bu, aşırı sığmadan çözülmesi hala zor bir problemdir, ancak doğru yönde atılmış bir adımdır. Dikkat edilmesi gereken bir başka nokta da, son modelinizin önümüzdeki iki günü pozitif veya negatif olarak sınıflandırırken inanılmaz bir doğruluğa sahip olabileceğidir, ancak yine de birkaç büyük hamleyi yanlış sınıflandırdığı için hala para kaybedebilir.

Ayrıca modelinizi birden fazla güvenlik üzerinde oluşturmanızı tavsiye ederim, böylece makine öğrenme algoritması bir hisse senedinin özelliklerine odaklanamaz. Ben birbirleriyle yüksek korelasyona sahip olmayan en az 5 hisse ile başlıyorum.

Guido Deboeck tarafından The Edge on the Trading, makine öğrenimi uygulamalarını finansal zaman serisi tahminine keşfetmek için başlamak için iyi bir yerdir. Daha eski bir kitap, bu yüzden bugün elimizde olan teknolojinin çok gerisinde ama iyi bir başlangıç. Ayrıca Kaufman'dan Yeni Ticaret Sistemleri ve Yöntemleri ve John Wolberg'den Uzman Ticaret Sistemleri öneriyorum.


tamam, bu güzel cevap için teşekkür ederim. Örnek, verilerin nasıl rastgele bir şekilde ayarlanacağını anlamak için daha fazlaydı. Ama şimdi çalışmasını sağlamak için girdileri geciktirmem gerektiğini biliyorum. Örnekte SMA'nın fiyatının çıktı değişkeni olması bir anlam ifade eder mi, yoksa 0 veya 1 mi olması gerekir? \ n Kitap önerileri için de kendimi tanıyacağım için teşekkürler.
nikke

Çıktı değişkeni olarak SMA'nın fiyatını kesinlikle kullanabilirsiniz; sorun daha karmaşık hale geliyor. Bir yönü tahmin etmek yerine, şimdi kesin bir fiyat değeri tahmin etmeye çalışıyorsunuz. Deneyimlerime göre, bu bir makine algoritmasının örneklemeden iyi sonuç alması çok zor bir şey. Ancak, sadece zaman serisi verilerini tahmin için ayarlama sürecine aşina iseniz, özellikle de yön tahmininden daha sezgiselse, başlamak için iyi bir yer olabilir. Ayrıca, iki hareketli ortalamanın geçeceği fiyatı tahmin etmeye çalışabilirsiniz.
CrossValidatedTrading

Merhaba, bazı özellikler yarattı ve bir model yaptı: pastie.org/7958695 Sanırım mekaniği anladım. Ancak bu modelin hepsi çok eğri. Benzer bir şey yaptınız ve gerçek bir kullanımı oldu mu? Daha fazla konuşmak güzel olurdu.
nikke

Her zaman daha detaylı konuşmaya açığım. İletişim bilgilerim profilimde. İsterseniz bana bir e-posta gönderin.
CrossValidatedTrading

Bir fiyat-değer tahminine kıyasla, iyi çalışması gereken getirileri tahmin etmek için bazı basit regresyonlar yaptık. Dönüş tahmin yanı sıra yaymak ve bitirmek vb yenmek için yeterince büyük bir dönüş tahmin etmek zorunda. Daha fazla konuşmak serin olurdu, profilinizde posta bulamadı. Benim önceki yorumda yayınladığım pastie olduğunu.
nikke
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.