0 beğenilme 0 beğenilmeme
176 kez görüntülendi
Merhabalar,

Kendi yazdığım stratejimde 10 bar ve 40 bar için Ema indikatörünün CrossAbove ve CrossBelow fonksiyonu ile aşağı veya yukarı kesip kesmediğini kontrol ediyorum fakat her seferinde beklenen değeri döndürmüyor. Bazı hisselerde veriyor bazılarında vermiyor. Bazı hisselerde de bazen veriyor.

Kod yapım şöyledir :

ema1 = EMAIndicator(Symbol, SymbolPeriod, OHLCType.Close, EmaPeriod1);   // EmaPeriod1 = 10 bar için

ema2 = EMAIndicator(Symbol, SymbolPeriod, OHLCType.Close, EmaPeriod2); //EmaPeriod2 = 40 bar için

 

if (CrossBelow(ema1, ema2))

{

YukselenTrend = false;

}

else if (CrossAbove(ema1, ema2))

{

YukselenTrend = true;

}

 

Aynı şartı TradingView grafiklerinde de takip ediyorum. Orada yukarı kestiği halde CrossAbove(ema1, ema2) bana sürekli false sonucunu veriyor. Eğriler herhangi bir anda fiziksel olarak yukarı kestiğinde "true" sonucunu döndürmesi gerekir.

 

Ayrıca bu fonsiyonların ters sonuç verdilerini de gördüm. Örneğin şu yapıyı da kullanıyorum

tmov = TMOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, TillsonPeriod, TillsonA);

(CrossAbove(tmov, barData, OHLCType.Close, 0)

(CrossBelow(tmov, barData, OHLCType.Close, 0)

Burada CrossAbove fonsiyonu Tmov aşağı kırınca true sonucunu veriyor. CrossBelow da, Tmov yukarı kırınca true sonucu veriyor

Nerede hata yapıyor olabilirim?

Şimdiden teşekkürler
Algoritmik Trading kategorisinde (17 puan) tarafından | 176 kez görüntülendi

2 Cevaplar

1 beğenilme 0 beğenilmeme
En İyi Cevap
Merhaba

Kullandığınız örneklerde indikatörün hangi çizgisi olduğunu belirtmemişsiniz hata buradan kaynaklanıyor.

Doğru kullanım;

CrossAbove(ema1, ema2, 0, 0) yada

CrossBelow(ema1, ema2, 0, 0)

bu fonksiyonların indikatörün hangi çizgisini kullanacağı bilgisine ihtiyacı var ancak IQ ekibi bu parametreleri opsiyonel olarak işaretlemiş bu yüzden girmezseniz bu fonksiyon object olarak dönüş yapıyor ve if fonksiyonuda bunu false olarak algılıyor. diğer örnekte de muhtemel aynı sorun yaşanıyor

İyi günler.
(181 puan) tarafından
tarafından seçilmiş
1 beğenilme 0 beğenilmeme
İlk sorunuzda neden öyle oluyor anlayamadım ama orada cross yerine büyüktür küçüktür kullansanız belki sorununuz çözülür.

İkinci sorunuz için ise, cross fonksiyonunda yukarı veya aşağıya kesilecek değer ilk değerdir. Siz (CrossAbove(tmov, barData, OHLCType.Close, 0) kullanarak barların tmov'u yukarı kesmesini istiyorsunuz aslında, yani tmov'un aşağıda kalmasını, barların yukarıda olmasını yani yükleliş olan durumu istiyorsunuz. Dolayısıyla barData'yı tmov'dan önce yazmanız lazım. Veya above-below kısımlarını ters kullanmanız lazım. Yani barData tmov'u yukarı kesince demek yerine tmov barData'yı aşağı kesince diyerek yükselişi tanımlamış olursunuz.
(298 puan) tarafından
0 0
Büyüktür küçüktür kullanılırsa ema1 ema2 den büyük olduğu her barda ard arda emir gönderimi yapar, sağlıklı değildir
7,637 soru
7,640 cevap
4,448 yorum
10,962 kullanıcı