Yon Fonksiyonu

Fonksiyonun Kullanım Şekli
  • Sistem.Yon;
Fonksiyonun Amacı ve Kullanım Şekilleri

Grafikler üzerinde AL/SAT/FLAT sinyalleri (okları) çıkmasını sağlayan liste YÖN listesidir. YÖN, grafiğin her bir barına karşılık bir elemanı olan bir listedir ve başlangıçta boştur. Yazılan strateji ve koşullara bağlı olarak bazı elemanları A, S veya F değerini alır ve grafiğe uygulandığı zaman, grafik üzerinde de sinyalleri gösterir

Bütün diğer listeler gibi, köşeli parantez içinde indexi belirtilerek (listenin kaçıncı elemanı olduğunu belirten index = [i] ifadesi) kullanılır.

Yön listesi iki genel yöntemle oluşturulur:

1-kodu/stratejiyi yazan kullanıcılar tarafından, belirledikleri koşulları taratıp, koşul sağlandığında YÖN değerini atadıkları bir DÖNGÜ içinde doldurulur.

ÖRNEK: RSI değeri 70’in üzerine çıkınca AL, 30’un altına inince SAT stratejisini sunan SİSTEM formülü:

Grafiğin her bir barında (for döngüsü içinde her “i” (bar) boyunca) koşul (al veya sat koşulları ayrı ayrı) kontrol edilir. (koşul kontrolü if (A OPERATÖR B) şeklinde yapılır). Koşulun sağlanması durumunda kod koşulun sağlandığı “if” bloğunun içine girer (süslü parantezler arasında blokta yazılanı yapar) ve YÖN listesine A veya S yazar.

NOT: Örneğin AL için koşul bir kez sağlanınca AL oku/sinyali işlendikten sonra, aynı koşul sonraki barlarda da tekrar sağlansa bile o barlara da yeniden AL oku/sinyali konulmaması için, koşulun içine en son yönün zaten AL OLMADIĞI kontrolü de eklenir.)

var RSI = Sistem.RSI(20);
var SonYon = "";
for (int i =1; i<Sistem.BarSayisi; i++)
{
   if (RSI_135[i] > 70 && SonYon!="A" )
   {
      Sistem.Yon[i] = "A"; // alış
      SonYon = "A";
   }
   if (RSI_135[i] < 30 && SonYon!="S" )
   {
      Sistem.Yon[i] = "S"; // alış
      SonYon = "S";
   }
}

2-IDEAL de hazır olarak sunulan bazı fonksiyonlar, YÖN listesini bir döngü kurmaya gerek kalmadan doldurabilir. İki çizginin birbirini kesmesi, bir çizginin bir değeri aşağı yönde kesmesi veya bir çizginin bir değeri yukarı yönde kesmesi şeklinde çok yaygın üç strateji kullanıldığından, IDEAL hazır fonksiyonlar arasında, bu iç stratejiyi yapan komutlar eklemiştir.

Bu Fonksiyonlar şunlardır;

Sistem.YukariKestiyse(Liste, Deger);
Sistem.AsagiKestiyse(Liste, Deger);
Sistem.KesismeTara(Liste1,Liste2);
Sistem.KesismeTara(Liste,Deger);

Bu fonksiyonlar kullanıldığında YÖN listesini oluşturmak için if koşulları kurmaya, döngü içinde bar bar tarama yapmaya, son yönün ne olduğunu kontrol etmeye gerek yoktur. Çünkü bu kontrolleri bu fonksiyonlar zaten yapmaktadır. Aşağıda bu kullanım şekline 2 örnek verilmiştir.

ÖRNEK1: 10 ve 100 günlük ortalamaların kesişimlerinde AL/SAT sinyalleri veren sistem örneği:

var Veriler = Sistem.GrafikFiyatSec("Kapanis");
var MA1 = Sistem.MA(Veriler, "Exp", 10);
var MA2 = Sistem.MA(Veriler, "Exp", 100);

Sistem.KesismeTara(MA1, MA2);

ÖRNEK2: RSI değeri 70’i yukarı kestiğinde AL, RSI değeri 30’u Aşağı kestiği zaman SAT yapan ROBOT örneği

