0 beğenilme 0 beğenilmeme
612 kez görüntülendi
Merhaba;

Herhangi bir coinin matriks iq explorer da btc ile olan korelasyonunu nasıl bulabilirim?

Teşekkür ederim.
Explorer kategorisinde (118 puan) tarafından | 612 kez görüntülendi

1 cevap

1 beğenilme 0 beğenilmeme

Merhaba,

Aşağıdaki indikatörü inceleyip explorerda kullanabilirsiniz.

iyi çalışmalar.

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("Korelasyon", IndicatorDrawingArea.NewWindow)]
	//Indikatörün çizgilerinin isimleri
	[IndicatorLineInformationAttribute(new []
		{
			"Korelasyon"
		})]

	public class KorelasyonKripex : MatriksIndicator
	{
		int toplmaBarSayisi = 0;
		decimal correl = 0.0m;
		bool bayrak=true;

		[DefaultValue("BTC_USDT_BIN")]
		public string Symbol1
		{
			get; set;
		}

		public sealed override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod);
			AddSymbol(Symbol1, SymbolPeriod);
		}

		public override void OnInitComplated()
		{
			toplmaBarSayisi = GetBarData().Close.LastOrDefault().Key;
		}

		public override void OnDataUpdate(int currentBar, decimal inputValue, DateTime barDateTime)
		{
			if (currentBar == toplmaBarSayisi && bayrak)
			{
				bayrak=false;
				
				var seri1 = GetBarData(Symbol1, SymbolPeriod).Close;
				var seri2 = GetBarData().Close;

				var adet = seri1.Count;

				var siraliSeri1 = new List<decimal>(seri1.Values).OrderBy(s => s).ToList();
				var siraliSeri2 = new List<decimal>(seri2.Values).OrderBy(s => s).ToList();

				var siralarFarkiKaresiToplami = seri1.Zip(seri2, (x, y) => Math.Pow(siraliSeri1.IndexOf(x.Value) + (siraliSeri1.Count(s => s == x.Value) > 1 ? 1D / siraliSeri1.Count(s => s == x.Value) + 1 : 1) - (siraliSeri2.IndexOf(y.Value) + (siraliSeri2.Count(s => s == y.Value) > 1 ? 1D / siraliSeri2.Count(s => s == y.Value) + 1 : 1)), 2)).Sum();
				
				correl= 1M - 6M * (decimal)siralarFarkiKaresiToplami / (adet * (decimal)(Math.Pow(adet, 2) - 1)); 
			}

			SetLine(currentBar, correl);
		}
	}
}

 

 

 

(15,872 puan) tarafından
0 0

Elinize sağlık teşekkür ederim. Kodun alttaki satırlarından anladığım kadarıyla tüm barları alarak hesaplama yapılıyor 

var siraliSeri1 = new List<decimal>(seri1.Values).OrderBy(s => s).ToList();
var siraliSeri2 = new List<decimal>(seri2.Values).OrderBy(s => s).ToList();

 

Bunları sınırlandırarak, yani her indikatörde olduğu gibi uzunluk belirlenebilmesi için yardımcı olur musunuz?

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,087 soru
8,058 cevap
4,580 yorum
14,727 kullanıcı