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

merhabalar, 

stratejiyi aşağıdaki gibi oluşturdum, 130. satırda hata mesajı alıyorum ve geçemiyorum.

yapmak istediğim,  açığa al açığa sat işlemlerini pozisyonumu takip ederek gerçekleştirmesi, ilk işlemim işaretlenmesi ve sonrasındaki işlemin 2 katı olarak yapılması. 

stratejiyi durdurup çalıştırdığımda mevcut pozisyona ve miktarına göre işleme devam etmesi. 

 

 

 






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;

//*******************************************************ACIKLAMA*******************************************************//
//StochasticSlow ve ADX indikatörlerini kullanan bir stratejidir. StochasticSlowK, StochasticSlowD'nin üzerinde ve ADX	//
//ADX alım eşiğinin üzerindeyse uzun pozisyon açılır. StochasticSlowK, StochasticSlowD'nin altında ve ADX satım eşiğinin//
//üzerinde ise de pozisyon kapatılır.																					//

namespace Matriks.Lean.Algotrader
{
	public class stoch_slow_adx_viop : 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("EKGYO")]
		public string Symbol;
		[Parameter(SymbolPeriod.Min)]
		public SymbolPeriod SymbolPeriod;
		[Parameter(1)]
		public decimal BuyOrderQuantity;
		[Parameter(1)]
		public decimal SellOrderQuantity;
		[Parameter(51)]
		public int ADX_AlimEsigi;
		[Parameter(41)]
		public int ADX_SatimEsigi;

		

		int FirstRun = 0;
		int realposition = 0;

		[Output]
		public int IlkCalisma;

		[Output]
		public int Pozisyon;
		
		
		StochasticSlow stochasticSlow;
		ADX adx;

		public override void OnInit()
		{
			adx = ADXIndicator(Symbol, SymbolPeriod, OHLCType.Close, 14);
			stochasticSlow = StochasticSlowIndicator(Symbol, SymbolPeriod, OHLCType.Close, 234, 18, 38, MovMethod.Variable);
			//IQ: periodK,periodD,periodSlowK
			//terminal: Parametre olarak “ %K “, ‘’Yavaş %K’’ ve “%D
			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(true);
		}

		/// <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>
		/// 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 ((stochasticSlow.StochasticSlowK.CurrentValue > stochasticSlow.StochasticSlowD.CurrentValue) && adx.CurrentValue > ADX_AlimEsigi)
			{
				if (FirstRun == 0)
				{
					SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
					Debug("Alış Emri Gönderildi");
					Debug("%K: " + stochasticSlow.StochasticSlowK.CurrentValue);
					Debug("%D: " + stochasticSlow.StochasticSlowD.CurrentValue);
					Debug("ADX: " + adx.CurrentValue);
					FirstRun = 1;
				}
				else
				{
					SendMarketOrder(Symbol, BuyOrderQuantity * 2, (OrderSide.Buy));
					Debug("Alış Emri Gönderildi");
					Debug("%K: " + stochasticSlow.StochasticSlowK.CurrentValue);
					Debug("%D: " + stochasticSlow.StochasticSlowD.CurrentValue);
					Debug("ADX: " + adx.CurrentValue);
				}

				if ((stochasticSlow.StochasticSlowK.CurrentValue < stochasticSlow.StochasticSlowD.CurrentValue) && adx.CurrentValue > ADX_SatimEsigi)
				{
					if (FirstRun == 0)
					{
						SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
						Debug("Satış Emri Gönderildi");
						Debug("%K: " + stochasticSlow.StochasticSlowK.CurrentValue);
						Debug("%D: " + stochasticSlow.StochasticSlowD.CurrentValue);
						Debug("ADX: " + adx.CurrentValue);
						FirstRun = 1;
					}
					else
					{
						SendMarketOrder(Symbol, SellOrderQuantity * 2, OrderSide.Sell);
						Debug("Satış Emri Gönderildi");
						Debug("%K: " + stochasticSlow.StochasticSlowK.CurrentValue);
						Debug("%D: " + stochasticSlow.StochasticSlowD.CurrentValue);
						Debug("ADX: " + adx.CurrentValue);
					}

					IlkCalisma = FirstRun;
					Pozisyon = realposition;

					public override void OnOrderUpdate(IOrder order)
					{
						//Gercek zamanli pozisyon takibi
						if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Buy)
						{
							var positionChange = order.OrderQty;
							realposition += (int) positionChange;
							Debug("[ONORDERUPDATE]: Pozisyon = " + realposition);
						}
						if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Sell)
						{
							var positionChange = order.OrderQty;
							realposition -= (int) positionChange;
							Debug("[ONORDERUPDATE]: Pozisyon = " + realposition);
						}
					}
				}
			}

 

Algoritmik Trading kategorisinde (51 puan) tarafından | 415 kez görüntülendi
0 0
yokmu yardım, nerde hata var ?

Bu soruya cevap vermek için lütfen giriş yapınız veya kayıt olunuz.

8,636 soru
8,590 cevap
4,821 yorum
19,790 kullanıcı