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

ELİS ile birlikte strateji oluşturabilen var mı ?

Soruldu
Görüntülenme
848 görüntülenme
Durum
Çözüldü
Bir stratejinin içerisinde ELİS indikatörü koyuldu ve kaldıracı otomatik ayarlıyor ama başlangıç bakiyesi kaldıraç oranına göre vadeli piyasada değiştiği için bu işin içinden çıkamadım.Bu durumu çözebilen var mı ? varsa nasıl başardığını anlatabilir mi ?
Paylaş

1 Cevap

0

Kabul edilen cevap

Merhabalar,

Dilerseniz aşağıdaki örneği inceleyebilirsiniz.

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;

namespace Matriks.Lean.Algotrader
{
	public class ElisOrnek : 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_FBIN")]
		public string Symbol;

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

		[Parameter(0.005)]
		public decimal BuyOrderQuantity;

		[Parameter(0.005)]
		public decimal SellOrderQuantity;

		[Parameter(5)]
		public int MovPeriod;

		[Parameter(22)]
		public int MovPeriod2;

		// indikator tanımları.
		MOV mov;
		MOV mov2;

		// Gerekli Elis
		MatriksIndicator ELIS_IQ;

		[Parameter(Gears.Standard)]
		public Gears Gear;

		public enum Gears
		{
			Conservative = 1, Standard = 2, Average = 3, Risky = 4, Agressive = 5
		}

		[Output]
		public int KaldiracOrani = 3;
		// #Gerekli Elis

		public override void OnInit()
		{
			ELIS_IQ = new ELIS_IQ();
			ELIS_IQ.SetIndicatorParameters("Gear", Gear);
			ELIS_IQ.SetIndicatorParameters("Period", 50);

			RegisterUserIndicator(ELIS_IQ, Symbol, SymbolPeriod.Min60, OHLCType.Close, 5);

			AddSymbol(Symbol, SymbolPeriod);
			mov = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod, MovMethod.Exponential);
			mov2 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod2, MovMethod.Exponential);

			SendOrderSequential(true);
			WorkWithPermanentSignal(true);

			// kaldıraç tipi - true isolated, false cross
			SetLeverageType(Symbol, true);
		}

		public void FX_KaldiracAyarla()
		{
			if (KaldiracOrani != ELIS_IQ.CurrentValue)
			{
				KaldiracOrani = (int) ELIS_IQ.CurrentValue;
				SetLeverage(Symbol, KaldiracOrani);
				Debug("Kaldıraç oranı düzenlendi. " + KaldiracOrani);
			}
		}

		public override void OnDataUpdate(BarDataEventArgs barData)
		{
			if (barData.PeriodInfo == SymbolPeriod.ToPeriodInfo())
			{
				if (CrossAbove(mov, mov2) && LastOrderSide.Obj != Side.Buy)
				{
					FX_KaldiracAyarla();
					SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
					Debug("Alış Emri Gönderildi");
				}

				if (CrossBelow(mov, mov2) && LastOrderSide.Obj != Side.Sell)
				{
					FX_KaldiracAyarla();
					SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
					Debug("Satış Emri Gönderildi");
				}
			}
		}
	}
}

İyi çalışmalar.

BağlantıBayrakladüzenlendi · canustaaasiyangMatriks Destek11.113

Yorumlar (1)

  • ▲0

    Soru tam anlaşılamamış sanırım. (Ya da ben gönderdiğiniz ELIS örneğini anlayamadım.) Şöyle ki, siz order quantity'yi belirli bir değer girdikten sonra (örn. 1 BNB) ELİS kaldıracı ne yaparsa yapsın sistem 1 BNB alıp satacaktır. Kaldıraç 2x ise 0.5 BNB kadar bakiye kullanacaktır, kaldıraç 10x ise 0.1 BNB kadar bakiye kullanacaktır. Ama 1 BNB alıp satacaktır. Yani pozisyon büyüklüğünde bir değişiklik olmayacaktır. (BNB fiyatındaki değişim hariç.)

    Benim aklıma şu geldi: Buy/sell order quantity'deki değeri 1x için yani kaldıraç olmadığı durum için girip, SendMarketOrder içindeki OrderQuantity'yi kaldıraç ile çarpmak? Aşağıda yaptım ama backtest falan yapıp denemedim ona göre. :D

    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;
    
    namespace Matriks.Lean.Algotrader
    {
    	public class I_ELIS : 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_FBIN")]
    		public string Symbol;
    
    		[Parameter(SymbolPeriod.Min5)]
    		public SymbolPeriod SymbolPeriod;
    
    		[Parameter(0.005)]
    		public decimal BuyOrderQuantity;
    
    		[Parameter(0.005)]
    		public decimal SellOrderQuantity;
    
    		[Parameter(5)]
    		public int MovPeriod;
    
    		[Parameter(22)]
    		public int MovPeriod2;
    
    		// indikator tanımları.
    		MOV mov;
    		MOV mov2;
    
    		// Gerekli Elis
    		MatriksIndicator ELIS_IQ;
    
    		[Parameter(Gears.Standard)]
    		public Gears Gear;
    
    		public enum Gears
    		{
    			Conservative = 1, Standard = 2, Average = 3, Risky = 4, Agressive = 5
    		}
    
    		[Output]
    		public int KaldiracOrani = 3;
    
    		ELIS elis;
    
    		public override void OnInit()
    		{
    			elis = ELISIndicator(Symbol, SymbolPeriod, OHLCType.Close, 50, ElisGear.Standard);
    
    			AddSymbol(Symbol, SymbolPeriod);
    			mov = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod, MovMethod.Exponential);
    			mov2 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod2, MovMethod.Exponential);
    
    			SendOrderSequential(true);
    			WorkWithPermanentSignal(true);
    
    			// kaldıraç tipi - true isolated, false cross
    			SetLeverageType(Symbol, true);
    		}
    
    		public void FX_KaldiracAyarla()
    		{
    			if (KaldiracOrani != ELIS_IQ.CurrentValue)
    			{
    				KaldiracOrani = (int) ELIS_IQ.CurrentValue;
    				SetLeverage(Symbol, KaldiracOrani);
    				Debug("Kaldıraç oranı düzenlendi. " + KaldiracOrani);
    			}
    		}
    
    		public override void OnDataUpdate(BarDataEventArgs barData)
    		{
    			if (barData.PeriodInfo == SymbolPeriod.ToPeriodInfo())
    			{
    				if (CrossAbove(mov, mov2) && LastOrderSide.Obj != Side.Buy)
    				{
    					FX_KaldiracAyarla();
    					SendMarketOrder(Symbol, BuyOrderQuantity*KaldiracOrani, OrderSide.Buy);
    					Debug("Alış Emri Gönderildi");
    				}
    
    				if (CrossBelow(mov, mov2) && LastOrderSide.Obj != Side.Sell)
    				{
    					FX_KaldiracAyarla();
    					SendMarketOrder(Symbol, SellOrderQuantity*KaldiracOrani, OrderSide.Sell);
    					Debug("Satış Emri Gönderildi");
    				}
    			}
    		}
    	}
    }

     

Cevabınız

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