Matriks Destek ve Yardım Platformu

Matriks Ürünleri ile ilgili tüm sorularınız için bizlere buradan ulaşabilirsiniz. Daha önce sorulan soruları ve verilen cevapları ilgili sekmelerden ve arama üzerinden inceleyebilirsiniz. Sağ taraftaki kategoriler üzerinden İlgilendiğiniz özelliklerle ilgili soruları filtreleyebilirsiniz. Soru ve cevapları sosyal medyada paylaşabilirsiniz. Sorduğunuz ve cevapladığınız soruların ve yorumlarınızın aldığı oylar üzerinden puan kazanırsınız. Puan sistemine bağlı kampanyamızla ücretsiz kullanım avantajlarından faydalanabilirsiniz.

0

Strateji Duraklatılıp Tekrar Çalıştırıldığında Portföyü Göremiyorum

Soruldu
Görüntülenme
155 görüntülenme
Durum
Cevaplandı
Merhaba,

Bir stratejide, ilgili strateji durdurulup tekrar çalıştırıldığında mevcut portföye göre pozisyon almasını istiyorum. Strateji kabaca şöyle işliyor. Örneğin garan için spottaki fiyata bakıp, yakın vadelide çift taraflı işlem yapıyor. parametreleri de "garan" ve "fgaran" şeklinde veriyorum.

Arka arkaya long veya short açmaması için kendim "position" parametresi ile pozisyonu takip ediyorum. Bu parametre "-1, 0, 1" değerleri arasında gidip geliyor. position eğer 1 ise long pozisyonum var, stop kontrolü yap diyorum. -1 ise tam ters mantık açıkta short pozisyon var, yeni short açma eldeki pozisyonun stopunu kontrol et diyorum. Eğer position 0 ise long veya short için kontrol yapıp ona göre pozisyon açtırıyorum.

Dolayısıyla en başta ben 5 konratlık pozisyonlar ile işlem yapmayı seçtiysem mesela algoritma "long(uzun)-short(stop)-long(uzun)-short(stop)-short(kısa)-long(stop)-..." gibi bir örüntü ile çift taraflı işlemler yapıyorum. Bu yüzden "long(uzun)-long(uzun)" veya "short(kısa)-short(kısa)" gibi arka arkaya aynı yönde birden fazla pozisyon açmamasını bir parametre ile kontrol ederek tutuyorum.

Sorunum ise, mesela elimde gün sonu short pozisyon var. Stratejiyi durdur dediğimde yukarıdaki algoritmaya göre son durumda "position = -1", ertesi gün stratejiyi tekrar devam ettirince ise "position = 0" yani initial hali ile başlıyorum. yani önceki pozisyonu tutamıyorum.

Şimdi benim sorunum aslında strateji tekrar çalıştırıldığında portföye bakıp; eğer portföyde vadeli kontrat pozisyonu varsa mesela yukarıdaki örnekte short pozisyon olmalı,  "position = 0" olarak çalışmaya başlama,"position = -1" olarak kaldığın yerden devam edebilmesini sağladığım noktada çözülüyor.

Bu noktada bir öneriniz olur mu?
Paylaş

1 Cevap

0

Merhabalar,
Duraklat/devam ettir işlemlerinde portföy verilerini / eldeki açık olan pozisyona veya stratejide lot takibi yapan bir değişkeni kontrol ettirmeniz gerekir. Position değişkenine, RestoreLastValueOnResume özelliğini dahil ettiğiniz takdirde değişkenin son değeri raporda saklanacaktır. Aşağıdaki bağlantıyı ayrıca inceleyiniz.
https://iqyardim.matriksdata.com/docs/matriksiq-kullanim-kilavuzu/algotrader/degisken-ve-parametre-tanimlama/


Stratejinin tamamlanması aşaması sonrasında kontrolleri yapabilirsiniz. Örnek kod blokları ve açıklamaları;

var portfoy = GetRealPositions(); //portfoy detay
var portAdet = portfoy[Symbol1].QtyNet; //net lot
var yon = portfoy[Symbol1].Side.Obj; //işlem yönü

var adetSorgu = portAdet > 0? "pozitif" : "negatif"; //poz adedi
var yonSorgu = yon == Side.Buy? "alda":"satta"; //poz yönü

İyi çalışmalar dileriz.

 

BağlantıBayraklaemresMatriks Destek6.795

Yorumlar (2)

  • ▲0
    Merhaba,

    Yorumlarınız için teşekkür ederim. Ben sorunun cevabını ilerleyen zamanlarda benzer bir yöntem ile bulabilmiştim. Fakat soru yayında olmadığı için güncelleme fırsatım olmamıştı bu başlığı. Şimdi sizin cevabınız üzerine bildirim gelince sorumun yayınlandığını farkettim.

    Alternatif olarak forumda durması açısından aşağıya benzer bir diğer yöntemi ekledim.
    OnInit() fonksiyonu içerisine
    "
    ...
    :..

    positionIndex = 0;
    var positions = GetRealPositions();
    foreach (var pos in positions)
    {
        if (pos.Key.Contains(DayanakSymbol.ToString()) && pos.Value.QtyNet > 0) {
            Debug("Long Pozisyon Var");
            Debug("Sembol: " + KontratSymbol.ToString() + ", Miktar: " + pos.Value.QtyNet);
            positionIndex = 1;
        } else if (pos.Key.Contains(DayanakSymbol.ToString()) && pos.Value.QtyNet < 0) {
            Debug("Short Pozisyon Var");
            Debug("Sembol: " + KontratSymbol.ToString() + ", Miktar: " + pos.Value.QtyNet);
            positionIndex = -1;
        }
    }

    ...

    ...

    "

    Destekleriniz için tekrar teşekkür ederim.
  • ▲0
    Merhabalar,
    Bizlerde teşekkür ederiz.

    İyi çalışmalar dileriz.
    emresMatriks DestekBayrakla

Cevabınız

Cevap yazmak için giriş yapın.Giriş yapKayıt ol