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

Belirledigim stratejide kaldıraç seviyesi ayarlama ve tüm bakiyeyi işleme sokmak istiyorum

Soruldu
Görüntülenme
829 görüntülenme
Durum
Cevaplandı
Merhabalar Pmax indikatörünü kullanarak ve elimdeki bakiyenin tamamını istedigim kaldıraç seviyesinde binance futures de işleme sokmak istiyorum fakar bu konuda önceden sorulmus soruların cevaplarını da test etmeme rağmen tam olarak çözüm bulamadım. Bu konuda yardımcı olabilir misiniz? Teşekkür ederim.
Paylaş

1 Cevap

0

Merhabalar,

Bakiyeye göre pmax stratejisi için lütfen aşağıdaki linki inceleyiniz.

https://destek.matriksdata.com/?qa=2126/pmax-indikat%C3%B6r%C3%BCne-bakiye-ve-enstruman-say%C4%B1s%C4%B1-giri%C5%9Fi&show=2126#q2126

Hem kaldıraç kullanarak hem de bakiyenin tamamı ile işlem yapılamıyor.

Pmax Kaldıraçlı Strateji için ise lütfen inceleyiniz.

***STRATEJİLERİ TEST/DENEME ORTAMINDA SINAMADAN VE SİZİN İSTEDİĞİNİZ ŞEKİLDE ÇALIŞTIĞINA EMİN OLMADAN GERÇEK ORTAMDA HİÇBİR ZAMAN ÇALIŞTIRMAYINIZ ***

using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using Matriks.Indicators;
using Matriks.Symbols;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Lean.Algotrader.Trading;
/*
___ Kripex ---
Gönderilen emir Binance kaynaklı timestamp hatasından dolayı iptal olduğunda 
	İptal olan emir aynı özelliklerle(Sembol,adet,fiyat,emir tipi,yönü ...) belirlenen süre sonra tekrar gönderilecektir.
	Bu süreyi KacSaniyeSonraTekrarGonderilsin değişkeni ile ayarlanabilir. Süre saniye cinsindendir.
	
	Bu işlem AyniEmirKacSeferGonderilsin değişkeni kadar tekrarlanabilir. 
	Bu işlemin çok fazla tekrarlanması Binance tarafından ban yenmesine neden olabilir.
*/

namespace Matriks.Lean.Algotrader
{
	public class pmaxkaldırac : MatriksAlgo
	{
		// Strateji çalıştırılırken kullanacağımız parametreler. Eğer sembolle ilgili bir parametre ise,
		// "SymbolParameter" ile, değilse "Parameter" ile tanımlama yaparız. Parantez içindeki değerler default değerleridir.

		[SymbolParameter("BTC_USDT_BIN")]
		public string Symbol;

		[Parameter(SymbolPeriod.Min5)]
		public SymbolPeriod SymbolPeriod;

		[Parameter(5)]
		public decimal BuyOrderQuantity;

		[Parameter(5)]
		public decimal SellOrderQuantity;

		[Parameter(10)]
		public int ATRPeriod;

		[Parameter(10)]
		public int MovPeriod;

		[Parameter(3)]
		public decimal Coefficient;

		[Parameter(MovMethod.E)]
		public MovMethod MovMethod;

		PMaxIndicator pmax;

		public override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod);
			pmax = PMaxIndicators(Symbol, SymbolPeriod, ATRPeriod, MovPeriod, (decimal) Coefficient, MovMethod);

			SendOrderSequential(true, Side.All);
			WorkWithPermanentSignal(true);

