6. Derece Çoklu Yardım!

 
Kendimi tanıtayım. Ben bir veritabanı mimarıyım (bir matematikçinin aksine) veritabanıyla ilgili her şeyde (sql, t-SQL, PL/SQL) çok güçlü programlama becerilerine ve veritabanı olmayan dillerde (C,C++,C#, VB) yeterli beceriye sahibim. /VBA) yapmak için. Uzun yıllar Finansal Hizmetler sektörünün sınırları içinde çalıştım ve Excel konusunda çok bilgiliyim (ve 2013'ü gerçekten seviyorum, tebrikler!).

Excel'i çok uzun bir süre kullandım, her zaman yerleşik işlevlere ve grafik araçlarına güvendim (her zaman bir grafiğin görüntüsünü kesip yapıştırabilirim) ve bir gün hiç aklımdan geçmedi. gerçek (görsel olmayan) değerlerin pratik bir uygulamasını tanımlayacak ve "nasıl" olduğunu belirlemek için sunumun yüzeyinin altını kazmak zorunda kalacaktı. Yakın zamana kadar görsel sunum (ve arkasındaki mantık) kendini sattı.

İşte arayışımın amacı burada yatıyor.

Aşağıdaki çizelge göz önüne alındığında, 6. derece polinom trend çizgilerinin kararlılığı açıkça doğrulanabilir. Poli, SMA yönteminin sunduğu daha geniş bir aralıkta önemli ölçüde daha kararlıdır ve tüm bunlar nominal bir gecikme derecesi ile! Basitçe söylemek gerekirse: poli'ler kaçmaz. '08'de emlak piyasasının zirvesini belirlemek için kullandığım günden beri Excel poli trend çizgilerine aşık oldum (eğilim Mayıs-Haziran'daki değişimi tanımladı ve hatırladığım kadarıyla çöküş Ağustos-Eylül'de gerçekleşti. ) o sırada hizmet verdiğim ipotek portföyü risk azaltma ekiplerine (görsel olarak da olsa) ciddi önlemler alma yeteneği sağlıyor!

Çoklu Grafik

Şimdi arayışım başlıyor.

Artık pratik bir uygulama tanımladığıma göre, çoklu trend çizgisi formülünün arkasındaki matematiği öğrenmeye (veya benim durumumda yeniden öğrenmeye) çalıştım. İyi şanslar. Son derece karmaşık formüle eklenen en küçük kareler indirgemesi ve matrisler ve polinom denkleminin getirdiği gerekli katsayı hesaplamaları (benim için) koda çevrilmesi çok zor. Bu yüzden, Excel'i çağırmanın (büyük olasılıkla c++'dan), bir dizi (x,y) veri değeri sağlamanın, LINEST() kullanarak poli (x,y) kesişimini (eğilim çizgisi değeri) hesaplamanın ve geri dönmenin en kolay olacağını düşündüm. bu değer, masaüstü uygulamama (sınırlı çağrı işlevine sahip kapalı bir özel yazılım uygulaması) geri döner.

LINEST() kullanarak formülü birleştirmek önemli bir engel haline geldi. Verileri sağlamak yeterince kolay - ancak, grafikte kusursuz bir şekilde gösterilen (x,y) kesişimlerini nasıl hesaplayabilirim? Her yeni ölçü formülü değiştirir ve yeni hesaplanmış katsayıları mı kullanır? Bu neden oluyor? Çözümler için internette saatlerce (ve daha sonra bazıları) saatler harcadım - ve (tıpkı bir erkek gibi) sonunda yol tarifi sormaya karar verdim.

Kaynak değerlerine sahibim (yıllarca). Eksik olan şey, a) poli(x,y) kesişimini oluşturma yöntemi, b) Excel'i harici olarak c'ye çağırarak) sağlanan (x,y) verilerine dayanarak poli(x,y)'yi döndürmek -

Bu konuyla ilgili bir makalesi veya çok özel bir tedavisi olan veya hatta yardım etmeye istekli olan varsa, sonsuza kadar size borçlu olurum.

dj


 

i-regr göstergesi herhangi bir dereceye kadar keyfi polinom regresyonları yapabilir. 3. dereceden daha yüksek bir şey denemedim, ancak kod bakmanız için orada. 6. derece muhtemelen CPU'nuzu öldürür, ancak deneyebilirsiniz.


https://www.mql5.com/en/code/8417

 
rocketman99 :

