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

Tarama kodumu for döngüsüne sokmak istiyorum

Soruldu
Kategori
Explorer
Görüntülenme
98 görüntülenme
Durum
Cevaplandı
Aşağıdaki explorer kodunda gun isimli bir parametrem var. Buna 0 değeri verirsem son bar için tarama yapıyor. 1 verirsem bir önceki bar için tarama yapıyor. Bu kodu for döngüsüne sokup mesela son 5 barın hepsi için tarama yaptırmak istiyorum. Yani gun parametresini 1-5 değerleri arası for döngüsüne sokmak istiyorum. Matriksiq formatına uygun şekilde bunu nasıl yapabilirim?

 

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;

using Matriks.AI;

using Matriks.AI.AiParameters;

using Matriks.AI.Data;

using Matriks.Trader.Core.TraderModels;

 

namespace Matriks.Lean.Algotrader

{

public class zirvekıran2 : Explorer

{

// Strateji çalıştırılırken kullanacağımız parametreler. Eğer sembolle ilgili bir parametre ise,

// "SymbolParameter" ile, değilse "Parameter" ile tanımlama yaparız. Parantez içindeki değerler default değerleridir.

 

 

 

[Parameter(200)]

public int HighesthighPeriod200;

 

[Parameter(20)]

public int HighesthighPeriod20;

 

HighestHigh highestHigh200;

 

[Parameter(0)]

public int gun;

 

MOV mov200;

 

HighestHigh highestHigh20;

 

MOV mov20;

 

 

public override void OnInit()

{

mov20 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, 20, MovMethod.Simple);

 

highestHigh200 = HighestHighIndicator(Symbol, SymbolPeriod, OHLCType.High, HighesthighPeriod200);

 

mov200 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, 200, MovMethod.Simple);

 

highestHigh20 = HighestHighIndicator(Symbol, SymbolPeriod, OHLCType.High, HighesthighPeriod20);

 

 

AddColumns(2);

SetColumnText(0, "Gün Fark");

SetColumnText(1, "MOV");

 

 

}

 

 

/// <summary>

/// Eklenen sembollerin bardata'ları ve indikatorler güncellendikçe bu fonksiyon tetiklenir.

/// </summary>

/// <param name="barData">Bardata ve hesaplanan gerçekleşen işleme ait detaylar</param>

public override bool OnExplorer(List<BarDataEventArgs> bardatas)

{

 

 

 

var barData1 = GetBarData(Symbol, SymbolPeriod);

var close = GetSelectedValueFromBarData(barData1, OHLCType.Close, gun);

var close1 = GetSelectedValueFromBarData(barData1, OHLCType.Close, gun + 1);

 

SetColumn(0, (close / close1 -1));

SetColumn(1, mov200.CurrentValue);

 

var bardata = bardatas.FirstOrDefault() ? .BarData;

 

 

 

if (mov200.CurrentValue > 0 && (close >= highestHigh200.Value[0][highestHigh200.CurrentIndex - (gun + 1)] || (close / close1 -1) >= 0.06m))

{

return true;

}

if (mov200.CurrentValue == 0 && mov20.CurrentValue > 0 && (close >= highestHigh20.Value[0][highestHigh20.CurrentIndex - (gun + 1)] || (close / close1 -1) >= 0.06m))

{

return true;

}

return false;

 

 

}

}

}
Paylaş

1 Cevap

0

Merhabalar,
Döngüye şu şekilde girebilirsiniz.
 

HighestHigh highestHigh;
SMA sma;

public override void OnInit()
{
	sma = SMAIndicator(Symbol, SymbolPeriod, OHLCType.Close, 1);
	highestHigh = HighestHighIndicator(Symbol, SymbolPeriod, OHLCType.High, 5);
}

public override bool OnExplorer(List<BarDataEventArgs> bardatas)
{
	for (int i = 0; i <= son_x_bar; i++)
	{
		if (sma.Value[0][sma.CurrentIndex] > highestHigh.Value[0][highestHigh.CurrentIndex - i] ||
			sma.Value[0][sma.CurrentIndex - i] > highestHigh.Value[0][highestHigh.CurrentIndex - i -1])
		{
			return true;
		}
	}
	return false;
}

Oluşturduğunuz değişkeni for içinde sınır olarak verdikten sonra,
i değişkeni her artırıldığında indikatörün indeks değerinden bir önceki değerini almanız gerekir. 

İyi çalışmalar dileriz.

BağlantıBayrakladüzenlendi · emresemresMatriks Destek6.795

Cevabınız

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