			// Gerekli - Timestamp
			SetTimerInterval(1);
			// #Gerekli - Timestamp
		}

		public override void OnDataUpdate(BarDataEventArgs barData)
		{
			if (CrossAbove(pmax.KLine, pmax.StLine))
			{
				SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
				Debug("Alış Emri Gönderildi");
			}

			if (CrossBelow(pmax.KLine, pmax))
			{
				SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
				Debug("Satış Emri Gönderildi");
			}
		}

		// Gerekli - Timestamp
		public class OrderListTimestamp
		{
			public string ID;
			public string Sembol;
			public decimal Adet;
			public decimal Fiyat;
			public OrdType EmirTipi;
			public OrderSide orderSide;
			public string EmirYonu;
			public DateTime TetiklenmeZamani;
			public int Sayac;
			public bool AktifMI;
		}

		Dictionary<string, OrderListTimestamp> timestampDict = new Dictionary<string, OrderListTimestamp>();

		[Parameter(3)]
		public int AyniEmirKacSeferGonderilsin;

		[Parameter(10)]
		public int KacSaniyeSonraTekrarGonderilsin;

		public override void OnOrderUpdate(IOrder order)
		{
			if (order.OrdStatus.Obj == OrdStatus.Filled)
			{
				Debug("gerçekleşti");

				if (timestampDict.ContainsKey(order.CliOrdID))
				{
					timestampDict.Remove(order.CliOrdID);
					Debug("Timestamp hatasına takılan emriniz gerçekleşti.");
				}
			}

			if (order.OrdStatus.Obj == OrdStatus.Rejected)
			{
				if (!timestampDict.ContainsKey(order.CliOrdID))
				{
					OrderListTimestamp orderList = new OrderListTimestamp();
					orderList.ID = order.CliOrdID;
					orderList.Sembol = order.Symbol;
					orderList.Adet = order.OrderQty;
					orderList.Fiyat = order.Price;
					orderList.EmirTipi = order.OrdType;
					orderList.TetiklenmeZamani = DateTime.Now;
					orderList.Sayac = 0;
					orderList.AktifMI = false;

					if (order.Side.Obj == Side.Buy)
					{
						orderList.orderSide = OrderSide.Buy;
						orderList.EmirYonu = "Alış";
					}else
					{
						orderList.orderSide = OrderSide.Sell;
						orderList.EmirYonu = "Satış";
					}

					timestampDict[order.CliOrdID] = orderList;
				}

				if (order.Text.Contains("Timestamp"))
				{
					if (timestampDict.ContainsKey(order.CliOrdID))
					{
						if (timestampDict[order.CliOrdID].Sayac < AyniEmirKacSeferGonderilsin)
						{
							timestampDict[order.CliOrdID].TetiklenmeZamani = DateTime.Now.AddSeconds(KacSaniyeSonraTekrarGonderilsin);
							timestampDict[order.CliOrdID].Sayac++;
							timestampDict[order.CliOrdID].AktifMI = true;

							Debug("Emir Timestamp hatasından dolayı iptal oldu tekrar gönderilecek");
						}else
						{
							timestampDict.Remove(order.CliOrdID);
							Debug("Aynı emir üst üste " + AyniEmirKacSeferGonderilsin + " defa gönderildi.");
						}
					}
				}
			}
		}


		string orderIDTimestamp = string.Empty;

		public override void OnTimer()
		{
			var tutt = timestampDict.Where(x => x.Value.AktifMI == true && DateTime.Now >= x.Value.TetiklenmeZamani);

			if (tutt.Count() >0)
			{
				foreach (var deger in tutt)
				{
					LastOrderSide.Obj = deger.Value.orderSide == OrderSide.Buy? Side.Sell:Side.Buy;

					if (deger.Value.EmirTipi.Obj == OrdType.Limit)
					{
						orderIDTimestamp = SendLimitOrder(deger.Value.Sembol, deger.Value.Adet, deger.Value.orderSide, deger.Value.Fiyat);
						Debug(deger.Value.EmirYonu + " emri tekrar gönderildi.");
					}else if (deger.Value.EmirTipi.Obj == OrdType.Market)
					{
						orderIDTimestamp = SendMarketOrder(deger.Value.Sembol, deger.Value.Adet, deger.Value.orderSide);
						Debug(deger.Value.EmirYonu + " emri tekrar gönderildi.");
					}

					deger.Value.ID = orderIDTimestamp;
					deger.Value.AktifMI = false;
					timestampDict[orderIDTimestamp] = deger.Value;
					timestampDict.Remove(deger.Key);

				}
			}
		}
		// #Gerekli - Timestamp
	}
}

İyi çalışmalar.

BağlantıBayraklaasiyangMatriks Destek11.113

Cevabınız

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