i-regr göstergesi herhangi bir dereceye kadar keyfi polinom regresyonları yapabilir. 3. dereceden daha yüksek bir şey denemedim, ancak kod bakmanız için orada. 6. derece muhtemelen CPU'nuzu öldürür, ancak deneyebilirsiniz.


https://www.mql5.com/en/code/8417



Teşekkürler roket adam! CPU'mu hiç öldürmedim - Bir süre bununla çalışacağım ve ne bulduğumu göreceğim.

Güncelleme:

i-regr yüksek bir doğruluk derecesine sahip görünmüyor - muhtemelen çözmek için kullanılan gauss (i-regr) ve en küçük kareler (excel) yönteminden kaynaklanıyor olabilir. Bilmiyorum - hala arıyorum, daha iyi poli prosedürü olan var mı?

 

i-regr her çubuğun Close[] değeri üzerinde çalışıyor, bu muhtemelen fark yaratıyor (sanırım MT4 ve excel'de kalıp uzunluklarını eşitlemişsiniz).

Kapat[]'ı Açık/Yüksek/Düşük olarak değiştirerek veya ağırlık işlevi gibi herhangi bir başka analitik ifadeyle bunu kolayca değiştirebilirsiniz.

ancak bundan bir kar elde edebileceğinize inanmıyorum, tıpkı diğer herhangi bir yeniden boyama trend göstergesi gibi.

 

Merhaba dennisj2,

Formülünüze gerçekten ihtiyacınız olduğuna emin misiniz?

İlk önce Kalman, Ehlers, Gauss, Jurik (JMA), DEMA gibi diğer filtreleri aramayı deneyebilirsiniz. Çoğu düşük geçişli (fiziksel) frekans filtrelerinden türetilmiştir ve çoğu mt4 koduna girmenin yolunu bulmuşlardır.

Daha uzun bir dönem kümesine sahip bir JMA olabilir (birçok varyasyon vardır) aradığınızı yapar mı?


 
Veya AllAverages göstergesiyle çıldırın http://www.forexfactory.com/showthread.php?t=418219
 
dennisj2 :
Şimdi arayışım başlıyor.

Artık pratik bir uygulama tanımladığıma göre, çoklu trend çizgisi formülünün arkasındaki matematiği öğrenmeye (veya benim durumumda yeniden öğrenmeye) çalıştım. İyi şanslar. Son derece karmaşık formüle eklenen en küçük kareler indirgemesi ve matrisler ve polinom denkleminin getirdiği gerekli katsayı hesaplamaları (benim için) koda çevrilmesi çok zor. Bu yüzden, Excel'i çağırmanın (büyük olasılıkla c++'dan), bir dizi (x,y) veri değeri sağlamanın, LINEST() kullanarak poli (x,y) kesişimini (eğilim çizgisi değeri) hesaplamanın ve geri dönmenin en kolay olacağını düşündüm. bu değer, masaüstü uygulamama (sınırlı çağrı işlevine sahip kapalı bir özel yazılım uygulaması) geri döner.

LINEST() kullanarak formülü birleştirmek önemli bir engel haline geldi. Verileri sağlamak yeterince kolay - ancak, grafikte kusursuz bir şekilde gösterilen (x,y) kesişimlerini nasıl hesaplayabilirim? Her yeni ölçü formülü değiştirir ve yeni hesaplanmış katsayıları mı kullanır? Bu neden oluyor? Çözümler için internette saatlerce (ve daha sonra bazıları) saatler harcadım - ve (tıpkı bir erkek gibi) sonunda yol tarifi sormaya karar verdim.

Kaynak değerlerine sahibim (yıllarca). Eksik olan şey, a) poli(x,y) kesişimini oluşturma yöntemi, b) Excel'i harici olarak c'ye çağırarak) sağlanan (x,y) verilerine dayanarak poli(x,y)'yi döndürmek -

Bu konuyla ilgili bir makalesi veya çok özel bir tedavisi olan veya hatta yardım etmeye istekli olan varsa, sonsuza kadar size borçlu olurum.

dj



Cebir hakkında Yunanca örnekleri olan pek çok makale var ama aslında bu bir vudu.

Örneğin, lineer regresyon hakkında bana hiç mantıklı gelmeyen bir wikipedia makalesi var, ancak şu anda satırınızın lineer regresyon versiyonunu kodlayabilirim çünkü başka bir yerde formülü kullanmayı öğrendim

y=a+bx

