0 beğenilme 0 beğenilmeme
858 kez görüntülendi

Merhaba

Stratejime kaldıraçlı işlem eklemek istiyorum. Al emri verdiğinde long pozisyon açsın, sat emri verdiğinde short pozisyona dönüştürsün. İlave olarak, emirden sonra işlem ters yöne giderse (Hem long hem de short pozisyonda) stoploss olayım isterim ayrıca istediğim oranda take profit çalıştırabileyim. Sizin daha önce konu ile ilgili verdiğiniz cevapları inceledim aralarında tam istediğimi yapacak örnekler bulunmaktadır. Ancak bunları Binance'da canlıda denedim herşey süper ama kaldıraç oranı 5x görünse de ilk alış emrini direk "BuyOrderQuantity" olarak alım satım yapıyor. Yani backtestlerde kullandığım ilk alış emrini istediğim kaldıraç oranı ile çarpıp işlem açmıyor.

Kod içindeki al sat emrilerini "BuyOrderQuantity * KaldiracOrani" diye değiştirdim. Burada da sıkıntı olmadı ama bu seferde alış emrinden sonra (long pozisyonda) stoploss çalışmıyor. Sadece short pozisyonda çalışıyor. Long pozisyonda stopp loss çalışmayınca güven vermedi. Yani kaldıracı hallediyorum ama bu seferde long pozisyonda stoploss olamıyorum. Kodlamayı orjinali gibi kullansam her iki yönde de stoploss oluyorum ama bu seferde kaldrıaç oranı çalışmıyor. 

Hareketli ortalamanın kesişimi ile ilgili bir örnek üzerinden yaptığım revize çalışmam aşağıda görünmektedir. 

Son bir şey, emirlere hangisi önce gelirse başla olarak değiştirmek isterim ama beceremedim. 

