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

IqAlgodan oluşturduğum stratijerlimde hisse alım satımı yaparken önceden fiyat ve adet belirleyip stratejiyi çalıştırabiliyoruz

ama konu kripto paralar olunca fiyatı konusuyla pekte öyle olmuyor fiyatlar hızlı bir şekilde sürekli değişkenlik gösteriyor

ve yüksek fiyatlı kriptolarda adet hesaplamak sorun olabiliyor stratejiyi kapayıp adet değiştirip tekrar açmak zorunda kalıyoruz

bu sorunu halletmek için şu anda da kripto piyasasında aracı kurumlarının  kullandığı  hesapdaki bakiyenin yüzdesel üzerinden alım yapabilmeyi stratejilerime nasıl ekleyebilirim ?

ÖRNEK

 

Binance bakiye  : 100.000

alım için kullanılacak yüzdesel değer  : %50(...) =         50.000

alım gerçekleşmesi sonrası alınan ürünün satılacak yüzdesel değeri :  alınan adetin %100(...) 'ü    =         50.000

 

bu konuda tavsiyelerinizi  takip ediyor olacağım, çalışmalarınız  için teşekkürler :)
Algoritmik Trading kategorisinde (71 puan) tarafından | 893 kez görüntülendi

1 cevap

1 beğenilme 0 beğenilmeme

Merhaba,

Aşağıdaki strateji emir gönderim adetlerini parametre olarak verilen bakiye değerine göre hesaplamaktadır. Stratejiyi çalıştırırken girdiğiniz bakiye değerinde artma ya da azalma olmayacaktır. Sanırım istediğiniz durumu karşılar.

Stratejinin sonuçlarından emin olmadan gerçek hesap ile kullanmayanız.

İyi çalışmalar

using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using System.Windows.Media;
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;

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

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

		[Parameter(100)]
		public decimal Bakiye;

		[Parameter(20)]
		public int BolPeriod;
		[Parameter(2)]
		public decimal StandartDeviation;

		BOLLINGER bollinger;

		[Output]
		public decimal SonBakiye;

		/// <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()
		{
			bollinger = BollingerIndicator(Symbol, SymbolPeriod, OHLCType.Close, BolPeriod, StandartDeviation, MovMethod.Simple);
			//	stochasticRSI = StochasticRSIIndicator(Symbol, SymbolPeriod, OHLCType.Close, RsiPeriod, StocPeriod, DPeriod, KPeriod, MovMethod.E);

			AddSymbol(Symbol, SymbolPeriod);

			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);
		}

		int pozisyon = 0;
		bool firstrun = true;
		decimal Adet = 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 bardata = GetBarData();
			var SonFiyat = barDataCurrentValues.LastUpdate.Close;

			if (firstrun) SonBakiye = Bakiye;
			var IslemAdedi = SonBakiye / SonFiyat;
			IslemAdedi = Math.Truncate(IslemAdedi * 10000) / 10000;

			if (CrossAbove(bardata, bollinger.BollingerDown, OHLCType.Close))
			{
				Debug("Alış emri verildi.");
				if (pozisyon == 0 && IslemAdedi >=0.0001m)
				{
					pozisyon = 1;
					SonBakiye = 0;
					Adet = IslemAdedi;
					SendMarketOrder(Symbol, IslemAdedi, OrderSide.Buy);
				}else if (pozisyon == -1)
				{
					pozisyon = 0;
					SonBakiye = Bakiye;
					SendMarketOrder(Symbol, Adet, OrderSide.Buy);
					Adet = 0;
				}
			}
			if (CrossBelow(bardata, bollinger.BollingerDown, OHLCType.Close))
			{
				Debug("Satış emri verildi.");
				if (pozisyon == 0 && IslemAdedi >=0.0001m)
				{
					pozisyon = -1;
					SonBakiye = 0;
					Adet = IslemAdedi;
					SendMarketOrder(Symbol, IslemAdedi, OrderSide.Sell);
				}else if (pozisyon == 1)
				{
					pozisyon = 0;
					SonBakiye = Bakiye;
					SendMarketOrder(Symbol, Adet, OrderSide.Sell);
					Adet = 0;
				}
			}
			firstrun = false;
		}

		/// <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
Bu stratejiye stoploss ve kar al eklenebilir mi?
0 0
Peki biraz daha ileri gidip zorlayabiliyor muyuz üstadım :)

Diyelim ki Binance Kasa: 100 Lira ve 10 adet AltCoin ile trade etmek istiyorum. Birinin al sinyali geldi; 100/10=10 liradan o işleme girdi. Sonra ikinci coin için al sinyali geldi; bu durumda 90/10= 9 değil de; geride 9 Altcoin kaldığı için 90/9=10 liralık işlem açabiliyor muyuz? Yani al sinyali geldiğinde, kasadaki parayı işlemde olmayan Altcoin sayısına bölüp işleme alsın istesek; abartmış olur muyuz?
0 0
Merhaba,

Esasen, gerekli kodu yazabilen birisi için, hepsi mümkündür.

Ama, bence, gereksiz bir zorlama olur. Sağlıklı da olmaz.

Portföyünüzü 10 a bölün ve her coin için ayrı ayrı bakiyenin tümünü kullan ile çalıştırın. Böylece hangisinde daha iyi durumda olduğunuzu da izlemiş olursunuz. Belki de, buna göre bazılarından vaz geçersiniz vs.

Tabii ki son karar sizindir.

Kolay gelsin.
1 0
Teşekkür ederiz efendim; fazlasıyla korele çalışan enstrümanları tek bir strateji altında toplayıp backtestini yapmayı düşünmüştüm ancak haklısınız; ayrı çalıştırmak daha raporlanabilir bir içerik sunacaktır. Teşekkür ederim tekrardan.
0 0
Benden de teşekkürler.

Sağlıcakla.
0 0
Bu stratejiyi uygularken portföyünüzü nasıl 10 a bölüp hepsi için ayrı ayrı al koşulu yapacağız anlamadım ben usta. Bu sorun üzerine ben de düşüyorum bir kaç gündür çözemedim yüzdeye göre alım nasıl yapacağım.
0 0
Portföyü 10'a manuel olarak bölüp buradaki bakiye kısmına 1/10 'u yazarak çözülüyor. Yani 10K var ise 1K lık 10 ayrı robot çalıştırabilirsin. Her biri kendi 1K'sı ile alıp satıyor. Takibi de kolay.
8,639 soru
8,593 cevap
4,826 yorum
19,848 kullanıcı