Matriks Destek ve Yardım Platformu

Matriks Ürünleri ile ilgili tüm sorularınız için bizlere buradan ulaşabilirsiniz. Daha önce sorulan soruları ve verilen cevapları ilgili sekmelerden ve arama üzerinden inceleyebilirsiniz. Sağ taraftaki kategoriler üzerinden İlgilendiğiniz özelliklerle ilgili soruları filtreleyebilirsiniz. Soru ve cevapları sosyal medyada paylaşabilirsiniz. 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.

0

Saatlik Veriyi Dakikalıkta Önceki Bara Göre Kullanmak

Soruldu
Görüntülenme
1.654 görüntülenme
Durum
Çözüldü
Selamlar; 60-15 ve 1 dakikalık verileri kullanan ve 1 dakikalık barlara göre işlem açıp kapatan bir stratejim var. 60 dakikalıktan çektiğim Hareketli Ortalama, canlıda çalışırken paint yapıyor sanırım. Bu yüzden bir önceki barı dikkate almasını istiyorum.

HO.Value[0][HO.CurrentIndex-1]  gibi bir yapı kullandığımda, veriyi saatlikten çektiği için 1 saat önceki HO'nın pozisyonunu alıyor. Halbuki ben 1 dakika önceki pozisyonunu dikkate almasını istiyorum. Bunu nasıl bir formül ile sağlayabilirim?
Paylaş

1 Cevap

2

Kabul edilen cevap

Merhaba,

öncelikler çoklu sembol ve çoklu periyotta çalışıldığında istenmeyen sinyaller oluşmaması için sembolID ve periyot kontrolü yapılması gerekir.

Evet HO.Value[0][HO.CurrentIndex-1] ile bir önceki 60DK'lık hareketli ortalamanın değerini verir.

şöyle bir şey yapılabilir. 1DK için ondataupdate methodu tetiklendiğinde o anki 60DK hareketli ortalama değeri bir dictonary eklenebilir. Daha sonra bir önceki değer çağrılabilir. aşağıdaki gibi bir yapı kurulabilir.

[SymbolParameter("GARAN")]
		public string Symbol;

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

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

		[Parameter(5)]
		public int MovPeriod;

		[Parameter(22)]
		public int MovPeriod2;

		// indikator tanımları.
		MOV mov;
		MOV mov2;

		MOV mov60DK;

		public override void OnInit()
		{
			mov60DK = MOVIndicator(Symbol, SymbolPeriod.Min60, OHLCType.Close, 5, MovMethod.Simple);

			AddSymbol(Symbol, GrafikPeriod);
			mov = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod, MovMethod.Exponential);
			mov2 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod2, MovMethod.Exponential);

			SendOrderSequential(true);
			WorkWithPermanentSignal(true);
		}
		
		Dictionary<int,decimal> liste =new Dictionary<int,decimal>();

		public override void OnDataUpdate(BarDataEventArgs barData)
		{			
			if (barData.PeriodInfo == GrafikPeriod.ToPeriodInfo())
			{
				var index=barData.BarDataIndex;				
				liste[index]=mov60DK.CurrentValue;				
				Debug("önceki 60DK'lık hareketli ortalama: "+liste[index-1]);		
				
				// yapılacak işlemler
			}
		}

Periyot kontrolü:

using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using Matriks.Indicators;
using Matriks.Symbols;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Lean.Algotrader.Trading;

namespace Matriks.Lean.Algotrader
{
	public class CokluPeriyot : MatriksAlgo
	{
		[SymbolParameter("GARAN")]
		public string Symbol;

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

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

		[Parameter(5)]
		public decimal BuyOrderQuantity;

		[Parameter(5)]
		public decimal SellOrderQuantity;

		[Parameter(5)]
		public int MovPeriod;

		[Parameter(22)]
		public int MovPeriod2;

		// indikator tanımları.
		MOV mov;
		MOV mov2;

		public override void OnInit()
		{
			AddSymbol(Symbol, GrafikPeriod);
			mov = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod, MovMethod.Exponential);
			mov2 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod2, MovMethod.Exponential);

			SendOrderSequential(true);
			WorkWithPermanentSignal(true);
		}

		public override void OnDataUpdate(BarDataEventArgs barData)
		{
			Debug(barData.PeriodInfo + " - " + GrafikPeriod.ToPeriodInfo());

			if (barData.PeriodInfo == GrafikPeriod.ToPeriodInfo())
			{
				if (CrossAbove(mov, mov2))
				{
					SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
					Debug("Alış Emri Gönderildi");
				}

				if (CrossBelow(mov, mov2))
				{
					SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
					Debug("Satış Emri Gönderildi");
				}
			}
		}
	}
}

 

Unblocked Games offering a wide range of experiences: action, puzzle, platform, racing, clicker mechanics, strategy, sports, even horror.
https://unblocked1games.github.io
BağlantıBayrakladüzenlendi · pedherKripexMatriks Destek16.499

Yorumlar (4)

  • ▲0
    Selamlar tekrardan; öncelikle formül için teşekkür ediyorum. 2 gündür Live Test'teyim; ancak Backt Test yaptığımda, evet, eskisine nazaran çok daha iyi durumdayız fakat yine de sonuçlar birbiriyle tutmuyor. Logları incelediğimde BackTest ile LiveTest arasında değerlerin verildiği zamanların farklı olduğunu fark ettim. Live'da bir period ileriden geliyor. Önce saat farkı gibi bir şey var zannettim ancak 5 dakikalıkta da aynı durum var.

    Yani saatlikte, BackTest'te 14:00' da değer almış Ema, ancak Live'da aynı değeri 15:00'da almış. Yine 5 dakikalıkta, BackTest'te 14:05'te atanan değer, Live'da 14:10'da atanmış.

    Bunun sebebi nedir? Kurtulmanın bir yolu var mıdır? İkinci verdiğiniz formülden bahsediyorum.
  • ▲0

    Merhabalar,

    Bahsettiğiniz durum kalıcı sinyal ile çalışmanızdan kaynaklıdır.

    Backtestte karşılaştığınız alış veya satışlar live testte bir bar sonra ( 5Dk.lık periyotta işlem yapıyorsanız 5Dk., 60 Dk.lıkta işlem yapıyorsanız 60 Dk sonra gibi..) gerçekleşir. 

    Geçici sinyal ile çalışabilmeniz mümkündür fakat geçici sinyal ile de bir takım riskler söz konusudur.

    Dilerseniz aşağıda paylaşılan linki inceleyebilirsiniz.

    https://destek.matriksdata.com/?qa=6696/ge%C3%A7ici-sinyal-nedir-ne-de%C4%9Fildir&show=6696#q6696

    İyi çalışmalar.

     

  • ▲0
    son düzeltilmiş halini strateji olarak ekler misiniz?

    teşekkürler.
  • ▲1
    WorkWithPermanentSignal(true);

    Buradaki "true" değerini, "false" olarak değiştirmek yeterli olacak ozturkc...

Cevabınız

Cevap yazmak için giriş yapın.Giriş yapKayıt ol