0 beğenilme 0 beğenilmeme
585 kez görüntülendi
merhabalar gün içinde takip ettiğim hisselerde kademelerden alık emir silinmesi veya toplu emir girilmesi hakkında bildirim veya uyarı gelmesini istiyorum. Örnek veriyorum a hissesi 3.22 den işlem görüyor ama 3.16 kademesinden toplu emir siliniyor veya tam tersi 3.16 kademesine toplu emir giriliyor böyle bir durum da bana uyarı verilmesini istiyorum bunu alarm ile veya kod ile yapma şansımız var mı? varsa nasıl yapabiliriz?

cevap için şimdiden teşekkür ederim.
Algoritmik Trading kategorisinde (150 puan) tarafından | 585 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhaba, evet bunu Matriks IQ ile yapabilirsiniz. 10 kademe asagi + 10 kademe yukari algo icerisinden bakmaniz mumkundur.

Kademedeki emirlere asagidaki sekilde erisebilirsiniz:

AddSymbolMarketDepth(Symbol); //public override void OnInit() icerisinde
//public override void OnTimer() ya da OnDataUpdate fonksiyonu icerisinde
float BO_size = (float) depths.AskRows[0].Size;
float BO1_size = (float) depths.AskRows[1].Size;
float BB_size = (float) depths.BidRows[0].Size;
float BB1_size = (float) depths.BidRows[1].Size;

0,1... sekilinde derinlik sayisini iki yonde de 9'a kadar arttirabilirsiniz.

Yuklu emir girisi ya da silinmesi yapildigini tespit etmek sizin tercihinize kalmis, belli bir yuzde miktarin uzerinde artis oldugunda, ya da belli bir rakamin uzerinde artis oldugunda uyar sekilde bir if dongusu olusturabilirsiniz.

Algoda derinlik verisi kullanim ornegi icin Derinlik3 ve Derinlik3Timer hazir stratejilerine bakiniz.

(8,035 puan) tarafından
0 0
cevap için teşekkür ederim lakin programa ve yazılım dili hakkında çok bilgim yok yeni yeni öğrenmeye başlıyorum. Nasıl yapabileceğimi görsellerle gösterme şansınız var mı rica etsem?
0 0
yardımcı olan biri olursa çok makbule geçer :)
1 0
Merhaba, gorsel ile degil de direkt kodunu yazabilirim vakit musade ettiginde. Gelistirebileceginiz bir ornek hazirlamayi dusunuyorum.
0 0
hocam merhaba kodu yazabildiniz mi
2 0

Iyi gunler ornek kod asagidadir.

Istediginiz strateji/alarm icin aciklanmasi gereken bir cok alan var. Orn. Kademe degistiginde ne yapilacak? Stratejiyi zaman araligi (OnTimer) ile calistirdigimizda kademeye yuklu emir girildigini bulabilmek icin eski kademe degeri ne kadar sure takip edilecek?

Aslinda butun bu problemlerden dolayi, toplu kademe takibi daha mantikli gozukuyor. Bu teker teker kademe takibi kadar detayli olmaz tabi ama daha saglikli sonuc alinabilir.

Gonderdigim stratejide kademeyi OnTimer (zamanla calisan fonksiyon) icerisinde nasil takip edebileceginiz ve nasil alarm verdirebileceginize dair basit bir ornek var. Yukaridaki bahsettigim sorunlar onem teskil etmiyorsa bu ornegi cogaltarak/diger kademelere uygularayak devam edebilirsiniz.

Bu stratejiden devam etmek isterseniz, kademedeki fiyatin degismesinden dolayi olusan farktan dolayi gelen alarmi basit bir sekilde engelleyebiliriz. (eger kademedeki fiyat degistiyse alarm vermesi basit bir sekilde saglanabilir)

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;

namespace Matriks.Lean.Algotrader
{
	public class DerinlikAlarm : 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(1)]
		public int saniye;
		[Parameter(10)]
		public float yuzde;

		//Stratejinin calisacagi saatler
		[Parameter("09:45:00")]
		public string BaslangicZaman;
		[Parameter("18:00:00")]
		public string BitisZaman;

		public float Bo3_temp = 999999999;
		//List<SessionTimeInfo> sessiontime;

		public override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod.Min);
			AddSymbolMarketDepth(Symbol);

			//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(false);

			//Alttaki fonksiyon açıldıktan sonra parametre olarak verilen saniyede bir OnTimer fonksiyonu tetiklenir.
			SetTimerInterval(saniye);
		}

		public override void OnTimer()
		{
			TimeSpan starttime = TimeSpan.Parse(BaslangicZaman);
			TimeSpan endtime = TimeSpan.Parse(BitisZaman);
			TimeSpan now = DateTime.Now.TimeOfDay;
			
			var barDataModel = GetBarData();
			var depths = GetMarketDepth(Symbol);

			var asktime = depths.AskRows[1].DateTime;
			var bardatatime = barDataModel.Time;

			float BO_size = (float) depths.AskRows[0].Size;
			float BO1_size = (float) depths.AskRows[1].Size;
			float BO2_size = (float) depths.AskRows[2].Size;
			float BO3_size = (float) depths.AskRows[3].Size;
			float BO4_size = (float) depths.AskRows[4].Size;
			
			float BB_size = (float) depths.BidRows[0].Size;
			float BB1_size = (float) depths.BidRows[1].Size;
			float BB2_size = (float) depths.BidRows[2].Size;
			float BB3_size = (float) depths.BidRows[3].Size;
			float BB4_size = (float) depths.BidRows[4].Size;
			
			float BO = (float) depths.AskRows[0].Price;
			float BO1 = (float) depths.AskRows[1].Price;
			float BB = (float) depths.BidRows[0].Price;
			float BB1 = (float) depths.BidRows[1].Price;

			//Debug("best offer " + BO + " size = " + BO_size + ", " + BO1_size);
			//Debug("best bid " + BB + " size = " + BB_size + ", " + BB1_size);
			Debug("4. kademe = " + BO3_size + ". Onceki 4. kademe = " +  Bo3_temp + " Fiyat = " + depths.AskRows[3].Price);

			if ((now > starttime) && (now < endtime))
			{
				if(Bo3_temp == 999999999) {}
				else if(BO3_size > Bo3_temp * (1+yuzde*0.01)) //YENI 4. KADEME ESKI KADEME DEGERINDEN BELIRTILEN YUZDE MIKTARDA ARTIS GOSTERDIYSE
				{
					Alert($"4. kademe %{yuzde} artis gosterdi.");
					Debug($"4. kademe %{yuzde} artis gosterdi. Kademe fiyati = {depths.AskRows[3].Price}");
				}
				else if(BO3_size < Bo3_temp * (1-yuzde*0.01)) //YENI 4. KADEME ESKI KADEME DEGERINDEN BELIRTILEN YUZDE MIKTARDA DUSUS GOSTERDIYSE
				{
					Alert($"4. kademe %{yuzde} dusus gosterdi.");
					Debug($"4. kademe %{yuzde} dusus gosterdi. Kademe fiyati = {depths.AskRows[3].Price}");
				}
				Bo3_temp = BO3_size;
			}
			else
			{
				Debug("Belirtilen zaman diliminin disinda cikilmistir. Strateji/Alarm durduruldu.");
			}
		}


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

		}
	}
}

 

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,518 soru
7,521 cevap
4,406 yorum
8,766 kullanıcı