0 beğenilme 0 beğenilmeme
2,504 kez görüntülendi
Merhaba,
Matriks IQ lisansımı yeni aldım öğrenmek için denemeler yapıyorum.
Daha önceden el ile kullandığım 2 indikatörü Matriks IQ'da robota bağlamak istiyorum.

Kurgum şu şekilde;

Al koşulu: RSI 30'un altındaysa ve o sırada Parabolik Sar al verdiyse piyasa fiyatından al emri göndermek.
Satma koşulu: RSI'dan bağımsız olarak, Parabolik Sar sat verdiğinde satmak.

Teşekkürler.
Algoritmik Trading kategorisinde (16 puan) tarafından | 2,504 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhaba,

Aşağıdaki stratejiyi inceleyebilirsiniz.

bu arada başlangıç için IQ Algo menüsü altında algoritma sihirbaz ile daha rahat strateji oluşturabilirsiniz.

***STRATEJİLERİ TEST/DENEME ORTAMINDA SINAMADAN VE SİZİN İSTEDİĞİNİZ ŞEKİLDE ÇALIŞTIĞINA EMİN OLMADAN GERÇEK ORTAMDA HİÇBİR ZAMAN ÇALIŞTIRMAYINIZ ***

Dosya Linki:

https://destek.matriksdata.com/?qa=blob&qa_blobid=14212499294131285750

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;

//**********************************************************ACIKLAMA**********************************************************//
//Parabolic SAR indikatorunun al/sat durumuna gore islem yapar. Sadece uzun pozisyon acip kapatir (SendOrderSequential(true); //
//ile ayarlanmistir. 60dk'lik Parabolic SAR alt kanaldaysa alim yapar, ust kanaldaysa pozisyondan cikar. 					  //
//Parabolic SAR ve sembol icin periyotlar degistirilebilir.	


namespace Matriks.Lean.Algotrader
{
	public class ParabolicRsi : 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.Min)]
		public SymbolPeriod SymbolPeriod;
		
		[Parameter(100)]
		public decimal BuyOrderQuantity;	
		
		[Parameter(100)]
		public decimal SellOrderQuantity;	

		[Parameter(0.02)]
		public decimal Acceleration_factor;
		
		[Parameter(0.2)]
		public decimal MaxAcc;
		
		[Parameter(14)]
		public int RsiPeriod;

		ParabolicSAR parabolicSar;

		RSI rsi;

		public override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod);
			//AddSymbol(Symbol, PSar_Period);
			parabolicSar = ParabolicSARIndicator(Symbol, SymbolPeriod, Acceleration_factor, MaxAcc);
			rsi = RSIIndicator(Symbol, SymbolPeriod, OHLCType.Close, RsiPeriod);

			//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);
			WorkWithPermanentSignal(true);
		}

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

		}

		/// <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 barDataModel = GetBarData();
			
			if (CrossAbove(barDataModel,parabolicSar,OHLCType.Close) && rsi.CurrentValue<30)
			{
				SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
				Debug($"Alis emri gonderildi");
			}
			
			if (CrossBelow(barDataModel,parabolicSar,OHLCType.Close))
			{
				SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
				Debug($"Satis emri gonderildi");
			}

		}

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

			}
		}
	}
}

 

(15,892 puan) tarafından
0 0
Merhaba yanıtınız için teşekkür ederim.
Verdiğiniz kodu çalıştırmaya çalıştığımda hiç al sat yapmamış durumda.

Algoritma sihirbazından oluşturmaya çalıştım fakat RSI ile ilgili -eğer 30dan düşükse ve parabolik sar al verdiyse al gibi bir emir oluşturup test edemedim.
0 0

default değerlerle backtest yaparken son 500 barda işleme girmeyebilir tüm barları kullanıp deneyiniz.

 

0 0
İlginiz ve yanıtınız için tekrar teşekkür ederim. Stratejimi tam olarak uygulayamadım. Size tam olarak anlatmak istiyorum.

Çubuk türü: Heikin Ashi
15 dakikalık grafikte

RSI:
Uzunluk 14
Alt bant değeri: 37
Üst bant değeri: 65

Parabolik Sar:
Varsayılan değerinde kalacak.

Strateji şu şekilde:
Robot ilk önce RSI'a bakacak. Eğer RSI 37 ve altına geldiyse Parabolik Sar'a bakmaya başlayacak.
Parabolik Sar düşüş direncini kırıp al durumuna geçerse robot piyasa emrinden alım yapacak.

Satta da şuan bir koşul daha eklemek istiyorum şu şekilde:
RSI üst bant değeri 65 olduysa veya üstüne geçtiyse satacak,
Aynı şekilde RSI 65'i geçmediyse bile Parabolik Sar al direncini kırarsa satacak.

Umarım anlatabilmişimdir ilginiz için teşekkür ederim.
0 0
merhaba bende rsi belli değerden atiyorum 50 ye değdiği an AL satan strateji robotu kodu öğrenmek istiyorum
0 0

Medrhaba,

MatriksIQ içinde linkte yer alan stratejiyi kullanabilirsiniz.

İyi çalışmalar

https://destek.matriksdata.com/?qa=blob&qa_blobid=10610640946938721211

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,792 kullanıcı