sorunuzun cevabı formülün içerisinde yazıyor.
repaint engellemenin en kolay ve temel yolu "önceki barı" kullanmaktır.
Printable View
çok yerinde hata vardı. özellikle kopyala yapıştır yaptığın yerlerde değişkenlerin.
şu şekil bi görüntü mü istiyorsun?
http://badgs.webege.com/20170411225204.png
PHP Code:
var V =Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V , "Kapanis") ;
var O = Sistem.GrafikFiyatOku(V , "Acilis") ;
var BarSayisi = V.Count;
var Rsiperiyot = Convert.ToSingle(Sistem.Parametreler[0]) ;
var Rsialtbolge = Convert.ToSingle(Sistem.Parametreler[1]) ;
var Rsiortabolge= Convert.ToSingle(Sistem.Parametreler[2]) ;
var Rsiustbolge= Convert.ToSingle(Sistem.Parametreler[3]) ;
var RSI = Sistem.RSI(V,Rsiperiyot);
var Rsialtbolgeninaltcizgisi = Sistem.Liste(0);
var Rsialtbolgeninustcizgisi = Sistem.Liste(0);
var Rsiortabolgeninaltcizgisi = Sistem.Liste(0);
var Rsiortabolgeninustcizgisi = Sistem.Liste(0);
var Rsiustbolgeninaltcizgisi = Sistem.Liste(0);
var Rsiustbolgeninustcizgisi = Sistem.Liste(0);
for (int i = 20; i < BarSayisi; i++)
{
Rsialtbolgeninaltcizgisi[i] = Rsialtbolgeninaltcizgisi[i-1];
Rsialtbolgeninustcizgisi[i] = Rsialtbolgeninustcizgisi[i-1];
Rsiortabolgeninaltcizgisi[i] = Rsiortabolgeninaltcizgisi[i-1];
Rsiortabolgeninustcizgisi[i] = Rsiortabolgeninustcizgisi[i-1];
Rsiustbolgeninaltcizgisi[i]= Rsiustbolgeninaltcizgisi[i-1];
Rsiustbolgeninustcizgisi[i]= Rsiustbolgeninustcizgisi[i-1];
if ( RSI[i-1] < Rsialtbolge && RSI[i] > Rsialtbolge ) // Sistem.YukariKestiyse(RSI, Rsialtbolge) )
{
Rsialtbolgeninaltcizgisi[i] = O[i];
Rsialtbolgeninustcizgisi[i] = C[i];
}
if (RSI[i-1] < Rsiortabolge && RSI[i] > Rsiortabolge ) //Sistem.YukariKestiyse(RSI, Rsiortabolge) )
{
Rsiortabolgeninaltcizgisi[i] = O[i];
Rsiortabolgeninustcizgisi[i] = C[i];
}
if (RSI[i-1] < Rsiustbolge && RSI[i] > Rsiustbolge ) //Sistem.YukariKestiyse(RSI, Rsiustbolge) )
{
Rsiustbolgeninaltcizgisi[i]= O[i];
Rsiustbolgeninustcizgisi[i]= C[i];
}
}
Sistem.Cizgiler[0].Deger = Rsiustbolgeninaltcizgisi ;
Sistem.Cizgiler[1].Deger = Rsiustbolgeninustcizgisi ;
Sistem.Cizgiler[2].Deger = Rsiortabolgeninaltcizgisi ;
Sistem.Cizgiler[3].Deger = Rsiortabolgeninustcizgisi ;
Sistem.Cizgiler[4].Deger = Rsialtbolgeninaltcizgisi ;
Sistem.Cizgiler[5].Deger = Rsialtbolgeninustcizgisi ;
eedit : yukardaki grafik senin verdiğin 10 25 50 80 değildi
bu 5 dk lık olan sizin değerlere göre
http://badgs.webege.com/20170411225537.png
sayin keci yanilyorsam duzeltin, orada zaten bir liste olusturuluyor, ve bu kapanislari tutuyor . rsi hesabinda yalnizca kapanis degerleriyle islem yapilabildiginden rahatlikle o listenin rsisi alinabilinir, ancak atr degerinde ise bildigim kadariyla high low open closelarin karsilastirilmasi neticesinde bir liste olusturulmasi lazim ki, benim yazdigim formule adapte edemedim. hani atrnin idealde acik formulu varsa belki adapte etmeyi deneyebilirim.. anladigim kadariyla sizin icin basit birsey bu.
ATR ye liste kullanım şekli ile ister fiyat ister RSI değerini hesaplattırıp kullanabilirsin.
AverageTrueRange(Liste, 14)
var V =Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V , "Kapanis") ;
var RSI = Sistem.RSI(V,14);
RSI_ATR=Sistem.AverageTrueRange(RSI, 14);
FYT_ATR=Sistem.AverageTrueRange(C, 14);
abi bu kullanimlari biliyorum. rsi (benim ornegini attigim)tek bir parametre aldigindan dolayi kapanislari for'lamak yetiyor, ancak atrde bildigim kadariyla 4 parametreye bakilip karsilastirilip ona gore hesaplaniyor atr degeri. benim sikinti cektigim yer surasi ;
for (int i = 1; i < V.Count; i++)
{
if (V[i].Date.Day != V[i - 1].Date.Day)
{
PrevGunC.Add(V[i - 1].Close);
GunTarih.Add(V[i].Date.ToString("yyyyMMdd"));
}
}
buralara highli lowlu inside bar filan olursa atrnin hesabini yapacak seyler lazim. grafikverilerinden tum bilgileri cekiyorsa ben soyle bi kullanim denedim ama yemedi ;
PrevGunC.Add(V[i - 1]);
:)pp
yani komple su sekilde degistirdim, guya grafikverilerinin icinden atryi hesaplaticam ,
var V = Sistem.GrafikVerileri;
var PrevGunV = new List<float>();
var GunTarih = new List<string>();
for (int i = 1; i < V.Count; i++)
{
if (V[i].Date.Day != V[i - 1].Date.Day)
{
PrevGunV.Add(V[i - 1]);
GunTarih.Add(V[i].Date.ToString("yyyyMMdd"));
}
}
var PrevGunATR = Sistem.AverageTrueRange(PrevGunV, 20);
var ATR = Sistem.Liste(0);
var StartPos = 0;
for (int i = 1; i < V.Count; i++)
{
for (int j = StartPos; j < PrevGunATR.Count; j++)
{
if (V[i].Date.ToString("yyyyMMdd") == GunTarih[j])
{
ATR[i] = PrevGunATR[j];
StartPos = j;
break;
}
}
}
// RSI listesi önceki günün değeridir.
//intraday grafiklerde repaint olmadan döngü içinde kullanılabilir.
Sistem.Cizgiler[0].Deger = ATR;
ancak yemedi.
yoksa herhangi bir listenin atrsi rsisi hesaplanabilir idealde, anlamli bulunuyorsa.
yanlış anlamadıysam atr kullanmak istiyosunuz ama çılgın açılış barlarının bozmasını istemiyosunuz
öyle ise yukarıda yaptığınız gibi açılış barının H L ve C unu bir önceki bar olarak değiştirebilirsiniz
o başlangıç barını tespit ettiğiniz yerde v[i].Kapanis=v[i-1].Kapanis; vs vs şeklinde
Baboli parmaklarına, o parmakları yöneten beyin kıvrımlarına, ayırdığın zamana, o zamanı ayırma kararı veren beyninin limbik sistemine teşekkür ederim. O sistemden salgılanan dopamin miktarın daha nice nice olsun. ( psikolojik danışman iltifatı böyle oluyor maalesef . özür )
Şimdi benim limbik sistemime takılıp azda olsa kortizon salgılatan şey şu. İncelediğim bütün kod parçaçıklarında parametre değerleri için "convert.tosingle" ihtiyaç duyulmamış.Bu örnekteki kullanım mantığı ne? (niye çok sayıda ondalık basamak içeren reel sayıya döndürüyoruz ) ( beginner seviyesi böyle olur. ÖZÜR )
var V =Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V , "Kapanis") ;
var O = Sistem.GrafikFiyatOku(V , "Acilis") ;
var BarSayisi = V.Count;
var Rsiperiyot = Convert.ToSingle(Sistem.Parametreler[0]) ;
var Rsialtbolge = Convert.ToSingle(Sistem.Parametreler[1]) ;
var Rsiortabolge= Convert.ToSingle(Sistem.Parametreler[2]) ;
var Rsiustbolge= Convert.ToSingle(Sistem.Parametreler[3]) ;
Baboli demişim özür. Bearbull.Yiğidi öldür hakkını yeme.
Aşağıdaki sistemle ilgili, ortalamanın kesişiminden çıkan alış ve satış sinyalini bir bar onceden nasıl verdirebilirim?
// kapanış fiyatlarını oku
var C = Sistem.GrafikFiyatSec("Kapanis");
var H = Sistem.GrafikFiyatSec("Yuksek");
var L = Sistem.GrafikFiyatSec("Dusuk");
// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(C, "Exp", 50);
var MA2 = Sistem.MA(C, "Exp", 100);
// strateji
var SonYon = "";
double Fiyat = 0;
var IslemBarNo = 0;
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (MA1[i-1] < MA2[i-1] && MA1[i] >= MA2[i] && SonYon != "A") // AL
{
Sistem.Yon[i] = "A"; // alış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
IslemBarNo = i;
}
else if (MA1[i-1] > MA2[i-1] && MA1[i] <= MA2[i] && SonYon != "S") // SAT
{
Sistem.Yon[i] = "S"; // satış
SonYon = Sistem.Yon[i];
Fiyat = C[i];
IslemBarNo = i;
}
else if (SonYon == "S") // satış pozisyonundayken FLAT
{
var LimitBarNo = 0;
var Seviye = 0.0;
for (int k = IslemBarNo; k < i; k++)
{
if (Fiyat - L[k] > 5)
{
if (Seviye == 0 || Seviye > L[k])
{
LimitBarNo = k;
Seviye = L[k];
}
}
}
if (LimitBarNo > 0)
{
if (C[i] - Seviye > 3)
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
}
}
else if (SonYon == "A") // alış pozisyonundayken FLAT
{
var LimitBarNo = 0;
var Seviye = 0.0;
for (int k = IslemBarNo; k < i; k++)
{
if (H[k] - Fiyat > 5)
{
if (Seviye == 0 || Seviye < H[k])
{
LimitBarNo = k;
Seviye = H[k];
}
}
}
if (LimitBarNo > 0)
{
if (Seviye - C[i] > 3)
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
}
}
}
// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[1].Deger = MA2;
Teşekkür ederim sayın @Bear_Bull
peki Sistem.Yon[i-1] = "A"; // alış
yapsam tamamiyle hatalı olur değil mi?
Birde şöyle bir şey okumuştum ama, [IMG]http://i.hizliresim.com/p0N7JN.png[/IMG]
buda işimi görmez değil mi?
yazınızda for döngüsü için resimde açıklaması yazılmış orası işinize yaramaz.
5000 bar varsa toplamda.
oraya 4500 dersiniz sistem son 500 bar için sinyal arar çok eski datalar ile uğraşmaz. :yes:
if (MA1[i-1] < MA2[i-1] && MA1[i] >= MA2[i] && SonYon != "A") // AL
bu yukarıdakini ise aşağıdaki gibi değiştirirseniz 1 bar geriye değil üstüne 1 bar daha sinyali geciktirmiş olursunuz.
MA1[i-2] < MA2[i-2] && MA1[i] >= MA2[i]
evet ben sinyali erkene almak istediğimden imkansızı istemiş oluyorum ozaman.
çok uzuldum :(
şunları denedim belki yaparım diye yine olmadı...
// parametreleri al
var Yontem = Sistem.Parametreler[0];
var Periyot1 = Sistem.Parametreler[1];
var Periyot2 = Sistem.Parametreler[2];
// kapanış fiyatlarını oku
var Veriler = Sistem.GrafikFiyatSec("Kapanis");
var Prev1 = Sistem.OncekiKapanisGun("MA1");
var Prev2 = Sistem.OncekiKapanisGun("MA2");
// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(Veriler, Yontem, Periyot1);
var MA2 = Sistem.MA(Veriler, Yontem, Periyot2);
// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = MA1;
Sistem.Cizgiler[0].Aciklama = "MA " + Periyot1;
Sistem.Cizgiler[1].Deger = MA2;
Sistem.Cizgiler[1].Aciklama = "MA " + Periyot2;
// strateji
for (int i = 2; i<Sistem.BarSayisi; i++)
{
Prev1 = MA1[i-1];
Prev2 = MA2[i-1];
if (MA1[i-1] < MA2[i-1] && MA1[i] > MA2[i])
Sistem.Yon[i] = "A"; // alış
if (MA1[i-1] > MA2[i-1] && MA1[i] < MA2[i]) // 1.ortalama 2.ortalamanın altına inerse
Sistem.Yon[i] = "F"; // satış
}
oysaki sinyali bir bar one ceksem çok harika olacaktı ya
Sayin @Bear_Bull
MA5 ve MA22 kesisimli olan bir sistemde,
5-22 kesisiminde al veren ve sati sadece hisse senedi degeri MA22 yi asagi kesince sat veren bir sistem yapilabilir mi?
Satis kismina
If (sonfiyat[i-1]>MA2 )
Seklinde mi olur?
hisse.net kullanarak iPhone aracılığıyla gönderildi
4 tane değişkenim var
bunları maille göndermek istiyorum ,
ama aşağıdaki tablo gibi görünmesini istiyorum. ideal mailleri html formatında gönderiyo muhtemelen html kodu yazılması gerek ,"Sistem.MailMetin =" kısmında görünmesi gerek.
tabloyu beceremedim , çok fazla satır olunca telefondan falan bakarken karışıyo
bir yardım eden olurmu
var a="qqq";
var b="23;
var c="fff";
var d=45;
a b c d qqq 23 fff 45
ayrıcaPHP Code:
<table width="100%">
<tr>
<td width="20%">
a
</td>
<td width="20%">
b
</td>
<td width="20%">
c
</td>
<td width="20%">
d
</td>
<tr>
<tr>
<td>
qqq
</td>
<td>
23
</td>
<td>
fff
</td>
<td>
45
</td>
<tr>
<table>
http://divtable.com/generator/
ile basit
http://tablestyler.com/
ile
daha cancanlı html kodları oluşturabilirsiniz.
1-ister manuel yazarak ister genarete ederek html oluşturuken tek satırlı kalıplar oluşturun.
2-header 'In bittiği yere kadar bir değişkende tutun.
3-detail yani tekrar edecek "html kalıbını" ayrı bir değişkende tutun.
4-detaydan sonraki html kodunu ise ayrı bir değişkende tutun.
5-detay html kalıbı içerisine gerçek değerleri değil {0} gibi değişkenleri yazın.
6-bir for içerisinde detail kalıbını oluşturun;
for içinde örnek kullanım detay_html = string.format(detay_template_html, C[i], C{i-1}); //iki kolonlu bir tabloda detay satırında {0} yerine bugünkü kapanışı, {1} yerinede dünkü kapanışı yazar.
7- en son ise for dışında;
full_html = header_html + detay_html + footer_html;
gibi bir ifade ile olay biter.
teşekkürler
login olunmuşsa 3 dakikada bir vob hesaba bakıp açıkta bekleyen gerçekleşmemiş emir varsa mail atan robot
işlem yapmaz sadece kontrol amaçlı. 3 dakika azaltılabilir çoğaltılabilir.
bekleyenleri , gerçekleşen işlemleri , mevcut pozisyonu maille bildiriyor
bist tarafı için de ekleme yapılabilir kolayca ,
bekleyen emir olduğu sürece 3 dakikada bir mail atmaya devam edeceğine dikkat
ben listeleri tablolaştırıcam uygun bi zamanda . birde gerçekleşen işlemler için saat bilgisi alamadım belki aracı kurumla ilgilidir
mantığı düzgündür ama yazılım tarafı tabiiki acemice
belki biri el atıp tablolaştırmak ister :Sad:
Kod:if (Sistem.ZamanKontrolDakika(Sistem.Name+"viophesap")>=3)
{
string bekleyen=" ";
string pozlar=" ";
string gerceklesen=" ";
int i,m,n;
var ViopHesap = Sistem.ViopHesapOku();
if (ViopHesap != null )
{
// Pozisyonlar
var pozk=ViopHesap.Pozisyonlar ;
var gerk=ViopHesap.GerceklesenEmirler;
var berk=ViopHesap.BekleyenEmirler ;
Sistem.ZamanKontrolGuncelle(Sistem.Name+"viophesap");
if (berk.Count>0)
{for ( i=0; i<berk.Count;i++)
{bekleyen=bekleyen + "<br />"+berk[i].Symbol.ToString()+";"+berk[i].BuySell.ToString()+";"+berk[i].Amount.ToString()+";"+
berk[i].Price.ToString()+";"+berk[i].OrderNo.ToString();}
if (pozk.Count>0)
{ for ( m=0;m<pozk.Count;m++)
{pozlar=pozlar +"<br />"+ pozk[m].Symbol.ToString()+" / "+pozk[m].BuyAmount .ToString()+" / "+pozk[m].SellAmount .ToString()+" / "+
pozk.Count .ToString();}}
if (gerk.Count>0)
{ for ( n=0;n<gerk.Count;n++)
{gerceklesen=gerceklesen + "<br />"+gerk[n].Symbol.ToString()+";"+gerk[n].BuySell.ToString()+";"+gerk[n].Amount.ToString()+";"+
gerk[n].Price.ToString()+";"+gerk[n].OrderTime.ToString()+";"+gerk[n].OrderNo.ToString(); }}
Sistem.MailServerAdres = "smtp.xxxxx.com";
Sistem.MailServerPort = 587;
Sistem.MailKonu = "bekleyen: "+ berk.Count.ToString()+ " / pozisyon: "+ pozk.Count.ToString()+" / Gerceklesen: "+gerk.Count.ToString();
Sistem.MailMetin = "bekleyenler : <br />"+ bekleyen +"<br />"+ "gerceklesen : <br />"+gerceklesen +"<br />"+ "mevcut poz : <br />"+ pozlar ;
Sistem.MailGonderenAdres = "xxxxx";
Sistem.MailGonderenSifre = "xxxx";
Sistem.MailAliciEkle("xxxxx");
Sistem.MailGonder();
}
}
}
Bugün mutluluktan ağlayasım geldi valla. Artık düşündüklerimi yazmaya başladım. Öncede 2 adım ileri bir adım geri gidiyordum. Şimdi 4 adım ileri 1 adım geri gidiyorum.
Eskiden çok işime yarayan mtasdelen tarzı uzun yeşil yoyo formülümü ideale uyarladım. Barlarda mum formasyonlarındanTek bir yoyo biçimini arıyor. Aradığı yoyo biçimi, üst fitil ve alt fitilin boyu gövde boyunun en az 2 katından büyük veya eşit olacak. (X2 bölümlerini isteğe göre X3 haline getirebilirsiniz.) Yoyo oluşunca üst fitil ile kapanışın ortasını teyit çizgisi olarak çekiyor. alt fitil ile açalış ortasınıda stop olarak çekiyor. Teyit çizgisi üstünde açılış yaparsa ( yeşil çizgi ) trend yukarı, stop çizgisinin altında açılış yaparsa trend aşağı ( viop'a uyarlayın işte) Pozisyonunuza göre tersdeki çizgi çıkış/stop yeri.
http://i68.tinypic.com/2e16tdv.jpg
KOD:
var V =Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V , "Kapanis") ;
var O = Sistem.GrafikFiyatOku(V , "Acilis") ;
var H = Sistem.GrafikFiyatOku(V , "Yuksek") ;
var L = Sistem.GrafikFiyatOku(V , "Dusuk") ;
var BarSayisi = V.Count;
var UFB = Sistem.Liste(0);
var AFB = Sistem.Liste(0) ;
var GB = Sistem.Liste(0);
var Teyit = Sistem.Liste(0);
var Stop = Sistem.Liste(0);
for (int i = 1 ; i < BarSayisi; i++)
{
UFB[i] = H[i]-C[i];
AFB[i] = O[i]-L[i];
GB[i] = C[i]-O[i];
Teyit[i] = Teyit[i-1];
Stop[i] = Stop[i-1];
if ( H[i]>C[i] && C[i]>O[i] && O[i]>L[i] && UFB[i]>=(GB[i]*2) && AFB[i]>=(GB[i]*2))
{
Teyit[i] = C[i]+(UFB[i]/2);
Stop[i] = O[i]-(AFB[i]/2);
}
}
Sistem.Cizgiler[0].Deger = Teyit ;
Sistem.Cizgiler[1].Deger = Stop ;
Bearbull tekrar teşekkürler. Rsı bant örneğin sayesinde beynimde bağlantılar oluşmaya başlıyor yavastan. :P
Darvas box'un 3. altın basamak kuralını biliyorsanız. Bu formülede, rsı bantada uygulayabilirsiniz. Deneyimle sabittir. İşe yarıyor. Her 3. kırılma en büyük trendin stop / teyit çizgizisi oluyor.
Arkadaslar bist hesap bilgilerine ulasmak icin bunu buldum
Kod:var BistHesap = Sistem.BistHesapOku();
if (BistHesap != null)
{
var Limit = BistHesap.IslemLimit;
var Bakiye = BistHesap.Bakiye;
var PozisyonList = BistHesap.Pozisyonlar;
var BekleyenList = BistHesap.BekleyenEmirler;
var GerceklesenList = BistHesap.GerceklesenEmirler;
}
ancak su hatalari veriyor
AppData\Local\Temp\barui041.0.cs(12,14) : error CS1001: Identifier expected
AppData\Local\Temp\barui041.0.cs(12,14) : error CS1513: } expected
AppData\Local\Temp\barui041.0.cs(14,8) : error CS1518: Expected class, delegate, enum, interface, or struct
AppData\Local\Temp\barui041.0.cs(48,1) : error CS1022: Type or namespace definition, or end-of-file expected
bunun cozumu nedir
devamını yazmadıysan viop için olanın aynını kullanabilirsin, tüm kodda sadece viophesapoku yu bisthesapoku yapacaksın
ikisini beraber kullanıcaksan , değişkenleri değiştirirsin yada 2 kere declare etmessin
5 sn den daha sık sorgularsan null dönüyo , ona dikkat et . 3-5 daikada bir döndürmek en mantıklısı
tek satirlli viop robotu;
var Islem = Sistem.RobotViopAktif("sistem_adi" , "VIP'VIP-X030" , Sistem.AktifViopKontrat, "5", 1);
------
normal robot kodu;
if (Islem !="")
{
if (Islem == "ALIS")
{
Sistem.PozisyonKontrolGuncelle(Sistem.Name+"----"+ Sozlesme, Pozisyon+Miktar);
}
if (Islem =="SATIS")
{
Sistem.PozisyonKontrolGuncelle(Sistem.Name+"----"+ Sozlesme, Pozisyon-Miktar);
}
Sistem.EmirSembol =Sozlesme;
Sistem.EmirIslem = Islem;
Sistem.EmirMiktari = Miktar ;
Sistem.EmirFiyati ="Aktif" ;
Sistem.EmirSuresi ="GUN" ;
Sistem.EmirTipi ="KPY";
Sistem.EmirFiyatTipi ="PYS" ;
Sistem.EmirGonder();
}
--
tek satirli viop robot kodu,, normal robot koduna adapte edilebiliyor mu, yani alis satis sarti tek satirlidan gelsin istiyorum, (sistem alim satim sartlarini normal robot kodunda yazmakla ugrasmak istemiyorum) ancak robotun ne kadar aldigini sattigini ben kodlamak istiyorum. ya da buna benzer bir ornegi olan var mi.
Factor:=Input("Factor",1.00,10.00,3.00);
Pd:=Input("ATR Periods",1,100,10);
Bu metastock formülünü ideale uyarlayamadım...
yardımcı olabilir misniz?
hisselerin temettü tarihlerini tutarlarını bölünmeleri falan sistemsel alabileceğimiz bi fonksiyon varmıdır bildiğiniz
Temettü tarihleri benim içinde sorun valla. Bölünmeleri hissenin içinde görebiliyoruzda, temettü tarihleri matriksdeki gibi niye gözükmüyor. Matriksde açıklanan temettü tarihleri gözüküyor.
arkadaşlar 2-3 adım ileri ,1 adım geri gitme olayımda. Bugünde kafamı duvarlara vurmaya başlıyorum yine.
aşağıdaki formülde hatam ne. Volume verilerinde son 3 barın en az 2 şer kat katlandığı yerleri göstermek istiyorum. Matriksde 1 satırda ne kadarda kolay yazıyorum. 1 saattir uğraşıyorum. Tam mantığı anlıyorum dediğim yerde niye yine sorunlar yaşıyorum. Vol'ude countlu hale getirdim olmuyor. Şayet satırında parantez düzenlemeleride yaptımki birçoğu gereksizdi yine olmuyor. Şayet satırında i degerlerinin -1 , -2 tanımlamalarınıda yaptım olmuyor . olmuyor.
var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V , "Kapanis") ;
var O = Sistem.GrafikFiyatOku(V , "Acilis") ;
var Vol = Sistem.Volume() ;
var vol1 = Sistem.Liste() ;
var vol2 = Sistem.Liste() ;
var Vol3 = Sistem.Liste() ;
var BarSayisi = V.Count ;
var Teyit = Sistem.Liste(0) ;
var Stop = Sistem.Liste(0) ;
for (int i = 3 ; i < BarSayisi; i++)
{
Vol1[i] = Vol[i-1] ; // son volume degeri (1. bar )
Vol2[i] = Vol[i-2] ; // 2. bar ( sondan geriye doğru )
Vol3[i] = Vol[i-3] ; // 3. bar
Teyit[i] = Teyit[i-1] ;
Stop[i] = Stop[i-1] ;
if ( Vol1[i] > ( Vol2[i] * 2 )) && vol2[i] > ( Vol3[i] * 2 ))
{
Teyit[i] = C[i] ;
Stop[i] = O[i] ;
}
}
Sistem.Cizgiler[0].Deger = Teyit ;
Sistem.Cizgiler[1].Deger = Stop ;
Hata mesajlarıda 1 değil üstelik
1,5 katı olarak yaptım 1,5f leri 2 yapabilirsin
http://badgs.webege.com/20170425202225.png
PHP Code:
var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V , "Kapanis") ;
var O = Sistem.GrafikFiyatOku(V , "Acilis") ;
var Vol = Sistem.GrafikFiyatOku(V , "Lot") ;
//var Vol = Sistem.Volume() ; //yok böyle bir tanım..
/*
var Vol1 = Sistem.Liste(0) ;
var Vol2 = Sistem.Liste(0) ;
var Vol3 = Sistem.Liste(0) ;
*/
var BarSayisi = V.Count ;
var Teyit = Sistem.Liste(0) ;
var Stop = Sistem.Liste(0) ;
for (int i = 3 ; i < BarSayisi; i++)
{
/*
Vol1[i] = Vol[i-1] ; // son volume degeri (1. bar )
Vol2[i] = Vol[i-2] ; // 2. bar ( sondan geriye doğru )
Vol3[i] = Vol[i-3] ; // 3. bar
*/
Teyit[i] = Teyit[i-1] ;
Stop[i] = Stop[i-1] ;
if ( Vol[i-1] > (Vol[i-2] * 1.5f) && Vol[i-2] > (Vol[i-3] * 1.5f) )
{
Teyit[i] = C[i] ;
Stop[i] = O[i] ;
}
}
Sistem.Cizgiler[0].Deger = Teyit ;
Sistem.Cizgiler[1].Deger = Stop ;
Sistem.Cizgiler[2].Deger = Vol ;
Senin yukarıda verdiğin formülde /* ........*/ araları çıkardığımda da yine pcnin tüm gün verdiği hata mesajları verdi. inan bana senin düzelttiğin tarzda bile denemiştim bugün. Sebebide keşfettim. İndikatöre adı şu şekilde vermem "3_Hacim_katlanmasi". Senin formülü "Hacim_Katlanmasi" diye kaydedince hoooooop hiçbir hata yok. Allahım sana geliyorum. Bugün kaç saat kaç farklı şekilde bu formülü denedim. sebebi bumuydu yaniii. Offf offfffffffffffffffff. Bu çıldırma süreçleri daha ne kadar sürüyor. :) Tekrar teşekkür bear bull.
Sende çalışan bu formül
var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V , "Kapanis") ;
var O = Sistem.GrafikFiyatOku(V , "Acilis") ;
var Vol = Sistem.GrafikFiyatOku(V , "Lot") ;
var BarSayisi = V.Count ;
var Teyit = Sistem.Liste(0) ;
var Stop = Sistem.Liste(0) ;
for (int i = 3 ; i < BarSayisi; i++)
{
Teyit[i] = Teyit[i-1] ;
Stop[i] = Stop[i-1] ;
if ( Vol[i-1] > (Vol[i-2] * 1.5f) && Vol[i-2] > (Vol[i-3] * 1.5f) )
{
Teyit[i] = C[i] ;
Stop[i] = O[i] ;
}
}
Sistem.Cizgiler[0].Deger = Teyit ;
Sistem.Cizgiler[1].Deger = Stop ;
Sistem.Cizgiler[2].Deger = Vol ;
Bende bu hataları veriyor. adı doğru koymazsam.
c:\Users\murat\AppData\Local\Temp\2sf25sby.0.cs(12 ,14) : error CS1001: Tanımlayıcı bekleniyor
c:\Users\murat\AppData\Local\Temp\2sf25sby.0.cs(12 ,14) : error CS1513: } bekleniyor
c:\Users\murat\AppData\Local\Temp\2sf25sby.0.cs(14 ,8) : error CS1518: class, delegate, enum, interface veya struct bekleniyor
c:\Users\murat\AppData\Local\Temp\2sf25sby.0.cs(28 ,10) : error CS1518: class, delegate, enum, interface veya struct bekleniyor
c:\Users\murat\AppData\Local\Temp\2sf25sby.0.cs(28 ,19) : error CS1003: Sözdizimi hatası, ']' bekleniyor
c:\Users\murat\AppData\Local\Temp\2sf25sby.0.cs(29 ,9) : error CS1518: class, delegate, enum, interface veya struct bekleniyor
c:\Users\murat\AppData\Local\Temp\2sf25sby.0.cs(29 ,17) : error CS1003: Sözdizimi hatası, ']' bekleniyor
c:\Users\murat\AppData\Local\Temp\2sf25sby.0.cs(31 ,11) : error CS1003: Sözdizimi hatası, ']' bekleniyor
c:\Users\murat\AppData\Local\Temp\2sf25sby.0.cs(31 ,23) : error CS1003: Sözdizimi hatası, ']' bekleniyor
c:\Users\murat\AppData\Local\Temp\2sf25sby.0.cs(31 ,44) : error CS1003: Sözdizimi hatası, ']' bekleniyor
c:\Users\murat\AppData\Local\Temp\2sf25sby.0.cs(31 ,57) : error CS1003: Sözdizimi hatası, ']' bekleniyor
c:\Users\murat\AppData\Local\Temp\2sf25sby.0.cs(33 ,10) : error CS1518: class, delegate, enum, interface veya struct bekleniyor
c:\Users\murat\AppData\Local\Temp\2sf25sby.0.cs(33 ,17) : error CS1518: class, delegate, enum, interface veya struct bekleniyor
c:\Users\murat\AppData\Local\Temp\2sf25sby.0.cs(34 ,9) : error CS1518: class, delegate, enum, interface veya struct bekleniyor
c:\Users\murat\AppData\Local\Temp\2sf25sby.0.cs(34 ,16) : error CS1518: class, delegate, enum, interface veya struct bekleniyor
c:\Users\murat\AppData\Local\Temp\2sf25sby.0.cs(36 ,1) : error CS1022: Tür veya ad alanı tanımı ya da dosya sonu bekleniyor
c:\Users\murat\AppData\Local\Temp\2sf25sby.0.cs(37 ,1) : error CS0116: Ad alanı, alanlar veya yöntemler gibi üyeleri doğrudan içeremez
c:\Users\murat\AppData\Local\Temp\2sf25sby.0.cs(37 ,17) : error CS1001: Tanımlayıcı bekleniyor
c:\Users\murat\AppData\Local\Temp\2sf25sby.0.cs(38 ,17) : error CS1001: Tanımlayıcı bekleniyor
c:\Users\murat\AppData\Local\Temp\2sf25sby.0.cs(39 ,17) : error CS1001: Tanımlayıcı bekleniyor
c:\Users\murat\AppData\Local\Temp\2sf25sby.0.cs(41 ,1) : error CS1022: Tür veya ad alanı tanımı ya da dosya sonu bekleniyor
Sanırım böyle bişey yapmaya çalışıyorsunuz.PHP Code:
var V = Sistem.GrafikVerileri ;
var C = Sistem.GrafikFiyatOku(V , "Kapanis") ;
var O = Sistem.GrafikFiyatOku(V , "Acilis") ;
var Vol = Sistem.Volume() ;
var Vol1 = Sistem.Liste(0) ;
var Vol2 = Sistem.Liste(0) ;
var Vol3 = Sistem.Liste(0) ;
var BarSayisi = V.Count ;
var Teyit = Sistem.Liste(0) ;
var Stop = Sistem.Liste(0) ;
for (int i = 3 ; i < BarSayisi; i++)
{
Vol1[i] = Vol[i-1] ; // son volume degeri (1. bar )
Vol2[i] = Vol[i-2] ; // 2. bar ( sondan geriye doğru )
Vol3[i] = Vol[i-3] ; // 3. bar
Teyit[i] = Teyit[i-1] ;
Stop[i] = Stop[i-1] ;
if ( Vol1[i] > Vol2[i] * 2 && Vol2[i] > Vol3[i] * 2 )
{
Teyit[i] = C[i] ;
Stop[i] = O[i] ;
}
}
Sistem.Cizgiler[0].Deger = Teyit ;
Sistem.Cizgiler[1].Deger = Stop ;
Selamlar..
İdeal veri terminalinde indikatörlerin (RSI, MACD, PSAR vb) intraday grafik üzerinde günlük veya haftalık durumlarını gösterebiliyormuyuz?
(Daha önce ortalamaların farklı periyotlardaki durumlarının gösterilmesi paylaşılmış ancak indikatörler ile ilgili bir paylaşıma rastlayamadım)
İyi çalışmalar
cok rahat yapılıyor. periyot oku demen yeterli. okudugu degerin hesabını yapacağı için sorun olmuyor. Ayrı birşey yok.
Bir deneyeyim teşekkür ederim
SM-N9000Q cihazımdan hisse.net mobile app kullanarak gönderildi.
Sistem.SorguBaslik[0] = "hesap";
var BistHesap = Sistem.BistHesapOku();
if (BistHesap != null)
{
var Limit = BistHesap.IslemLimit;
var Bakiye = BistHesap.Bakiye;
var PozisyonList = BistHesap.Pozisyonlar;
var BekleyenList = BistHesap.BekleyenEmirler;
var GerceklesenList = BistHesap.GerceklesenEmirler;
Sistem.SorguDeger[0] = PozisyonList.Count ;
Sistem.SorguEkle();
}
"BistHesap" he zaman null donuyor. dakikada 1 sorguluyorum. Sorun nerede acaba
Yapmaya calistigim , portfoydeki gercek pozisyon degerlerini robot pozisyon krontrolune kopyalamak. manual mudahalede robot pozisyon ile portfoy pozisyon degisik kaliyor.
Şöyle bişey deneyebilirsin , ama amaçtan emin değilim. İdealin hesabı bekleyen iptal olan falan emir yoksa her zaman aracı kurumdan daha doğrudur anlık olarak. bekleyen iptal olan işlem ayrı bi kriz durumu zaten
birde bir sembolde birden fazla sistemle alım yapıyosan yada manuel işlem varsa sorun olur
Kod:Sistem.SorguBaslik[0] = "hesap";
var BistHesap = Sistem.BistHesapOku();
if (BistHesap != null)
{
var Limit = BistHesap.IslemLimit;
var Bakiye = BistHesap.Bakiye;
var PozisyonList = BistHesap.Pozisyonlar;
var BekleyenList = BistHesap.BekleyenEmirler;
var GerceklesenList = BistHesap.GerceklesenEmirler;
int n;
if (PozisyonList.Count>0) {for (n=0;n<PozisyonList.Count;n++) {Sistem.PozisyonKontrolGuncelle("buraya sistem adı gir"+" ,"+PozisyonList[n].Symbol, PozisyonList[n].BuyAmount-PozisyonList[n].SellAmount);
}}
}
kontrat degisim gunlerinde sistemler sapitiyor, kontrat fiyatlarinin farklari nedeniyle.
kontrat gunlerinin ilk gununu veren bir kod var mi acaba. 1., 3. ayin,5. ayin ilk islem gunu gibi ?