2 beğenilme 0 beğenilmeme
1,577 kez görüntülendi
Merhaba kolay gelsin. Ben stratejimde, otomatik olarak trend çizgileri çizdirmekteyim. Trend çizgimin üstüne çıkarsa alım, altına inerse satım yaptırıyorum. Ancak alım-satım işlemlerim bittiğinde, trend çizgimin yeni oluşan barlara göre tekrar çizdirmek istiyorum. Yani alım satım ikilisi tamamlandığında, trend stratejimin bir şekilde trend çizgilerini yenilesin istiyorum. Stratejiyi kapatıp açtığımda trend çizgilerim yenileniyor ancak ben bilgisayar başında olmadığım zamanlarda, stratejimi kapatıp açma şansımın olmadığı zamanlarda da stratejim ya kendini bir şekilde yeniden başlatmalı, ya da trend çizgilerim yenilenebilmeli. Bunu nasıl yapabilirim ?
Algoritmik Trading kategorisinde (156 puan) tarafından | 1,577 kez görüntülendi
0 0
Merhaba. Teste başlayacağım. Cevabınızı bekilyorum.

1 cevap

1 beğenilme 0 beğenilmeme

Merhaba,

Trendinizin kendini yenilemesini istiyorsanız oto trend kullanmanız gerekli. İsteğinize bağlı olarak yükselen veya düşen oto trend oluşturarak fiyatı takip edebilirsiniz. Örnek kod satırlarını aşağıda paylaşıyorum.

Yalnız dikkat etmeniz gereken durum oto trendlerde fiyat kırılmaları oluşmayacaktır.

İyi çalışmalar

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 TrendTest : 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("BTC_USDT_BIN")]
		public string Symbol;

		[Parameter(SymbolPeriod.Min)]
		public SymbolPeriod SymbolPeriod;


		ITrend myTrend;
		/// <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);

			myTrend = MyTrend(Symbol, SymbolPeriod, 100, 0, TrendType.Increasing, true);
			//MyTrend fonksiyonu arac kutusundan default degerler ile getirilmistir.
			//Boylelikle hem hata alinmadan kod compile etmekte, hem de ornek degerler gosterilmektedir.
			//***Grafikte gorebileceginiz bir trend olusturmak icin lutfen bu degerleri degistirin***
			//(Kullanmak istediginiz MyTrend'e gore intellisense'de secenekleri gorebilirsiniz)
			//Symbol, SymbolPeriod sizin tarafinizdan tanimlanmis sembol ve periyotudur.
			//Parametre olarak tanimlanmadiysa ornek tanimlamalar: Symbol: "GARAN"
			//barCount(default=100) trend cizgisinin kac bari kapsayacagidir.
			//refIndex(default=0) son bardan kac bar once trend cizgisinin kapatilacagidir
			//(orn. 0 son bara kadar cekilir, 10 ise canli bardan 10 bar once trend cizgisi sonlandirilir.)
			//TrendType.Increasing veya TrendType.Decreasing yükselen/düşen trendler.
			//isAutoTrend(false) trend'i otomatik olarak cizip birakir. True yapilirsa, bari her yeni data ile gunceller.
			DrawTrend(myTrend, Colors.Red);

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

		/// <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 close = barDataCurrentValues.LastUpdate.Close;

			if (close == myTrend.CurrentValue)
			{
				Debug("Trend current value : " + myTrend.CurrentValue);
			}

		}
	}
}

 

(4,555 puan) tarafından
0 0
Cevap için teşekkür ederim. Ancak otomatik hareketli trendi biliyorum. Hareketsiz trend çizgimi, stratejimi kapatıp açmaya gerek kalmadan belirli zaman aralıkları ile yeniden çizdirmeyi nasıl yapabilirim ?
0 0
Merhaba, şuanda istediğiniz durumu sağlayacak bir komutumuz bulunmamakta. Birden fazla trend oluşturup bir trendin koşulu sağlandığında diğer trend ile işleme girilmeyi sağlayabilecek koşul oluşturabilirsiniz. İsterseniz stratejinizi veya trend komutlarını bizimle paylaşın istediğiniz durumu sağlayabilir miyiz bir inceleyelim.
0 0
Yardımcı olursanız gerçekten sevinirim. Bir video çekip egitim@matriksdata.cım adresine yollayacağım. Tam olarak nasıl bir şey istediğimi anlatmaya çalışacağım. Şimdiden teşekkür ederim.
0 0

Merhaba, 

myTrend = MyTrend(Symbol, SymbolPeriod, 100, 0, TrendType.Increasing, false);

//isAutoTrend(false) trend'i otomatik olarak cizip birakir. 
//True yapilirsa, bari her yeni data ile gunceller.

