0 beğenilme 0 beğenilmeme
58 kez görüntülendi
Merhaba,

Hem spot ve hemde vadeli tarafta işlem açıyorum.
Bazı durumlarda işlemin kapanması yada stop olması durumunda "hesapta yeterli bakiye yok"  hatası yüzünden işlemim açık kalıyor.
Haliyle işlemim kar veriyorken sonrasında zarara geçiyor.

Log kayıtlarıma baktım, hesabımda hayli hayli bnb var.
Ayarlarımı kontrol ettim, hem spot hem vadeli tarafta bnb komisyon indiriminden faydanabilmek için bnb komisyon kesintisi ayarlarım açık.

Ama sistem tüm kesintimi almış olduğum coin üzerinden yaptığı için işlem kapanışında ilk aldığım miktar kadar emir gönderiyor.
Yani 100 adet xxx coin alımım gerçekleşti.
Satışı yaparken de aynı şekilde 100 xxx coin emrini gönderiyor piyasaya... Ama elimde 99,5 var misal.

Aşağıda bir yapı için örnek bırakıyorum, çalışıp çalışmayacağı konusunda anlayan bilen bir arkadaş yardımcı olabilirse çok sevinirim.

decimal mevcutMiktar = GetPositionQuantity("FLOKI_USDT_BIN");
if (mevcutMiktar >= 996000)
{
    SendMarketOrder("FLOKI_USDT_BIN", 996000, OrderSide.Sell);
}
else
{
    Debug($"Hesapta yeterli FLOKI yok. Mevcut: {mevcutMiktar}");
    SendMarketOrder("FLOKI_USDT_BIN", mevcutMiktar, OrderSide.Sell);
}
Algoritmik Trading kategorisinde (24 puan) tarafından
tarafından yeniden kategorilendirildi | 58 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhaba,

BNB ayarlaması yapıldığında ve yeteri kadar BNB olması halinde stratejileriniz sorunsuz çalışması gerekir belki Binance destek ekibinden yardım almanız gerekebilir.

satış koşulu oluştuğunda portföyden satılabilir adedi çekip emir gönderilebilir burada gelen değerin enstrümanın lot adedine uymayabileceğinden emir yine iptal edilir. aşağıdaki kodda bununla ilgili düzenleme var inceleyebilirsiniz.

Not: komisyonu ilgili sembolden kesilmesi halinde portföye daha az miktar yansıtılacağı için sentetik emir tetiklenmelerinde sorun yaşanabilir.

decimal priceStep, quantityStep = 1;
		int exchangeID;

		public override void OnInitComplated()
		{
			var symbolDetail = GetSymbolDetail(Symbol);

			exchangeID = symbolDetail.ExchangeDetail.ExchangeID;
			var close = GetSelectedValueFromBarData(GetBarData(), OHLCType.Close);

			if (exchangeID != (int) ExchangeType.Ise && exchangeID != (int) ExchangeType.Viop)
			{
				priceStep = 1 / (decimal) Math.Pow(10, symbolDetail.DecimalCount);
				quantityStep = 1 / (decimal) Math.Pow(10, symbolDetail.TradeFraction);
			}else
			{
				priceStep = GetPriceStepForBistViop(Symbol, close);
			}

			Debug("exchangeID: " + exchangeID + " priceStep: " + priceStep + " quantityStep: " + quantityStep);
		}
		
		public decimal FX_LotAyarla(decimal quantity)
		{
			return Math.Floor(quantity / quantityStep) * quantityStep;
		}

		public decimal FX_FiyatAyarla(decimal price)
		{
			return Math.Floor(price / priceStep) * priceStep;
		}


		public override void OnDataUpdate(BarDataEventArgs barData)
		{
			var pozisyon = GetRealPositions();			
			decimal orderQuantity = 1000000;
			decimal komisyonDustuktenSonraKalanMiktar = orderQuantity * 0.999m; // binde bir komisyon

			decimal mevcutMiktar = pozisyon.ContainsKey(Symbol) ? FX_LotAyarla(pozisyon[Symbol].QtyAvailable):0;

			if (mevcutMiktar != 0)
			{
				if (mevcutMiktar >= orderQuantity)
				{
					SendMarketOrder(Symbol, orderQuantity, OrderSide.Sell);
				}
				else
				{
					Debug($"Hesapta yeterli FLOKI yok. Mevcut: {mevcutMiktar}");
					SendMarketOrder(Symbol, mevcutMiktar, OrderSide.Sell);
				}
			}
		}

 

 

 

 

(15,912 puan) tarafından
0 0
Merhaba,

Destek için teşekkürler.
Kendi araştırmam sonucunda denemiş olduğum kurgu çalıştı.
Şimdilik sorunsuz bir şekilde çalışıyor.

 

Teşekkürler.
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,785 soru
8,735 cevap
4,888 yorum
21,219 kullanıcı