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

Emirlerin Short ile başlayıp sıralı gitmesi için AcikPozisyonVar ve Short isimli fonksiyonları nasıl tanımlamam gerekli

Soruldu
Görüntülenme
1.372 görüntülenme
Durum
Cevaplandı
bool AcikPozisyonVar(string Sembol)

{

  // burayı nasıl doldurmalıyım?

}

 

bool Short(string Sembol)

{

  // pozisyonun aşağı yönlü olduğunu nasıl öğretmeliyim?

}

şeklinde bir fonksiyon yazmak istiyorum. Amacım LONG sinyalini yani NÖTRlemeyi eğer elimde 'SADECE' açığa satış yaptığım hisse varken tetiklemesi. Emirlerin Short ile başlayarak sıralı bir şekilde gitmesi.

Sonrasında bu fonksiyonu şu şekide kullanacağım.

 if(Nötr_olma_kosulu == Short && AcıkPozisyonVar(''ETH_USDT_BIN'') == true)

{

    .......

}

 

Buna benzer bir başlık AcikPoziyonYonu ve Short kombinasyonu şeklinde de açtım. Bu tetikleme için AcikPozisyonYonu'nu de tanımlamaya ihtiyacım var mı?
Paylaş

1 Cevap

1

Merhaba, SendOrderSequential(false); yaparak (sirali emir gonderimini kapatiyoruz), pozisyon takibi ile short varsa long'a gec, long varsa short'a gec seklinde stratejinizi yonlendirebilirsiniz. Pozisyon takibini strateji icerisinde olusturdugunuz basit flag'lerle yapabilirsiniz.

if (Close > Open)
{
	Debug($"Close: {Close} > Open: {Math.Round(Open,2)}. Bar POSITIVE");
	if (Position == 0)
	{
		SendMarketOrder(Symbol, Quantity, OrderSide.Buy);
		Position++;
		Debug("Alis emri gonderildi. Pozisyon = " + Position);
	}
	else if (Position == -1)
	{
		SendMarketOrder(Symbol, Quantity * 2, OrderSide.Buy);
		Position += 2;
		Debug("Alis emri gonderildi. Pozisyon = " + Position);
	}
}
if (Close < Open)
{
	Debug($"Close: {Close} < Open: {Math.Round(Open,2)}. Bar NEGATIVE");
	if (Position == 0)
	{
		SendMarketOrder(Symbol, Quantity, OrderSide.Sell);
		Position--;
		Debug("Satis emri gonderildi. Pozisyon = " + Position);
	}
	else if (Position == 1)
	{
		SendMarketOrder(Symbol, Quantity * 2, OrderSide.Sell);
		Position -= 2;
		Debug("Satis emri gonderildi. Pozisyon = " + Position);
	}
}

Pozisyon takibi ayni zamanda OnOrderUpdate fonksiyonu ile de yapilabilmektedir.

public override void OnOrderUpdate(IOrder order)
{
	//Gercek zamanli pozisyon takibi
	if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Buy)
	{
		var positionChange = order.OrderQty;
		realposition += (int) positionChange;
		Debug("[ONORDERUPDATE]: Pozisyon = " + realposition);
	}
	if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Sell)
	{
		var positionChange = order.OrderQty;
		realposition -= (int) positionChange;
		Debug("[ONORDERUPDATE]: Pozisyon = " + realposition);
	}
}

 

BağlantıBayraklaMatt RicksMatriks Destek8.033

Yorumlar (3)

  • ▲0
    Merhaba, teşekkür ederim. Buna benzer bir kodlama hazır kodlarda vardı IQ içerisinde Bitmex stratejilerinde fakat bu Short-Long-Short-Long-Short-Long şeklinde gidiyor.

    Benim ihtiyacım olan ilk olarak kesinlikle Short ile başlayıp, Short-Neutral-Short-Neutral şeklinde ilerlemesi.

    Ve 'gerçek zamanlı pozisyon takibi' için hazırlanan kod tam olarak neye yarıyor? O olmasa ne değişir yani?

     

    Kodu bu şekilde yaptım. Doğru mudur?

                if (shortlama koşulu)
                {
                    if (FirstRun == 0)
                {
                    SendMarketOrder(Symbol, 100, OrderSide.Sell);
                    FirstRun--;
                    Debug("Shortlama emri verildi.");

                }

                if (nötr olma koşulu))
                {
                    if (FirstRun == 1)
                    
                {
                    SendMarketOrder(Symbol, 100, OrderSide.Buy);
                    FirstRun++;
                    Debug("Nötr emri verildi. Short pozisyonlar kapanacak");

     

    Edit: Backtestte short komutunu aldı fakat bir daha alım yapıp shortu nötrlemedi. Neyi eksik yaptığımı anlamadım :/
  • ▲0

    Merhaba, evet yukaridaki kodu uzerinde calisabileceginiz bir ornek olarak yazmistim.

    Short/Neutral bir stratejiye degistirmek icin bir kac duzenleme yapmamiz yeterli:

    if (Close > Open)
    {
    	Debug($"Close: {Close} > Open: {Math.Round(Open,2)}. Bar POSITIVE");
    	if (Position == -1)
    	{
    		SendMarketOrder(Symbol, Quantity, OrderSide.Buy);
    		Position = 0;
    		Debug("Short pozisyon kapatildi. Pozisyon = " + Position);
    	}
    }
    if (Close < Open)
    {
    	Debug($"Close: {Close} < Open: {Math.Round(Open,2)}. Bar NEGATIVE");
    	if (Position == 0)
    	{
    		SendMarketOrder(Symbol, Quantity, OrderSide.Sell);
    		Position = -1;
    		Debug("Aciga Satis emri gonderildi. Pozisyon = " + Position);
    	}
    }

     

  • ▲0
    Sonunda yaptım teşekkür ederim. Fonksiyona backtestler için tanımlamasını istediğim tek şey şu kaldı:

    ''Ben short-neutral yapmaktan kazanç sağlıyorum, backtest yaparken shortlarımı bana + olarak göster''

    cümlesini nasıl tanıtacağım?

    Çünkü backtestlerde gene Buy-Neutral yapmaya çalışarak en düşük zararı sağlamaya çalışıyor.

Cevabınız

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