isAutoTrend 'i false geçerek hersaat başı (veya belirlenen period da) yeniden çizmesini sağlayabileceğiz bir kod ile aşabilirmiyiz.

0 0
Merhaba,

Algodaki trend fonksiyonları strateji başlangıcında çalıştırılmakta. Bahsettiğiniz şekilde çalıştırmak şu aşamada mümkün değil. Orta vadede bu fonksiyonların düzenlenmesi için çalışma yapacağız. O zaman istenildiği vakitte tekrar trendi tanımlamak(oluşturmak) mümkün olacak.

İyi çalışmalar
0 0
Merhaba, son güncellemelerden sonra konu ile ilgili gelişme oldumu acaba.
1 0

Merhaba.

Evet. Versiyon güncelleyiniz. Aşağıdaki bilgilendirmelere göre denemeler yapabilirsiniz.

İyi çalışmalar dileriz.

MyTrend Geliştirmeleri
1.)	Algo çalışmaya başladıktan sonra trend oluşturulabilmesi.
Önceki versiyonlarda trendler, indikatörler gibi sadece Init fonksiyonu içerisinde tanımlanabiliyorlardı. Geliştirmeler sonrası, OnDataUpdate gibi algo başlatıldıktan sonra çalışan yerlerde de MyTrend fonksiyonu kullanılabiliyor ve yeni trendler oluşturulabiliyor.
2.)	Trend’den snapshot oluşturulması:
Önceden oluşturmuş olduğumuz bir trendin o andaki halinden bir kopya oluşturmak için kullanılır. Autotrendlerde yeni veri geldiğinde uygun koşullarda trend parametreleri değiştiği için, güncellenme öncesi durumu muhafaza edebilme ve sonradan kullanabilme olasılığı sağlar.
Önceden oluşturulmuş, myTrend isimli bir trend üzerinden aşağıdaki şekilde çağrılarak kullanılır.
var snapshot = myTrend.GetSnapshot();
Oluşan snapshot objesi, MyTrend ile oluşturulan trendler ile aynı tipten bir objedir. Dolayısıyla trendler üzerinde kullanılabilen fonksiyonlar snapshot için de çalışır.
Snapshot’ın X1, X2, Y1, Y2 gibi tanım parametreleri sabit kalacaktır. CurrentIndex ve CurrentValue parametreleri ise yeni barlar geldikçe güncellenir.
3.)	Indikatör üzerinden trend tanımlanabilmesi
Indikatör üzerinden trend tanımlayabilmek için aşağıdaki fonksiyonlar eklendi:
•	MyTrend(IIndicator indicator, int barCount, int refIndex, TrendType trendType, int lineIndex = 0, bool isAutoTrend = false)

İndikatör çizgisinin verisi ile yükselen/düşen trend oluşturmak için kullanılır.

indicator: Trend için kullanılacak indikator
barCount: Bar sayısı
       refIndex: Bitiş noktası referans indeksi
       trendType: Yükselen / Düşen trend seçeneği
       lineIndex: Indikator cizgisinin indeksi. Opsiyonel (default 0)
isAutoTrend: Trendi data ile birlikte güncelle. Opsiyonal (default false)

Örnek: Algoda tanımlı sma datasını kullanarak, bir bar önce biten ve 100 bar uzunluğunda bir yükselen trend oluşturmak için aşağıdaki ifade kullanılabilir.
var trend = MyTrend(sma, 100, 1, TrendType.Increasing, 0, false);

•	MyTrend(IIndicator indicator, DateTime startTime, DateTime endTime, TrendType trendType, int lineIndex = 0)

İndikatör çizgisinin verisi ile tarih vererek yükselen/düşen trend oluşturmak için kullanılır. Tarihler, indikatörün oluşturuluğu sembol ve periyodun bar data tarihlerine denk gelmelidir.

İndicator: Trend için kullanılacak indikator
       startTime: Trend başlangıç zamanı
       endTime: Trend bitiş zaman
       trendType: Yükselen / Düşen trend seçeneği
       lineIndex: Indikator cizgisinin indeksi. Opsiyonel (default 0)

Örnek: Aşağıdaki ifade ile verilen iki tarih arasında, algoda tanımlı sma kullanılarak yükselen trend oluşturulabilir.
var trend = MyTrend(sma, new DateTime(2021, 1, 3), new DateTime(2021, 3, 3), TrendType.Increasing, 0);


•	MyTrend(IIndicator indicator, int barCount, int refIndex, decimal startValue, decimal endValue)

İndikatör üzerine verilen değerler ile trend oluşturmaya yarar. İndikatör yerine sembol ve periyot verilerek de aynı trend oluşturulabilir. İki durumda da verilen data serisinin trende etkisi, trendin indekslerini belirlemektir.

       İndicator: Trend için kullanılacak indikator
       barCount: Bar sayısı
       refIndex: Bitiş noktası referans indeksi
       startValue: Başlangıç noktasındaki trend değeri