Yine de wikipedia makalesinin hiçbir yerinde bu formülden bahsedilmiyor bile, bu nasıl mantıklı olabilir?

ben de o formülü kullanırken öğrendim

a == eğim

b== kesişme

eğimi ve kesişimi hesaplamanın matematiği bilinmektedir ve değerlerin toplamını hesaplamak, bazılarının karesini almak vb. için oldukça basit bir prosedürdür.

İkinci dereceden bir regresyon (2. derece) formülünün y=ax^2 + bx + c olduğunu da biliyorum.

Bu yüzden onların ilişkili olduğunu düşünüyorum, bu da 3. derece regresyon denkleminin

y=ax^3 + bx^2 + cx + d

bu yüzden 6. regresyonun olacağını düşünüyorum

y=ax^6 + bx^5 + cx^4 + dx^3 + ex^2 + fx + g

ama eğer a eğim ve b kesişim ise c nedir ve d vb ne olur? Satırınızı kodlayamamamın tek nedeni bu, katsayıların ne olduğunu veya nasıl hesaplanacağını bilmiyorum.

GÜNCELLEME: tamam, şimdi kafamı karıştıran bir şey daha öğrendim.

başka bir makalede ikinci dereceden polinom şu şekilde tanımlanır:

ax^2 + bx + c = 0

Bu, eğim kesişiminin matematiğini bilmemize gerek olmadığı ve ikinci dereceden a, b ve c değerlerini bulmak için çözebileceğimiz anlamına mı geliyor?

Ama ax^2 + bx + c = 0 nasıl olur?

ilgili

y=ax^2 + bx + c ?

Benzer görünüyorlar ama nasıl oluyor da biri y= ve diğeri =0 ?

 

SDK,

bir noktadaki eğim, bir fonksiyonun ilk türeviyle hesaplanabilir.

y=ax+b gibi doğrusal bir fonksiyon herhangi bir noktada aynı eğime sahiptir: a.

Genel olarak, ax^n + bx^n-1 + ... + z = y doğrusal fonksiyonunun türevi basitçe: nax^(n-1) + (n-1)bx^n-2 .. = y ' - orijinal fonksiyonun son sabiti her zaman 0 olur!

Yani ax + b = y => y' = a ( <= 1*a^(1-1); b=0 )ve ikinci dereceden fonksiyon y' = 2ax + b ( <= 2ax^(2-1) olur) + 1bx^(1-1); c=0 ).

Ancak, filtreleme frekansları hakkında düşünmeniz (ve okumanız) daha iyi olan filtreler fikrini anlamayı düşünüyorum. Ses olsun, resim olsun, alıntı olsun ya da ..

Kişi her zaman gürültüden - genel olarak - daha kısa süreli frekanslardan kurtulmak ister. Ve lineer fonksiyonların kullanımı sadece bir yaklaşımdır.

 

Bunu bana açıklamaya çalıştığın için teşekkürler ama bu denklemlerin neden ne anlama geldiğini bilmiyorum. Katsayıları prosedürel bir şekilde tek tek nasıl hesaplayacağımı biliyorsam, onları kullanabilir ve değerleri ekleyebilirim, ancak bu kadar.

Filtre kavramını anlıyorum, sadece OP'nin satırını nasıl kodlayacağımı bulmakla ilgileniyordum.

Ama bunu yapmakla ilgili olarak, dediğinizde,

"Yani ax + b = y => y' = a ( <= 1*a^(1-1); b=0 )ve ikinci dereceden fonksiyon y' = 2ax + b ( <= 2ax^(2-1) olur ) + 1bx^(1-1); c=0 )."

Ne hakkında konuştuğun ve hatta bunun ne kadar alakalı olduğu hakkında hiçbir fikrim yok, bu yüzden muhtemelen yakında herhangi bir zamanda herhangi bir poli satır kodlaması yapmayacağım lol

 

SDC :

Cebir hakkında Yunanca örnekleri olan pek çok makale var ama aslında bu bir vudu.



SDC - şimdi benimle aynı seviyedesiniz - bulduğum doğrusal regresyon formülü işe yarıyor - ve aynı sonuçları veren iki farklı formül var. Peşinde olduğumuz şey lineer regresyon (düz bir trend çizgisi) ise bu formüller harikadır.

İlk olarak, bazı referans materyalleri:

Microsoft: http://office.microsoft.com/en-us/excel-help/linest-HP005209155.aspx

IntegralCalc:https://www.youtube.com/watch?v=1pawL_5QYxE&noredirect=1


