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

1- matrix ıq ile ing yatırım üzerinden otomatik emir verebiliyormuyuz?

2- matrix iq most indikatörü ile long ve short işlemleri için emir verebiliyormuyuz?düşerken açığa sat ve açığa sat gün içinde pozisyonu kapat gibi emirleri nasıl veriririz?   verebiliyorsak ve ilgili kodu paylacaksanız şayet kodu nasıl ekleyebileceğimi de söylermisiniz?

3-most indikatörü ile çalışan algo da örnek verecek olursak xxx hissesini 10 tl den 1000 adet aldık, 15 tl den 1000 adet sattı , toplam bakıye ile 15000 tl lik işleme girmesini nasıl sağlarız? yani bakıyenın tamamı kadar al ve sat işlemini nasıl yaparız? bu sıra da farklı hisse  satışlardan gelen bakiyelerin robot işlemine dahil olmaması için ne yapmamız lazım ?

teşekkür ederim .
Algoritmik Trading kategorisinde (41 puan) tarafından | 1,414 kez görüntülendi

1 cevap

1 beğenilme 0 beğenilmeme
En İyi Cevap

Merhabalar,

1- Evet, MatriksIQ ile ALGO Lisansınız olduğu sürece ING Yatırım üzerinden otomatik emir verebilirsiniz.

2- MatriksIQ'da sadece Most indikatörü ile değil IQ üzerinde yüklü/yüklediğiniz tüm indikatörlere long ve short işlemleri için emir verebilirsiniz. Açığa sat ve açığa sat gün içinde pozisyonu kapat gibi emirleri belirlediğiniz koşullarda kullanabilirsiniz. Bu tarz emir girişlerini Algoritma Sihirbazını kullanarak kendiniz manuel oluşturabilirsiniz.

Aşağıdaki linkten Algoritma Sihirbazı ile ilgili detaylara ulaşabilirsiniz.

https://destek.matriksdata.com/?qa=6289/algoritma-sihirbazi-farkli-parametreler-oldu%C4%9Funda

3-  Aşağıdaki kod örneği Most indikatörüne göre bakiyeye göre al sat yapan belirtilen miktar ile başlayıp bu miktarın kar/zarar oranına göre ilerleyen bir yapısı mevcuttur. Dilerseniz inceleyiniz.

using System;
using System.Collections.Generic;
using System.Linq;
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;

