0 beğenilme 0 beğenilmeme
1,385 kez görüntülendi

Daha önce yaşamış olduğum close open verilerindeki kaymayı indexle çekerek çözmüştük fakat indikatör değerlerini Ref(indikatör,-1) ile çektiğimde backtestte ve canlıda farklı barın verilerini dönüyorlar. 

Asıl sorum: İndikatör değerlerini bar indexsiyle çekebilmemizin bir yolu var mı?

Not: kalıcı sinyal kullanıyorum.


edit:
 Aşağıdaki linkte bulunan sorumda canlı ve backtest debug verilerinin karşılaştırması var. close open bakıyordum fark etmedim ama Ref() fonksiyonuda backtest ve canlıda farklı barların verilerini dönüyor.
https://destek.matriksdata.com/?qa=1479/backtest-ve-canlida-farkli-sonu%C3%A7lar-alma-%C3%A7%C3%B6z%C3%BCld%C3%BC#c1491

Orçun Beyin yardımlarıyla problem çözüldü.


ÇÖZÜM: kalıcı sinyal ile çalışan arkadaşlar katiyen currentValue kullanmasınlar. kalıcı sinyalde kullanabileceğimiz en güncel veriyi Ref(indicator,0) fonksiyonuyla çekmeli(ymişi)z. indicator dışındaki diğer bar verileri içinde bu geçerli.

edit: çözüm eklendi.

Algoritmik Trading kategorisinde (390 puan) tarafından
tarafından düzenlendi | 1,385 kez görüntülendi

1 cevap

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

Merhabalar,

Ref(indikatör,0) olarak alırsanız sorun kalmayacaktır. Detaylı bilgi için linkteki cevabı inceleyebilirsiniz.

https://destek.matriksdata.com/?qa=1546/backtest-ve-canlı-işlem-tutarsızlığı-v2

İyi çalışmalar

(4,555 puan) tarafından
tarafından seçilmiş
0 0

merhaba Orçun bey,
Ref(indikatör,0) şeklinde kullandığımda  backtest ve canlıda 1 bar kayıyor. 
 

Canlıda düzgün çalışabilmesi için ben de bu şekilde kullanıyorum fakat bu seferde backtestte yanlış çalışıyor. bunu aşabilmemin yolu doğrudan bar indeksle indikatör değerine erişebilmem. bar indexle indikatör değeri çağırmanın bir yolu yok mu?

BAR KAYMASININ KANITIhttps://i.hizliresim.com/NhSqLv.png



---------------------------------------------------------------------------------

1 0
Merhaba,

Canlıda yazdırdığınız indikatör değeri bir bar öncekinin olacaktır. Yani 30dk lık periyotta çalışıyorsanız saat 17.00 de ki barın kapanış değerini bar kapandığı anda yani 17.30 barının açıldığı anda alacaksınız. Fakat backtestte böyle bir durum olmayacaktır.

Sizin ekran görüntünüzden örnek verecek olursak canlıda çalıştırdığınız stratejideki 17.30 da gelen değer aslında 17.00 barının kapanışında oluşan parabolicsar değeri olacaktır. Backtest ile kıyaslarken 17.00 ile kıyaslamanız gerekmektedir. Bu durumu göz önüne alıp tekrar kontrol eder misiniz?

İyi çalışmalar
0 0

şimdi ben en sade haliyle şöyle açıklayayım:
canlıda düzgün çalışan kodu backtest yaptığımda "0" işlem yapıyor. buda problemi kanıtlar benim için.


aynı şekilde backtestte düzgün çalışan kodu  canlıda günlerce çalıştırdım ve hiç işlem yapmadı.

çünkü tam parabolicSar değerlerinin kırıldığı noktadan giriyor ve önceki bar verilerini kullanıyor. kırılmaya geç kalmışsa girmiyor.

Her ne olursa olsun, hangi kod yazılırsa yazılsın aynı strateji backtest ve canlıda işleme farklı barlardan giriyorsa ciddi bir sorun var demektir. 

0 0
eğer indikatörleri bar indexiyle çekebilirsem close ve open de olduğu gibi benim sorunum çözülecek. Diğer arkadaşlarada Allah yardım etsin.
0 0
ayrıca 17:00 ile kıyaslamanız gerekir demişsinizde saat 17:30 olmuş ve Onupdate fonksiyonu tetiklenmiş. backtesttede canlıdada 17:30 da tetiklenmiş OnUpdate fonksiyonu. Bu durumda kullandığım Ref() fonksiyonlarının aynı değeri dönmesini beklememiz gerekmiyor mu?
1 0

Merhaba, 

Tam anlaşamadık sanırım ekran görüntüsü üzerinde anlatmaya çalışayım.

Resimdeki en soldaki rapor canlı veri, ortadaki backtest. İnceleyecek olursak backtest ve grafikteki değerlerin aynı saat diliminde geldiğini görebiliriz. Canlıda ise bar kapanış değerlerini kullanmak istediğimizden 20.17 barı 1dk sonra yani 20.18de kapanacağı için gelen veri saat 20.18 de gelmiş. 20.18 de gelmesi demek 20.18 barı olması demek değil. 20.17nin barının kapanış saati 20.18 demek.

Stratejinizi bilmediğimden işleme girmemesinin nedenini açıklamam mümkün değil. Ama aşağıdaki kodu kullanarak test ederseniz sorun olmadığını gözlemleyebilirsiniz.

