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

Programın anlık olarak kapanmasına ilişkin arka tarafa bir batch yazmak istiyorum . program kapalı ise tekrar açık konuma getirsin diye.

yalnız aşağıdakileri nasıl halledebilirim, programı başlattıktan sonra consoledan yapabilir miyim?

1-oluşturmuş olduğum  portföye giriş sağlatmak. anladığım kadarıyla portföye giriş yapınca otomatik olarak portföy firmasına da giriş yapıyor.

2- kapanmış olan robotları tekrar aktif hale getirmek.
Genel Kullanım kategorisinde (117 puan) tarafından | 1,521 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme
Merhaba, oncelikle programin anlik olarak kapanmasi problem. Bu sorun hangi senaryolarda gerceklesiyor yazabilirseniz, duzeltmeye calisiriz.

Cozumu disaridan yapmaniz guc olabilir. Iceriden bu tip bir ozellik eklemek icin ek bir ozellik uzerinde konusacagiz. Uygun gorulurse, onumuzdeki versiyondan bir sonraki versiyon icin bir calisma yapmis oluruz.
(8,035 puan) tarafından
1 0
Merhaba,

Geçen gün backtest yaparken ioalgo ayarlarına girdim. o sırada hatada vermedi , sadece kapandı birden .

belki bu çok extreme bir durumdur .  Şahsi bilgisyarımda şu anda kadar öle birşey olmamaıştı.

VPS alıp Xeon işlemcidenmi kaynalıdır diye düşünüyorum. ama kaynak tüketimi ile ilgili değil.
0 0
Tabi, bu durumlarin olusmamasi icin surekli testler yapiyoruz ve kullanicilarimizin bildirimlerini her kanaldan takip edip dikkatle degerlendirmeye calisiyoruz, bu bakimdan ekstrem bi durum.

