0 beğenilme 0 beğenilmeme
316 kez görüntülendi
Merhabalar,

Ben kendi belirlediğim RSI ve boll band koşulları ile alım yapılmasını istiyorum. Alış konusunda sorun yok ancak satış konusunda kar al yapmak istiyorum. Bunun şu şekilde olmasını istiyorum; Alış yaparken sıralı emir göndermiyorum. İndikatör her alış emri gönderdiğinde almasını istiyorum. Yüzde 1 olduğunda da satmasını istiyorum ancak her alış sonucunda toplam maliyetin yuzde 1 kara geldiğinde satışını yapıyor. Ben ortalama degi de her alışın ayrı ayrı degerlendirip yuzde 1 karda satmasını istiyorum. Bu mumkun mudur?

İkinci Sorum da alış emirleri arasına süre koyabilir miyiz. Yani her alım sonrası şu kadar süre gectiğinde tekrar indikatör al verdiğinde al aradaki sürede alma koşulu ekleyebilir miyiz?

Son sorum da su, en fazla şu kadar kez alım yap diyebilir miyiz? Örnek verşyorum en fazla 5 kez alım yap, bu lotlardan birisi yukarıda yazdığım gibi kara ulaşır ise satış yap. Bu satış olana kadar da alış emirlerini yerine getirme?

 

Yardımcı olursanız çok mutlu olurum

 

Teşekkürler, iyi çalışmalar.
Algoritmik Trading kategorisinde (16 puan) tarafından | 316 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhaba,

Sentetik emirler tanımlandığı andaki fiyatı baz almaktadır. ( ortalama maliyeti baz almaz öyle denk gelmiş olabilir)

Şöyle birşey yapılabilir alış emriniz gerçekleştikten sonra %1 yukarısına satış limit emri gönderilebilir.

tüm sorularınız için aşağıdaki stratejiyi 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.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;
using System.IO;
using System.Text;
using System.Text.RegularExpressions;

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

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

		[Parameter(1)]
		public decimal OrderQuantity;

		[Parameter(3)]
		public int Period;

		[Parameter(2)]
		public decimal Percentage;

		MOST most;

		bool StratejiAktifMI = true;

		public override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod);
			WorkWithPermanentSignal(true);
			SendOrderSequential(true, Side.All);
			sinir = UstUsteEmirSiniri;
		}
		
		decimal priceStep, quantityStep = 1;
		int exchangeID;

		public override void OnInitComplated()
		{
			var symbolDetail = GetSymbolDetail(Symbol);

			if (symbolDetail != null)
			{
				exchangeID = symbolDetail.ExchangeDetail.ExchangeID;
				var close = FX_Sonfiyat(Symbol); ;

				if (exchangeID != (int) ExchangeType.Ise && exchangeID != (int) ExchangeType.Viop)
				{
					priceStep = 1 / (decimal) Math.Pow(10, symbolDetail.DecimalCount);
					quantityStep = 1 / (decimal) Math.Pow(10, symbolDetail.TradeFraction);
				}else
				{
					priceStep = GetPriceStepForBistViop(Symbol, close);
				}
			}
		}

		public override void OnDataUpdate(BarDataCurrentValues bd)
		{

			if (alisKosulu && DateTime.Now>zaman && sinir>0)
			{
				// alış emri 
				sinir--;
				zaman = DateTime.Now.AddMinutes(5);
				Debug("Alış emri gönderildi alış sinyali 5DK kilitlendi");
			}

			if (satisKosulu){
				// satış emri
				zaman = DateTime.Now;
				sinir++;
			}
		}

		DateTime zaman = DateTime.Now.AddDays(5600);
		int UstUsteEmirSiniri = 5;
		int sinir;

		public override void OnOrderUpdate(IOrder order)
		{			
			if (order.OrdStatus.Obj == OrdStatus.Filled)
			{
				if (order.Side.Obj == Side.Buy)
				{
					var gerçekleşenFiyat=order.Price;
					var yuzde1fazlasi=FX_FiyatAyarla(gerçekleşenFiyat*0.01m);
					SendLimitOrder(Symbol,order.LastPx,OrderSide.Sell,yuzde1fazlasi);
					Debug("Alış emri gerçekleşti yüzde bir yykarısına satış emri gönderildi.");					
				}
			}
			
			if (order.OrdStatus.Obj == OrdStatus.Rejected)
			{
				if (order.Side.Obj == Side.Buy)
				{
					zaman = DateTime.Now;
					sinir++;
				}
			}
		}
		
		public decimal FX_LotAyarla(decimal quantity)
		{
			return Math.Floor(quantity / quantityStep) * quantityStep;
		}

		public decimal FX_FiyatAyarla(decimal price)
		{
			return Math.Floor(price / priceStep) * priceStep;
		}

		public decimal FX_Sonfiyat(string sembol)
		{
			return GetSelectedValueFromBarData(GetBarData(sembol, SymbolPeriod), OHLCType.Close);
		}

	}
}

 

(15,682 puan) tarafından
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.



7,634 soru
7,640 cevap
4,448 yorum
10,858 kullanıcı