0 beğenilme 0 beğenilmeme
888 kez görüntülendi
Merhabalar,

Kıvanç Bey'in paylaştığı Pmax indikatöürünü, kullanıcı indikatörleri kısmından İndikatör Al'a tıklayarak ekledim fakat grafikte göster dediğimde "İndikatör çalıştırılırken bir hata oluştu : Sıra, Eşleşen öğe içermiyor"  ve "Nesne başvurusu bir nesnenin örneğine ayarlanmadı" gibi hatalar alıyorum. Yardımcı olur musunuz?
Algoritmik Trading kategorisinde (428 puan) tarafından | 888 kez görüntülendi

1 cevap

1 beğenilme 0 beğenilmeme
En İyi Cevap

Merhaba.

Çok muhtemelen küsuratlı parametre girmek istediğiniz için bunu yaşıyorsunuz.

Lütfen, kod içinde şu değişikliği yapınız:

İndikator kodunu düzenle diyip aşağıdaki kırmızıyla boyadığımız yeri değiştirmeniz gerekiyor.

Eski Hali :

[DefaultValue(3)]

                        public int Coeff

                        {

                                   get; set;

                        }

Olması gereken :

[DefaultValue(3)]

                        public decimal Coeff

                        {

                                   get; set;

                        }

Bunu yaptıktan sonra kodu derle deyiniz ve tekrar deneyiniz. 

İyi çalışmalar

 

(12,790 puan) tarafından
tarafından seçilmiş
0 0

Malesef Hata devam ediyor, kod aşağıdaki gibi ;

 

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("PMax", IndicatorDrawingArea.OnDataSeries)]

//Indikatörün çizgilerinin isimleri

[IndicatorLineInformationAttribute(new []

{

"ST (0,1)", "K (0,1)"

})]

 

public class PMax : MatriksIndicator

{

 

[DefaultValue(10)]

public int AtrPeriod

{

get; set;

}

 

[DefaultValue(10)]

public int MovPeriod

{

get; set;

}

 

[DefaultValue(3)]

 

        public decimal Coeff

 

        {

 

             get; set;

 

        }

 

[DefaultValue(MovMethod.E)]

public MovMethod MovMethod

{

get; set;

}

WILDERS wilders;

MOV mov;

 

public sealed override void OnInit()

{

wilders = new WILDERS(AtrPeriod);

mov = new MOV(MovPeriod, MovMethod);

 

}

Dictionary<int, decimal> fubDict = new Dictionary<int, decimal>();

Dictionary<int, decimal> flbDict = new Dictionary<int, decimal>();

 

public override void OnDataUpdate(int currentBar, decimal inputValue, DateTime barDateTime)

{

SetLine(currentBar, 0);

SetLine(1, currentBar, 0);

if (currentBar < AtrPeriod)

{

fubDict[currentBar] = 0;

flbDict[currentBar] = 0;

return ;

}

if (currentBar - 1 < 0 || !Instrument.SymbolBarData.Close.ContainsKey(currentBar - 1)) return ;

var high = Instrument.SymbolBarData.High[currentBar];

var low = Instrument.SymbolBarData.Low[currentBar];

var diff = high - low;

 

var range2 = Math.Abs(high - Instrument.SymbolBarData.Close[currentBar - 1]);

var range3 = Math.Abs(low - Instrument.SymbolBarData.Close[currentBar - 1]);

 

var value = Math.Max(diff, Math.Max(range2, range3));

 

wilders.Update(value, currentBar, barDateTime);

mov.Update((high + low) / 2, currentBar, barDateTime);

var k = mov.CurrentValue;

var offset = Coeff * wilders.CurrentValue;

var str = k + offset;

var sts = k - offset;

var prev = Value[0][currentBar -1];

var fub = str<prev || Ref(mov, -1) >prev? str:prev;

var flb = sts>prev || Ref(mov, -1) <prev? sts:prev;

fubDict[currentBar] = fub;

flbDict[currentBar] = flb;

var st = prev == fubDict[currentBar -1] && k<fub? fub : (prev == fubDict[currentBar -1] && k>fub? flb:(prev == flbDict[currentBar -1] && k>flb? flb

:(prev == flbDict[currentBar -1] && k<flb? fub:fub)));

SetLine(currentBar, st);

SetLine(1, currentBar, k);

 

}

}

}

 

1 0
Uygulamayi kapatip acip dener misiniz?
0 0
Evet kapatıp açınca düzeldi teşekkürler
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,509 soru
7,511 cevap
4,405 yorum
8,732 kullanıcı