İyi akşamlar

using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using System.Windows.Media;
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
{
	public class test1 : MatriksAlgo
	{
		[SymbolParameter("BTC_USDT_BIN")]
		public string Symbol;

		[Parameter(SymbolPeriod.Min)]
		public SymbolPeriod SymbolPeriod;

		[Parameter(0.02)]
		public decimal Acc;
		
		[Parameter(0.2)]
		public decimal maxAcc;

		ParabolicSAR parabolicSar;


		public override void OnInit()
		{

			parabolicSar = ParabolicSARIndicator(Symbol, SymbolPeriod, Acc, maxAcc);

			AddSymbol(Symbol, SymbolPeriod);
			
			WorkWithPermanentSignal(true);
			SendOrderSequential(true);

		}

		public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)
		{

			var bardata = GetBarData();
			Debug("**************************");
			Debug("Close : " + Ref(bardata, OHLCType.Close, 0));
			Debug("ParabolicSar : " + Ref(parabolicSar, 0) + "\n");
		}
	}
}

 

0 0
yorumunuzu sakin kafayla okursanız aslında sizde Ref() fonksiyonun backtest ve canlı arasında kaydırma yaptığını söylüyorsunuz.
0 0

ayrıca 17:00 ile kıyaslamanız gerekir demişsinizde saat 17:30 olmuş ve Onupdate fonksiyonu tetiklenmiş. backtesttede canlıdada 17:30 da tetiklenmiş OnUpdate fonksiyonu. Bu durumda kullandığım Ref() fonksiyonlarının aynı değeri dönmesini beklememiz gerekmiyor mu?

Bu sorunuza yanıt olarak backtestte bar açılış saati görünüyor ve de backtestteki veriler kapanmış barlardan alınıyor. Biz canlı yayın akışında 17.00 da açılıp 17.30da kapanacak olan bir barın 17.30 olmadan kapanış değerini nasıl alabiliriz?

yorumunuzu sakin kafayla okursanız aslında sizde Ref() fonksiyonun backtest ve canlı arasında kaydırma yaptığını söylüyorsunuz.

Demek istediğinizi anlıyorum ama bu olmak zorun olan birşey. Yanlışlık veya hata değil ondan bahsediyorum.

Umarım açıklayıcı olmuştur. İyi çalışmalar

0 0
Sayın orçun bey,
 debugda satırların solunda yazan saatler tetiklenme saatlerini ifade ederler.

backtestte ve canlıda aynı dakikada tetiklenen bir fonksiyon aynı değerleri dönmek zorunda değil mi?

grafikleri barları açılışda kapanışta tetiklenmesini bir kenara bırakıp bir düşünün ve cevap verin.

aynı dakikada tetiklenen fonksiyonların farklı değer dönmesini açıklamaya çalışıyorsunuz fakat bu kayma anlamına geliyor işte.
0 0

ben size sizleri seven bir kullanıcınız olarak  kendi çözümümü de söylüyorum.

DİYORUMKİ BAR İNDEXSİYLE İNDİKATÖR DEĞERİ ÇEKEBİLECEĞİM BİR YÖNTEM VAR MI?

SAYGILARIMLA

1 0
Ozan Bey,

Görünüm olarak öyle görünüyor lakin yukarıda da belirttiğim gibi backtestte aynı grafik gibi bar kapanış saati diye bir şey yazmaz. ikisinde de sadece bar açılış saati yazılır. Canlıda ise eğer bar kapanışından sonra işlem yapmak istiyorsanız. Tetiklenme ancak bir sonraki barın açılış saatinde olur. Kalıcı sinyal demekte budur zaten.
1 0
DİYORUMKİ BAR İNDEXSİYLE İNDİKATÖR DEĞERİ ÇEKEBİLECEĞİM BİR YÖNTEM VAR MI?
 

Yukarıda paylaştığım kod işinizi görmeli. İndex ile de yapmaya çalışsanız aynı sonucu vermek zorunda.
1 0
mesela ben 10. barın parabolicSar değerini istiyorum buna nasıl erişirim?
0 0
ayrıca anlaşamasakta baya vakit ayırıp uğraştınız  bunun için gerçekten TEŞEKKÜR EDERİM.
2 0

Ben teşekkür ederim. İyi akşamlar dilerim.

		public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)
		{

			var bardata = GetBarData();
			Debug("**************************");
			//index 0'dan başladığı için 11 çıkarılır. 
			var onuncubarindex = barDataCurrentValues.LastUpdate.BarDataIndex-11;
			Debug("Close : " + bardata.Close[10]);
			Debug("ParabolicSar : " + Ref(parabolicSar, onuncubarindex) + "\n");
		}

 

2 0
şöyle bir baktımda  baştan yazdıklarıma ve sizin yazdıklarınıza çok sabırlı bir insanmışsınız :)
Ayrıca çok ilgili ve yapıcısınız. Umarım hakettiğiniz yerlere gelirsiniz.

İyi çalışmalar. Matriks <3
2 0
Güzel yorumlarınız için biz teşekkür ederiz. Böyle yorumlar motivasyonumuzu arttırıyor.Teşekkürler.

İyi çalışmalar
8,639 soru
8,593 cevap
4,826 yorum
19,852 kullanıcı