0 beğenilme 0 beğenilmeme
477 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 | 477 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,532 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?

7,574 soru
7,580 cevap
4,427 yorum
10,086 kullanıcı