0 beğenilme 0 beğenilmeme
414 kez görüntülendi
Merhaba,

Stratejime StochasticSlow %K (5,5) > StochasticSlow %D (3)  koşulunu eklemek istiyorum. Yardımcı olur musunuz lütfen, teşekkürler
Algoritmik Trading kategorisinde (310 puan) tarafından | 414 kez görüntülendi

2 Cevaplar

0 beğenilme 0 beğenilmeme

Merhaba yeni bir strateij olusturduktan sonra soldaki Arac Kutusundan StochasticSlow'u bularak cift tiklayiniz.

Daha sonra OnDataUpdate fonksiyonunu asagidaki ile degistiriniz.

public override void OnDataUpdate(BarDataCurrentValues barDataCurrentValues)
{
	 //StochasticSlow %K (5,5) > StochasticSlow %D (3) 
	var slowK = Math.Round(stochasticSlow.StochasticSlowK.CurrentValue,2);
	var slowD = Math.Round(stochasticSlow.StochasticSlowD.CurrentValue,2);
	if(stochasticSlow.StochasticSlowK.CurrentValue > stochasticSlow.StochasticSlowD.CurrentValue)
	{
		Debug("Stochastic SlowK @" + slowK + " > " + "Stochastic SlowD @" + slowD);
	}
	if(stochasticSlow.StochasticSlowK.CurrentValue < stochasticSlow.StochasticSlowD.CurrentValue)
	{
		Debug("Stochastic SlowK @" + slowK + " < " + "Stochastic SlowD @" + slowD);
	}
}

 

(8,035 puan) tarafından
0 0

Teşekkürler, Galiba bir indikatör zaten olduğu için beceremedim. Hata veriyor. Aşağıda benim stratejim var, buna eklemeniz mümkün mü rica etsem. Çok teşekkürler

 



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;

 

// posizyon takibi - başlangıç

using System.Text;

using System.IO;

// posizyon takibi - biriş

 

 

namespace Matriks.Lean.Algotrader

{

 

            public class DI15 : 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.Min60)]

 

                                                                       public SymbolPeriod SymbolPeriod;

 

 

 

                        [Parameter(19)]

 

                                                                       public int DiPeriod;

 

 

 

                        [Parameter(5)]

 

                                                                       public decimal Quantity;

 

 

 

 

 

                        DemandIndex demandIndex, demandIndexGun;

 

                        // posizyon takibi - başlangıç

                        [Parameter(0)]

                        public int Position;

 

                        [Parameter(true)]

                        public bool DosyadanOku;

 

                        [Parameter("C:\\IQData")]

                        public string FolderPath;

 

                        [Parameter("DI15")]

                        public string DosyaAdi;

                        // posizyon takibi - bitiş

 

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

                        {

 

                                   demandIndex = DemandIndexIndicator(Symbol, SymbolPeriod, DiPeriod);

 

                                   demandIndexGun = DemandIndexIndicator(Symbol, SymbolPeriod.Day, DiPeriod);

 

 

 

                                   AddSymbol(Symbol, SymbolPeriod);

 

 

 

                                   // posizyon takibi - başlangıç

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

 

                                   if (DosyadanOku == true)

                                   {

                                               DegiskenleriDosyadanOku();

                                   }

                                   // posizyon takibi - bitiş

 

 

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

                        {

 

                                   if (CrossAbove(demandIndex, 15) && demandIndex.CurrentValue>15 && demandIndex.CurrentValue<30 && demandIndexGun.CurrentValue>20 && demandIndexGun.CurrentValue<30 && Position != 2)

                                   {

 

                                               SendMarketOrder(Symbol, Quantity, OrderSide.Buy);

 

                                               Debug("Alış emri gönderildi.");

 

                                               Position = 2;

                                               DegiskenleriDosyayaYaz();

                                   }

 

 

 

                                   if (CrossBelow(demandIndex, 0) && Position != 1)

                                   {

 

                                               SendMarketOrder(Symbol, Quantity, OrderSide.Sell);

 

                                               Debug("Satış emri gönderildi.");

                                              

                                               Position = 1;

                                               DegiskenleriDosyayaYaz();

 

                                   }

 

 

 

                                   // %8 kar al

 

                                   TakeProfit(Symbol, SyntheticOrderPriceType.Percent, 8);

 

                        }

                       

                        // Veri yaz

                        public void DegiskenleriDosyayaYaz()

                        {

                                   if (!System.IO.Directory.Exists(FolderPath))

                                               Directory.CreateDirectory(FolderPath);

 

                                   string fileName = Path.Combine(FolderPath, DosyaAdi + ".txt");

 

                                   if (!File.Exists(fileName))

                                   {

                                               File.AppendAllText(fileName, "0");

                                   }

 

                                   File.WriteAllText(fileName, Position.ToString());

                        }

 

                        // Veri Oku

                        public void DegiskenleriDosyadanOku()

                        {

                                   if (!System.IO.Directory.Exists(FolderPath))

                                               Directory.CreateDirectory(FolderPath);

 

                                   string fileName = Path.Combine(FolderPath, DosyaAdi + ".txt");

 

                                   if (!File.Exists(fileName))

                                   {

                                               File.AppendAllText(fileName, "0");

                                   }

 

                                   // Open the file to read from.

                                   string readText = File.ReadAllText(fileName);

 

                                   Position = Convert.ToInt32(readText);

                        }

 

            }

 

}

 

