0 beğenilme 0 beğenilmeme
1,093 kez görüntülendi
MERHABA PRİME DAN İQ YA GEÇİŞ YAPTIM

valuewhen(1.,DAYOFmonth[GUN]()><REF(DAYOFmonth[GUN](),-1),MOV[GUN](C,2,E)>MOST[GUN](C,3,2))

BU FORMULU PRIME DA KULLANIYORDUM VE ŞİMDİ IQ DA KULLANMAK İSTİYORUM

IQ İÇİN ÇEVİREBİLİRSENİZ SEVİNİRİM

TEŞEKKÜRLER
Algoritmik Trading kategorisinde (376 puan) tarafından | 1,093 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhabalar,

Aşağıdaki sistemi inceleyebilirsiniz.

using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using Matriks.Indicators;
using Matriks.Symbols;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Lean.Algotrader.Trading;
using Matriks.AI;
using Matriks.AI.AiParameters;
using Matriks.AI.Data;
using Matriks.Trader.Core.TraderModels;
/*
Çoklu periyot kullanımına örnek olması için hazırlanmış bir stratejidir.
Kalıcı sinyalle çalışan strateji 1DK'lık bar açılışlarında 5DK periyodunda o anda hesaplanan MOST indikatörünün kırılım durumunu kontrol eder. 
Eğer EXMOV, MOST'u yukarı kırdıysa al; aşağı kırdıysa sat sinyali oluşturur.

!! NOT !! 
Strateji her 1DK da 5DK periyodundaki indikatörün kırılımına baktığı için canlıda strateji 5 kez üst periyodu kontrol edip 5DK periyodunda kalıcıya geçmemiş sinyaller içinde emir göndermiş olacak.
Fakat backtestte ve optimizasyonda kapanmış barlar üzerinde strateji çalıştırıldığı için 1DK periyodunda 5 kez 5DK periyodundaki indikatörün kapanışta oluşturulan değerini kontrol edecek.
=> Bu nedenle çoklu periyot kullanılan stratejilerin canlıda oluşan sinyallerini, backtest ve optimizasyondaki sinyallerle kıyaslamak doğru olmayacaktır.
!! NOT !!
*/
namespace Matriks.Lean.Algotrader
{
	public class SablonCokluPeriyot : 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.Min)]
			public SymbolPeriod GraphPeriod;

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

		[Parameter(3)]
			public int MostPeriod;

		[Parameter(2)]
			public decimal MostPercentage;

		[Parameter(MovMethod.E)]
			public MovMethod MostMovMethod;

		[Parameter(1)]
			public decimal BuyOrderQuantity;

		[Parameter(1)]
			public decimal SellOrderQuantity;

		MOST most;

		public override void OnInit()
		{
			AddSymbol(Symbol, GraphPeriod);
			AddSymbol(Symbol, IndicatorPeriod);

			most = MOSTIndicator(Symbol, IndicatorPeriod, OHLCType.Close, MostPeriod, MostPercentage, MostMovMethod);

			SendOrderSequential(true, Side.All);
			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 OnInitCompleted()
		{

		}

		/// <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(BarDataEventArgs barData)
		{
			if (barData.PeriodInfo.Equals(GraphPeriod.ToPeriodInfo()))
			{
				if (most.Value[1][most.CurrentIndex] > most.Value[0][most.CurrentIndex])
				{
					SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy, includeAfterSession:false);
				}
				if (most.Value[1][most.CurrentIndex] < most.Value[0][most.CurrentIndex])
				{
					SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell, includeAfterSession:false);
				}
			}

		}

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

		/// <summary>
		/// Strateji durdurulduğunda bu fonksiyon tetiklenir.
		/// </summary>
		public override void OnStopped()
		{
		}
	}
}

İyi çalışmalar.

(11,059 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,790 kullanıcı