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

MatriksIQ'da oluşturduğum stratejide AL emri geldiği aman belirlediğim x kaldıraçlı işlerm ile long pozisyon açsın ve sonrasında ise stratejimnde SAT emri geldiğinde pozisyonu kapatıp x kaldıralı işlem ile short pozisyon açsın.  Stratejime ekleyebileceğim böyle bir yama program tanımlamak mümkün mü?

Teşekkürler,
Algoritmik Trading kategorisinde (63 puan) tarafından | 769 kez görüntülendi

1 cevap

1 beğenilme 0 beğenilmeme

Merhabalar,

Bahsettiğiniz koşulu Algoritma Sihirbazında ekleyebileceğiniz gibi aşağıda verilen örnek kod yapısını da kullanabilirsiniz.

(Sistem iki hareketli ortalamanın kesişimine göre yazılmıştır. Kendi sisteminizi bu yapıya entegre edebilirsiniz.)

Lütfen inceleyiniz.

İyi çalışmalar.

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

namespace Matriks.Lean.Algotrader
{
	public class SablonAcigaSatisVadeli1 : MatriksAlgo
	{
		[SymbolParameter("FGARAN")]
		public string Symbol;

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

		[Parameter(5)]
		public decimal BuyOrderQuantity;

		[Parameter(5)]
		public decimal SellOrderQuantity;

		[Parameter(5)]
		public int MovPeriod;

		[Parameter(22)]
		public int MovPeriod2;

		[Parameter(3)]
		public int KaldiracOrani;


		MOV mov;
		MOV mov2;

		public override void OnDataUpdate(BarDataEventArgs barData)
		{
			if (CrossAbove(mov, mov2))
			{
				FX_Alis();
			}

			if (CrossBelow(mov, mov2))
			{
				FX_Satis();
			}
		}

		public override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod);
			mov = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod, MovMethod.Exponential);
			mov2 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod2, MovMethod.Exponential);

			// Gerekli			
			WorkWithPermanentSignal(true);

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

			// kaldıraç oranı
			SetLeverage(Symbol, KaldiracOrani);
			// kaldıraç tipi – true isolated, false cross
			SetLeverageType(Symbol, 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(Symbol, BuyOrderQuantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
					_quantity = BuyOrderQuantity;
				}else
				{
					if (LastOrderSideForShort.Obj == Side.All)
					{
						_orderID = SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
						_quantity = BuyOrderQuantity;
					}else
					{
						_orderID = SendMarketOrder(Symbol, BuyOrderQuantity * 2, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
						_quantity = BuyOrderQuantity * 2;
					}
				}

				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(Symbol, SellOrderQuantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
					_quantity = SellOrderQuantity;
				}else
				{
					if (LastOrderSideForShort.Obj == Side.All)
					{
						_orderID = SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
						_quantity = SellOrderQuantity;

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


				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(Symbol, SyntheticOrderPriceType.Percent, 1);
				//				TakeProfit(Symbol, SyntheticOrderPriceType.Percent, 1);
				if (!orderIDList.Contains(order.CliOrdID) && AcigaSatisYapilsin)
				{
					LastOrderSideForShort.Obj = Side.All;
					Debug("Sentetik emir tetiklendi");
				}
			}
		}
		// #Gerekli
	}
}

 

(11,059 puan) tarafından
0 0
Merhaba

Kodlamayı inceleyince tüm sorularımın cevabını fazlası ile aldım. Çok güzel kodlama olmuş. Elinize sağlık.

Teşekkür ederim.
0 0
Merhaba

Çok küçük miktar ile binance'ta canlıya geçtim. Şu an için sıkıntı yok. 3x kaldıraçlı devam ediyor.

Diğer taraftan geçnişe dönük backtestlerde kaldıraç oranını ne yaparsam yapayım hep aynı sonuç çıkıyor. Bu normal mi?

Ayrıca, crypto paralarda akşam seansı gibi bir şey olmadığı için bunu hiç bir zaman aktif etmeyeceğim.

Bunu ben normal spot markette deniyorum orada da çalışıyor. Hatta backtestlerinde sanki kaldıraçlıymış gibi sonuçlar geliyor. Bu normal mi?

Son sorum, pozisyon açıldığında ters tarafa giderse beli bir orandan sonrası için satış veya alış emrini vereceğim stop loss yamasını buna nasıl entegre edebilrim.

Cevaplarınızı bekler, teşekkür ederim.
0 0
Gönderdiğiniz yamayı kendi stratejime başarı ile ekledim.

Ancak birkaç ilave sorum olacak;

1- Ben bunu binance'da kullanacağım. Sanırım marjin hesabımda bulunan para ile stratejimi çalıştırmam gerekiyor.

2- Alış veya satış emrinden sonra ters tarafa giderse belli bir orandan sonra zararı durdur emri verebilir miyim?

3- Bu "cross" olarak çalışacak galiba, teyit eder misiniz?

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,636 soru
8,590 cevap
4,821 yorum
19,790 kullanıcı