0 beğenilme 0 beğenilmeme
965 kez görüntülendi
Merhaba ,
Bir tarama formülü oluşturmak istiyorum son 5 barda most al vermiş ve aynı zaman d+ d- yi yukarı keserek al verenlerin taramasını oluşturmak istiyorum. Kendi oluşturduğum formülde ikiside ayrı ayrı oluyor . Yardımcı olursanız sevinirim.
Algoritmik Trading kategorisinde (12 puan) tarafından | 965 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhabalar,

İstemiş olduğunuz tarama hem most'un hem de di2nin son beş barda al vermesi ise,

Lütfen inceleyiniz.

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;

namespace Matriks.Lean.Algotrader
{
	public class omerbor_ : Explorer
	{
		// 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.



		[Parameter(14)]
			public int DiPeriod1;

		[Parameter(3)]
			public int MostPeriod1;

		[Parameter(2)]
			public decimal MostPercentage1;

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

		[Parameter(3)]
			public int BarSayisi;

		DI di;
		MOST most;



		public override void OnInit()
		{
			di = DIIndicator(Symbol, SymbolPeriod, OHLCType.Close, DiPeriod1);
			most = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, MostPeriod1, MostPercentage1, MostMovMethod1);

		}


		/// <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 bool OnExplorer(List<BarDataEventArgs> bardatas)
		{

			var bardata = bardatas.FirstOrDefault() ? .BarData;

			for (int i = 1; i<BarSayisi; i++)
			{
				if (most.Value[1][most.CurrentIndex - i] > most.Value[0][most.CurrentIndex - i]
					&& most.Value[0][most.CurrentIndex - (i + 1)] > most.Value[1][most.CurrentIndex - (i + 1)]
					&& di.Value[0][di.CurrentIndex - i] > di.Value[1][di.CurrentIndex - i]
					&& di.Value[1][di.CurrentIndex - (i + 1)] > di.Value[0][di.CurrentIndex - (i + 1)])
					
					
					//CrossAbove(di, di, 0, 1))
				{
					return true;
				}
			}


			return false;


		}
	}
}

 

Fakat most'un son beş barda al vermesi ve di'nin son barda al vermesi ise,

Lütfen inceleyiniz.

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;

namespace Matriks.Lean.Algotrader
{
	public class omerbor : Explorer
	{
		// 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.



		[Parameter(14)]
			public int DiPeriod1;

		[Parameter(3)]
			public int MostPeriod1;

		[Parameter(2)]
			public decimal MostPercentage1;

		[Parameter(MovMethod.E)]
			public MovMethod MostMovMethod1;
		
				[Parameter(3)]
			public int BarSayisi;

		DI di;
		MOST most;



		public override void OnInit()
		{
			di = DIIndicator(Symbol, SymbolPeriod, OHLCType.Close, DiPeriod1);
			most = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, MostPeriod1, MostPercentage1, MostMovMethod1);

		}


		/// <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 bool OnExplorer(List<BarDataEventArgs> bardatas)
		{

			var bardata = bardatas.FirstOrDefault() ? .BarData;

			for (int i = 1; i<BarSayisi; i++)
			{
				if (most.Value[1][most.CurrentIndex - i] > most.Value[0][most.CurrentIndex - i]
					&& most.Value[0][most.CurrentIndex - (i + 1)] > most.Value[1][most.CurrentIndex - (i + 1)] 
					&& CrossAbove(di, di, 0, 1))
				{
					return true;
				}
			}
				
		
			return false;


		}
	}
}

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