Sn.Bear_Bull,
BekleT yerine “aktif bir kod” yazıp, sistemdakika yerine sistemsaniye yapınca şimdilik çalıştı gibi , test ediyorum. Cok teşekkür ederim 🙏
Printable View
selam ustalar ... yukarıdaki koda örneğin 5 ma 10 ma kesmesi alış şartını nasıl ekleriz ..mantıgını anlamaya çalısıyorum lütfen gülmeyin dostlar..
var C = Sistem.GrafikFiyatSec("Kapanis");
var L = Sistem.GrafikFiyatSec("Düsük");
var H = Sistem.GrafikFiyatSec("Yüksek");
var SonYon = "";
float StopPuan = 0.05f; //Puanı kendiniz belirleyebilirsiniz
bool SartAl = .....; //Alış şartınız
float SonStop = 0f;
var IzleyenStop = Sistem.Liste(0);
for (int i = 1; i < Sistem.BarSayisi; i++)
{
if (SartAl && SonYon!="A")
{
Sistem.Yon[i] = "A";
SonYon = "A";
SonStop = L[i] - StopPuan; //Alışın gerçekleşmesiyle stopu belirledik
IzleyenStop[i] = SonStop;
continue;
}
if ( SonYon =="A")
{
//Kapanış stop üstü ve yeni yüksek görülmediyse
if (C[i]>=IzleyenStop[i-1]&& H[i]<=H[i-1])
{
IzleyenStop[i] = SonStop; //Stop seviyesi değişmez
continue;
}
else if (C[i] >= IzleyenStop[i - 1] && H[i] > H[i - 1]) //Yeni yüksek
{
SonStop = L[i] - StopPuan; //Stop güncellenir
IzleyenStop[i] = SonStop;
continue;
}
else if (C[i] < IzleyenStop[i - 1]) //Stop altında kapatırsa
{
Sistem.Yon[i] = "F"; // yön flate döner
SonYon = "F";
IzleyenStop[i] = IzleyenStop[i - 1]; //Burayı sadece sonstop seviyelerini grafikte görebilmeniz için yazdım
}
}
}
Sistem.Cizgiler[0].Deger = IzleyenStop;
Merhaba arkadaşlar. Github kullanan varmı? Formüllerimizi github üzerinde yazmak ve saklamak kolaylık sağlar mı?
Bu kodda bazı sıkıntılar vardı, biraz düzenledim.. Yaptığı iş:
* m1, m2 yi yukarı kestikten sonraki bar alacak; ancak onun bir öncesine de bakacak ki, m1>m2 iken flat olmuşsa hemen yeniden almasın ******Bu da robotta kullanmaya kalktığınızda şöyle bir risk doğurur: Aldınız ve 2. bar stop oldu ama ortalama aşağı kesmedi..Sonra hisse aldı yürüdü, sizin robot arkadan bakar..Grafiklerde epey sık olan bir şey; önce ortalama yukarı kesiyor, fiyat ortalamaların altına inip ortalamaları aşağı kesiştirmeden basıyor yukarı..*** Bu arada, robot kullanmıyorum, sadece mantık yürütüyorum!!Yani robota çevirmeye niyetlenirseniz bir sürü olasılığı test etmelisiniz..
* aldığı barın düşüğünden belirlediğin yüzde kadar aşağısını stop olarak belirleyip, her yeni yüksekte bu stop şartını gerekiyorsa güncelleyecek. Gerekiyorsadan kastım, yeni stop eskisinden yüksek mi?
PHP Code:
int p1=10; //ma kısa periyot
int p2=20; //ma uzun
var C = Sistem.GrafikFiyatSec("Kapanis");
var L = Sistem.GrafikFiyatSec("Düsük");
var H = Sistem.GrafikFiyatSec("Yüksek");
var X = Sistem.SonFiyat(Sistem.Sembol);
var m1 = Sistem.MA(p1, "Exp", "Kapanis");
var m2 = Sistem.MA(p2, "Exp", "Kapanis");
var SonYon = "";
//float StopPuan = 0.15f;//15 kuruş, Puanı kendiniz belirleyebilirsiniz,
//puan kullanmak istiyorsanız aşağıdaki satırın önüne // koyup, yukarıdakinin önündekileri kaldırın
//hisseye özel kullanımda puan olur ama genel için % uygun; aselsan 15 kuruş %1 bile yapmazken zoren de %15 eder
float StopPuan = 0.015f*X;//0.015 = %1.5 ; son fiyatın % kadar puan kullan
float SonStop = 0f;
var IzleyenStop = Sistem.Liste(0);
//son 1000 bar baksın, performans için
for (int i = Sistem.BarSayisi-1000; i < Sistem.BarSayisi; i++) {
//alışta değilse, bir önceki bar m1 > m2 ve ondan önceki barda da m1<m2 mi? aksi durumda m1>m2 iken flat olursa hemen yine alır..
if ( m1[i-1]>m2[i-1] && m1[i-2]<m2[i-2] && SonYon!="A")
{
SonYon = Sistem.Yon[i] = "A";
SonStop = L[i] - StopPuan; //Alışın gerçekleşmesiyle stopu belirledik
IzleyenStop[i] = SonStop;
}
if ( SonYon =="A") {
if (H[i] > H[i-1] && (L[i]-StopPuan)>SonStop ) { //Yeni yüksek var ve potansiyel stop eski stoptan yüksekse..
SonStop = L[i] - StopPuan; //Stop güncellenir
IzleyenStop[i] = SonStop;
} else IzleyenStop[i] = SonStop; //Stop seviyesi değişmez
if (C[i] < IzleyenStop[i-1]) //Stop altında kapatırsa
{
SonYon = Sistem.Yon[i] = "F"; // yön flate döner
//IzleyenStop[i] = H[i-1]; //flat olduğunda görsel açıdan - sistem etkisi yok - stop yukarı atsın istiyorsan bu satırın başındaki // kaldır
}
//alışta son
} else IzleyenStop[i] = IzleyenStop[i-1]; //Burayı sadece sonstop seviyelerini grafikte görebilmeniz için yazdım
//for son
}
Sistem.Cizgiler[0].Deger = IzleyenStop;
Sistem.Cizgiler[1].Deger = m1;
Sistem.Cizgiler[2].Deger = m2;
Bu da idealin içinde geliyor diye hatırlıyorum ama Sistem_Stop_Take_MA, gelmiyorsa da sabit rakamlarla kar al - zarar durdur..
PHP Code:
//%5 Kar Al, %2 Zarar durdur sistem örneği.
// kapanış fiyatlarını oku
var C = Sistem.GrafikFiyatSec("Kapanis");
// hareketli ortalamaları hesapla
var MA1 = Sistem.MA(C, "Exp", 50);
var MA2 = Sistem.MA(C, "Exp", 100);
// strateji
var SonYon = "";
double Fiyat = 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];
}
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];
}
else if (SonYon == "A" && C[i] > Fiyat * 1.05) // % 5 kar realizasyonu
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
else if (SonYon == "A" && C[i] < Fiyat * 0.98) // % 2 stop
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
else if (SonYon == "S" && C[i] < Fiyat * 0.95) // % 5 kar realizasyonu
{
Sistem.Yon[i] = "F"; // flat
SonYon = Sistem.Yon[i];
}
else if (SonYon == "S" && C[i] > Fiyat * 1.02) // % 2 stop
{
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;
merhabalar kodun şu kısmına CCI'nin tomayı kesmesini eklemek istiyorum,nasıl yazabilirim? bir türlü yapamadım.
for (int i = 1; i < V.Count; i++)
{
MID1[i] = (UP[i] + DOWN[i])/2;
}
Tesekkurler üstad .. faydali açıklamalı anlatımın için .. kafamda bu kalıpları oturtmaya çalışıyorum ..... SM-N9000Q cihazımdan hisse.net mobile app kullanarak gönderildi.
Tam ne keseceğini anlayamadım, kodda ema tomayı keserse var, ona göre kendiniz ayarlayabilirsiniz..
PHP Code:
var cici = Sistem.CommodityChannelIndex(14);//cci
var Toci = Sistem.TOMA(cici, 10, 5);// CCI TOMA at: 14 lük 10 tane CCI ortalamasının %5 altını çiz
var C = Sistem.GrafikFiyatOku(Veriler, "Kapanis");
var TOMA = Sistem.TOMA(C, 3, 1);// TOMA hesapla: 3 kapanış ortalamasının %1 altını çiz
var EMA = Sistem.MA(C, "Exp", 3); // EMA hesapla
for (int i = 1; i < V.Count; i++)
{
if (EMA[i-2]<=TOMA[i-2] && EMA[i-1]>TOMA[i-1]){
//ema tomayı kesti..
}
}