Kapanma durumunu bir daha yasarsaniz MatriksIQ\Logs\System\ klasoru altindaki logunuzu iqdestek@matriksdata.com adresine atiniz, inceleyelim. Dediginiz gibi Xeon islemci kaynakli olma ihtimali de var. Problem devam ederse baska bir VPS servisi ile deneyebilir misiniz?
0 0
Merhaba, IQ'nun herhangi bir nedenle kapanmasi durumunda otomatik baslatilip eski durumunda calistirilmasi ile ilgili konustuk, burada portfolio login'i otomatik olarak guvenlik ve teknik nedenlerden dolayi (sms onayi, portfolio login'in kullanici tarafindan onaylanmasi geregi vs.) yapamayacagimiz icin bu ise baslayamiyoruz.

Isterseniz bu durumla ilgili forum basligini konu olarak yazarak bize iqdestek@matriksdata.com adresine mail atabilirsiniz, kapandiginda tekrar acilacak bir modifikasyon size gonderebiliriz, ama dedigim gibi sizin isinize cok yaramayacaktir cunku otomatik portfolio login yapabilmemiz mumkun degil. Daha cok neden kapaniyor uzerinde calisirsak daha faydali olabilir.

Iyi calismalar dileriz
1 0
tabi sizde haklısınız. daha geniş kapsamlı düşünmek gerekli.
0 0
Tesekkurler, konustugumuz gibi problemi tekrar yasarsaniz sistem logu ile birlikte sorunun nasil bir durumda olustugunu yazarak iqdestek@matriksdata.com adresine yazabilirseniz, kaynagindan duzeltmege calisacagiz.
0 0
Bugun gene matriksiq donup loglarıda mail ile attıktan sonra  destekki bir arkadaş bağlanmak istedi.

team ile bağlandıktan sonra bana sormadan direk kullanıcı hesap erişim ayarlarını değiştirdi. sonra uyarınca geri aldı o zaman yapabileceğim birşey bulunmamaktadır dedi. birde güvenlik duvarını kapatacakmış.

Sayın Arkadaşlar,

yukarıda güvenlikten dolayı otoamtik logini uygun görmüyorsunuz ama bilgisayarı komple güvensiz bir şekilde bırakıyorsunuz. Birde antivürus programı kullansam onda kapatırdınız herhalde.
Bilgisayardan anlamayan birisi olsak hop tüm herşeyi açacaktınız.
Kim bilir bu tarz problemler yaşanların kaç tanesine bu şekilde müdahale ettiniz.

Bir diğer konuda sunucuları önermiyormuşsunuz telefondaki arkadaş bu şekilde bir bilgi verdi.
Soruyorum sizlere,
Ben 24 saat robot çalıştıracağım zaman şahsi bilgisayarımı evde açıkmı bırakacağım.Tabiki bir sunucu alıp orada işlem yaptıracğaım.
Bence öncelik vermeniz gereken konular gerçekten bunlar.
0 0
Hakan Bey Merhaba,
Loglarınız tarafımıza ulaştı ve inceliyoruz. Çalışan stratejilerde oluşan sorunlarla ilgili ve performansla ilgili ciddi geliştirmeler yaptık. Önümüzdeki hafta versiyon çıkmayı planlıyoruz.

Bildiğiniz üzere bu tarz uygulamalar cok yoğun şekilde data almaktadır ve yoğun şekilde memory işlemleri yapmaktadır. Performans sorunu yaşayan kullanıcılarda bazı düzenlemeler yapmak gerekebiliyor. Sistemi en cok yoran unsurlardan bir tanesi de virüs programlarıdır. Bu programlar yoğun şekilde diski ve memory'i taradığı için bu tarz uygulamaların performansını ciddi ölçüde etkilemektedir. Tamamen kapatmaktan ziyade kullanılan virüs programında uygulamalarımızı aktif tarama listesinden çıkarmak önemli derecede uygulamalara performans kazandırmaktadır. Ayrıca ağ bağdaştırıcısının güç ayarları, sistemi ve memory'i yoran uygulamalar, vb özellikle algoların sağlıklı çalışması için dikkat edilmesi gereken unsurlardandır.
Bunun dışında uygulamaları sunucuda; sistem özellikleri yeterli olduğu sürece kullanmanızda bir mahsur yoktur.
Uygulamada performans sorunları, alınan hatalar ya da bağlantının kesilmesi gibi konularda geri dönüşlere göre sürekli iyileştirme ve geliştirme yapmaktayız. Yeni çıkacağımız versiyonda farkı gözlemleyebileceksiniz. Yaşadığınız her sorunda veya desteğe ihtiyacınız olduğunda elimizden geldiğince yardımcı olmaya calisiyoruz.

İlginiz ve anlayışınız için teşekkürler
1 0
Yazdığınız programa gerçekten bir programcı olarak saygım var ki matriks firması olarak siz çalışanlardan da %100 memnuniyetim mevcut.Sürekli biriniz destek veremiyorsa diğeri ilgilieniyor, hafta içi sonu geç saatlere kadar telefon üzerinden bile destek veriyorsunuz.  Burada eleştirdiğim kısım benim programın kapanması , neden kapandığı noktaları değil. Bunlar bir şekilde düzeltilir , halledilir. belki dikkat etmişsinizdir arkaya batch filan yazıp bir şekilde yeniden başladığında kendime mail veya telegram üzerinden bilgi verdirip anın bağlanıp ayarları yapmayı planlıyorum.

Kendi çalıştığım firmada şu anda tüm Türkiye'nin sürekli karşılaştığı firmalara yazılım desteği vermektedir ama onların onayı olmadan bir çivi çakamayız.  Daha önce bir arkadaşınız bağlanıp tarihsel bazı ayarlamalar yapmıştı. Bu makul bir ayarlamalar ama benim bilgisayarımdaki güvenlikle alakalı ayarlamalar vb işlemler yapıldığında onayımın alınması lazım. Matriks tarafında istediğiniz işlemleri yapabilirsiniz. Logları alabilirsiniz ki bunuda benim iznim alarak almanız gereklidir vb işlemler.

Bu konuyu bence çok uzatmaya gerek yok . Genel olarak sizlerden ve desteğinizden memnunum :)

Bu arada kullandığım sunucu 6 çekirdekli Xeon , 16Gb ram , SSD ve 1Gbps hat var.
Şunu söyleyebilirim donduğu sırada ne grafik,bot vb hiç birşey programda açık değildi.

şu ana kadar anca %85 işlemci ve 4-5GB ram anlık olarak anca tüketmişliğim var.aynı anda 2 tane backtest çalıştırmıştım.  Bunlarla alakalı olduğunu düşünmüyorum.

