MatriksIQ Destek
Matriks Destek
Matriks Web Destek
Matriks Mobile Destek
2 beğenilme 0 beğenilmeme
93 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 (206 puan) tarafından | 93 kez görüntülendi

1 cevap

3 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;
			}
		}
	}
}

 

(870 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
2 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.
166 soru
181 cevap
193 yorum
130 kullanıcı