1 beğenilme 0 beğenilmeme
1,172 kez görüntülendi
Merhaba,

IQ da yaptığım tarama sonucuna göre algo çalıştırabilir miyim? Tamamen farazi, 15 ve 30m tarama yap; som mum diğerinin 2 katı ise ve yeşil ise long aç, 5x aç, stop değeri şunu ayarla , tp değeri yuzde X bu olacak, tp olunca  iz süren %x olarak izle gibi.

eğer yapılırsa bu kodu taramaya mı entegre etmek lazım. veya gelen sonucu şu stratejiye bağlamak mı lazım. eğer sonuç geldi şu stratejiyi çalıştır gibi gibi.

umarım anlatabilmişimdir.

sevgiler
Algoritmik Trading kategorisinde (580 puan) tarafından | 1,172 kez görüntülendi

1 cevap

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

Merhabalar,

Yaptığınız tarama sonucuna göre algoritma çalıştırabilirsiniz.

Fakat bu biraz uzun bir işlem. Elimden geldiğince en sade hali ile anlatmaya çalışıp örnekleri paylaşacağım. 

Önce tarama kodunu yazmanız gerekiyor. Bunun için hazır bir şablon var o şablonu kullanmalısınız.

(Explorer Sihirbazı üzerinden yazdığınız taramalar üzerinden direkt olarak emir gönderimi yapmanız mümkün değildir. Tarama kodu içerisinde de değişikliğe ihtiyaç vardır.)

Daha sonra bu taramayla entegre olarak yazılan bir strateji olacak. (Bununda şablonu mevcut o şablonu da paylaşacağım)

Stratejiyi de eş zamanlı çalıştıracaksınız. Böylelikle tarama ile çıkan sonuçlar stratejiye yönlendirilecek, al sat işlemi olacak.

Şimdi uygulamanız gereken adımları anlatıyorum çünkü sadece yukarıdaki anlatılanla bitmiyor :)

Önce taramayı çalıştırıyorsunuz ve kodunuz hisseleri taramayı başlıyor.

Daha sonra C klasörünüzde IQ Data diye bir klasör oluşuyor, bu klasörde de çalıştırdığınız taramanın adı yazıyor.

Bu klasöre tıkladığınızda içerisinde boş bir şekilde Sembol Listesi adında bir metin belgesi vardır.

Bu metin belgesinin içerisine hangi sembolleri alıp satmak istiyorsanız Sembol İsmi ve Sembol adedi şeklinde ekleme yapıyorsunuz. (Kopyala Yapıştır yolu ile yapabilirsiniz.)  (Bunun sebebi stratejiniz bu metin belgesinden sembolleri çekiyor ve al/sat yapıyor.)  -Sembol listesinin de hazır hali var, onu da paylaşacağım-

Daha sonra stratejiyi de çalıştırıyorsunuz ve sistem al sat yapmaya başlıyor. 

Explorer Kodu:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Matriks.Data.Symbol;
using Matriks.Engines;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Indicators;
using System.IO;

namespace Matriks.Lean.Algotrader
{
	public class ExpMatic : Explorer
	{
		[Parameter(14)]
			public int DiPeriod1;

		[Parameter(14)]
			public int VortexPeriod1;


		DI di;
		VORTEX vortex;

		public static int sayac = 0;

		public static string liste = "";

		static object locker = new object();


		// #gerekli bitti

		public override void OnInit()
		{
			di = DIIndicator(Symbol, SymbolPeriod, OHLCType.Close, DiPeriod1);
			vortex = VortexIndicator(Symbol, SymbolPeriod, OHLCType.Close, VortexPeriod1);
		}

