MatriksIQ Destek
Matriks Destek
Matriks Web Destek
Matriks Mobile Destek
0 beğenilme 0 beğenilmeme
208 kez görüntülendi
Bitmex stratejileri içerisinde Shortlama üzerine kodlama çalışmaktayım. Belirli koşulum sağlandığında robotumun sadece 'short' pozisyon açıp belirli Buy koşulum sağlandığında ise 'long' açmadan bu pozisyonu sadece kapatmasını istiyorum. Basitçe al satı, sat ala dönüştürmek istiyorum.

Hazırlamış olduğunuz örnek stratejide:
//'' Ilk emir gonderildiginde isaretlenir ve daha sonraki emirler ilk emrin 2 kati olarak gonderilir. Boylece pozisyon 1/0 seklinde degil, 1/-1 seklinde alinabilmektedir (LONG/NEUTRAL yerine LONG/SHORT)''

Bu dilde anlatacak olursam sanırım yapmak istediğim sadece (SHORT/NEUTRAL)
 

Sanırım bunu yapmak için içinde First Run 0 1 lerin olduğu bir kod kullanmayacağım. Aklıma gelen şey SendOrderSequential(true); set edip.

        /// <summary>
        /// Eklenen sembollerin bardata'ları ve indikatorler güncellendikçe bu fonksiyon tetiklenir.
        /// </summary>
        /// <param name="barData">Bardata ve hesaplanan gerçekleşen işleme ait detaylar</param>
        public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)
        {

bu bölümde bulunan Buy ve Send if conditionların yerlerini değiştirmek. Doğru mudur?
Algoritmik Trading kategorisinde (213 puan) tarafından
tarafından düzenlendi | 208 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme
En İyi Cevap
Merhaba,

Diyelimki  stratejiniz 100 short pozisyon açarak başlıyor ve nötr kalmak istediğinizde bu 100 pozisyonu kapatıyor. Bu durumda kodunuz şöyle olmalı:

 

Oninit()
{

......
SendOrderSequential(false);
.......

}

public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)
{

    if(short yapma koşulu buraya yazılır)
    {
        SendMarketOrder(Symbol, 100, OrderSide.Sell);
        Debug("Satış Emri Gönderildi");
    }
    else if(Nört olma koşulu buraya yazılır)
    {
        SendMarketOrder(Symbol, 100, OrderSide.Buy);
        Debug("Alış Emri Gönderildi. böylelikle short pozisyonlar kapanacak.");
    }

}
(299 puan) tarafından
tarafından seçilmiş
0 0
Çok teşekkür ederim Süleyman Bey. Yani buradaki kilit noktalar şunlar;

1) SendOrderSequential false set edilmesi
2) Buy ve Sell komutlarının sıralarının değiştirilmesi

3) nötr koşulunun başına ''else if'' getirilmesi. 'else if' yerine 'if' komutu olsa çalışmayacak mı?
1 0
Merhaba,

1) SendOrderSequential false olarak set ederseniz Robotunuz bilgisayara "Orderların gönderim sırasına tam olarak ben hakim olacağım. Bana kolaylık yapma." der.

2 ve 3) C# dilinde komutlar yoktur, anahtar sözcükler vardır. Ör: if, else, return vb. Herbir satır bir komut değildir. Herbir satırı bir romandaki bir cümle gibi hayal edebilirsiniz. Benim yukarıda yazdığım kodun türkçesi şöyle:

"Eğer short olma koşulu gerçekleşirse süslü parantezlerin içerisindekileri yap. yok eğer nötr olma koşulu gerçekleşirse bu süslü parantez içlerindekileri yap."

Bu kod yukarıdaki ile aynı işi yapar:

    if(Nört olma koşulu buraya yazılır)
    {
        SendMarketOrder(Symbol, 100, OrderSide.Buy);
        Debug("Alış Emri Gönderildi. böylelikle short pozisyonlar kapanacak.");
    }
    else if(short yapma koşulu buraya yazılır)
    {

        SendMarketOrder(Symbol, 100, OrderSide.Sell);
        Debug("Satış Emri Gönderildi");
       
    }
0 0
Çok çok teşekkür ediyorum. Çok açıklayıcı oldu bu.

Saygılar, sevgiler

Son olarak şunu söyleyebiliriz o halde;.

LONG

                SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));
                Debug("Alış emri verildi.");

SHORT

                SendMarketOrder(Symbol, SellOrderQuantity, (OrderSide.Sell));
                Debug("Satış emri verildi.");

LONGU NEUTRAL YAP

                SendMarketOrder(Symbol, SellOrderQuantity, (OrderSide.Sell));
                Debug("Satış emri verildi. Böylelikle long pozisyonlar kapanacak");

SHORTU NEUTRAL YAP

                SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));
                Debug("Alış emri verildi. Böylelikle short pozisyonlar kapanacak");

Neutral yapmanın anahtar cümlesi debug içerisindeki 'Böylelikle xxxx- pozisyonlar kapanacak' cümlesi yani?
0 0
Rica ederim :) elimden geldiğince anlatmaya çalıştım.

Debug(....)  satırlarını silmeniz kodun çalışmasında hiçbirşey değiştirmez. Bu satırları isterseniz tamamen silin kafanızı karıştırmasın, biraz daha tecrübelendikten sonra Debug satırlarına ihtiyaç duyarsınız. 'Böylelikle xxxx- pozisyonlar kapanacak' cümlesinin kodun çalışmasına hiçbir etkisi yok aslında.

