MatriksIQ Destek
Matriks Destek
Matriks Web Destek
Matriks Mobile Destek
0 beğenilme 0 beğenilmeme
197 kez görüntülendi
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ı?
Algoritmik Trading kategorisinde (213 puan) tarafından | 197 kez görüntülendi

1 cevap

1 beğenilme 0 beğenilmeme

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);
	}
}

 

(5,610 puan) tarafından
0 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 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 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.
2,574 soru
2,468 cevap
2,068 yorum
1,795 kullanıcı