İstediğinizde bilgisayara bağlanıp sizde inceleyebilirsiniz
0 0
Hakan Bey Selam,
Anlayışınız ve övgüleriniz için teşekkür ederiz. Geri bildiriminizi ilgili ekibin yöneticilerine ileteceğim.
Yeni versiyon ile birlikte bir çok sıkıntının giderileceğini düşünüyorum. Eğer hala devam eden sorunlar olursa beraber incelemek ve çözmek isterim.

Sağlıcakla kalın,
1 0

Konu programın kapanması sonucu nasıl bir işlem yapabilirim? ile başlayıp IQ sorununa dönmüş. İki konu hakkında da yazacaklarım olacak

 

Bu sorun için iki çözüm var.

Biri bir txt dosyasına değerleri tutmak ve sonra program çalıştığında okutmak.

Diğeri verileri db'de tutmak.

Ben ilk olarak txt'de tuttum ve şu an SQL Server'de tutuyorum. IQ güzel bir program fakat donma veya kullanılan symbol'de data keslimesi sorunu sık görüyorum. Bu soruna karşı bu çözümleri buldum. 4-5 farklı pc de sistem çalıştırıyorum. Ryzen, i5, i7 işlemci farketmeksizin bu sorunlarla karşılaşıyorum. Özellikle 1 gün sonra sistem inanılmaz şişiyor. Yani hiç donmasa bile 1-2 gün çalıştıktan sonra ister istemez IQ kapatılıp tekrar çalıştırılması gerekiyor.

Size txt ile çalışan bir yapı paylaşıyorum. Bu robot ilk çalıştığında var olan tüm parametreleri ve değişkenleri kaydedilen dosyadan okur. Dosya çalışan sybol ismi olarak masaüstüne kaydedilir. Yaptığım stratejide pozisyon takibini kendim yaptığımdan o bilgileri de kaydediyorum. Herhangi bir problem kaldığı yerden devam etmesini sağlıyorum.

Yapı olarak hantal fakat iş görür. Kodu kendinize göre uyarlamanız gerekir.

 

