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

BIST seçersek kaldıraç tipi ve miktarı

Soruldu
Görüntülenme
914 görüntülenme
Durum
Cevaplandı
AŞİYAN HANIM AL VE SAT İŞLEMİ YAPMAKTADIR DERKEN FUTURE DA YAPIYOR DEĞİL Mİ ?

 

BİRDE EĞER BIST SEMBOLU SEÇERSEK KALDIRAÇ TİPİ VE MİKTARINI SEÇEMİYORUZ ONU NASIL YAPACAĞIZ ?
Paylaş

1 Cevap

0

Merhabalar,

Sisteminizin revize edilmiş hali aşağıdadır. 

using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.AI;
using Matriks.Data.Symbol;
using Matriks.Engines;
using Matriks.Indicators;
using Matriks.Symbols;
using Matriks.AlgoTrader;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;
using Matriks.Trader.Core.TraderModels;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Lean.Algotrader.Trading;
namespace Matriks.Lean.Algotrader
{
	public class MostDıVadeliStratejisi : MatriksAlgo
	{
		[SymbolParameter("BTC_USDT_FBIN")]
			public string Symbol;
		[Parameter(SymbolPeriod.Min5)]
			public SymbolPeriod SymbolPeriod;
		[Parameter(0.003)]
			public decimal BuyOrderQuantity;
		[Parameter(0.003)]
			public decimal SellOrderQuantity;
		[Parameter(14)]
			public int RsiPeriod1;

		[Parameter(3)]
		public int MOSTPeriod;

		[Parameter(2)]
		public decimal Percentage;

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

		RSI rsi;
		MOST most;

		public override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod);
			rsi = RSIIndicator(Symbol, SymbolPeriod, OHLCType.Close, RsiPeriod1);
			most = MOSTIndicator(rsi, MOSTPeriod, Percentage, MostMovMethod1);

			// Gerekli açığa satış
			WorkWithPermanentSignal(true);
			SendOrderSequential(true, HangiIslemleBaslasin);
			SendOrderSequentialForShort(true, Side.All);
			// #Gerekli açığa satış 

			// Gerekli - Kaldıraç
			SetLeverage(Symbol, Kaldirac); // kaldıraç oranı
			SetLeverageType(Symbol, true); // kaldıraç tipi - true isolated, false cross
			// #Gerekli - Kaldıraç 

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

		}

		public override void OnDataUpdate(BarDataEventArgs barData)
		{
			if (CrossAbove(most, most, 1, 0))
			{
				// Gerekli açığa satış
				FX_Alis(Symbol, BuyOrderQuantity);
				// #Gerekli açığa satış
			}

			if (CrossBelow(most, most, 1, 0))
			{
				// Gerekli açığa satış
				FX_Satis(Symbol, SellOrderQuantity);
				// #Gerekli açığa satış
			}
		}

		// Gerekli açığa satış
		[Parameter(3)]
			public int Kaldirac;
		[Parameter(true)]
			public bool AcigaSatisYapilsin;
		[Parameter(false)]
			public bool AksamSeansiniDahilEt;
		[Parameter(Side.All)]
			public Side HangiIslemleBaslasin;

		public void FX_Alis(string sembol, decimal quantity)
		{
			if (LastOrderSide.Obj != Side.Buy)
			{
				var _quantity = (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin || sentetikEmirdenMI) ? quantity:(LastOrderSideForShort.Obj == Side.All) ? quantity:quantity * 2; SendMarketOrder(sembol, _quantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
				Debug("Alış emri gönderildi.[ " + _quantity + " adet ]");
				LastOrderSideForShort = LastOrderSide;
				sentetikEmirdenMI = false;
			}
		}

		public void FX_Satis(string sembol, decimal quantity)
		{
			if (LastOrderSide.Obj != Side.Sell)
			{
				var _quantity = (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin || sentetikEmirdenMI) ? quantity:(LastOrderSideForShort.Obj == Side.All) ? quantity:quantity * 2; SendMarketOrder(sembol, _quantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
				Debug("Satış emri gönderildi.[ " + _quantity + " adet ]");
				LastOrderSideForShort = LastOrderSide;
				sentetikEmirdenMI = false;
			}
		}

		bool sentetikEmirdenMI = false;

		public override void OnSyntheticOrderTriggered(SyntheticAlgoOrder sOrder)
		{
			if (sOrder.EnableOrderSending)
			{
				if (AcigaSatisYapilsin)
				{
					LastOrderSide.Obj = Side.All;
					sentetikEmirdenMI = true;
				} Debug("Sentetik emir tetiklendi");
			}
		}
		// #Gerekli açığa satış 

		// 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;

		string orderIDTimestamp = string.Empty;

		// #Gerekli
		public override void OnTimer()
		{
			// Gerekli - Timestamp
			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
		}

		public override void OnOrderUpdate(IOrder order)
		{
			// Gerekli - Timestamp
			if (order.OrdStatus.Obj == OrdStatus.Filled)
			{
				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.");
						}
					}
				}
			}
			// #Gerekli - Timestamp
		}
	}
}

İyi çalışmalar.

BağlantıBayraklaasiyangMatriks Destek11.113

Yorumlar (2)

Cevabınız

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