		public override bool OnExplorer(List<BarDataEventArgs> bardatas)
		{
			var barDataModel = GetBarData();

			// gerekli başla
			bool Bayrak = false;
			bool sonuc = false;

			lock (locker)
			{
				sayac++;
				Bayrak = sayac == TotalExplorerCount;

				// tarama koşulu başla
				if (CrossAbove(di, di, 0, 1) && CrossAbove(vortex, vortex, 0, 1))
				{
					liste += Symbol + ":";
					liste += OrderSide.Buy.ToString() + ",";
					sonuc = true;
				}else if (vortex.Value[0][vortex.CurrentIndex] <= vortex.Value[1][vortex.CurrentIndex] && di.Value[0][di.CurrentIndex] <= di.Value[1][di.CurrentIndex])
				{
					liste += Symbol + ":";
					liste += OrderSide.Sell.ToString() + ",";
					sonuc = true;
				}
				// # tarama koşulu bitti
			}

			if (Bayrak && liste.Length>0)
			{
				// telegram bağlan;
			}

			return sonuc;

			// #gerekli bitti
		}
	}
}

Strateji Kodu:

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;
using System.IO;

namespace Matriks.Lean.Algotrader
{
	public class ExpMaticStr : MatriksAlgo
	{
		[Parameter(true)]
		public bool SembollereEmirlerSiraliMiGonderilsin;

		[Parameter(5)]
		public int TaranmaSuresi;

		[Parameter("ExpMatic")]
		public string AnaDizin;

		//**************************************
		public string PathMain = "C:\\IQData\\";
		public string PathLogs = "C:\\IQData\\";

		public string DosyaAdiSembolListesi = "SembolListesi";
		public string DosyaAdiTaramaListesi = "TaramaListesi";
		public string DosyaAdiGerceklesenler = "Gerceklesenler";

		public string veriTaramaListesi, veriSembolListesi, veriGerceklesenler;

		public class Siparis
		{
			public string Sembol;
			public string EmirYonu;
			public decimal Adet;
			public DateTime Tarih;
		}

		public static List<Siparis> TaramaListesi = new List<Siparis>();
		public static List<Siparis> SembolListesi = new List<Siparis>();
		public static List<Siparis> Gerceklesenler = new List<Siparis>();

		string th = "Kripex-" + DateTime.Now.ToShortDateString();

		public override void OnInit()
		{
			SetTimerInterval(TaranmaSuresi);
			PathMain += AnaDizin;
			PathLogs += AnaDizin + "\\Logs";
		}

		public override void OnInitComplated()
		{
			SembolListesiniGetir();
		}

		bool emirVerisinMi = false;

		[Output]
		public string NeZamanTetiklendi;

