merhaba, konuyla ilgili belki yardımım dokunabilir.
öncelikli olarak belirtmem gerekir ki ben yazılımcı vs değilim. Kod bilgim çok zayıf, ben de yeni öğreniyorum buradaki çoğu kişi gibi. o yüzden tam olarak istediğiniz şey olmayabilir. en azından fikir verir.
Span A,B değerlerinin 1 barlık Hareketli ortalamasını alın. yani bu değerleri MOV indikatörüne gömün. 1 barlık herhangi bir hareketli ortalama yöntemi kendi değerini verir zaten. Cross Ref fonksiyonları indikatör değeri vs istiyor. Bizim Kullanmak istediğimiz Span A,B değerlerini MOV içine gömmüştük zaten. olay tamam yani, şimdi Cross ve Ref fonksiyonlarının kafasına vurup al ulen sana indikatör diyebilirsiniz :)))
indikatörü eklerken adını dstk1 yapın yoksa hata verir
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
[IndicatorInformationAttribute("dstk1", IndicatorDrawingArea.NewWindow)]
//Indikatörün çizgilerinin isimleri
[IndicatorLineInformationAttribute(new []
{
"dstk1(0)"
})]
public class dstk1 : 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(5)]
public int Period
{
get; set;
}
public decimal res
{
get; set;
}
MOV mov;
MOV mov2;
IchiMoku ichiMoku;
public sealed override void OnInit()
{
mov = new MOV(1, MovMethod.Simple);
mov2 = new MOV(1, MovMethod.Simple);
ichiMoku = IchiMokuIndicator(Symbol, SymbolPeriod, 9, 26, 26, 52, 26);
}
/// <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(currentBar, 0);
decimal k = ichiMoku.SenkouSpanAValue;
decimal l = ichiMoku.SenkouSpanBValue;
mov.Update(k, currentBar, barDateTime);
mov2.Update(l, currentBar, barDateTime);
if (currentBar < Period)
{
return ;
}
if (Input.Count >= Period)
{
if (CrossAbove(mov, mov2)) // kullandığın periyoda göre Span A,B için Ref() ayarlarsın
{ // Ref(mov,-1) Ref(mov2,-1) yapıp Span A,B 1 önceki değeri alabilirsin
res = 1;
}
else res = 0;
SetLine(currentBar, res);
}
}
}
}