0 beğenilme 0 beğenilmeme
2,157 kez görüntülendi
Merhaba ;

Ott Line üzerindeki kapanışlarda alım emri  verirken SSlowK > SSlowD ise gerçekleştiren , Ott line altındaki kapanışlarda satım Emri verirkne SSlowD > Slow K mı diye kontrol eden ,aksi halde ikiside true gelene kadar işleme girmeyen bir strateji oluşturmak istiyorum . Support line kesişimi işleme konu olmayacak .Bu sayede Ottline üzerinde onay gelmeden yapılan gereksiz al satlardan kurtulmak istiyorum . Ayrıca işlemler sıralı gitmesi gerekecek ottline altında kapanış olduğu haldeSSlowK > SlowD olduğundan satış yapmadı ancak ottline fiyat ottline üzerine çıktı diye üst üste alım yapmamalı isteğim.

Ekipten Ercan bey sağolsun aşağıdaki kodu yolladı ancak öncesini yazamadığım için çalıştıramadım . Değerli desteğinizi rica ederim.

Sağolun varolun şimdiden

 

//Ott için al sinyali oluştuğunda  K>D ise

if (CrossAbove(ott.ottSupportLine,ott.ottLine) && stochasticSlow.StochasticSlowK.CurrentValue>stochasticSlow.StochasticSlowD.CurrentValue)

{

SendMarketOrder(Symbol, 1, OrderSide.Buy);

}

 

//Ott için sat sinyali oluştuğunda D>K ise

if (CrossBelow(ott.ottSupportLine,ott.ottLine) && stochasticSlow.StochasticSlowK.CurrentValue<stochasticSlow.StochasticSlowD.CurrentValue)

{

            SendMarketOrder(Symbol, 1, OrderSide.Sell);

}
Algoritmik Trading kategorisinde (12 puan) tarafından | 2,157 kez görüntülendi

1 cevap

1 beğenilme 0 beğenilmeme

Merhaba,

Aşağıdaki stratejiyi inceleyip deneyebilirsiniz.

Strateji adının OttStochOhlc olmasına dikkat ediniz.

***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 ***

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 OttStochOhlc : 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(5)]
		public decimal Quantity;

		[Parameter(2)]
		public int OTTPeriod;

		[Parameter(1.4)]
		public decimal Opt;

		[Parameter(5)]
		public int StochK;

		[Parameter(3)]
		public int StochD;

		[Parameter(5)]
		public int StochYavasK;

		OTT ott;

		StochasticSlow stochasticSlow;

		/// <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()
		{
			stochasticSlow = StochasticSlowIndicator(Symbol, SymbolPeriod, OHLCType.Close, StochK, StochD, StochYavasK, MovMethod.Exponential);

			ott = OTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, OTTPeriod, Opt, MovMethod.VAR, true);

			AddSymbol(Symbol, SymbolPeriod);

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

			// Alış şartı
			if (barDataCurrentValues.LastUpdate.Close>ott.ottLine.CurrentValue && stochasticSlow.StochasticSlowK.CurrentValue>stochasticSlow.StochasticSlowD.CurrentValue)
			{
				SendMarketOrder(Symbol, Quantity, OrderSide.Buy);
				Debug("Alış emri gönderildi.");
			}

			// satış şartı
			if (ott.ottLine.CurrentValue>barDataCurrentValues.LastUpdate.Close && stochasticSlow.StochasticSlowD.CurrentValue>stochasticSlow.StochasticSlowK.CurrentValue)
			{
				SendMarketOrder(Symbol, Quantity, OrderSide.Sell);
				Debug("Satış emri gönderildi.");
			}

		}

		/// <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,422 puan) tarafından
0 0
strateji olarak eklediğimde uygun olmayan format hatası alıyorum ne yapmam lazım?
0 0
Merhaba

Oncelikle elinize saglik Matriks IQ sahibiyim ama acik soylemek gerekirse Prime kullaniyorum neden diye soracak olursaniz.

Piyasada ki kodlari IQya derleyemiyoruz...

Bir diger husus ise Optimizasyon var cok guzel, ama ben kodun yazari degilim ki kod yazmayida bilmiyorum acikcasi yani beckteste giriyorum standart degerlerle aralik yapsam hangi araligi yapacagim ben nereden bilebilirim ki?

Bence degerleri biz bulmaya calismamiz yerine sistemin en uygun degerleri bulmasi gerekli yoksa bir anlam ifade etmiyor...

Umarim buna bu sekilde bir cözüm getirirsiniz.Yoksa IQnun bir cazibesi benim icin yok..

Saygilarimla...
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.



7,516 soru
7,519 cevap
4,405 yorum
8,752 kullanıcı