		public override void OnTimer()
		{
			try
			{
				NeZamanTetiklendi = DateTime.Now.ToString();
				string veri = "", _veriGerceklesenler = "", _emirYonu;

				TaramaListesi.Clear();
				Gerceklesenler.Clear();

				TaramaListesiniGetir();
				GerceklesenleriGetir();

				if (veriTaramaListesi.Length>0)
				{
					foreach (Siparis taramaListesi in TaramaListesi)
					{
						if (taramaListesi.EmirYonu == OrderSide.Buy.ToString())
						{
							_emirYonu = "alış";
						}else
						{
							_emirYonu = "şatış";
						}

						// Taramadaki sembol, sembol listesinde var mı yok mu?
						var kontrol = SembolListesi.FirstOrDefault(x => x.Sembol == taramaListesi.Sembol);

						// Taramadaki sembole daha önce emir gönderildi mi?
						var DahaOnceEmirGonderildiMi = Gerceklesenler.FirstOrDefault(x => x.Sembol == taramaListesi.Sembol);

						// Daha önce emir gönderilmediği için listeye direkt eklenecek
						if (DahaOnceEmirGonderildiMi == null && kontrol != null)
						{
							emirVerisinMi = true;
							Siparis Siparis = new Siparis();

							Siparis.Sembol = taramaListesi.Sembol;
							Siparis.EmirYonu = taramaListesi.EmirYonu;
							Siparis.Adet = kontrol.Adet;
							//Siparis.Tarih = Convert.ToDateTime(symbol.Split(':')[3].Trim());

							Gerceklesenler.Add(Siparis);
							// Daha önce emir gönderildiği için ilgili satırı düzenlenecek
						}else
						{
							var kontrolSira = Gerceklesenler.FirstOrDefault(x => x.Sembol == taramaListesi.Sembol && x.EmirYonu != taramaListesi.EmirYonu);

							if (SembollereEmirlerSiraliMiGonderilsin)
							{
								if (kontrolSira != null)
								{
									emirVerisinMi = true;
									kontrolSira.EmirYonu = taramaListesi.EmirYonu;
								}else
								{
									emirVerisinMi = false;
								}
							}else if (DahaOnceEmirGonderildiMi != null)
							{
								emirVerisinMi = true;
								DahaOnceEmirGonderildiMi.EmirYonu = taramaListesi.EmirYonu;
							}

						}

						if (kontrol != null && emirVerisinMi)
						{
							Debug(kontrol.Sembol + " sembolinden " + kontrol.Adet + " adet " + _emirYonu + " emir gönderildi.");
							SendMarketOrder(kontrol.Sembol, kontrol.Adet, (OrderSide) Enum.Parse(typeof (OrderSide), taramaListesi.EmirYonu));
							veri += kontrol.Sembol + ":" + taramaListesi.EmirYonu + ":" + kontrol.Adet + ":" + DateTime.Now + ",";

						}else if (kontrol == null)
						{
							Debug(taramaListesi.Sembol + "- bu sembol sembol listenizde bulunmamakta. emir göndermek için eklemelisiniz.");
						}
						else
						{
							Debug(taramaListesi.Sembol + " - Emir sinyali geldi fakat emirlerin sıralı gitmesi seçeneği aktif olduğundan emir gönderilmedi");
						}
					}

					foreach (var sym in Gerceklesenler)
					{
						_veriGerceklesenler += sym.Sembol + ":" + sym.EmirYonu + ":" + sym.Adet + ":" + sym.Tarih + ",";
					}

					DosyayaYaz(PathMain, DosyaAdiGerceklesenler, _veriGerceklesenler, false);
					DosyayaYaz(PathLogs, th, veri, true);
					DosyayaYaz(PathMain, DosyaAdiTaramaListesi, "", false);
					Debug("Tarama dosyası temizlendi.");
				}
			}catch (Exception e)
			{
				Debug(e.ToString());
			}

		}

		public void TaramaListesiniGetir()
		{
			veriTaramaListesi = DosyadanOku(PathMain, DosyaAdiTaramaListesi);

			veriTaramaListesi = veriTaramaListesi.Trim();

			if (veriTaramaListesi.Length>0)
			{
				string[] _symbols = veriTaramaListesi.Substring(0, veriTaramaListesi.Length - 1).Split(',');

				foreach (var symbol in _symbols)
				{
					Siparis Siparis = new Siparis();

					Siparis.Sembol = symbol.Split(':')[0];
					Siparis.EmirYonu = symbol.Split(':')[1];
					Siparis.Adet = 0;
					Siparis.Tarih = DateTime.Now;

					TaramaListesi.Add(Siparis);
				}
			}
		}

		public void GerceklesenleriGetir()
		{
			veriGerceklesenler = DosyadanOku(PathMain, DosyaAdiGerceklesenler);

			veriGerceklesenler = veriGerceklesenler.Trim();

			if (veriGerceklesenler.Length>0)
			{
				string[] _symbols = veriGerceklesenler.Substring(0, veriGerceklesenler.Length - 1).Split(',');

				foreach (var symbol in _symbols)
				{
					Siparis Siparis = new Siparis();

					Siparis.Sembol = symbol.Split(':')[0].Trim();
					Siparis.EmirYonu = symbol.Split(':')[1].Trim();
					Siparis.Adet = Convert.ToDecimal(symbol.Split(':')[2].Trim());
					//					Siparis.Tarih = Convert.ToDateTime(symbol.Split(':')[3].Trim());

					Gerceklesenler.Add(Siparis);
				}
			}
		}

