0 beğenilme 0 beğenilmeme
545 kez görüntülendi
Matriks IQ ile vadeli işlemlerde örneğin XU030D1! vadeli endekste çift yönlü otomatik bir alım satım yapmak istediğimizde bunu kontrat sayılarıyla yapmamız mümkün. Ancak benim öğrenmek istediğim aynı şeyi konrat sayılarıyla değilde önceden belirlenmiş sabit (örneğin 50.000 , 100000 vb.) gibi bir para miktarı koşulluyla yapabilirmiyiz. Yani koşul olarak kontrat sayısı girdiğimizde sistem her seferinde belirtilen kadar konratı alıp satabilir..Ancak ben sistemin her seferinde koşul olarak belirtilecek sabit bir para miktarı kadar  kontratı otomatik olarak ayarlayarak alıp satabilip bilemeyeceğini öğrenmek istiyorum.

Öğrenmek istediğim şeye bir örnek vermem gerekirse;

Diyelimki sistemin her defasında 100000 lıralık konrrat alıp satmasını istiyorum.Ancak XU030D1! vadeli endeks ve kontrat fiyatı sürekli değişeceği için bu mümkün olmayacaktır.Zaten her seferinde 100000 liralık alıp satamaz ancak 100000 liraya yaklaşık en fazla sayıda kontratı alıp satabilir.

Diyelimki; sistemin her seferinde 100000 liralık XU030D1! vadeli endeks  kontratı alıp satmasını istedim bu benim ön koşulum. XU030D1! vadeli endeks ve kontrat fiyatı 1518.50  bu durumda 91 110.00 maliyetli   6 konrat alabilir yada satabilir. Ancak XU030D1! vadeli endeks ve kontrat fiyatı değiştiğinde  örneğin 1700.80 olduğunda alıp satabileceği kontrat sayısı değişecektir.Bu defa 1700.80 e  85 040.00 maliyetli 5 kontrat alıp satabilir. Çünkü 5 konratın üstünde alıp satmak istediğinde maliyeti 100000 liranın üstüne çıkacak.

Yani matriks ıq vadeli işlemlerde ön koşul olarak belirlenmiş bir para miktarına göre her seferinde değişen fiyata göre kontrat miktarlarını otomatik olarak belirleyip alıp satabilmektemidir. Böyle bir şeyi yapabilmek mümkünmüdür.

Teşekkür ederimmm.......
Algoritmik Trading kategorisinde (44 puan) tarafından | 545 kez görüntülendi

1 cevap

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

Merhaba, istediğiniz stratejiyi aşağıda paylaştığım linkten indirip çift tıklayarak MatriksIQ'ya alabilirsiniz.

*Strateji alış koşulu gerçekleştiğinde(belirtmediğiniz için most kullandım) parametre olarak belirttiğiniz bakiye ve o andaki son fiyat ile alış adedini hesaplayıp emir gönderir. Satış koşulu gerçekleştiğinde de alış adediyle emir gönderilir. 

Stratejinizi gerçek hesapta kullanmadan önce test hesabında doğru çalıştığından emin olana kadar test ediniz.

https://destek.matriksdata.com/?qa=blob&qa_blobid=15401409114700118914

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;
using Matriks.AI;
using Matriks.AI.AiParameters;
using Matriks.AI.Data;
using Matriks.Trader.Core.TraderModels;

namespace Matriks.Lean.Algotrader
{
	public class ViopAlSat : 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("X30YVADE")]
			public string Symbol1;

		[Parameter(SymbolPeriod.Min15)]
			public SymbolPeriod SymbolPeriod1;

		[Parameter(100000)]
			public decimal Bakiye;

		[Parameter(3)]
			public int MostPeriod1;

		[Parameter(2)]
			public decimal MostPercentage1;

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

		[Parameter(true)]
			public bool KalıcıSinyal;

		MOST most;

		public override void OnInit()
		{
			most = MOSTIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, MostPeriod1, MostPercentage1, MostMethod1);

			SendOrderSequential(true, Side.Buy);
			
			WorkWithPermanentSignal(KalıcıSinyal);
		}

		int Pozisyon = 2;
		decimal IslemAdedi = 0;
		/// <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(BarDataCurrentValues barDataCurrentValues)
		{
			var close = barDataCurrentValues.LastUpdate.Close;

			if (CrossAbove(most, most, 0, 1) && Pozisyon == 2)
			{
				IslemAdedi = Math.Floor(Bakiye / (close * 10));
				if (IslemAdedi > 0)
				{
					SendMarketOrder(Symbol1, IslemAdedi, OrderSide.Buy);
					Debug("Alış Emri Verildi.");
					Pozisyon = 1;
				}else
					Debug("Bakiyeniz yetersiz.");
			}
			if (CrossBelow(most, most, 0, 1) && Pozisyon == 1 && IslemAdedi > 0)
			{

				SendMarketOrder(Symbol1, IslemAdedi, OrderSide.Sell);
				Debug("Satış Emri Verildi.");
				IslemAdedi = 0;
				Pozisyon = 2;
			}
		}

		/// <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)
		{
		}

	}
}

 

(4,555 puan) tarafından
tarafından seçilmiş
MATRİKS IQ ALGORİTMA SİHİRBAZI
7,516 soru
7,519 cevap
4,406 yorum
8,759 kullanıcı