public class IzSuren_Close : 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("XBT_USD_BMEX")]
		public string Symbol;

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

		[Parameter(50)]
		public decimal BuySellQuantity;

		[Parameter(10)]
		public int MovPeriod;

		[Parameter(19)]
		public int DmiPeriod;
		[Parameter(40)]
		public int DmiUpLevel;
		[Parameter(30)]
		public int DmiDownLevel;

		// indikator tanımları.
		MOV movDmi;

		DemandIndex demandIndex;

		//Kar Al/Zarar Durdur Parametreleri
		[Parameter(true)]
		public bool Kar_AL;
		[Parameter(4)]
		public decimal Kar_AL_Yuzde;

		[Parameter(true)]
		public bool Zarar_Durdur;
		[Parameter(2)]
		public decimal Zarar_Durdur_Yuzde;

		decimal stock = 0;
		int SystemPosition = 0;

		public bool DosyadanOku;
		public string FolderPath = "C:\\Users\\user\\Desktop\\Pozisyonlar\\DMI";

		public string DosyaAdi;

		decimal sellPrice = 0;
		decimal buyPrice = 0;
		decimal karAlFiyat = 0;
		decimal shortZararDurdurFiyat = 0;
		decimal longZararDurdurFiyat = 0;


		/// <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()
		{
			DosyaAdi = Symbol;

			PozisyonOku();
			AddSymbol(Symbol, SymbolPeriod);
			demandIndex = DemandIndexIndicator(Symbol, SymbolPeriod, DmiPeriod);

			movDmi = MOVIndicator(demandIndex, MovPeriod, MovMethod.Exponential);

			WorkWithPermanentSignal(true);
			SendOrderSequential(false);

		}

		/// <summary>
		/// Init islemleri tamamlaninca, bardatalar kullanmaya hazir hale gelince bu fonksiyon tetiklenir. Data uzerinde bir defa yapilacak islemler icin kullanilir
		/// </summary>
		public override void OnInitComplated()
		{
			PozisyonYaz();
			Debug("########################################");
			Debug("Parametreler ve Pozisyonlar :");
			Debug("Symbol=" + Symbol);
			Debug("SystemPosition=" + SystemPosition);
			Debug("BuySellQuantity=" + BuySellQuantity);
			Debug("MovPeriod=" + MovPeriod);
			Debug("DmiPeriod=" + DmiPeriod);
			Debug("DmiUpLevel=" + DmiUpLevel);
			Debug("DmiDownLevel=" + DmiDownLevel);
			Debug("Kar_AL_Yuzde=" + Kar_AL_Yuzde);
			Debug("Zarar_Durdur_Yuzde=" + Zarar_Durdur_Yuzde);
			Debug("stock=" + stock);
			Debug("sellPrice=" + sellPrice);
			Debug("buyPrice=" + buyPrice);
			Debug("shortZararDurdurFiyat=" + shortZararDurdurFiyat);
			Debug("longZararDurdurFiyat=" + longZararDurdurFiyat);
			Debug("#########################################");




		}

		/// <summary>
		/// SetTimerInterval fonksiyonu ile belirtilen sürede bir bu fonksiyon tetiklenir.
		/// </summary>
		public override void OnTimer()
		{

		}

		/// <summary>
		/// AddNewsSymbol ve AddNewsKeyword ile haberlere kayit olunmuşsa bu fonksiyon tetiklenir.
		/// </summary>
		/// <param name="newsId">Gelen haberin id'si</param>
		/// <param name="relatedSymbols">Gelen haberin ilişkili sembolleri</param>
		public override void OnNewsReceived(int newsId, List<string> relatedSymbols)
		{

		}

		/// <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 lastPrice = barDataCurrentValues.LastUpdate.Close;
			if (SystemPosition == 1)
			{
				if (lastPrice>buyPrice)
				{
					Debug("******************************************************");
					Debug("Yeni LongStoploss Noktaları Hesaplanıyor...");
					Debug("Önceki Fiyat :" + buyPrice);
					Debug("Güncel Fiyat : " + lastPrice);
					longZararDurdurFiyat = lastPrice - ((lastPrice * Zarar_Durdur_Yuzde) / 100);
					buyPrice = lastPrice;
					Debug("Long Pozisyonda Stoploss Fiyatı:" + longZararDurdurFiyat);
					Debug("********************************************************");

				}
			}
			if (SystemPosition == -1)
			{

				if (lastPrice<sellPrice)
				{
					Debug("******************************************************");
					Debug("Yeni ShortStoploss Noktaları Hesaplanıyor...");
					Debug("Önceki Fiyat :" + sellPrice);
					Debug("Güncel Fiyat : " + lastPrice);
					shortZararDurdurFiyat = lastPrice + ((lastPrice * Zarar_Durdur_Yuzde) / 100);
					sellPrice = lastPrice;
					Debug("Short Pozisyonda Stoploss Fiyatı:" + shortZararDurdurFiyat);
					Debug("********************************************************");
				}
			}



			if (Al Koşulu)
			{
				Debug("CrossAbove");
				if (SystemPosition == 0)
				{
					
					SystemPosition = 1;
					

				}	else if (SystemPosition == -1)
				{
					SystemPosition = 1;
					
				}

			}
			if (Sat Koşulu)
			{
				if (SystemPosition == 0)
				{
					
					SystemPosition = -1;
					

				}	else if (SystemPosition == 1)
				{
					SystemPosition = -1;
					
				}

			}

			if (SystemPosition == 1)
			{
				if (lastPrice <= longZararDurdurFiyat)
				{
					Debug("||||||||||||||||||||||||||||||||||||||||");
					Debug("LongStoploss tetiklendi : Satış Fiyatı = " + lastPrice);
					SendMarketOrder(Symbol, BuySellQuantity, OrderSide.Sell, ChartIcon.PositionClose);
					stock = 0;
					SystemPosition = 0;
					Debug("||||||||||||||||||||||||||||||||||||||||");
				}


			}

			if (SystemPosition == -1)
			{
				if (lastPrice >= shortZararDurdurFiyat)
				{
					Debug("||||||||||||||||||||||||||||||||||||||||");
					Debug("ShortStoploss tetiklendi : Alış Fiyatı = " + lastPrice);
					stock = 0;
					SendMarketOrder(Symbol, BuySellQuantity, OrderSide.Buy, ChartIcon.StopLoss);
					SystemPosition = 0;
					Debug("||||||||||||||||||||||||||||||||||||||||");
				}

			}

		}

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

		}


		// Veri yaz
		public void PozisyonYaz()
		{
			if (!System.IO.Directory.Exists(FolderPath))
				Directory.CreateDirectory(FolderPath);
			string fileName = Path.Combine(FolderPath, DosyaAdi + ".txt");

			try
			{
				//Pass the filepath and filename to the StreamWriter Constructor
				StreamWriter sw = new StreamWriter(fileName);
				//Write a line of text
				sw.WriteLine(Symbol.ToString());
				sw.WriteLine(SystemPosition.ToString());
				sw.WriteLine(BuySellQuantity.ToString());
				sw.WriteLine(MovPeriod.ToString());
				sw.WriteLine(DmiPeriod.ToString());
				sw.WriteLine(DmiUpLevel.ToString());
				sw.WriteLine(DmiDownLevel.ToString());
				sw.WriteLine(Kar_AL_Yuzde.ToString());
				sw.WriteLine(Zarar_Durdur_Yuzde.ToString());
				sw.WriteLine(stock.ToString());
				sw.WriteLine(sellPrice.ToString());
				sw.WriteLine(buyPrice.ToString());
				sw.WriteLine(shortZararDurdurFiyat.ToString());
				sw.WriteLine(longZararDurdurFiyat.ToString());

				sw.Close();
			}
			catch (Exception e)
			{
				Console.WriteLine("Exception: " + e.Message);
			}
			finally
			{
				Console.WriteLine("Executing finally block.");
			}
			Debug(fileName + " dosyasina yazildi");
			//Debug($"SystemPozition = {SystemPosition}");
		}
		// Veri Oku
		public void PozisyonOku()
		{
			String line;
			int say = 0;
			//var dosya = new Dictionary<string,object>();
			var dosya = new List<object>();
			if (!System.IO.Directory.Exists(FolderPath))
				Directory.CreateDirectory(FolderPath);
			string fileName = Path.Combine(FolderPath, DosyaAdi + ".txt");


			try
			{

				//Pass the file path and file name to the StreamReader constructor
				StreamReader sr = new StreamReader(fileName);
				while ((line = sr.ReadLine()) != null)
				{
					dosya.Add(line);
					say++;
				}
				//Read the first line of text
				//line = sr.ReadLine();
				//SystemPosition = Convert.ToInt32(line);
				//close the file
				sr.Close();
				/*Pozisyonları değişkenlere eşliyoruz*/
				Symbol = Convert.ToString(dosya.ElementAt(0));
				SystemPosition = Convert.ToInt32(dosya.ElementAt(1));
				BuySellQuantity = Convert.ToDecimal(dosya.ElementAt(2));
				MovPeriod = Convert.ToInt32(dosya.ElementAt(3));
				DmiPeriod = Convert.ToInt32(dosya.ElementAt(4));
				DmiUpLevel = Convert.ToInt32(dosya.ElementAt(5));
				DmiDownLevel = Convert.ToInt32(dosya.ElementAt(6));
				Kar_AL_Yuzde = Convert.ToDecimal(dosya.ElementAt(7));
				Zarar_Durdur_Yuzde = Convert.ToDecimal(dosya.ElementAt(8));
				stock = Convert.ToDecimal(dosya.ElementAt(9));
				sellPrice = Convert.ToDecimal(dosya.ElementAt(10));
				buyPrice = Convert.ToDecimal(dosya.ElementAt(11));
				shortZararDurdurFiyat = Convert.ToDecimal(dosya.ElementAt(12));
				longZararDurdurFiyat = Convert.ToDecimal(dosya.ElementAt(13));


			}
			catch (Exception e)
			{
				Console.WriteLine("Exception: " + e.Message);
			}
			finally
			{
				Console.WriteLine("Executing finally block.");
			}

			Debug(fileName + " dosyasindan okundu");
		}



	}

 

1 0
Merhaba Çağlar Bey,

İlk versiyonda algoda yaşadığınız sorunları gidermiş olacağız. Bu hafta yeni versiyon yayınlayacağız. Algo taraflarında performans ve memory iyileştirmeleri yaptık.

İlginiz için teşekkürler,
1 0
Teşekkürler Çağlar Bey,

Programı kullanalı 1.5 hafta filan oldu daha yeni yeni alışıyorum.

DB ye de erişimimiz var ise o zaman çok güzel. Kullanıcyı  sadece gördüğümüz indikateörlerle filan sınırlayan bir program değil o zaman .
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,647 soru
7,642 cevap
4,448 yorum
11,144 kullanıcı