Matriks Destek ve Yardım Platformu

Matriks Ürünleri ile ilgili tüm sorularınız için bizlere buradan ulaşabilirsiniz. Daha önce sorulan soruları ve verilen cevapları ilgili sekmelerden ve arama üzerinden inceleyebilirsiniz. Sağ taraftaki kategoriler üzerinden İlgilendiğiniz özelliklerle ilgili soruları filtreleyebilirsiniz. Soru ve cevapları sosyal medyada paylaşabilirsiniz. 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.

0

Saat 18.00’deki işlem hataları

Soruldu
Görüntülenme
765 görüntülenme
Durum
Cevaplandı
Oluşturduğum sistem 30dk’lık kapanışlarda işlem açmakta. Seans süresince bir sıkıntı yok. Fakat 18.00’de açması gereken işlemleri ya açmıyor ya açsa bile hemen ardından iptal ediyor ya da çok ufak miktarlarda da olsa işlemi gerçekleştiremiyor.

bu sorunların önüne geçmek için sadece 17.30 mumu için geçerli olmak şartıyla mum kapanmadan saat 17.59’da o anki sinyal durumuna göre al veya sat olarak işlem açılmasını istiyorum. Bunu nasıl sağlayabiliriz?

Şimdiden teşekkürler, iyi çalışmalar.
Paylaş

1 Cevap

0

Merhaba,

Dilerseniz aşağıdaki yapıyı test edebilirsiniz.

***STRATEJİLERİ TEST/DENEME ORTAMINDA SINAMADAN VE SİZİN İSTEDİĞİNİZ ŞEKİLDE ÇALIŞTIĞINA EMİN OLMADAN GERÇEK ORTAMDA HİÇBİR ZAMAN ÇALIŞTIRMAYINIZ ***

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Matriks.Data.Symbol;
using Matriks.Engines;
using Matriks.Indicators;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;

namespace Matriks.Lean.Algotrader
{
	public class ErtesiGunGonderS : 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.Min)]
						public SymbolPeriod SymbolPeriod;

		[Parameter(1)]
						public decimal BuyOrderQuantity;

		[Parameter(1)]
						public decimal SellOrderQuantity;

		[Parameter(10)]
						public int ATRPeriod;

		[Parameter(10)]
						public int MovPeriod;

		[Parameter(3)]
						public decimal Coefficient;

		[Parameter(MovMethod.E)]
						public MovMethod MovMethod;

		// 18:00 oluşacak sinyalin kaç bara sonra gönderilmesi için
		[Parameter(1)]
						public int Oteleme;

		int realposition = 0;
		PMaxIndicator pmax;

		public override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod);

			pmax = PMaxIndicators(Symbol, SymbolPeriod, ATRPeriod, MovPeriod, (decimal) Coefficient, MovMethod);

			// 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, Side.Buy);

			SetTimerInterval(1);
		}




		OrderSide _orderSide;
		decimal Quantity;
		string emirYonu;
		bool bayrak = false;
		int sayac = 0;

		/// <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)
		{
			sayac++;
			var _dTime = barData.BarData.Dtime;

			if (CrossAbove(pmax.KLine, pmax.StLine))
			{
				if (_dTime.Hour >= 18)
				{
					bayrak = true;
					Quantity = BuyOrderQuantity;
					_orderSide = OrderSide.Buy;
					emirYonu = "Alış";
					sayac = 0;
				}else
				{
					SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));
					Debug("Alış emri gonderildi.");
				}
			}

			if (CrossBelow(pmax.KLine, pmax))
			{
				if (_dTime.Hour >= 18)
				{
					bayrak = true;
					Quantity = SellOrderQuantity;
					_orderSide = OrderSide.Sell;
					emirYonu = "Satış";
					sayac = 0;
				}else
				{
					SendMarketOrder(Symbol, SellOrderQuantity, (OrderSide.Sell));
					Debug("Satış emri gonderildi.");
				}
			}

			if (sayac == Oteleme && bayrak)
			{
				SendMarketOrder(Symbol, Quantity, _orderSide);
				Debug(emirYonu + " emri gonderildi.");
				sayac = 1;
				bayrak = false;
			}
		}

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

İyi çalışmalar.

BağlantıBayraklaasiyangMatriks Destek11.113

Yorumlar (1)

  • ▲0
    Teşekkürler ilginiz için ama ben işlemlerin ertesi güne sarkmasını istemiyorum. Bu yüzden 17.30 açılan mum için 17.59da oluşan alım ya da satım yönündeki sinyal ne ise ona göre işlem açılmasını istiyorum. Bu yönde bir düzenleme yapabilir miyiz?

Cevabınız

Cevap yazmak için giriş yapın.Giriş yapKayıt ol