0 beğenilme 0 beğenilmeme
1,043 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 (430 puan) tarafından | 1,043 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

 

(13,600 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.



8,636 soru
8,590 cevap
4,821 yorum
19,799 kullanıcı