0 beğenilme 0 beğenilmeme
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;
// posizyon takibi - başlangıç
using System.Text;
using System.IO;
// posizyon takibi - biriş
namespace Matriks.Lean.Algotrader
{
	public class DI15 : 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.Min60)]
		public SymbolPeriod SymbolPeriod;
		[Parameter(19)]
		public int DiPeriod;
		[Parameter(5)]
		public decimal Quantity;
		DemandIndex demandIndex, demandIndexGun;
		// posizyon takibi - başlangıç
		[Parameter(0)]
		public int Position;
		[Parameter(true)]
		public bool DosyadanOku;
		[Parameter("C:\\IQData")]
		public string FolderPath;
		[Parameter("DI15")]
		public string DosyaAdi;

		StochasticSlow stochasticSlow;
		// posizyon takibi - bitiş
		/// <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()
		{
			stochasticSlow = StochasticSlowIndicator(Symbol, SymbolPeriod, OHLCType.Close, 5, 3, 5, MovMethod.Exponential);

			demandIndex = DemandIndexIndicator(Symbol, SymbolPeriod, DiPeriod);
			demandIndexGun = DemandIndexIndicator(Symbol, SymbolPeriod.Day, DiPeriod);
			AddSymbol(Symbol, SymbolPeriod);
			// posizyon takibi - başlangıç
			///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);
			if (DosyadanOku == true)
			{
				DegiskenleriDosyadanOku();
			}
			// posizyon takibi - bitiş
			WorkWithPermanentSignal(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(BarDataCurrentValues barDataCurrentValues)
		{
			//StochasticSlow %K (5,5) > StochasticSlow %D (3) 
			var slowK = Math.Round(stochasticSlow.StochasticSlowK.CurrentValue,2);
			var slowD = Math.Round(stochasticSlow.StochasticSlowD.CurrentValue,2);
			Debug("Stochastic SlowK @" + slowK + " ? " + "Stochastic SlowD @" + slowD);
			if (slowK > slowD && CrossAbove(demandIndex, 15) && demandIndex.CurrentValue>15 && demandIndex.CurrentValue<30 && demandIndexGun.CurrentValue>20 && demandIndexGun.CurrentValue<30 && Position != 2)
			{
				SendMarketOrder(Symbol, Quantity, OrderSide.Buy);
				Debug("Alış emri gönderildi.");
				Position = 2;
				DegiskenleriDosyayaYaz();
			}
			if (slowK < slowD && CrossBelow(demandIndex, 0) && Position != 1)
			{
				SendMarketOrder(Symbol, Quantity, OrderSide.Sell);
				Debug("Satış emri gönderildi.");
				Position = 1;
				DegiskenleriDosyayaYaz();
			}
			// %8 kar al
			TakeProfit(Symbol, SyntheticOrderPriceType.Percent, 8);
		}
		// Veri yaz
		public void DegiskenleriDosyayaYaz()
		{
			if (!System.IO.Directory.Exists(FolderPath))
				Directory.CreateDirectory(FolderPath);
			string fileName = Path.Combine(FolderPath, DosyaAdi + ".txt");
			if (!File.Exists(fileName))
			{
				File.AppendAllText(fileName, "0");
			}
			File.WriteAllText(fileName, Position.ToString());
		}
		// Veri Oku
		public void DegiskenleriDosyadanOku()
		{
			if (!System.IO.Directory.Exists(FolderPath))
				Directory.CreateDirectory(FolderPath);
			string fileName = Path.Combine(FolderPath, DosyaAdi + ".txt");
			if (!File.Exists(fileName))
			{
				File.AppendAllText(fileName, "0");
			}
			// Open the file to read from.
			string readText = File.ReadAllText(fileName);
			Position = Convert.ToInt32(readText);
		}
	}
}

 

(8,035 puan) tarafından
1 0
Geç yazdım ama çok teşekkürler
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,634 soru
7,640 cevap
4,448 yorum
10,866 kullanıcı