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

Merhaba,

- Robot kurduğumuzda seansı al yaparak kapattı ve akşam ekran kapandı sabah aynı streteji tekrar çalıştırdık sat yaparak başlar mı?

- Bir soruya bu cevabı vermişsiniz " IQ'yu kapatmadiginiz surece (orn. borsa tekrar acildiginda) kaldigi yerden devam edecektir. kapattiginizda da kaldiginiz yerden devam etmek icin yontemler mevcuttur https://destek.matriksdata.com/?qa=970/strateji-de%C4%9Fi%C5%9Fkenini-kal%C4%B1c%C4%B1-olarak-haf%C4%B1zada-tutmak#a1002 sorusuna bakiniz"

bunu daha detaylı anlatabilir misiniz. Bu konuyu ilk defa yapacak olan birisine anlatır gibi, teşekkürler

Algoritmik Trading kategorisinde (12 puan) tarafından | 1,378 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Hos geldiniz, stratejiyi tekrar calistirdiginizda sat yaparak baslayamaz. Ayni strateji de olsa once calistirilmis stratejiyle ilgili bir bilgisi yoktur.

Bahsettiginiz cevapta eski calistirdigimiz stratejiden yeni calistirilana bilgi aktarim yontemlerinden bir tanesini gormektesiniz. Fakat istediginiz sadece stratejinin satisla baslamasiysa, bunun icin daha kolay yontemlerimiz mevcut.

Orn. direkt al/sat seklinde ilerleyen bir stratejiniz (SendOrderSequential(true)) varsa asagidaki gibi stratejiyi calistirirken, manuel olarak kutucugu aktive ederek satisla baslamasini saglayabiliriz.

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 sendOrderSeq_YENI : 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(SymbolPeriod.Min5)]
		public SymbolPeriod SymbolPeriod;
		[Parameter(1)]
		public decimal OrderQuantity;
		[Parameter(14)]
		public int Period;
		[Parameter(70)]
		public int UpLevel;
		[Parameter(30)]
		public int DownLevel;
		
		[Parameter(false)]
		public bool SatislaBasla;
		
		// indikator tanımları.
		RSI rsi;
		int firstRun = 1;

		/// <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()
		{
			AddSymbol(Symbol, SymbolPeriod);
			rsi = RSIIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period);

			WorkWithPermanentSignal(true);

			SendOrderSequential(true,true);
		}

		/// <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)
		{
			if (firstRun == 1)
			{
				if (CrossAbove(rsi, DownLevel) && !SatislaBasla)
				{
					SendMarketOrder(Symbol, OrderQuantity, (OrderSide.Buy));
					firstRun = 0;
				}
				if (CrossBelow(rsi, UpLevel) && SatislaBasla)
				{	
					SendMarketOrder(Symbol, OrderQuantity, (OrderSide.Sell));
					firstRun = 0;
				}
				
			}
			else 
				if (CrossAbove(rsi, DownLevel))
				SendMarketOrder(Symbol, OrderQuantity, (OrderSide.Buy));
				if (CrossBelow(rsi, UpLevel))
				SendMarketOrder(Symbol, OrderQuantity, (OrderSide.Sell));
		}

		/// <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)
		{
			if (order.OrdStatus.Obj == OrdStatus.Filled)
			{

			}
		}
	}
}



RSI stratejisi sablonu uzerinde sadece bir kac degisiklik yaparak bu sonuca ulasabiliyoruz. Dikkat edilmesi gereken yerler:

SendOrderSequential(true,true); //Bu son versiyonda ekledigimiz bir ozellik. Ilk ayar true oldugunda emirlerin sirali gonderilme sarti devam etmekte, 2. ayari true yaptigimizda ise satis ya da alisla baslamasinin bir onemi olmasin diyoruz. Yani ilk emir satis da gelse kabul edilecek ve sonra alis kosulu aranacak, sirali gitmeye devam edecektir.

if (firstRun == 1): baslangic emrini ayristiriyoruz

(8,035 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.



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