0 beğenilme 0 beğenilmeme
584 kez görüntülendi

merhaba Bu stratejiyi değişkenleri Variable olarak ve optimizasyon paramaetreleri ile paylaşa bilir misiniz?

 

using System;

using System.Collections.Generic;

using System.Linq;

using Matriks.Data.Symbol;

using System.Windows.Media;

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

{

[SymbolParameter("GARAN")]

public string Symbol;

[Parameter(SymbolPeriod.Min5)]

public SymbolPeriod SymbolPeriod;

[Parameter(5)]

public decimal BuyOrderQuantity;

[Parameter(5)]

public decimal SellOrderQuantity;

 

// indikator tanımları.

MOV mov10;

MOV mov3;

MOST most10_0_2_Var;

MOST most10_0_2_Var;

MOST most10_0_8_Var;

MOST most3_1_2;

MOST most3_0_5;

 

/// <summary>

/// Strateji ilk çalıştırıldığında bu fonksiyon tetiklenir. Tüm sembole kayit işlemleri,

/// indikator ekleme, haberlere kayıt olma işlemleri burada yapılır.

/// </summary>

public override void OnInit()

{

AddSymbol(Symbol, SymbolPeriod);

most10_0_2_Exp = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, 10, 0.2m, MovMethod.Exponential);

most10_0_2_Var = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, 10, 0.2m, MovMethod.VAR);

most10_0_8_Var = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, 10, 0.8m, MovMethod.VAR);

most3_1_2 = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, 3, 1.2m, MovMethod.VAR);

most3_0_5 = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, 3, 0.5m, MovMethod.VAR);

 

mov10 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, 10, MovMethod.VAR);

mov3 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, 3, MovMethod.VAR);

 

// 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 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(true);

 

}

 

/// <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(BarDataCurrentValues barDataCurrentValues)

{

/*

if(MOV(C,10,VAR)>MOST(C,10,0.2),

Cross(MOV(C,3,VAR),MOST(C,3,1.2,VAR)),

Cross(MOV(C,3,VAR),MOST(C,3,0.5,VAR)))

*/

// Alış

if (mov10.CurrentValue>most10_0_2_Exp.CurrentValue)

{

if (CrossAbove(mov3, most3_1_2))

{

SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);

Debug("Alış Emri Gönderildi");

}

else if (CrossAbove(mov3, most3_0_5))

{

SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Buy);

Debug("Alış Emri Gönderildi");

}

}

/*

if(MOV(C,10,VAR)<MOST(C,10,0.2),

Cross(MOST(C,10,0.8,VAR),MOV(C,10,VAR)),

Cross(MOST(C,10,0.2,VAR),MOV(C,10,VAR)))

*/

// Satış

if (mov10.CurrentValue<most10_0_2_Exp.CurrentValue)

{

if (CrossAbove(most10_0_8_Var, mov10))

{

SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Sell);

Debug("Satış Emri Gönderildi");

}

else if (CrossAbove(most10_0_2_Var, mov10))

{

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)

{

 

}

}

}

}

 

bir cevap ile ilgili: Kullanıcı Stratejisi oluşturma
Algoritmik Trading kategorisinde (87 puan) tarafından | 584 kez görüntülendi

1 cevap

4 beğenilme 0 beğenilmeme

Gonderdiginiz kodun parametrize edilmis hali ektedir, kontrol ediniz. most10_0_2_Exp ve most10_0_2_Var indikatorleri icin ayni period ve yuzde kullanilacagi farz edilerek bu 2 indikatore tek period ve yuzde verilmistir. Isterseniz bunlari da ayirabilirsiniz.

***STRATEJIYI TEST ORTAMLARINDA TEST ETMEDEN VE SIZIN ISTEDIGINIZ SEKILDE CALISTIGINA EMIN OLMADAN GERCEK ORTAMDA HIC BIR ZAMAN CALISTIRMAYIN***

using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using System.Windows.Media;
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 MostAnilOzeksi : MatriksAlgo
	{
		[SymbolParameter("GARAN")]
		public string Symbol;
		[Parameter(SymbolPeriod.Min5)]
		public SymbolPeriod SymbolPeriod;
		[Parameter(5)]
		public decimal BuyOrderQuantity;
		[Parameter(5)]
		public decimal SellOrderQuantity;
		
		[Parameter(10)]
		public int Most_12_Period;
		[Parameter(0.2)]
		public decimal Most_12_Yuzde;
		[Parameter(10)]
		public int Most_3_Period;
		[Parameter(0.8)]
		public decimal Most_3_Yuzde;
		[Parameter(3)]
		public int Most_4_Period;
		[Parameter(1.2)]
		public decimal Most_4_Yuzde;
		[Parameter(3)]
		public int Most_5_Period;
		[Parameter(0.5)]
		public decimal Most_5_Yuzde;
		
		[Parameter(10)]
		public int Mov_2_Period;
		[Parameter(3)]
		public int Mov_4_Period;

		// indikator tanımları.
		MOV mov2_Var;
		MOV mov4_Var;
		MOST most1_Exp;
		MOST most2_Var;
		MOST most3_Var;
		MOST most4_Var;
		MOST most5_Var;
		
		/// <summary>
		/// Strateji ilk çalıştırıldığında bu fonksiyon tetiklenir. Tüm sembole kayit işlemleri,
		/// indikator ekleme, haberlere kayıt olma işlemleri burada yapılır.
		/// </summary>
		public override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod);
			most1_Exp = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, Most_12_Period, Most_12_Yuzde, MovMethod.Exponential);
			most2_Var = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, Most_12_Period, Most_12_Yuzde, MovMethod.VAR);
			most3_Var = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, Most_3_Period, Most_3_Yuzde, MovMethod.VAR);
			most4_Var = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, Most_4_Period, Most_4_Yuzde, MovMethod.VAR);
			most5_Var = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, Most_5_Period, Most_5_Yuzde, MovMethod.VAR);
			mov2_Var = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, Mov_2_Period, MovMethod.VAR);
			mov4_Var = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, Mov_4_Period, MovMethod.VAR);
			// 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 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(true);
		}

		/// <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(BarDataCurrentValues barDataCurrentValues)
		{
			/*
			if(MOV(C,10,VAR)>MOST(C,10,0.2),
			Cross(MOV(C,3,VAR),MOST(C,3,1.2,VAR)),			
			Cross(MOV(C,3,VAR),MOST(C,3,0.5,VAR)))		
			*/
			// Alış

			if (mov2_Var.CurrentValue>most1_Exp.CurrentValue)
			{
				if (CrossAbove(mov4_Var, most4_Var))
				{
					SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
					Debug("Alış Emri Gönderildi");
				}
				else if (CrossAbove(mov4_Var, most5_Var))
				{
					SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Buy);
					Debug("Alış Emri Gönderildi");
				}
			}

			/*
			if(MOV(C,10,VAR)<MOST(C,10,0.2),
			Cross(MOST(C,10,0.8,VAR),MOV(C,10,VAR)),
			Cross(MOST(C,10,0.2,VAR),MOV(C,10,VAR)))			
			*/
			// Satış

			if (mov2_Var.CurrentValue<most1_Exp.CurrentValue)
			{
				if (CrossAbove(most3_Var, mov2_Var))
				{
					SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Sell);
					Debug("Satış Emri Gönderildi");
				}
				else if (CrossAbove(most2_Var, mov2_Var))
				{
					SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
					Debug("Satış Emri Gönderildi");
				}
			}
		}
	}
}

 

(8,035 puan) tarafından
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,639 soru
8,593 cevap
4,826 yorum
19,840 kullanıcı