Trendin Sürekli Olarak Yenilenmesi
- Soruldu
- Kategori
- Algoritmik Trading
- Görüntülenme
- 2.454 görüntülenme
- Durum
- Cevaplandı
Matriks Ürünleri ile ilgili tüm sorularınız için bizlere buradan ulaşabilirsiniz. Daha önce sorulan soruları ve verilen cevapları ilgili sekmelerden ve arama üzerinden inceleyebilirsiniz. Sağ taraftaki kategoriler üzerinden İlgilendiğiniz özelliklerle ilgili soruları filtreleyebilirsiniz. Soru ve cevapları sosyal medyada paylaşabilirsiniz. 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.
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);
}
}
}
}
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.
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)
Sitenin çalışması için gerekli çerezleri kullanıyoruz. Ziyaretleri anlamak için analitik çerezleri yalnızca onayınızla kullanırız. Çerez Politikası