//===========================================ACIKLAMA============================================//
// Başlangıçta belirlenen bakiyeye ve elinizdeki estrüman adetine göre strateji çalışmaya başlar.//
// Alış sinyali oluştuysa bakiye varsa bakiye kadar alış yapar.                                  //
// Satış sinyali oluştuysa pozisyonunuz varsa hepsini satar.                                     //
// Backtest yapıp test hesablarından denedikten sonra küçük miktarlarla gerçek hesapta deneyiniz //

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

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

		[Parameter(3)]
		public int Period;

		[Parameter(2)]
		public decimal Percentage;

		MOST most;

		// Gerekli başla

		// Başlangıç bakiyesi
		[Output][Parameter(1000)]
		public decimal Bakiye;

		// Başlangıçta elinde olan adet
		[Parameter(0)]
		public decimal BaslangıctakiEnstrumanAdedi;

		[Parameter(true)]
		public bool KomisyonuDahilEt;

		[Parameter(0.001)]
		public decimal Komisyon;

		// strateji hisse senedi ile mi coin ile mi kullanılacak
		[Parameter(true)]
		public bool HisseSenediMI;

		// Kripto için geçerli
		public decimal MinSize;

		// Tutar
		public decimal Tutar;

		// Al sat adedi
		[Output]
		public decimal Adet;

		// Bakiye kontrolü-sil
		public bool BakiyeKontrolu = true;

		// #Gerekli bitti

		/// <summary>
		/// Strateji ilk çalıştırıldığında bu fonksiyon tetiklenir. Tüm sembole kayit işlemleri,
		/// indikator ekleme, haberlere kayıt olma işlemleri burada yapılır. 
		/// </summary>
		public override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod);

			most = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period, Percentage, MovMethod.Exponential);


			// Algoritmanın kalıcı veya geçici sinyal ile çalışıp çalışmayacağını belirleyen fonksiyondur.
			// true geçerseniz algoritma sadece yeni bar açılışlarında çalışır, bu fonksiyonu çağırmazsanız veya false geçerseniz her işlem olduğunda algoritma tetiklenir.
			WorkWithPermanentSignal(true);

			//Eger backtestte emri bir al bir sat seklinde gonderilmesi isteniyor bu true set edilir. 
			//Alttaki satırı silerek veya false geçerek emirlerin sirayla gönderilmesini engelleyebilirsiniz. 
			SendOrderSequential(true, Side.All);

		}


		/// <summary>
		/// Eklenen sembollerin bardata'ları ve indikatorler güncellendikçe bu fonksiyon tetiklenir. 
		/// </summary>
		/// <param name="barData">Bardata ve hesaplanan gerçekleşen işleme ait detaylar</param>
		public override void OnDataUpdate(BarDataEventArgs barData)
		{
			if (CrossAbove(most, most, 1, 0))
			{
				FX_Alis();
			}

			if (CrossBelow(most, most, 1, 0))
			{
				FX_Satis();
			}
		}

		// Gerekli başla
		public override void OnInitComplated()
		{
			var SymbolDetail = GetSymbolDetail(Symbol);
			MinSize = 1 / (decimal) Math.Pow(10, SymbolDetail.TradeFraction);
		}

		// Sonfiyat çekilir.
		public decimal FX_Sonfiyat()
		{
			var barDataModel = GetBarData();
			decimal _close = Ref(barDataModel, OHLCType.Close, 0);
			return _close;
		}

		// hisse 
		public bool FX_BalanceKontrolu()
		{
			if (HisseSenediMI)
			{
				return (Math.Floor(Bakiye / FX_Sonfiyat()) >0) ? true: false;
			}else
			{
				return true;
			}
		}

		// kriptolar için minimum değişim miktarı               
		public decimal FX_MinSize(decimal quantity)
		{
			return Math.Truncate((quantity - (quantity % MinSize)) / MinSize) * MinSize;
		}

		bool ? AlisMI = null;

		public void FX_Alis()
		{
			decimal _close = FX_Sonfiyat();

			if (FX_BalanceKontrolu() && AlisMI != true)
			{
				// Alabileceği adet
				if (HisseSenediMI)
				{
					Adet = Math.Floor(Bakiye / _close);
				}else
				{
					Adet = FX_MinSize(Bakiye / _close);
				}

				SendMarketOrder(Symbol, Adet, (OrderSide.Buy));
				Debug("Alış sinyali oluştu. Sinyal fiyatı: " + _close + " - Adet: " + Adet);
			}else
			{
				Debug("Alış sinyali oluştu. Bakiyeniz yetersiz. Bakiye: " + Bakiye);
			}
		}

		public void FX_Satis()
		{
			if (((Adet != 0 || BaslangıctakiEnstrumanAdedi != 0)) && AlisMI != false)
			{
				Adet += BaslangıctakiEnstrumanAdedi;

				SendMarketOrder(Symbol, Adet, (OrderSide.Sell));
				Debug("Satış sinyali oluştu. Sinyal fiyatı: " + FX_Sonfiyat() + " - Adet: " + Adet);
			}else
			{
				Debug("Satış sinyali oluştu. Satılacak enstrüman yok. Bakiye: " + Bakiye);
			}

		}

		decimal _fiyat;
		/// <summary>
		/// Gönderilen emirlerin son durumu değiştikçe bu fonksiyon tetiklenir.
		/// </summary>
		/// <param name="barData">Emrin son durumu</param>
		public override void OnOrderUpdate(IOrder order)
		{
			_fiyat = order.Price;

			if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Buy)
			{
				// Tutar
				Tutar = Adet * _fiyat; ;

				// Güncel Bakiye
				Bakiye -= Tutar;

				Adet += BaslangıctakiEnstrumanAdedi;
				BaslangıctakiEnstrumanAdedi = 0;
				Debug("Alış gerçekleşti. Gerçekleşen fiyat: " + _fiyat + " - Adet: " + Adet + "- Tutar: " + Tutar + " - Bakiye: " + Bakiye);

				if (KomisyonuDahilEt)
				{
					if (HisseSenediMI)
					{
						Bakiye -= (Bakiye * Komisyon);
					}else
					{
						Adet = FX_MinSize(Adet - Adet * Komisyon);
					}
				}

				AlisMI = true;
			}

			if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Sell)
			{
				// Tutar
				Tutar = Adet * _fiyat;

				// Güncel Bakiye
				Bakiye += Tutar;

				Debug("Satış gerçekleşti. Gerçekleşen fiyat: " + _fiyat + " - Adet: " + Adet + " - Tutar: " + Tutar + " - Kalan bakiye: " + Bakiye);
				Adet = 0;
				BaslangıctakiEnstrumanAdedi = 0;
				if (KomisyonuDahilEt)
				{
					Bakiye -= (Bakiye * Komisyon);
				}

				AlisMI = false;
			}
		}

		// # Gerekli bitti
	}
}

(11,059 puan) tarafından
tarafından seçilmiş
Doğru sonuçlar için
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,786 kullanıcı