Örnek: 100 bar önce 15.2 değeri ile başlayıp, güncel barda 17.4 değerinde biten bir trend çizgisi önceden tanımlanmış bir sma indikatörü ile aşağıdaki gibi oluşturulabilir.
var trend = MyTrend(sma, 100, 0, 15.2m, 17.4m, false);

•	MyTrend(IIndicator indicator, DateTime startTime, decimal startValue, DateTime endTime, decimal endValue)

İndikatör üzerine verilen değerler ve tarih aralığı ile trend oluşturmaya yarar. indikatörün oluşturuluğu sembol ve periyodun bar data tarihlerine denk gelmelidir. İndikatör yerine sembol ve periyot verilerek de aynı trend oluşturulabilir. İki durumda da verilen data serisinin trende etkisi, trendin indekslerini belirlemektir.

       İndicator: Trend için kullanılacak indikator
       startTime: Trend başlangıç zamanı
       startValue: Başlangıç noktasındaki trend değeri
       endTime: Trend bitiş zaman
endValue: Bitiş noktasındaki trend değeri

Örnek: 3 ocak 2021’de 15.2 değeri ile başlayıp, 3 Mart 2021’de 17.4 değerinde biten bir trend çizgisi önceden tanımlanmış bir sma indikatörü ile aşağıdaki gibi oluşturulabilir.
var trend = MyTrend(sma, new DateTime(2021, 1, 3), 15.2, new DateTime(2021, 3, 3), 17.4);


4.)	Trendler için cross fonksiyonları:

•	CrossAbove(ISymbolBarData symbolBarData, OHLCType ohlcType, ITrend trend)

Bar datanın trendi yukarı kırıp kırmadığını kontrol eder

symbolBarData: Trendi kırma kontrolü yapılacak bar data
ohlcType: Ohlc Tipi
trend: Kırılma kontrolünün yapılacağı trend

Örnek: Kapanışın trendi yukarı kırıp kırmadığını kontrol etmek için aşağıdaki kod kullanılmalıdır.
var crossAbove = CrossAbove(barData, OHLCType.Close, myTrend);

•	CrossBelow(ISymbolBarData symbolBarData, OHLCType ohlcType, ITrend trend)

Bar datanın trendi aşağı kırıp kırmadığını kontrol eder

symbolBarData: Trendi kırma kontrolü yapılacak bar data
ohlcType: Ohlc Tipi
trend: Kırılma kontrolünün yapılacağı trend

Örnek: Kapanışın trendi aşağı kırıp kırmadığını kontrol etmek için aşağıdaki kod kullanılmalıdır.
var crossBelow = CrossBelow(barData, OHLCType.Close, myTrend);


•	CrossAbove(IIndicator indicator, ITrend trend, int indicatorLineIndex = 0)

Verilen indikatör çizgisinin trendi yukarı kırıp kırmadığını belirten bir boolean döner.

İndicator: Trendi kırma kontrolü yapılacak indikatör
Trend: Kırılma kontrolünün yapılacağı trend
indicatorLineIndex: İndikatörün çizgi indeksi. Opsiyonel (default 0)

Örnek: Bollinger down çizgisinin trendi yukarı kırıp kırmadığını kontrol etmek için şu ifade kullanılmalıdır.
var crossAbove = CrossAbove(bollinger, myTrend, 2);


•	CrossBelow(IIndicator indicator, ITrend trend, int indicatorLineIndex = 0)

Verilen indikatör çizgisinin trendi aşağı kırıp kırmadığını belirten bir boolean döner.

İndicator: Trendi kırma kontrolü yapılacak indikatör
Trend: Kırılma kontrolünün yapılacağı trend
indicatorLineIndex: İndikatörün çizgi indeksi. Opsiyonel (default 0)

Örnek: Bollinger down çizgisinin trendi aşağı kırıp kırmadığını kontrol etmek için şu ifade kullanılmalıdır.
var crossBelow = CrossBelow(bollinger, myTrend, 2);


5.)	Diğer:
Algo işleyişi esnasında yeni trendler oluşturulmasına imkan verilmesi ve bu trendlerin de arka planda kaydedilip güncellemelerinin yapılması, kullanıcıların sonsuz sayıda trendi algoya eklemesine imkan veriyor. Memory ve performans sorunu oluşturmamak için artık kullanılmayacak trendlerin silinmesi gerekiyor. Bu nedenle aşağıdaki fonksiyon eklendi.
DisposeTrend(ITrend trend)

 

0 0
Geniş bilgilendirme için teşekkür ederim. ilhan bey
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ı