Ekte Trix indikatörü için kodu bıraktım. indikatör adını dstk3 yapın, çalışmaz yoksa. yanlışsa üstatlar düzeltir zaten sıkıntı yok. iq destek ekibinin yükünü hafifletmiş olalım. muhtemelen üstatlar daha derli toplu ve kısa olanını fırsat bulunca yazacaklardır. ben kulağımı ayağımla falan da tutmuş olabilirim. Üstatlar terminale ekleyene kadar siz bununla takılın. değerleri matriks de hazır Trix indikatörüyle kontrol ettim aynı değerler. Sadece matrix de virgülden sonra 4 hane var. Kodda Math.Round(xxx , 4) denedim ama yemedi :)) siz grafiğe ekleyince çift tıklayın oradan ondalık kısmını 4 yapın veya fark etmez matriks de 0.1794 gördüğünüz değeri burada 0.18 görürsünüz. ben yapamadım ama basittir muhtemelen, ben bilmiyorum. hatta ben c# da bilmiyorum :)))
kabul ederseniz ufak bir tavsiye size. bu kodu siz de yazabilirsiniz. Dil bilmenize gerek yok, ben c# bilmiyorum ama iq da aslına bakarsanız bilmenize de gerek yok. iq ekibi sağolsun hazır stratejilerde vs bir çok yerde açık kaynak olarak paylaşmışlar kodları . Orda fonksiyonların altında geçmiş verileri nasıl çağırıyorlar , değişken nasıl tanımlıyorlar vs dikkat edin, c# bilmeseniz bile kopyala yapıştır geri kalanı.
using System;
using System.Collections.Generic;
using System.Linq;
using System.ComponentModel;
using Matriks.Data.Identifiers;
using Matriks.Data.Symbol;
using Matriks.Engines;
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
{
//Ilk parametre indikatörün adı, sınıfın adıyla aynı olmalıdır.
//Ikinci parametre indikatörün Dataserisinin üzerine mi yeni pencereye mi ekleneceğini belirtir. Yeni pencere için ->IndicatorDrawingArea.NewWindow , Data Serisi için IndicatorDrawingArea.OnDataSeries
[IndicatorInformation("dstk3", IndicatorDrawingArea.NewWindow)]
//Indikatörün çizgilerinin isimleri
[IndicatorLineInformation(new []
{
"dstk3 (0,1)", "dstk3 1 (0,1)"
})]
public class dstk3 : MatriksIndicator
{
//Indicator opsiyon panelinde değerleri değiştirebildiğimiz parametreler. Int, Bool, Decimal ve Enum değerleri alabilir.Tüm değişken tiplerini DefaultValue ile tanımlarız.
[DefaultValue(12)]
public int Period
{
get; set;
}
[DefaultValue(9)]
public int Period2
{
get; set;
}
public decimal uli
{
get; set;
}
public decimal uli_2
{
get; set;
}
public decimal uli_3
{
get; set;
}
public decimal k
{
get; set;
}
MOV mov;
MOV mov2;
MOV mov3;
MOV mov4;
//Eklenmek istenen indikatorün imzasını burda belirtiyoruz.
//Indicator değerleri hesaplanmadan önce yaratılacak indikatörler burda tanımlanıyor.
public override void OnInit()
{
DrawHorizantal(0);
mov = new MOV(Period, MovMethod.Exponential);
mov2 = new MOV(Period, MovMethod.Exponential);
mov3 = new MOV(Period, MovMethod.Exponential);
mov4 = new MOV(Period2, MovMethod.Simple);
}
/// <summary>
/// Seçilen sembolün bardata'ları güncellendikçe bu fonksiyon tetiklenir.
/// </summary>
/// <param name="currentBar">Güncellenen bardata'nın indexteki sırası</param>
/// <param name="inputValue">Seçilen OHLC tipine göre gelen bardata'nın o anki değeri</param>
/// <param name="barDateTime">Bardata'ya gelen güncelleme zamanı</param>
public override void OnDataUpdate(int currentBar, decimal inputValue, DateTime barDateTime)
{
SetLine(0, currentBar, 0);
SetLine(1, currentBar, 0);
if (currentBar < Period*3)
{
return ;
}
var barDataModel = Instrument.SymbolBarData;
k = barDataModel.Close[currentBar];
mov.Update(k, currentBar, barDateTime);
mov2.Update(mov.CurrentValue, currentBar, barDateTime);
mov3.Update(mov2.CurrentValue, currentBar, barDateTime);
uli = mov3.CurrentValue;
uli_2 = Ref(mov3, -1);
if (currentBar>Period*3)
{
uli_3 = (uli - uli_2) / uli_2 * 100;
mov4.Update(uli_3, currentBar, barDateTime);
}
SetLine(currentBar, uli_3);
SetLine(1, currentBar, mov4.CurrentValue);
}
}
}