		public void SembolListesiniGetir()
		{
			veriSembolListesi = DosyadanOku(PathMain, DosyaAdiSembolListesi);
			veriSembolListesi = veriSembolListesi.Trim();

			if (veriSembolListesi.Length>0)
			{
				string[] _symbols = veriSembolListesi.Substring(0, veriSembolListesi.Length - 1).Split(',');
				foreach (var symbol in _symbols)
				{
					Siparis Siparis = new Siparis();

					Siparis.Sembol = symbol.Split(':')[0].Trim();
					Siparis.EmirYonu = "Buy";
					Siparis.Adet = Convert.ToDecimal(symbol.Split(':')[1].Trim());
					Siparis.Tarih = DateTime.Now;

					SembolListesi.Add(Siparis);
				}
			}else
			{
				Debug("İstenilen formatta sembol listesini doldurunuz ve yeniden çalıştırınız");
			}
		}

		public bool EmirVerisinMi()
		{
			return true;
		}

		// Dosya oku	
		public string DosyadanOku(string dosyayolu, string dosyaAdi)
		{
			if (!System.IO.Directory.Exists(dosyayolu))
				Directory.CreateDirectory(dosyayolu);

			string _fileName = Path.Combine(dosyayolu, dosyaAdi + ".txt");

			if (!File.Exists(_fileName))
			{
				File.AppendAllText(_fileName, "");
			}

			return File.ReadAllText(_fileName);
		}

		// Dosyaya yaz
		public void DosyayaYaz(string dosyayolu, string dosyaAdi, string icerik, bool eklenecekMi)
		{
			if (!System.IO.Directory.Exists(dosyayolu))
				Directory.CreateDirectory(dosyayolu);

			string _fileName = Path.Combine(dosyayolu, dosyaAdi + ".txt");

			if (!File.Exists(_fileName))
			{
				File.AppendAllText(_fileName, "");
			}

			if (eklenecekMi)
			{
				File.AppendAllText(_fileName, icerik);
			}else
			{
				File.WriteAllText(_fileName, icerik);
			}
		}
	}
}

Sembol Listesi :

ACSEL	:	5	,
ADEL	:	5	,
ADESE	:	5	,
AEFES	:	5	,
AFYON	:	5	,
AGHOL	:	5	,
AGYO	:	5	,
AKBNK	:	5	,
AKCNS	:	5	,
AKENR	:	5	,
AKFGY	:	5	,
AKGRT	:	5	,
AKMGY	:	5	,
AKSA	:	5	,
AKSEN	:	5	,
AKSGY	:	5	,
AKSUE	:	5	,
AKYHO	:	5	,
ALARK	:	5	,
ALBRK	:	5	,
ALBTSF1	:	5	,
ALCAR	:	5	,
ALCTL	:	5	,
ALDUKF1	:	5	,
ALGYO	:	5	,
ALKA	:	5	,
ALKIM	:	5	,
ALMAD	:	5	,
ALONEF1	:	5	,
ANELE	:	5	,
ANHYT	:	5	,
ANSGR	:	5	,
APYVCF2	:	5	,
ARCLK	:	5	,
ARDYZ	:	5	,
ARENA	:	5	,
ARMDA	:	5	,
ARSAN	:	5	,
ARTI	:	5	,
ASELS	:	5	,
ASUZU	:	5	,
ATAGY	:	5	,
ATEKS	:	5	,
ATL
(11,059 puan) tarafından
tarafından seçilmiş
Tarama koduna Sembol listesini istediğimiz kritere göre txt dosyaya ekleyecek bir kod
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.



8,636 soru
8,590 cevap
4,821 yorum
19,785 kullanıcı