3 beğenilme 0 beğenilmeme
1,211 kez görüntülendi
Merhaba ;

 Strateji oluşturur iken bir al bir sat şeklinde yapıyorum, Fakat zaten almış durumda iken strateji başlatırsam ilk komutun al olması gerektiği için sat komutu vermeyecektir. Bunu nasıl aşabiliriz. İlk komut al veya ilk komut sat ile başlasın gibi bir seçenek ekleyebilimiyim.
Algoritmik Trading kategorisinde (888 puan) tarafından | 1,211 kez görüntülendi

1 cevap

5 beğenilme 0 beğenilmeme

 

Merhaba,

SendOrderSequential(false);

yaparak ve alış ve satışlarını tutan bir değişken ile ilk satış ile başlayıp daha sonra alış-satış şeklinde ilerlemesini sağlayabilirsiniz.

Aşağıdaki örnek strateji stratejinizin ilk alışla yada satışla başlamasını sağlar.

İlk satışla başlaması için AlisIleBasla değişkeninin false olması gerek

[Parameter(false)]
public bool AlisIleBasla;

 

using System;
using System.Collections.Generic;
using System.Linq;
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
{
	public class SatisIleBasla : MatriksAlgo
	{
		// 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.

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

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

		[Parameter(1)]
		public decimal BuyOrderQuantity;

		[Parameter(1)]
		public decimal SellOrderQuantity;

		[Parameter(3)]
		public int Period;

		[Parameter(2)]
		public decimal Percentage;

		MOST most;

		[Parameter(false)]
		public bool AlisIleBasla;

		public override void OnInit()
		{
			most = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period, Percentage, MovMethod.Exponential);

			AddSymbol(Symbol, SymbolPeriod);

			// Algoritmanın kalıcı veya geçici sinyal ile çalışıp çalışmayacağını belirleyen fonksiyondur.
			// true geçerseniz algoritma sadece yeni bar açılışlarında çalışır, bu fonksiyonu çağırmazsanız veya false geçerseniz her işlem olduğunda algoritma tetiklenir.
			WorkWithPermanentSignal(true);

			//Eger backtestte emri bir al bir sat seklinde gonderilmesi isteniyor bu true set edilir. 
			//Alttaki satırı silerek veya false geçerek emirlerin sirayla gönderilmesini engelleyebilirsiniz. 

			SendOrderSequential(false);
		}


		/// <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 void OnDataUpdate(BarDataEventArgs barData)
		{
			if (CrossAbove(most.ExMOV, most) && AlisIleBasla == true)
			{
				SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));
				Debug("Alış emri verildi.");
				Debug("Most.ExMov:" + most.ExMOV.CurrentValue);
				Debug("Most:" + most.CurrentValue);
				AlisIleBasla = false;
			}

			if (CrossBelow(most.ExMOV, most) && AlisIleBasla == false)
			{
				SendMarketOrder(Symbol, SellOrderQuantity, (OrderSide.Sell));
				Debug("Satış emri verildi.");
				Debug("Most.ExMov:" + most.ExMOV.CurrentValue);
				Debug("Most:" + most.CurrentValue);
				AlisIleBasla = true;
			}
		}
	}
}

 

(15,422 puan) tarafından
tarafından düzenlendi
0 0
Elinize sağlık teşekkür ederim.
0 0

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 EMAcrs : MatriksAlgo

{

// 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.

 

[SymbolParameter("GARAN")]

public string Symbol;

 

[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()

{

//Symbol = "GARAN";

//SymbolPeriod = SymbolPeriod.Min5;

//BuyOrderQuantity = 1;

//SellOrderQuantity = 1;

//MovPeriod = 5;

//MovPeriod2 = 22;

AddSymbol(Symbol, SymbolPeriod);

mov = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod, MovMethod.Exponential);

mov2 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod2, MovMethod.Exponential);

 

SendOrderSequential(true);

//Alttaki fonksiyon açıldıktan sonra parametre olarak verilen saniyede bir OnTimer fonksiyonu tetiklenir.

//SetTimerInterval(3);

 

//Alttaki fonksiyon ile tanımlanan sembol ile ilgili haber geldiğinde OnNewsReceived fonksiyonu tetiklenir.

//AddNewsSymbol(Symbol);

 

//Alttaki fonksiyon ile tanımlanan anahtar kelime ile ilgili haber geldiğinde OnNewsReceived fonksiyonu tetiklenir.

//AddNewsKeyword("KAP");

}

 