var Sembol = "VIP'VIP-X030";
var Veriler = Sistem.GrafikVerileriniOku(Sembol , "5");
var RSI = Sistem.RSI(Veriler, 85);
var Pozisyon = Sistem.PozisyonKontrolOku(Sembol);

// alış
if (Sistem.YukariKestiyse(RSI, 70) && Pozisyon <= 0 )
{
      var Miktar = Lotsize;
      Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon+Miktar);
      Sistem.EmirSembol = Sembol;
      Sistem.EmirIslem = "Alış";  
      Sistem.EmirMiktari = Miktar;
      Sistem.EmirSuresi = "GUN";      // GUN, SNS, IKG
      Sistem.EmirTipi = "KPY";        // KPY, KIE, GIE, SAR
      Sistem.EmirFiyatTipi = "PYS";   // PYS, LMT, EIF, KAP
      Sistem.EmirGonder();
}
// satış
if (Sistem.AsagiKestiyse(RSI, 30) && Pozisyon >= 0 )
{
      var Miktar = Lotsize;
      Sistem.PozisyonKontrolGuncelle(Sembol, Pozisyon-Miktar);
      Sistem.EmirSembol = Sembol;
      Sistem.EmirIslem = "Satış"; 
      Sistem.EmirMiktari = Miktar;
      Sistem.EmirSuresi = "GUN";      // GUN, SNS, IKG
      Sistem.EmirTipi = "KPY";        // KPY, KIE, GIE, SAR
      Sistem.EmirFiyatTipi = "PYS";   // PYS, LMT, EIF, KAP
      Sistem.EmirGonder();
}
ROBOTLARDA YÖN LİSTESİ KULLANIMI

Robot kodları, sistemler gibi geçmiş barlarda ne olduğuyla ilgilenmezler. Bir ROBOT için önemli olan son barda (veya kapanmış olan son barda) EMİR GÖNDERME koşulunun olup olmadığıdır. Yani YÖN listesinin en son elemanını bilmek yeterlidir.

Bu nedenle bir robot kodunda, döngü içinde bütün YÖN listesini doldurmak HATALI işlem yapmaya sebep olabilir. (geçmiş barlardaki sinyalleri görüp emir iletilebilir. IDEAL buna karşı bazı teknik önlemler almıştır ve Robot kodunda Yon[i] kullanımlarında hata mesajı üretir. Ama yine de bu önemli bilgiyi ve sebebi bilmek gerekir

YÖN Listesine Manuel Müdahale
  • YÖN listesi, sistemin AL/SAT veya FLAT olma durumunu gösterir.
  • Bu listenin elemanlarına A,S,F harflerinin atanmasıyla bu işlem yapılır.
  • Bunun için bir strateji olmasına gerek olmadan da bu işlem yapılabilir.
  • Aşağıdaki iki örnekte bunun nasıl yapılabileceği gösterilmiştir.

ÖRNEK-1: Bir grafiğin 100.Barına AL, 170.Barına SAT, 250.Barına FLAT, 300. Barına AL ve 500.Barına SAT sinyali koymak.

Sistem.Yon[100] = "A";
Sistem.Yon[170] = "S";
Sistem.Yon[250] = "F";
Sistem.Yon[300] = "A";
Sistem.Yon[500] = "S";

SONUÇ:

ÖRNEK-2: Tarih ve Saatini belirterek barlara YÖN atamak:

var verilistesi=Sistem.GrafikVerileri;
for (int i = 1; i<Sistem.BarSayisi; i++)
{
if (verilistesi[i].Date.ToString("yyyyMMdd")=="20140620")
Sistem.Yon[i]="S"; 

if (verilistesi[i].Date.ToString("yyyyMMdd")=="20140723")
Sistem.Yon[i]="A"; 

if (verilistesi[i].Date.ToString("yyyyMMdd")=="20150105")
Sistem.Yon[i]="S"; 

if (verilistesi[i].Date.ToString("yyyyMMdd")=="20150317")
Sistem.Yon[i]="A"; 

if (verilistesi[i].Date.ToString("yyyyMMdd")=="20150420")
Sistem.Yon[i]="S"; 

if (verilistesi[i].Date.ToString("yyyyMMdd")=="20150710")
Sistem.Yon[i]="A"; 

if (verilistesi[i].Date.ToString("yyyyMMdd")=="20150909")
Sistem.Yon[i]="S";
}

SONUÇ: