Bildiğim kadarıyla yok.
Ben User.dll'e yazdım ve User.ZLEMA(list, period) şeklinde kullanıyorum.
Printable View
Arkadaşlar merhaba, aynı anda 3 dizinin medianını nasıl alabilirim idealde.Yani Median(H,L,C,10) olarak ?
Sayin Caglar,
Normalde median ile sadece 1 dizenin degerini bulabiliyoruz.Excelde bunu yapabiliyorsunuz ve mantik olarak excel 3 dizeyi tek bir dize haline getirip median degerini buluyor.Yani ben 10 gunluk H,L ve C dizelerini tek bir dize haline getirip median degerini almak istiyorum.Coklu dizelerin mediani diyebiliriz.Ayri ayri davranmalarini istemiyorum ttek bir dize gibi hareket etmelerini istiyorum.
Selamlar;
Daha önce problemsiz çalışan bir sisteme stop ve kâr al satırlarını eklemek istedim ve ekledim de fakat stop olması gereken yerde stop olmadı ve barın kapanmasını bekledi. Bu problemi de çözdüğümü düşünürken çözemediğimi geçen gün fark ettim. Belirlediğim yerde barın kapanmasını beklemeden stop oldu fakat stop seviyesinin altına geldiğinde pozisyona girdi tekrar derken 1 kademe aralığında kısır döngüye bu tür testleri sanal da yapmayı öğrendiğim için maddi bir zarara uğramadım fakat yaşadığım problemi de çözmek istiyorum.
Konu hakkında yardımcı olabilirseniz sevinirim.
*Önemli Not: Formülde bazı bölümleri bilerek sildim. Formülün bu şekilde çalışmayacağını biliyorum.
// STRATEJİ
var SonYon = "";
float Fiyat = 0;
for (int i = 2; i < Sistem.BarSayisi; i++)
{
if (SonYon != "A" && ihtimal[i] >= 35) // AL
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i];
Fiyat= C[i];
}
else if ( SonYon != "S" && ihtimalC[i] <= -35 ) // SAT
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i];
Fiyat= C[i];
}
else if ( SonYon == "A" && ihtimalA[i] <= -35 ) // Long Kapat
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}
else if (SonYon == "S" && ihtimalB[i] >= 35) // Short Kapat
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
}
else if (SonYon == "A" && C[i] <= Fiyat - deger18) // 700 puana stop
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
Sistem.SayiListesi[i] = 1; // Bar kapanışını beklemeden emir göndermek için
var Yazi = "Stop " + Sistem.GrafikVerileri[i].Close.ToString();
Sistem.YaziEkle(Yazi, 1, i-5, Sistem.GrafikVerileri[i].Close+-0.5f, Color.White, "Tahoma", 8);
}
else if (SonYon == "S" && C[i] >= Fiyat + deger18) // 700 puana stop
{
Sistem.Yon[i] = "F";
SonYon = Sistem.Yon[i];
Sistem.SayiListesi[i] = 1; // Bar kapanışını beklemeden emir göndermek için
var Yazi = "Stop " + Sistem.GrafikVerileri[i].Close.ToString();
Sistem.YaziEkle(Yazi, 1, i-5, Sistem.GrafikVerileri[i].Close+0.4f, Color.White, "Tahoma", 8);
}
}
if (Durum[SonBarNo] == 1)
SonYon = Yon[SonBarNo];
else
{
for (int i = 0; i < Yon.Count - 1; i++)
{
if (Yon[i] != "") SonYon = Yon[i];
}
}
var Miktar = 0.0; // Emir Miktarını Hesapla
if (Sistem.Saat.CompareTo("09:25:00") <= 0) // Seans Başlamadı işlem yapma
{
}
else if (SonYon == "F" && Pozisyon != 0) // Flata Geç
Miktar = -Pozisyon;
else if (SonYon == "A" && Pozisyon != LotSize) // Al
Miktar = LotSize - Pozisyon;
else if (SonYon == "S" && Pozisyon != -LotSize) // Sat
Miktar = -LotSize - Pozisyon;
//Mail İçeriği
var Mesaj ="Serhat Son Pozisyon Hk."
+ "\r\n" +V[SonBarNo].Date.ToString("HH:mm:ss")
+ " "+LotSize + " Adet"
+ "\r\n" +V[SonBarNo].Close.ToString()+" "+SonYon;
// Emir Gönder
var Islem = "";
if (Miktar > 0)
Islem = "ALIS";
if (Miktar < 0)
Islem = "SATIS";
if (Islem != "")
{
var Anahtar = Sistem.Name + " , " + MySistem.GrafikVerileri[MySistem.GrafikVerileri.Count-1].Date.ToString("yyyyMMdd HH:mm");
var Defa = Sistem.SayiTablosunuOku(Anahtar);
if (Defa == 0)
{
Sistem.SayiTablosunuGuncelle(Anahtar, Defa++);
Sistem.PozisyonKontrolGuncelle(Sistem.Name + " , " + EmirSembol, Miktar + Pozisyon);
Sistem.EmirSembol = EmirSembol;
Sistem.EmirIslem = Islem;
}
}
}
kar hedefi koyunca sisteme bir sonraki pozisyona nasıl nerede gireceğini söylemek gerekir , yoksa pozisyon şartları devam ettiğinde hemen aynı pozisyona girer
bikaç yöntem kullanabilirsin ,
belli süre/bar bekle
belirli bir çekilme sonrasında girme
sadece kap*****n tersi yönünde girme
gibi
senin durumda kar hedefi pozisyon açılışına göre değilde sabit olarak belirlenmiş muhtemelen , dolayısıyla kar hedefi vurunca kapatıp pozisyon şartları tekrar geçerli olduğundan poz açıyor , sabit olan hedef geçilmiş olduğundan tekrar kapatıyor , tekrar tekrar şeklinde .
mesela 1 atrde alırım 1.5 satarım dedin varsayalım , kar hedefini 1.5 atr ye değil açılış fiyatı +yarım atr koymalı
versiyon 5,09 olarak güncellenmiş bilginize
DirectFN Finansal Veri ve Teknoloji Hizmetleri
iDeal Veri Terminali
En Son Versiyon Değişiklikleri (5.07)
· Sistem Modülüne Yeni Fonksiyonlar eklendi
· Tip1 Emir penceresi için daha küçük boyutlu görünüm seçeneği eklendi.
· Tip3 Emir Penceresine Açığa Satış seçeneği eklendi
· Tüm İşlemler Penceresine CSV Dosya Aktarım imkanı eklendi.
· Tüm İşlemler Penceresine (PITE lisansı olan kullanıcılar için) Kurum filtresi eklendi.
· VIOP Yüzeysel Filtre Penceresine Tüm Dayanak Varlıklar bazında filtre imkanı eklendi.
· VIOP-BISTECH geçişi sonrası Uzlaşı Fiyatının Borsa tarafından 1’er saat aralıklarla yayınlanması nedeniyle, Portföy Penceresinde Anlık Son Fiyata göre KZ hesaplanıp gösterilmeye başlandı.
· PITE (Eş Anlı Alıcı Satıcı Taraf Bilgisi) Yayını için aşağıdaki 4 analiz TAKAS ANALİZ penceresine eklendi.
o PITE Senet (Senet Bazında Anlık Aracı Kurum Dağılımı)
o PITE Kurum (Kurum Bazında Anlık Aracı Kurum Dağılımı)
o PITE PGÇ (Anlık Para Giriş Çıkış Analizi)
o PITE Hacim (Anlık Kurumsal Bazda Net Hacim Analizi)
· VIOP BISTECH Yayın yapısı değiştirildi.
· VIOP için yeni emir tipleri emir penceresine uyarlandı.
· 2-3-4 ve 8 dakikalık grafikler eklendi.
· Alıcılar/Satıcılar (Para Giriş Çıkış) Analizi Eklendi
· Ekonomik Takvim Eklendi (Ana Menüde)
· Grafiksel Getiri Analizi Eklendi (Ana Menüde)
· Varant Analizi eklendi (BIST Menüsünde)
· BIST için yeni pratik bir emir penceresi (Tip 3) eklendi.
· Bilanço Tablosundaki Rasyolar Sekmesi güncellendi.
· PAY piyasasında 10 kademe derinlik yayınlarına uyumlu esnek kademe sayısı suna Derinlik penceresi sunulmuştur.
· Kullanıcı sayfalarında bozulma olmaması için başlangıçta derinlikler 5 kademeli olarak ekrana gelecektir.
Dileyen kullanıcılar, sağ klik-àözellikler satırı altından kademe sayısını değiştirip, bunu bir patern olarak kaydedebilir. Kaydedilmiş bu paterni ekranda açık olan diğer tüm derinliklere uygulatabilir.
· iDeal Robot Modülüne, Tekstil Yatırım, Burgan Yatırım, Ata Yatırım, Ata Online ve Gedik Yatırım kurumlarının entegrasyonu yapılmıştır.
· Robot modülüne, gerçek hesap bilgilerine erişim fonksiyonları eklenmiştir.
· Grafiklerde maksimum bar sayısı limiti 1 milyon bar olarak güncellenmiştir.
· Bilgisayarda tutulan bar sayısı kaç olursa olsun, grafiklerin istenilen kadar bar sayısı göstermesi imkanı eklenmiştir.
· Grafiklerin içinde çift tıklama yapılarak açılan menüden, grafik barlarının istenilen bir dönemi göstermesi imkanı sunulmuştur.
· Kademeli Emir Penceresinin (KEP) Yeni emir tipleri ve süreleriyle kullanımına izin verildi.
· iDeal Robot modülüne Yapı Kredi Yatırım’ın da entegrasyonu yapıldı
· 10 kademe derinlik altyapısı uyarlandı. (borsa devreye aldığı zaman yayında olacak)
· Tek fiyatla işlem dönemlerine ait aşağıdaki veri tipleri yeni veri başlıkları olarak eklenmiştir. (bu başlıkları hem sayfadaki fiyat penceresine, hem derinlik penceresi üst kısmına eklenebilir.)
o Denge Fiyatı (Dng.Fyt)
o Denge Lot (Dng.Lot)
o Alıştan Kalan Miktar (Denge Al.K)
o Satıştan Kalan Miktar (Denge Sat.K)
· ALGO/SİSTEM/ROBOT Modülüne 30 civarında yeni fonksiyon eklendi
o Sistemlerin altına pozisyon,işlem,gün,hafta,ay,yıl bazında getiri eğrileri
o Sistemlerin getirileri, karlılık oranları, net kar gibi verilerini değer olarak okuma ve grafik zeminlerine yazdırma
o İki tarih arası optimizasyon yapabilme
o Sistemlerin MaxDD değerlerini analiz ve fonksiyon olarak alabilme ve optimizasyon yaparken de MaxDD hesaplatabilme
o Tek satırda, grafik üzerindeki sistemleri, Robota çevirme
o Sistem sinyal ürettiği zaman, emrin bar kapanışına X Saniye kala gönderilebilmesi imkânı
o Ve daha pek çok yararlı fonksiyon ve özellik eklenmiştir.
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
Ekte ki dizede ki her iki median2ın degeri aynı.Aralarında ki fark sizinde göreceği gibi ilki 3 farklı dize olarak formüle edilmiş, ikincisi ise tek dize olarak.Yani excelde ki gibi idealin 3 dizeyi tek dize gibi görmesini sağlamak lazım.Şimdiden teşekkürler.
http://i63.tinypic.com/157ku95.png
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.
Melesef doğru değil.
Anladığım kadarıyla siz Median'ı indiktör olarak kullanmak istiyorsunuz. Ancak verdiğiniz excel örneğinde veriler birleştiriliyor ve tek bir median değeri hesaplanıyor. Ben de buna göre yazdım formülü. Örneğin H, C, L için düşünelim. Grafiğinizde farzedelim ki 1000 bar var. Bu listeyi birleştirirseniz 3000'lik bir dizi elde edeceksiniz. Bu 3000'lik dizinin belli periyotlarda medianını hesaplarsınız ancak bu hesapladığınız 3000'lik median dizisini tekrar nasıl 1000'lik bir diziye dönüştüreceksiniz?
Ben Median ile bir indikator oluşturmak istiyorum direk indikatörden ziyade ve bu indikatörde istenilen periyodda H,L,C değerlerini tek bir dizeye dönüştürüp Median değerini almak istiyorum.Benim sorunum bu 3 dizeyi bir araya getirip Median değerlerini almak.yani diyelim ki 10 günlük Median'ı kullanacağım.Son 10 günün 10H+10L+10C toplamı 30 tane değer verecek bana ve bu 30 sayının medianı lazım.Tekrardan 10 tane değere dönmeme gerek yok.
arkadaşlar, vps de çalışan ideal kapanmış. tekrar açtım, lakin sistemlerimi görmüyor. yeni versiyon güncelledim, yine sistemleri görmüyor. ne yapmalıyım?
Vps kullanan arkadaslar 2 lisans mi satin aliyorlar.
Şef hocam bence ideal dosyasını c nin altındaki tümünü önce yedek alıp,silip tekrar yükleyin
Sayfalar be chartsistem dosyalarını yedekten alıp üzerine kopyalayın
Geçmiş dataları tutuyorsanız onlarıda kopyalarsanız düzelir bence
Ama vps e chartsistem e sadece kullandıklarınızı yükletin bence dosya çok olduğunda kasma yapıyor
Poyraz2008
ideali silip tekrar kurdum olmadı. son olarak vps serverde windows u tekrar kurdurdum, sorun çözüldü.
MAX(H, L, C) ile MAX(H) ve MIN(H, L, C) ile MIN(L) aynı değerleri verir ancak kodu sizin istediğiniz gibi yazdım. Gönderdiğiniz MRS hesaplamasına değerleri daha makul görebilmek amacıyla 100 ile çarpma işlemi ekledim. Beklediğimden farklı ve güzel bir çıktı verdi. Filtre olarak işe yarayabilir.
Kodu çalıştırabilmek için daha önce göndermiş olduğum median formülünü User.dll de tutmanız gerekiyor. Hesaplamalarda hatalar olabilir, dolayısıyla kendiniz test etmeyi unutmayın.Kod:var P = Sistem.GrafikVerileri;
var H = Sistem.GrafikFiyatOku(P, "Yuksek");
var C = Sistem.GrafikFiyatOku(P, "Kapanis");
var L = Sistem.GrafikFiyatOku(P, "Dusuk");
var MED10 = Sistem.Liste(0f);
var MAX20 = Sistem.Liste(0f);
var MIN20 = Sistem.Liste(0f);
var MRS = Sistem.Liste(0f);
var HLC10 = new List<float>();
var HLC20 = new List<float>();
for (var i = 21; i < P.Count; i++)
{
var hlc = new List<float> { H[i], C[i], L[i] };
HLC10.AddRange(hlc);
HLC20.AddRange(hlc);
if (HLC10.Count == 30)
{
MED10[i] = User.Median(HLC10);
HLC10.RemoveRange(0, 3);
}
if (HLC20.Count == 60)
{
MAX20[i] = HLC20.Max();
MIN20[i] = HLC20.Min();
HLC20.RemoveRange(0, 3);
}
MRS[i] = 100 * (MED10[i] - MAX20[i]) / MAX20[i];
}
Sistem.Cizgiler[0].Deger = MED10;
Sistem.Cizgiler[1].Deger = MAX20;
Sistem.Cizgiler[2].Deger = MIN20;
Sistem.Cizgiler[3].Deger = MRS;
Sayin Caglar;
Ilgi ve alakaniza tesekkurler .Gonderdigim formul Amibroker'da ki percentrank ile daha verimli calisiyor. Orjinal formulde 252 gunluk deger ile kullanmak gerekiyor yani percentrank(MRS,252) seklinde .100 ile carpmak yerine bu sekilde kullanmak daha cok isinize yarayabilir belki.Ideal kullanimi ( Daha once Sezai bey yardimci olmustu cevirisinde) ve orjinali soyle:
Orjinal Amibroker formulu:
function PercentRank( Data, Periods )
{
Count = 0;
for ( i = 1; i < Periods ; i++ )
{
Count = Count + ( Data > Ref( Data, -i ) );
}
return 100 * Count / (Periods-1);
}
Ideal Kullanimi (MRS'e uygulanmis hali):
for ( int i = Lenght; i < C.Count; i++)
{
float Count = 0;
for (int j = i-Lenght; j <= i; j++)
{
if (MRS[j] < MRS[i]) Count ++;
}
Count = Count * 100 / (float)Lenght;
MRSB[i] = Count ;
}
Al-Sat Kosulu olarakta >50 ve <50 kullanilabilir.
Ayrica Sayin Caglar, Percentrank'i surekli kullanmak icin User.dll icerisine nasil adapte edebiliriz acaba? Amibroker kullanimi oldukca verimli cunku.
Merhaba, döngüde tüm barları değilde sadece son 100 barı okumasını istersek nasıl yazmamız gerekir.
SM-N910C cihazımdan hisse.net mobile app kullanarak gönderildi.
Arkadaslar,
kesisme tara veya yukarikestiyse/asagikestiyse sorgularini robot haricinde dongu icinde nasil kullanabilirim ? Asagida ki denemem cevap vermiyor. Ideal kutuphane de ve eski forumlarda yeterli ornek bulamadim:
var AL1 = Sistem.YukariKestiyse(RSI, 30);
var SAT1 = Sistem.AsagiKestiyse(RSI, 70);
var AL2 = Sistem.YukariKestiyse(RSI2, 25);
var SAT2 = Sistem.AsagiKestiyse(RSI2, 75);
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (SonYon != "A" && AL1 [i] || AL2 [i] )
{
Sistem.Yon[i] = "A"; // alış
SonYon = "A";
}
else if ( SonYon != "S" && SAT1 [i] || SAT2 [i] ) //Satış koşulu
{
Sistem.Yon[i] = "S"; // satış
SonYon = "S";
}
}
Twitter da Yeni başlayanlara iyi bir öğretici olacak gibi gözüküyor
hisse.net kullanarak iPhone aracılığıyla gönderildihttps://uploads.tapatalk-cdn.com/201...3746c90339.png