/// <summary>

/// Init islemleri tamamlaninca, bardatalar kullanmaya hazir hale gelince bu fonksiyon tetiklenir. Data uzerinde bir defa yapilacak islemler icin kullanilir

/// </summary>

public override void OnInitComplated()

{

 

}

 

/// <summary>

/// SetTimerInterval fonksiyonu ile belirtilen sürede bir bu fonksiyon tetiklenir.

/// </summary>

public override void OnTimer()

{

 

}

 

/// <summary>

/// AddNewsSymbol ve AddNewsKeyword ile haberlere kayit olunmuşsa bu fonksiyon tetiklenir.

/// </summary>

/// <param name="newsId">Gelen haberin id'si</param>

/// <param name="relatedSymbols">Gelen haberin ilişkili sembolleri</param>

public override void OnNewsReceived(int newsId, List<string> relatedSymbols)

{

 

}

 

/// <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 void OnDataUpdate(BarDataEventArgs barData)

{

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");

}

}

 

/// <summary>

/// Gönderilen emirlerin son durumu değiştikçe bu fonksiyon tetiklenir.

/// </summary>

/// <param name="barData">Emrin son durumu</param>

public override void OnOrderUpdate(IOrder order)

{

if (order.OrdStatus.Obj == OrdStatus.Filled)

{

 

}

}

}

}

 

Bu stratejide;

[Parameter(false)] public bool AlisIleBasla;

Bu komut nereye konulmalı?

1 0
Merhaba

Bu stratejiyi kopyala yapıştır yaptım. KODU DERLE deyince aşağıdaki hatayı veriyor. Bu normal mi?

error CS0103: AlisIleBasla' adı geçerli bağlamda yok6740

error CS0103: AlisIleBasla' adı geçerli bağlamda yok735

error CS0103: AlisIleBasla' adı geçerli bağlamda yok7540

error CS0103: AlisIleBasla' adı geçerli bağlamda yok815
3 0
public class EMAcrs : MatriksAlgo

Bu bölüme strateji adını yazıyorsunuz bu kodlamada strateji adına "EMAcrs" yazmışsınız fakat kod içerisinde "AlisIleBasla" tanımlı olduğu için hata veriyor .

public class AlisIleBasla : MatriksAlgo

bu şekilde değiştirin.
1 0
Çok teşekkürler. Emeğinize sağlık.
0 0
Merhaba,

Yazdığınız kodu strateji koduna kopyaladım.

Kodu derle yaptığımda aldığım hata;

error CS0246:AlisIleBasla'türü veya ad alanı adı bulunamadı ( bir using yönergeniz veya derleme başvurunuz mu eksik?)

Nerede yanlış yapıyorum
1 0
Merhaba,

Yukarıda farklı farklı kodlar var. Hangisini almaya çalıştığınızı bilemiyorum. Farklı bir örnek vereyim:

Almaya çalıştığınız kodun içinde başlarda, şöyle bir satır vardır:

public class ACCBandsIndicator : MatriksAlgo

Burada kodun olması gereken adı ve türü vardır.

Türü: Algoritma ya da explorer ya da indicator olabilir. O tarafa eklenmelidir.

MatriksAlgo ifadesi algoritma olduğunu gösterir.

Ve eklerken adı da, public class yazısından sonraki isim ne ise o olmalıdır.

Yani, mesela bu örnekte:

ACCBandsIndicator

olmalıdır.

Lütfen almaya çalıştığınız kodun ilgili satırına bakınız ve başlangıcı o isimle yapınız.

İyi çalışmalar
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.



7,509 soru
7,511 cevap
4,405 yorum
8,742 kullanıcı