Doğrusal regresyon denklemi y = mx + b verildiğinde:

Burada y = fiyat, (örneğin, Kapat[x])

ve x = dizin (örneğin, Çubuk[x])

ve m = Eğim (her (x,y) çiftine uygulanan katsayı)

ve b = Y kesme noktası (her (x,y) çiftine uygulanan Y kesmesinin temel değeri)


Yöntem A: IntegralCalc'den Yöntem B: Microsoft'tan (burada x(üst çubuk) ve y(üst çubuk) anlamına gelir)

IntegralCalc&#39;den Doğrusal Regresyon DoğrusuDoğrusal Regresyon Çizgisi - Microsoft


n. dereceye kadar polinom regresyon trend çizgisi formülünün bile uygulanması nispeten kolaydır:

Verilen formül: y = m1*x1 + m2*x2 + m3*x3 + ... + b

Burada x, y, m ve b değişkenleri lineer denklemde açıklananla aynı tanımı taşır.

Görünüşe göre her şeye sahibim, peki eksik olan ne?

Eksik olan, bir polinom regresyonu için m (Eğim) ve b (Y-kesme noktası) hesaplamasıdır; bu değerlerin hesaplanması için doğrusal denklem, bir polinom regresyonu için geçerli değildir. Öğrendiğim kadarıyla, polinom regresyonu, bir matris kullanarak bir polinom denklem sistemine dayalı olarak en küçük kareleri hesaplayan bir formül gerektiriyor. Yukarıdaki örnek grafiklere bakın. İlk grafikte, poli(6) çizgileri kesinlikle kusursuzdur - üstler ve altlar açıkça belirtilmiştir. Bu verilerle, alım satımları bugün yaptığımdan daha uzun süre tutabileceğim, nihayetinde alım satım başına ortalama pipimi ikiye katlayarak potansiyel olarak üç katına çıkaracağım.

İkinci grafikte, eğim katsayılarını çözmek için bir gauss matrisi kullanan i-regr yöntemine karşı poly(6)'nın sonuçlarını gösteriyorum - ve söylemeye gerek yok ki, önemli gecikme süresi nedeniyle oldukça işe yaramaz. yöntem. Öte yandan, basit bir hareketli ortalama daha da kötüdür - SMA, EA'mın aşırı tepki vermesine neden olabilecek ara piyasa düzeltmeleri sırasında çok fazla hassastır.

Gerçek bir polinom regresyon göstergesi geliştirmesi için birine ödeme yapmaya hazırım - ancak sonuçlar kesinlikle Excel'in ürettiği sonuçları yansıtmalı. LINEST() işlevi, katsayıları hesaplamak için çok fazla vudu'nun kullanıldığı bir kara kutudur. Oldukça basit, bu vuduyu anlamam gerekiyor.

Güncelleme: Excel'de uygulanan yöntemi gösteren bir dosya ekledim.

Dosyalar:
linest.zip  15 kb
 
graziani :

i-regr her çubuğun Close[] değeri üzerinde çalışıyor, bu muhtemelen fark yaratıyor (sanırım MT4 ve excel'de kalıp uzunluklarını eşitlemişsiniz).

Kapat[]'ı Açık/Yüksek/Düşük olarak veya ağırlık işlevi gibi herhangi bir başka analitik ifadeyle değiştirerek bunu kolayca değiştirebilirsiniz.

ancak bundan bir kar elde edebileceğinize inanmıyorum, tıpkı diğer herhangi bir yeniden boyama trend göstergesi gibi.



Grazi -

i-regr'i kullandım ve yukarıdaki sonuçları karşılaştırdım - Poly(6) algoritması ile i-regr karşılaştırması, i-regr'in önemli ölçüde daha büyük bir gecikmeye sahip olduğunu, ardından aynı veri kümesine dayalı poly(6) olduğunu gösteriyor - gecikme ölümdür bu pazarda. EA'larım gün içi salınım ticareti yapmıyor, bunun yerine trendi koruyor. Yani yanılıyorsunuz - EA'larımdan kâr ediyorum ve daha yavaş bir reaktif göstergeyle EA'larım bugün olduğundan daha fazla pazar yakalayacak. Spesifik olarak, gerçek bir poli(6) algoritması entegre ettiğimde, açık pozisyonları daha uzun süre tutma ve giriş noktalarımı iyileştiren 3-4 dönem önce trend değişikliklerini tahmin etme yeteneğine sahip olacağım.

Neden: