Merhaba,kodun icinde grafigin calistigi para birimini alabilecegim bir method var midir?
Printable View
Merhaba,kodun icinde grafigin calistigi para birimini alabilecegim bir method var midir?
Erhan hocam,
//1 deki gibi yeni bir liste tanimlayip, //2 deki satiri dongu icersine ekleyip dener misiniz?
Bu yeni liste Sistem.Yon'deki A/S/F degisimlerini 1/-1/0 degerleri olarak tutuyor. Sistem.Yon listesi sadece yon degisimleri sirasinda deger aliyor yani yon degisimi disindaki herhangi baska bir anda ici bos gibi. Yeni liste ise tum barlar boyunca ekranda gordugumuz yone paralel 1/-1/0 degerleri atiyor.PHP Code:
//1
var SonYon_Liste = Sistem.Liste(0);
//2
SonYon_Liste[i]=Sistem.Yon[i]=="A"?1:Sistem.Yon[i]=="S"?-1:Sistem.Yon[i]=="F"?0:SonYon_Liste[i-1];
Not:Bu satirlari eski forumdan "anonim" arkadasimizin sistem birlestirme kodu icerisinde uyarladim.
Merhaba,
Benim gorebildigim kadariyla strateji kismindaki kodunuz gelecege bakip sinyal uretmek istiyor. Geriye donuk testlerde bir sekilde calistirabilseniz bile seans sirasinda bir sonraki bar (i+1) hicbir zaman olusmayacagi icin tutarli bir sinyal de uretmeyecektir diye dusunuyorum. Muhtemelen yeni bar olustuktan sonra sanki onceki barda sinyal vermis gibi yapacaktir.
performans açısından döngüye sokmadan bu işi yapayım demiştim.
Bir arayüz tasarlıyorum timer ile Sistem Getiri çalıştırıp sistemin yönlerini sürekli olarak çekiyorum. Yön çekildiği veya değiştiği andaki grafik fiyat verilerindeki son değer neyse onu form uygulamama yazdırmak istiyorum amacım bu.
-Sistem YÖnünü çekiyorum ve forma yazdırabiliyorum PROBLEM YOK!
-Alış veya Satış fiyatınıda çekiyorum forma yazdırıyorum YÖN DEĞİŞMESE BİLE FİYAT DEĞİŞİYOR. PROBLEM VAR!
BUradaki problem ana sebebi timer sürekli olarak okuma yapıyor haliyle koşul gerçekleştiği içinde okumayı sürdürüyor. Buaya bir if bloğuyla son yön değişmişse git fiyatları oku veya yansıt gibi birşey demem lazım ki sadece o anda fiyatı okusun. Bir önceki son yön değişmiş ise git son fiyatı oku demek lazım fakat son yon bir liste değil anladıgım kadarıyla.
Yonumuz diye bir değişken oluşturdum global alanda timer dışında burayı kontrol ettireyim diyordum. Yanlız Yonumuz adlı değişkeni tetikleyemiyorum. yine timer veya for gibi birşeylere girişmek gerekiyormuş gibi.
Aklıma gelen şey şu Yonumuz adlı global alandaki değişkeni bir listeye çeviremezmiyiz. Bunu bir liste halinde tutup bir önceki yonumuz şöyle şimdiki yönümüz böyle ise fiyatı o zaman oku gibi bir kurgu problemı cozermı yoksa liste sürekli olarak dolup şişirirmi programı kafamda deli sorular :) KIT C# bilgisiyle :D
Kod:int Yonumuz;
public void timer1_Tick(object sender, EventArgs e) //timer1 acılınca okunacak verıler
{
SistemAdi = textBoxsistemadi.Text;
SembolAdi = textBoxsembol.Text;
Periyot = textBoxperiyot.Text;
var Sistemim = User.Sistem.SistemGetir(SistemAdi, SembolAdi, Periyot);
if (Sistemim.SonYon == "A")
{
lblsistemyonu.Text = "LONG";
Yonumuz = 1;
var S1 = User.Sistem.YuzeyselVeriOku(SembolAdi);//yüzeysel verileri oku
float P1 = S1.LastPrice; //son fiyatı
lblislemfiyat.Text = P1.ToString("0.0000"); //yazdır
}
if (Sistemim.SonYon == "S")
{
lblsistemyonu.Text = "SHORT";
Yonumuz = -1;
var S1 = User.Sistem.YuzeyselVeriOku(SembolAdi);//yüzeysel verileri oku
float P1 = S1.LastPrice; //son fiyatı
lblislemfiyat.Text = P1.ToString("0.0000"); //yazdır
}
if (Sistemim.SonYon == "F")
{
lblsistemyonu.Text = "FLAT";
Yonumuz = 0;
var S1 = User.Sistem.YuzeyselVeriOku(SembolAdi);//yüzeysel verileri oku
float P1 = S1.LastPrice; //son fiyatı
lblislemfiyat.Text = P1.ToString("0.0000"); //yazdır
}
else if (Sistemim.SonYon == null)
{
MessageBox.Show("Sistem Bulunamadı!");
}
}
// hesapla
var DEMA1 = Sistem.DEMA(5);
var DEMA2 = Sistem.DEMA(21);
// hesaplanan verileri çizgilere aktar
Sistem.Cizgiler[0].Deger = DEMA1;
Sistem.Cizgiler[1].Deger = DEMA2;
// sistem strateji
Sistem.KesismeTara(DEMA1, DEMA2);
// algo strateji
if (Sistem.YukariKestiyse(DEMA1, DEMA2)) // alış
Sistem.AlgoIslem = "A";
if (Sistem.AsagiKestiyse(DEMA1, DEMA2)) // satış
Sistem.AlgoIslem = "S";
// algo açıklama
Sistem.AlgoAciklama = "DEMA1=" + DEMA1[Sistem.BarSayisi-1].ToString("0.00") + " " +
"DEMA2=" + DEMA2[Sistem.BarSayisi-1].ToString("0.00");
************************************************** ********
// parametreleri al
var Periyot = Sistem.Parametreler[0];
var Yuzde = Sistem.Parametreler[1];
// TOMA hesapla
var TOMA = Sistem.TOMA(Periyot, Yuzde);
// EMA hesapla
var Veriler = Sistem.GrafikFiyatSec("Kapanis");
var EMA = Sistem.MA(Veriler, "Exp", Periyot);
// hesaplanan verileri çizgilere aktar ve açıklama ekle
Sistem.Cizgiler[0].Deger = TOMA;
Sistem.Cizgiler[1].Deger = EMA;
// strateji
Sistem.KesismeTara(EMA, TOMA);
**************************************
İdealin demo verisyonunda üsteki dema5-dema21 formülünde siyah olarak belirttiğim yerde sistem strateji ve algo stratejisi varken Toma formül örneginde sadece strateji bölümü eklenmiş, algo strateji eklenmemiş.
dema örnegi algo örnegi iken, toma indikatör örnegimi oluyor. Fark bumdanmı kaynaklanıyor.
Orhan Akdoğan ın Lib dosyasında buna benzer bir şey gördüm ama bahsettiğiniz olay mı bilmiyorum.
https://i.hizliresim.com/7Bymrl.jpg
Problemi muhtemelen çözdüm Pazartesi deneyeceğim Ancak kurgulanan algorıtma doğru diye düşünüyorum.
Bilgi ve öğretme amaçlı buraya da yayınlamış olayım.
a,s,f diye 0 değerinde değişkenler oluşturdum global alanda.
Timerin tick olayına yani her saniyede bir diyelim Sistemgetiri çalıştırıp sistemi çekiyor.
eğer sistemin son yonu A ise;
eğer a nın değeri de 0 a eşit ise;
Son fiyatı oku ve a nın değerini 1 arttır s ve f yide 0 yap.
Böylece timer tekrar okuma yaptıgında a'nın değeri artık 1 olacağı için LONG yazmasına veya son fiyatı okumasına gerek kalmayacak bir kere long olmuşsa birdaha long olmuş gibi davranmayacak.
Normalde her tickte yani her saniyede son yon kontrolunu saglayan if bloklarını okuyup duruyordu bu sayede o bloklarıda atlayacak max performansla calıstırmış olacagım :shh::yahoo:
Ancak sistem getir acaba ne kadar yük bindiriyor makinaya onu ilerde ölçeceğim.
Kod:int a = 0;
int s = 0;
int f = 0;
public void timer1_Tick(object sender, EventArgs e) //timer1 acılınca okunacak verıler
{
SistemAdi = textBoxsistemadi.Text;
SembolAdi = textBoxsembol.Text;
Periyot = textBoxperiyot.Text;
var Sistemim = User.Sistem.SistemGetir(SistemAdi, SembolAdi, Periyot);
if (Sistemim.SonYon == "A")
{
if (a==0)
{
lblsistemyonu.Text = "LONG";
var S1 = User.Sistem.YuzeyselVeriOku(SembolAdi);//yüzeysel verileri oku
float P1 = S1.LastPrice; //son fiyatı
lblislemfiyat.Text = P1.ToString("0.0000"); //yazdır
a++;
s = 0;
f = 0;
}
}
else if (Sistemim.SonYon == "S")
{
if (s==0)
{
lblsistemyonu.Text = "SHORT";
var S1 = User.Sistem.YuzeyselVeriOku(SembolAdi);//yüzeysel verileri oku
float P1 = S1.LastPrice; //son fiyatı
lblislemfiyat.Text = P1.ToString("0.0000"); //yazdır
s++;
a = 0;
f = 0;
}
}
else if (Sistemim.SonYon == "F")
{
if (f==0)
{
lblsistemyonu.Text = "FLAT";
var S1 = User.Sistem.YuzeyselVeriOku(SembolAdi);//yüzeysel verileri oku
float P1 = S1.LastPrice; //son fiyatı
lblislemfiyat.Text = P1.ToString("0.0000"); //yazdır
f++;
s = 0;
a = 0;
}
}
Erhan aşağıdaki kalıptan alacağın parça formül işine yarayacaktır.
grafiktekiPHP Code:
var FIYATLIST = Sistem.Liste(0);
if (AlisSinyal && SonYon != "A" || SonYon == "F" && Flat_Al ) // alış sinyal
{
Miktar = -Pozisyon + LevelLot ;
MIKTARLIST[i] = Miktar;
FIYATLIST[i] = C[i];
AvrFiyat = C[i];
AVRFIYATLIST[i] = AvrFiyat;
izLIST[i] = (FIYATLIST[i] - izleyen ) ;
Pozisyon = LevelLot ;
POZLIST[i] = Pozisyon;
SonYon = "A";
Sistem.Yon[i] = SonYon;
}
else if (SatisSinyal && SonYon != "S" || SonYon == "F" && Flat_Sat ) // satış sinyal
{
Miktar = -Pozisyon - LevelLot ;
MIKTARLIST[i] = Miktar;
FIYATLIST[i] = C[i];
AvrFiyat = C[i];
AVRFIYATLIST[i] = AvrFiyat;
izLIST[i] = (FIYATLIST[i] + izleyen ) ;
Pozisyon = - LevelLot ;
POZLIST[i] = Pozisyon;
SonYon = "S";
Sistem.Yon[i] = SonYon;
}
Sistem.Cizgiler[2].Deger = FIYATLIST;
beyaz çizgi İşlem yerlerini ve o andaki fiyatı
Açıkmavi ortalama maliyeti
Sarı İzleyen stop değerini gösterir
https://i.resimyukle.xyz/aMLQc4.png
user.dll ve arayuz, bunlarla ugrasip bir de kit C# diyorsunuz :). Sistem denemelerimi bitirip ideal robotu yoluna koyduktan sonra sizin bu yaptiklariniza benzer seyleri kurcalamayi dusunuyorum ben de.
Asagidaki kod yeni bir liste olusturup dongu kosturmadan, SistemGetir ile aldiginiz sisteminizin yonu A/S/F degerlerinden herhangi biri atandiginda 1, diger tum anlarda 0 degeri uretir. if ile SonYonPulse==1 oldugu anlarda fiyat okumasi yapabilir.
PHP Code:
var SonYonPulse=0;
//
SonYonPulse=Sistem.Yon[Sistem.Yon.Count-1]=="A"?1:Sistem.Yon[Sistem.Yon.Count-1]=="S"?1:Sistem.Yon[Sistem.Yon.Count-1]=="F"?1:0;
Bence Algo stratejiye hic kafa yormaniza gerek yok. Bildigim kadariyla Sistem.AlgoIslem sartlar gerceklestiginde sadece 1 kereligine al ya da sat yapilmasi icin kullanilan bir fonsiyon. Her iki kodda da "Sistem.KesismeTara" ayni islevi goruyor. Matrikste "cross" ile yukari / asagi kesisim taramasi burada tek bir fonsiyon ile yapilabiliyor diyebiliriz. Bu fonsiyonun yaptigini "Sistem.YukariKestiyse / Sistem.AsagiKestiyse" fonsiyonlarini ayri ayri kullanarakta yapabilirsiniz.
Hazir fonsiyonlari kullanmadan, dongu icerisinde "TOMA[i]>EMA[i] and TOMA[i-1]<=EMA[i-1]" gibi bir "if" satiri "Sistem.YukariKestiyse" fonsiyonun yaptigina benzer seyi yapacaktir. Sistem fonsiyonlarini tanimli indikatorlerle kullanirsaniz ayrica dongu kosturmadan ve Sistem.Yon gibi fonsiyonlarina atama yapmadan kolayca grafik uzerinden Al / Sat oklarini gorebilir ve olsurturdugunuz sistemi daha sonra robota baglayabilirsiniz.
Pazartesi piyasa açıkken yazdığım algorıtmayı deneyeceğim Çünkü daha basit bir yöntem performansa katkısıda olumlu listeleri okumak zorunda kalmayacak forlara girmeyecek timerlere girmeyecek.
Eğer düzgün çalışmazsa bearbull ve sizin kodlarınızı deneyeceğim bir önceki yön şöyleyse şöyle yap liste tut vesaireye çevirmek zorunda kalacağım.
BU arayüzü tasarlarken mecburen performansıda düşünmem gerekecek. O yüzden olabilecek en kestirme yoldan yapmaya çalışıyorum.
Her ikinize de teşekkür ederim.
User.dll de veya C# kodlamasın da gerçekten kıtım yani bunları herhangibirinizde yapabilir aslında. Çokta özel durumlar değil.
Tabiki temel bir C sarp bilgisi gerektiriyor. Merakınız varsa biraz araştırma ve eğitimle bir boyut ilerliyorsunuz. Kendime niye kıt diyorum çünkü kıt abi :D
Algoritma kıtlığım var. Anında düşünemiyorum da 3 saat beyin yandıktan sonra aslında şöyle bir algorıtma iş yaparmış diyorum.
BU arada bu arayüzü tasarlarken kafamda bazı durumlarda aydınlandı. ideal bu arayüzleri, bu tasarımları, İdealgoyu ve metotları yazarken performansa ciddi emek ayırmıştır diye düşünüyorum.
Çünkü bir algorıtma kurmanın 100 adet farklı yöntemi ve yolu oluyor.
Basit bir kurguyu binbir tefile çevirip sonuca ulaşmak var. Çok basit bir biçimde aynı sonuca ulaşmak var.
Algoritma kurma kıtlıgından ileri gelecek bir problem sistemin çalışma hızını etkileyecek calısma hızıda çeşitli kayma problemlerıne yol açacak bunun maliyetide yine bize dönecek malesef yaptığımız işte performans mecburen ön planda olması gerekiyor.
Arayüz komple bitsin zaten performans testleride yapmam gerekecek.
İlk verdiğim kendi yöntemimle fiyat olayını çözdüm Fakat timer ile sürekli olarak sistemgetiri çalıştırmak performans kaybettiriyor Videoda İmleci hareket ettirdiğim ana odaklanın. Onay kutuları üstünde gezdiğimde Üzerine geldiğimde renklenme olur. Fakat renklenme gecikmeli şekilde gerçekleşiyor. yaklaşık 1 saniye civarında gecikerek renklendiriyor. BU sorunu user.dll içine kendi sistemimi gömerek çözebilirim sistem getiri çalıştırmak zorunda kalmayacağım için hızlıca calısacaktır.
Ancak bu programı ileriye dönük geliştirilebilir şekilde tasarlıyorum. Çoklu sistem ve karmaşık algorıtmalara ihtiyaç duyabilirim. Aynı şekilde proje işe yarar bir şekle gelirse ticari amaçlıda kullanabilirim. Haliyle insanlar gidip user.dll kodlarına kendı sıstemını giremeyeceğine göre sistem getir benzeri bir yöntemle kolayca kendı sıstemlerıyle bu arayüz arasında köprü oluşturacak basit bir tasarım lazım.
İdealin robot bölümü acaba sistemleri timerlamı okutuyor. Bir fikri olan var mı ?
https://twitter.com/erhanacikgoz1/st...949099008?s=20
Sorunu çözdük yazılımcı bir arkadaşla 40 TL gönderdim emeğinin karşılığı diye.
Yaptığı iş 40 tl edermi bilmem ama ilk ticaret diye bende pazarlık etmek istemedim.
Yaptığı işlemin kabacası sistemgetir bölümünü başka bir işlemciye atamak oldu. Benim aklıma niye gelmedi acaba cünkü ideal de grafikleri ayrı robotları ayrı bır ıslemcıde calıstırıyordu. Gerçi aklıma gelsede zaten kodlayamazdım dıye düşünüyorum.
Neyse bununla ilgili makaleyide buraya atayım sizlerde öğrenmıs bilgi edinmiş olun umarım bu tur yazılardan rahatsız olmuyorsunuzdur maksadım ben birşey öğrenirken sızde öğrenmiş olun ;)
Makale bir sonrakı gonderıde.
Yaşadığım sorunu video haline getirmiştim.
https://www.youtube.com/watch?v=rUuc...ature=youtu.be
Merhaba arkadaşlar..
Bu yazımızda "BackgroundWorker" kontrolünü inceleyeceğiz. Windows uygulamalarında bazı işlerin ilerlemesi çok zaman alır. Örneğin ağ üzerinde bir dosya transferi yapan bir program yaptınız. Transfer olayı 5 dakika sürüyor diyelim. Program bu işlemi yaparken de kullanıcının etkisine karşı bir tepki verebilmelidir. Bizim yapmamız gereken iş, transfer işlemi yürütülürken, programın kullanıcıya tepki vermesini sağlamak için, arka planda yeni bir thread açmaktır. Thread 'ın, "geçir(fiil), iplik(isim),en küçük yürütme birimi(isim)" gibi kelime anlamları vardır. Programlamadaki anlamı ise, işlemciye veri aktarımı yapan küçük veri yollarıdır. Bu açıklamalardan sonra BackgroundWorker kontrolü ile ilişkisini anlatmak gerekirse, BackgroundWorker arka planda thread 'lerle çalışır, thread 'leri kontrol eder. Bu açtığım thread sayesinde programım kilitlenmeyecektir. Bu işi yapan komponente "BackgroundWorker" denir. Kısacası BackgroundWorker, windows uygulamalarında "multi thread" uygulama geliştirmenize olanak sağlar.
Programı bu haliyle çalıştırdığımda, kullanıcıya tepki vermiyor, formumu sürükleyemiyorum. Formun textinde "not responding" (yanıt vermiyor) ibaresi görmek mümkün. Bir kilitlenme söz konusu. Çünkü thread 'im meşgul. Bu olayı bir örnekle anlamaya çalışalım.
Uygulamada "main thread" denilen bir thread vardır. Bu thread, program çalıştığında formun görsellerini cpu da işleyip ekrana getirmekten sorumludur. Biz zaman gerektiren bir iş parçacığı yollarsak bu thread 'de bir trafik meydana gelir. Bu thread 'de oluşan bir trafik görselliği olumsuz yönde etkiler. Çünkü bir yandan iş yapmaya çalışırken diğer yandan programın anlık görselliğini de taşımak zorundadır. Bunları aynı anda yapamaz. Aynı anda yapamaz derken arkadaşlar: Tek şeritli bir yol düşünün. Aynı anda iki araba geçebilir mi? Ancak sırayla geçebilirler. Bu örnekte thread bizim tek şeritli yolumuz, araba ise işin tamamı değil, işin bir parçası olsun. Eğer thread 'in üzerinden iki iş aynı anda geçmeye çalışırsa, thread bunu bir işten bir parça, diğer işten bir parça alarak yapar. Böylece görsellikte bir aksaklık meydana gelir.
Bu sorun gidermek için, en az bir adet daha thread 'e ihtiyaç duyulur. Bu thread 'e de "cross thread" denir. Böylelikle "main thraed" im rahatlıkla görsellikle ilgilenirken, yeni açtığım thread de benim yapmak istediğimiz iş ile ilgilenir.
Şimdi programımız kullanıcıya çok rahat tepki verebiliyor. (Formumu sürükleyebiliyorum, butonum aktif, TextBox atsam değer girebilirim vs..)
Yazının full versiyonu
http://gaffarsalkim.blogspot.com/201...r-kullanm.html
Alpha aşaması
https://www.youtube.com/watch?v=5SsiguF8VKE
var C = Sistem.GrafikFiyatOku("Kapanis");
var CC = Sistem.Ref(C, +1);
var ATT = Sistem.TOMA(CC, 1, 0.015);
var TOMA = Sistem.TOMA(ATT, 20, 0.5);
Sistem.Cizgiler[1].Deger = TOMA;
var SonYon = "";
var Sinyal = "";
double SonFiyat = 0.0;
for (int i = 100; i < V.Count; i++)
{
// Strateji
if ( ATT[i] >TOMA[i]) Sinyal = "A";
else if (ATT[i]< TOMA[i]) Sinyal = "S";
böyle bir sistemin repaint yapmaması için ne yapabilirim..
Bi türlü çözüm bulamadım.
repaint yapması için elinden geleni ardına koymuyorsun ama :he:
var CC = Sistem.Ref(C, +1);
ref komutu hiçbir zaman +1 olarak kullanılmaz.
ref () kullanımı -1 bir önceki data -2 iki önceki data vs vs dir + 1 dediniz mi gelecek olan şu anda var olmayan datayı baz alır.
özel mesaj ile sistem gönderip soru sormayın // özelden cevap vermiyorum.
////// TOMA OPTİMİZASYON /////////
PHP Code:
var Veriler = Sistem.GrafikFiyatSec("Kapanis");
for (int Periyot = 1; Periyot < 10; Periyot++)
{
var EMA = Sistem.MA(Veriler, "Exp", Periyot);
for (var Yuzde = 0.3f; Yuzde < 5.0f; Yuzde +=0.1f )
{
var TOMA = Sistem.TOMA(Periyot, Yuzde);
//Sistem.KesismeTara(EMA, TOMA);
var SonYon = "";
for (int i=1; i < Sistem.BarSayisi; i++)
{
Sistem.Yon[i] = "";
if(EMA[i] > TOMA[i] && EMA[i-1] < TOMA[i-1] && SonYon != "A")
{
SonYon = "A";
Sistem.Yon[i] = "A";
}
if(EMA[i] < TOMA[i] && EMA[i-1] < TOMA[i-1] && SonYon != "S")
{
SonYon = "S";
Sistem.Yon[i] = "S";
}
}
Sistem.Optimizasyon("EMATOMA", Periyot, Yuzde);
}
}
/////////// robot viop /////////
PHP Code:
string GERCEK = Sistem.AktifViopKontrat;
var Periyot = "15"; //15 dklık grafik
var SistemAdi = "xxxxxxxx"; //sistemizim adını buraya girin çift tırnak içinde
string SANAL = "FX'USDTRY";
string GS = (Sistem.Parametreler[0].Split('=')[1].Trim().ToUpper() ); /// GERÇEK / SANAL = G
var LotSize = 1; //işlem adedi
var Sembol = GERCEK ;
var MySistem = Sistem.SistemGetir(SistemAdi, GERCEK, Periyot); //sistemin adı, grafik sembolü, grafiğin periyodu
if (MySistem == null)
{
Sistem.Mesaj(Sistem.Name + "Hatalı Çalışıyor !");
}
else
{
var EmirSembol = Sembol;
var SonFiyat = Sistem.SonFiyat(EmirSembol);
var Anahtar = Sistem.Name + "," + EmirSembol;
double IslemFiyat = 0;
DateTime IslemTarih;
var Miktar = 0.0;
var Rezerv = "";
var Pozisyon = Sistem.PozisyonKontrolOku(Anahtar, out IslemFiyat, out IslemTarih);
var SonYon = Sistem.SonYonGetir(SistemAdi, Sembol, Periyot);
if (Sistem.Saat.CompareTo("09:30:00") <= 0 || Sistem.Saat.CompareTo("18:14:59") >= 0)
{
// seans yok 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;
// Emir Gönder
var Islem = "";
if (Miktar > 0) {Islem = "ALIS"; Rezerv = "ALIŞ YAPILDI";}
if (Miktar < 0) {Islem = "SATIS"; Rezerv = "SATIŞ YAPILDI";}
if (Islem != "")
{
Sistem.PozisyonKontrolGuncelle(Anahtar, Miktar + Pozisyon, SonFiyat, Rezerv);
Sistem.EmirSembol = GS == "G" ? GERCEK : SANAL; // Sistem.EmirSembol = EmirSembol;
Sistem.EmirIslem = Islem;
Sistem.EmirSuresi = "KIE"; // GUN, KIE, IKG
Sistem.EmirTipi = "Piyasa"; // Piyasa, Limitli, Piyasadan Limite
Sistem.EmirMiktari = Math.Abs(Miktar);
Sistem.EmirGonder();
}
}
for döngüsünün içine şunu yazmak istiyorum fakat mantıgını kuramadım.
eğer ( 30 ema > toma % 5 ) toma 10.2 parametresiyle alış yap
eğer ( 30 ema < toma % 5 ) toma 3.0.5 parametresiyle alış yap
eğer ( 30 ema > toma % 5 ) toma 3.2 parametresiyle satış yap
eğer ( 30 ema < toma % 5 ) toma 3.0.5 parametresiyle satış yap
şeklinde yazdım fakat olmadı.PHP Code:
// strateji
for(int i = 1; i < Sistem.BarSayisi;i++)
{
if ( EMA[i] > TOMA[i] ) // EMA=30, TOMA=5
eb1[i] = EMA1[i] > TOMA1[i]; // EMA1=10 , TOMA1=2
eb1[i] = 1 ;
else if ( EMA[i] < TOMA[i] )
eb2[i] = EMA2[i] > TOMA2[i]; //EMA2=3, TOMA2=0.5
eb2[i] = 1 ;
if ( SonYon!= "A" )
{
Sistem.Yon[i] = "A";
SonYon="A";
}
if ( EMA[i] > TOMA[i] )
eb3[i] = EMA1[i] < TOMA1[i];
eb3[i] = 1 ;
else if ( EMA[i] < TOMA[i] )
eb4[i] = EMA2[i] < TOMA2[i] ;
eb4[i] = 1 ;
if ( SonYon!= "S" )
{
Sistem.Yon[i] = "S";
SonYon="S";
}
}
mavilimw
var close = Sistem.GrafikFiyatSec("Kapanis");
var M1 = Sistem.MA(close, "Weighted", 3);
var M2 = Sistem.MA(M1, "Weighted", 5);
var M3 = Sistem.MA(M2, "Weighted", 8);
var M4 = Sistem.MA(M3, "Weighted", 13);
var M5 = Sistem.MA(M4, "Weighted", 21);
var MAVW = Sistem.MA(M5, "Weighted", 34);
Sistem.Cizgiler[0].Deger = MAVW;
bunu al sat formulü nasıl yazabilirim
2. denememi bu şekilde yaptım grafik tümden sarı oldu, hesaplama yapmıyor.PHP Code:
// strateji
for(int i = 3; i < Sistem.BarSayisi; i++)
{
eb[i] =
EMA[i] > TOMA[i] && EMA1[i] > TOMA1[i] ? 1 :
EMA[i] < TOMA[i] && EMA2[i] > TOMA2[i] ? -1 :
eb[i] ;
if ( eb[i] == 1 && SonYon != "A" )
if ( eb[i] == -1 && SonYon != "A" )
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i];
}
eb1[i] =
EMA[i] > TOMA[i] && EMA1[i] > TOMA1[i] ? 1 :
EMA[i] < TOMA[i] && EMA2[i] > TOMA2[i] ? -1 :
eb1[i] ;
if ( eb1[i] == 1 && SonYon != "S" )
if ( eb1[i] == -1 && SonYon != "S" ) // SAT
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i];
}
}
3. denenemde başarısız oldu hesaplama yapmıyor ,grafik tümden sarı.PHP Code:
// strateji
for(int i = 3; i < Sistem.BarSayisi; i++)
{
if ( EMA[i] > TOMA[i] )
eb[i] = EMA1[i] > TOMA1[i] ? 1 : eb[i] ;
if ( EMA[i] < TOMA[i] )
eb1[i] = EMA2[i] > TOMA2[i] ? 1 : eb1[i] ;
if ( eb[i] == 1 && SonYon != "A" )
if ( eb1[i] == 1 && SonYon != "A" )
{
Sistem.Yon[i] = "A";
SonYon = Sistem.Yon[i];
}
if ( EMA[i] > TOMA[i] )
eb2[i] = EMA1[i] < TOMA1[i] ? 1 : eb2[i] ;
if ( EMA[i] < TOMA[i] )
eb3[i] = EMA2[i] < TOMA2[i] ? 1 : eb3[i] ;
if ( eb2[i] == 1 && SonYon != "S" )
if ( eb3[i] == 1 && SonYon != "S" )
{
Sistem.Yon[i] = "S";
SonYon = Sistem.Yon[i];
}
}
Yok mu yardım edecek arkadaş.
Ayrı ayrı İki sistem yazıp deneseniz olur mu acaba.
eğer ( 30 ema > toma % 5 ) toma 10.2 parametresiyle alış yap, toma 3.2 parametresiyle satış yap yoksa flate geç
eğer ( 30 ema < toma % 5 ) toma 3.0.5 parametresiyle satış yap, toma 3.0.5 parametresiyle alış yap yoksa flate geç.
EMA TOMA kesisimi ile al sat yaptirtmak istediginizi anladim. Arka arkaya yazdiniz if ler birbirinin devami seklinde calismaz. Bunun yerine tek bir if icerisinde kosullari && (and) ya da || (or) ile istediginiz sayida baglayabilirsiniz. If sonrasi tek satirdan fazlasini yazacaksaniz Suslu parantez icerisine almalisiniz {}. Asagida gonderdigim kodu inceleyiniz.
Kodda bazi duzeltmeler yaptim bu haliyle tanimlamalariniz ve degerler dogru girilmisse ekranda AL/SAT oklari ve yesil/kirmizi renklendirme goreceksiniz.
PHP Code:
//
//*strateji
*for(int*i*=*3;*i*<*Sistem.BarSayisi;*i++)
*****{*
*
//if*(*EMA[i]*>*TOMA[i]*)*
//eb[i]*=*1;
//else eb[i] = 0;
//EMA1[i]*>*TOMA1[i]*?*1*:*eb[i]*;*
if*(*EMA[i]*>*TOMA[i] && *EMA[i-1] <= TOMA[i-1] )*
eb1[i]*=*1;
else eb1[i] = 0;
//EMA2[i]*>*TOMA2[i]*?*1*:*eb1[i]*;*
*if*(*eb1[i]*==*1 && SonYon*!=*"A"**)
*
***{
******Sistem.Yon[i]*=*"A";***
******SonYon*=*Sistem.Yon[i];*
*******
***}
if*(*EMA[i]*<*TOMA[i]*&& EMA[i-1] >= TOMA[i-1] )
eb2[i]*=*1;
else eb2[i] = 0;
//EMA1[i]*<*TOMA1[i]*?*1*:*eb2[i]*;*
//if*(*EMA[i]*<*TOMA[i]*)*
//eb3[i]*=*1;
//else eb3[i] = 0;
//EMA2[i]*<*TOMA2[i]*?*1*:*eb3[i]*;*
**if*( eb2[i] == 1 && SonYon*!=*"S"*)
*****{
******Sistem.Yon[i]*=*"S";**
******SonYon*=*Sistem.Yon[i];
*******
***}
}*
//
Forum onceki mesajim icerisindeki kod bolumdeki tum " " yani bosluklar "*" olarak degistiriyor. Ne yaptiysam duzeltemedim. notepad'e alip "*" => " " olarak replace edebilirsiniz.
30 luk ema toma 5 in üzerinde olursa ema10, toma yüzde 2 kesişimini kullan,
30 luk ema toma 5 in altında olursa
ema 5, toma yüzde 1 kesişimini kullan
LG-D802TR cihazımdan hisse.net mobile app kullanarak gönderildi.
Grafikte AL-SAT göstermesi için sadece tek satır ilave edelim bakalım olacak mı?
formülün hemen peşinden gelecek olanPHP Code:
var C = Sistem.GrafikFiyatSec("Kapanis");
var M1 = Sistem.MA(C, "Weighted", 3);
var M2 = Sistem.MA(M1, "Weighted", 5);
var M3 = Sistem.MA(M2, "Weighted", 8);
var M4 = Sistem.MA(M3, "Weighted", 13);
var M5 = Sistem.MA(M4, "Weighted", 21);
var MAVW = Sistem.MA(M5, "Weighted", 34);
Sistem.Cizgiler[0].Deger = MAVW;
Sistem.KesismeTara(C , MAVW ) ;
aynı yerlerde çok fazla işlem yapıyor nasıl filtre koyabilirim sorusunu başkası cevaplarsa sevinirim.
https://i.resimyukle.xyz/03UGV1.png
Arkadaşlar veri terminalinde eski grafik datalarını nerden nasıl indiriyıoruz? Mesela 20 dk'lık veri yada 10 dklık veri ile işlem yapıyorum sistemimin geçmiş perforfmansınıda ölçmek istiyorum. Ama mesela vip-x030 grafiğinde en son 2018 11. ay verileri mevcut. Daha eski veriler yok. Sağ click sunucudan veri indir yapıyorum. Ama olmuyor. YİNE AYNI ŞEKİLDE İDEAL SİMGESİNE TIKLAYIP ÖNCE SUNUCUDAN VERİ İNDİR SONRADA GRAFİK TIKLAYINCA ORADADA GÜN 60,5,1 TIKLIYORUM AMA YİNE ÇOK ESKİ VERİLER İNMİYOR. TÜM PİYASA VERİLERİNİ İNDİR DİYORUM YİNE OLMUYOR:(
https://www.hisse.net/topluluk/showt...=17859&page=65
Şu linkte bir arkadaş eklemiş. Fakat 1 dk grafikler var.