Diyelimki robotunuzu gündüz çalıştırdınız ve hiç bakmadınız. Akşam robot ne yaptı diye kontrol etmek isterseniz eğer kodun içine Debug cümleleri koyarsınız.
0 0
Benim için çok yararlı oluyor teşekkür ediyorum tekrar:)

Anlamadığım son bir şey kaldı. SendOrderSequential false olarak set ettim diyelim. Fakat ilk işleme 'kesinlikle' short yaparak başlamasını istiyorum.

Ama bu kodları yazdığım zaman:

    if(Nört olma koşulu buraya yazılır)
    {
        SendMarketOrder(Symbol, 100, OrderSide.Buy);
        Debug("Alış Emri Gönderildi. böylelikle short pozisyonlar kapanacak.");
    }
    else if(short yapma koşulu buraya yazılır)
    {

        SendMarketOrder(Symbol, 100, OrderSide.Sell);
        Debug("Satış Emri Gönderildi");

Diyelimki uygun şartlarım sağlandı fakat bu sefer de ilk olarak SHORT değilde LONG sinyali geldi.. O zaman Buy komutu olduğu için LONG açarak işleme başlamayacak mı?
Böyle bir durumda ben LONG sinyalini atlamasını ve ilk olarak kesinlikle Short sinyali ile başlamasını istiyorum.
0 0
Long sinyali gelirse Nötr olma koşulu false sonuç döner ve

SendMarketOrder(Symbol, 100, OrderSide.Buy);
Debug("Alış Emri Gönderildi. böylelikle short pozisyonlar kapanacak.");

satırları tetiklenmez.

Nötr olma koşulunu doğru ve dikkatli yazmalısınız. C sharp da koşulları daha iyi anlamanız için aşağıdaki sayfayı okumanızı öneririm.

https://www.emrahyumuk.com/c-sharp-if-else-karar-yapisi-karsilastirma-oparatorleri/
0 0
Long ile Nötr komutu sanki bir gibi düşündüm, benim hatam.. Şimdi her şey çok net anlaşıldı, verdiğiniz link de çok yararlı olacak benim için. Kusura bakmayın biraz başınızı ağrıttım:)

Sonsuz teşekkürler

Sevgiler, saygılar
0 0
Gene bir soru ile geri döndüm:)

Çünkü kodları yazıp backtestleri yaptığım zaman anladım ki, emirler sıralı gitmiyor. Koşullar sağlandığı zaman ilk satış ile başlıyor evet ama satış-alış-alış-satış-alış... şeklinde şeyler yapabiliyor. Örneğin 11 alış 8 satış yaptı birinde. Yani 2 tane alış yapabliyor üstüste. Ben satış ile başlayıp sıralı bir şekilde satış-alış-satış-alış... şeklinde gitmesini istiyorum.

Yani satış ile başla evet ama alış yaptıktan sonra satış yapmadıysan alışı kesinlikle yapma demek istiyorum. Emirler sıralı gitmeli yani.

Sanırım bunun için SendOrderSequential (true) set edilmeli ama ilk olarak Satışla başlayıp sıralı gitmesi için ne yapılmalı?
1 0
Merhaba,

 

satış ile başla evet ama alış yaptıktan sonra satış yapmadıysan alışı kesinlikle yapma

public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)
{

    if(short_yapma_Kosulu == true && HiçShortYadaLongPosisyonYok == true)
    {
        SendMarketOrder(Symbol, 100, OrderSide.Sell);
        Debug("Satış Emri Gönderildi");
    }
    else if(Nört_olma_kosulu == true && AcıkPoziyonunYonu == Short && AcıkPozisyonVar == true)
    {
        SendMarketOrder(Symbol, 100, OrderSide.Buy);
        Debug("Alış Emri Gönderildi. böylelikle short pozisyonlar kapanacak.");
    }

}

 

şeklinde bir kod yazmalısınız. if koşullarının içerisine ne yazdığınız çok önemli. Yukarıda yazdığım if koşullarını derleyici kabul etmez. Kendi if koşullarınızı doğru yazabilmeniz için yukarda yazdığım koşullardan esinlenebilirsiniz.
0 0
Mantığı çok iyi anladım. Public class 'Parametre Tanımları' kısmına öncelikle

HicPozisyonYok

AcikPozisyonunYonu

AcikPozisyonVar

Short

gibi eylemleri tanıtmalıyım

Fakat tüm MatriksIQ örnek stratejilerine tek tek baktım, public class opsiyonu ile ilgili yardımcı doküman pdfleri okudum. Yağmak istediğim ile ilgili bulabildiğim tek şey bu kod:

        [Parameter(false)]
        public bool AcigaSatis;

Yani pozisyonun olup olmadığı, pozisyonun yönü, short terimi vb. basit eylemleri derleyiciye bunları daha sonra ilişkisel ve mantıksal operatörler ile birbirlerine bağlamak için nasıl öğretebilirim?
0 0
https://destek.matriksdata.com/?qa=433/hicpozisyonyok-pozisyon-olmad%C4%B1%C4%9F%C4%B1nda-fonksiyon-yazabilirim

isimli bir başlık açtım. Ezbere bilmiyorum, vaktim olduğunda cevabı dolduracağım veya belki benden önce cevap veren olur :)

Diğer koşullar için de böyle küçük başlıklar açarsanız yanıt yazması daha kolay olur :)
0 0
Harikasınız:)

Ben de diğerlerini aynı şekilde ayrı başlıklar halinde açıyorum.
Hoş geldiniz, Matriks Destek Platformu sizlere sorularınızın hızlıca cevaplanması için bir ortam sağlar. 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.



2,773 soru
2,656 cevap
2,146 yorum
1,949 kullanıcı