Çok teşekkür ederim, umarım sorum analışılır olmuştur.

	// Gerekli			
			WorkWithPermanentSignal(true);

			if (AcigaSatisYapilsin)
			{
				SendOrderSequential(true, Side.Buy);
				SendOrderSequentialForShort(true, Side.All);
			}else
			{
				SendOrderSequential(true, Side.Buy);
			}
			// #Gerekli

			// kaldıraç oranı
			SetLeverage(Symbol1, KaldiracOrani);
			// kaldıraç tipi – true isolated, false cross
			SetLeverageType(Symbol1, false);
			// Gerekli

		}

		[Parameter(false)]
		public bool AcigaSatisYapilsin;

		[Parameter(false)]
		public bool AksamSeansiniDahilEt;

		List<string> orderIDList = new List<string>();

		public void FX_Alis()
		{
			string _orderID = string.Empty; ;
			decimal _quantity = 0;

			if (LastOrderSide.Obj != Side.Buy)
			{
				if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)
				{
					_orderID = SendMarketOrder(Symbol1, BuyOrderQuantity * KaldiracOrani, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
					_quantity = BuyOrderQuantity * KaldiracOrani;
				}else
				{
					if (LastOrderSideForShort.Obj == Side.All)
					{
						_orderID = SendMarketOrder(Symbol1, BuyOrderQuantity * KaldiracOrani, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
						_quantity = BuyOrderQuantity * KaldiracOrani;
					}else
					{
						_orderID = SendMarketOrder(Symbol1, BuyOrderQuantity * KaldiracOrani, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
						_quantity = BuyOrderQuantity * KaldiracOrani;
					}
				}

				if (_orderID != string.Empty && _quantity != 0)
				{
					orderIDList.Add(_orderID);
					Debug("Alış emri gönderildi.[ " + _quantity + " adet ]");
					LastOrderSide.Obj = Side.Buy;
					LastOrderSideForShort.Obj = Side.Buy;
				}
			}
		}

		public void FX_Satis()
		{
			string _orderID = string.Empty; ;
			decimal _quantity = 0;

			if (LastOrderSide.Obj != Side.Sell)
			{
				if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)
				{
					_orderID = SendMarketOrder(Symbol1, SellOrderQuantity * KaldiracOrani, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
					_quantity = SellOrderQuantity * KaldiracOrani;
				}else
				{
					if (LastOrderSideForShort.Obj == Side.All)
					{
						_orderID = SendMarketOrder(Symbol1, SellOrderQuantity * KaldiracOrani, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
						_quantity = SellOrderQuantity * KaldiracOrani;

					}else
					{
						_orderID = SendMarketOrder(Symbol1, SellOrderQuantity * KaldiracOrani, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
						_quantity = SellOrderQuantity * KaldiracOrani;
					}
				}


				if (_orderID != string.Empty && _quantity != 0)
				{
					orderIDList.Add(_orderID);
					Debug("Satış emri gönderildi.[ " + _quantity + " adet ]");
					LastOrderSide.Obj = Side.Sell;
					LastOrderSideForShort.Obj = Side.Sell;
				}
			}
		}

		public override void OnOrderUpdate(IOrder order)
		{
			if (order.OrdStatus.Obj == OrdStatus.Filled)
			{
				// Senntetik emirler tanımlanıyor
				StopLoss(Symbol1, SyntheticOrderPriceType.Percent, Zarar_Durdur_Yuzdesi);
				// TakeProfit(Symbol1, SyntheticOrderPriceType.Percent, Kar_al);
				if (!orderIDList.Contains(order.CliOrdID) && AcigaSatisYapilsin)
				{
					LastOrderSideForShort.Obj = Side.All;
					Debug("Sentetik emir tetiklendi");
				}
			}
		}
		// #Gerekli
	}
 
Algoritmik Trading kategorisinde (63 puan) tarafından | 858 kez görüntülendi

1 cevap

1 beğenilme 0 beğenilmeme

Merhabalar,

Ancak bunları Binance'da canlıda denedim herşey süper ama kaldıraç oranı 5x görünse de ilk alış emrini direk "BuyOrderQuantity" olarak alım satım yapıyor. Yani backtestlerde kullandığım ilk alış emrini istediğim kaldıraç oranı ile çarpıp işlem açmıyor.

BINANCE kaldıraçlı işlemleri kodlamanın default hali ile backtest üzerinden görebilmek maalesef mümkün değildir.

Backtestte bütün işlemleriniz belirttiğiniz adet üzerinden alım satım noktalarını karşılaştırabileceğiniz şekilde yayınlanır/ekrana yansıtılır, kaldıraç oranı dahil edilerek yayınlanmaz. Kaldıraç oranını ekranda sağlıklı bir şekilde görüntüleyebilmek için kodlama içerisinde birtakım değişiklikler gerekmektedir.

Canlı olarak çalıştırdığınızda ise yine aynı şekilde kaldıraç oranını/kazancınızı BINANCE üzerinden takip edebilirsiniz.

 

Son bir şey, emirlere hangisi önce gelirse başla olarak değiştirmek isterim ama beceremedim. 

Sisteminiz aşağıdaki hali ile eğer açığa satış kullanırsanız hangisi önce gelirse onunla başlayacak şekilde dizayn edilmiştir.

Fakat açığa satış kullanmayacaksanız alış ile başlıyor.

			if (AcigaSatisYapilsin)
			{
				SendOrderSequential(true, Side.All);
				SendOrderSequentialForShort(true, Side.All);
			}else
			{
				SendOrderSequential(true, Side.Buy);
			}

 Bu kısmı da hangisi önce gelirse onunla başla olarak revize etmek isterseniz, else kısmı içerisini aşağıdaki gibi revize ediniz.

else

{

SendOrderSequential(true, Side.All);

}

 

İyi çalışmalar.

(11,059 puan) tarafından
1 0

Teşekkür ederim.

Tüm kodlamada ki alış-satış miktarlarını kaldıraç oranı ile  (BuyOrderQuantity * KaldiracOrani) çarpınca herşey istediğim gibi oldu. Hem backteslet istediğim gibi görünüyor hem de binancda düzgün görünüyor.

 

	public void FX_Alis()
		{
			string _orderID = string.Empty; ;
			decimal _quantity = 0;

			if (LastOrderSide.Obj != Side.Buy)
			{
				if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)
				{
					_orderID = SendMarketOrder(Symbol1, BuyOrderQuantity * KaldiracOrani, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
					_quantity = BuyOrderQuantity * KaldiracOrani;
				}else
				{
					if (LastOrderSideForShort.Obj == Side.All)
					{
						_orderID = SendMarketOrder(Symbol1, BuyOrderQuantity * KaldiracOrani, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
						_quantity = BuyOrderQuantity * KaldiracOrani;
					}else
					{
						_orderID = SendMarketOrder(Symbol1, BuyOrderQuantity * 2 * KaldiracOrani, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
						_quantity = BuyOrderQuantity * 2 * KaldiracOrani;
					}
				}

				if (_orderID != string.Empty && _quantity != 0)
				{
					orderIDList.Add(_orderID);
					Debug("Alış emri gönderildi.[ " + _quantity + " adet ]");
					LastOrderSide.Obj = Side.Buy;
					LastOrderSideForShort.Obj = Side.Buy;
				}
			}
		}

 

0 0
merhabalar, Binance üzerinden bende kaldıraçlı çift yön işlem yapmaya çalışıyorum da beceremedim. Rica etsem kodlamanın tamamını paylaşır mısınız??
0 0
Merhaba ;

Sizin strateji içine eklemeniz daha efektif olmuş. Kodu düzeltmek istemeyenler hem backtestte hem de strateji çalıştırırken OrderQuantity yazarken maliyete konu adedi kaldıraçla çarpıp yazabilirler.

Benim esas sorum : Hesabımızda  işlem yapacağımız coin var ve örneğin short pozisyondayız. Bunu stratejiye nasıl dahil edebiliriz?
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.



8,639 soru
8,593 cevap
4,826 yorum
19,858 kullanıcı