Lib.cs veya user.dll ile yapabilirsiniz. Ben user.dll kullanıyorum.
Log ile belirttiğim yeri //Log şeklinde yazarsanız derlenir. Ben hataları tutmak amacıyla bir dosyaya yazıyorum. Gönderdiğim metotlar (ZLEMA, EMA, List) sistem referansı almadığından Sistem.Mesaj gibi bir iDeal metodu kullanamıyoruz.Kod:/// <summary> Zero Lag Exponential Moving Average </summary> public List<float> ZLEMA(List<float> data, int period) { var x = new List<float>(); try { if (data == null || data.Count == 0) throw new ArgumentNullException("data is null or empty"); x = List(0f, data.Count); if (period == 0) throw new ArgumentException("period is zero"); var ema1 = EMA(data, period); var ema2 = EMA(ema1, period); for (int i = 0; i < data.Count; i++) { x[i] = 2 * ema1[i] - ema2[i]; } x = EMA(x, period); } catch (System.Threading.ThreadAbortException) { // Ignore... } catch (Exception ex) { Log("### {0}: {1}", MethodBase.GetCurrentMethod().Name, ex); } return x; } /// <summary>Exponential Moving Average</summary> public List<float> EMA(List<float> data, int period) { if (period == 1) return data; var x = new List<float> { 0 }; try { if (data == null || data.Count == 0) throw new ArgumentNullException("data is null or empty"); x = List(0f, data.Count); if (period <= 0) throw new ArgumentException("period cannot be equal or less than 0"); x[0] = data[0]; var k = 2f / (period + 1f); for (int i = 1; i < data.Count; i++) { x[i] = data[i] * k + x[i - 1] * (1 - k); // todaysPrice * k + EMAYesterday * (1 – k); } } catch (System.Threading.ThreadAbortException) { // Ignore... } catch (Exception ex) { Log("### {0}: {1}", MethodBase.GetCurrentMethod().Name, ex); } return x; } public List<T> List<T>(T value, int count) { return Enumerable.Repeat(value, count).ToList(); }
arkadaşlar merhaba
ideal yetkilerinden uzun zamandır grafik üzzerine çizmiş oldugumuz tren çizgilerine , fiyatın bu treend cizgilerini aşagı ve yukarı kırması durumunda sesli ve pop-up lu alarm kurulabilmesini talep etmişttimm ,sezai beyle bu konuyu görüştüğümde bu tür bir alarm eklenebilmesiningrafik arayüzü bakımından mumkun olmadıgını söyledi
arkadaşlşar daha çnce görmiştüm eski forumda bir arkadaş formül paylaşmıstı otomatik destek direnç çizdiriyordu
otomatik olarak grafik üzerine otomatik trend çizdirebilen bir formulasyon varmıdır
var ise paylaşırsanız seviniriz
matriks te vardı otomatik trend çizimi
Merhaba vVvendetta.
Lib.cs veya User.dll'de kullanabileceğiniz bir metod yazdım.
Hızlı bir şekilde ve özenmeden yazdım. Kullanmadan önce mutlaka test etmenizi öneriyorum.Kod:public float Median(List<float> data, params List<float>[] others) { if (data == null || others.Any(o => o == null)) return 0f; var allValues = others.SelectMany(o => o).Concat(data).OrderBy(v => v); var count = allValues.Count(); if (count == 0) return 0f; if (count == 1) return allValues.First(); var mid = count / 2; if (count % 2 == 0) { var median1 = allValues.ElementAt(mid - 1); var median2 = allValues.ElementAt(mid); return (median1 + median2) / 2; } return allValues.ElementAt(mid); }
Sayın Çağlar,
Kullanırken Sistem.Median(H,L,C,periyod) şeklinde sonuç verecek. Doğru mudur ? Yani benim başından beri istediğim 3 farklı dizeyi (H,L,C) istenilen periyodda Median ile kullanmak.Yukarıda ki excel'de benim anlataya çalıştığım excelin çalışma mantığı idi.Yani 3 farklı dizeyi kullanarak median bulmak ile aynı 3 dizenin arka arkaya sıralanıp medianın alınması aynı sonuç veriyor.Excelin mantığı böyle çalışıyor'u göstermeye çalıştım yukarıda umarım bir karışıklığa sebep vermemişimdir.
Malesef o şekilde kullanamazsınız. Nedenleri:
1- Öncelikle bu bir Sistem metodu değil. iDeal'de olmayan bir metod yazdık. Ben user.dll kullanıyorum, dolayısıyla benim için User.Median(H, C, L) şeklinde kullanımı.
2- Metod için period tanımlamadım. Listenin bütün elemanlarını birleştirip median hesaplar. Belli bir period için hesaplasın istiyorsanız verileri bir listeye ekleyip bu metodu çağırabilirsiniz.
Yer İmleri