MatriksIQ Destek
Matriks Destek
Matriks Web Destek
Matriks Mobile Destek
0 beğenilme 0 beğenilmeme
52 kez görüntülendi

Merhabalar..

Şablon Sabit Bakiye adında aşağıdaki stratejiyi kullanıyorum.

Strateji Rapor kısmında Debug menüsü bilgilerine baktığımda resimlerdeki gibi mesajlarla karşılaşıyorum. Bana bu bilgiler saçma gibi geldi.. Acaba stratejide bir yanlışlık mı var?? örneğin, satılacak enstrüman yok diyor ama aslında var ve satış emri göndermiyor. inceleyebilir misiniz?? teşekkürler..

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 SablonSabitBakiye : MatriksAlgo
	{
		[SymbolParameter("GARAN")]
		public string Symbol;

		[Parameter(SymbolPeriod.Min5)]
		public SymbolPeriod SymbolPeriod;

		[Parameter(22)]
		public int TOTTPeriod;

		[Parameter(3.4)]
		public decimal TOTTOpt;

		[Parameter(0.001d)]
		public decimal TwinOttCoef;

		[Parameter(MovMethod.Variable)]
		public MovMethod TottMovMethod;

		TOTT tott;

		public override void OnDataUpdate(BarDataEventArgs barData)
		{
			if (CrossAbove(tott.Mov, tott.OttUp))
			{
				FX_Alis();
			}

			if (CrossBelow(tott.Mov, tott.OttDown))
			{
				FX_Satis();
			}
		}

		public override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod);
			tott = TOTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, TOTTPeriod, TOTTOpt, TwinOttCoef, TottMovMethod);

			WorkWithPermanentSignal(true);

			SendOrderSequential(true, Side.Buy);
		}

		// Gerekli başla		
		public override void OnInitComplated()
		{
			var SymbolDetail = GetSymbolDetail(Symbol);
			MinSize = 1 / (decimal) Math.Pow(10, SymbolDetail.TradeFraction);
			FX_PiyasaTipi();
		}

		[Output][Parameter(250)]
		public decimal AlisTutari;

		[Parameter(true)]
		public bool KomisyonuDahilEt;

		[Parameter(0.0003)]
		public decimal KomisyonOranı;

		public decimal MinSize;
		public int PiyasaID;

		public decimal Adet;

		// Sonfiyat çekilir.
		public decimal FX_Sonfiyat()
		{
			var barDataModel = GetBarData();
			decimal _close = Ref(barDataModel, OHLCType.Close, 0);
			return _close;
		}

		// hisse 
		public bool FX_BalanceKontrolu()
		{
			if (piyasaTipleri == PiyasaTipleri.BISTPP || piyasaTipleri == PiyasaTipleri.BISTVIOP)
			{
				return (Math.Floor(AlisTutari / FX_Sonfiyat()) >0) ? true: false;
			}else
			{
				return true;
			}
		}

		// kriptolar için minimum değişim miktarı		
		public decimal FX_MinSize(decimal quantity)
		{
			return Math.Truncate((quantity - (quantity % MinSize)) / MinSize) * MinSize;
		}

		[Output]
		public string Sembol1 = "";

		[Output]
		public string Sembol2 = "";

		enum PiyasaTipleri
		{
			BISTPP,
			BISTVIOP,
			KRIPTOBINANCE,
			KRIPTOBINANCEFUTURE,
			KRIPTOBITMEX,
			KRIPTOBTCTURK
		}

		PiyasaTipleri piyasaTipleri = PiyasaTipleri.BISTPP;

		public void FX_PiyasaTipi()
		{
			Sembol1 = Symbol;

			var SymbolDetail = GetSymbolDetail(Symbol);

			if (SymbolDetail.ExchangeDetail.ExchangeCode == PiyasaTipleri.BISTPP.ToString())
			{
				piyasaTipleri = PiyasaTipleri.BISTPP;
			}else if (SymbolDetail.ExchangeDetail.ExchangeCode == PiyasaTipleri.BISTVIOP.ToString())
			{
				piyasaTipleri = PiyasaTipleri.BISTVIOP;
			}else
			{
				var _split = Symbol.Split('_');
				if (_split.Count() == 3)
				{
					if (Symbol.Split('_')[2].Contains("BIN"))
					{
						piyasaTipleri = PiyasaTipleri.KRIPTOBINANCE;
					} else if (Symbol.Split('_')[2].Contains("FBIN"))
					{
						piyasaTipleri = PiyasaTipleri.KRIPTOBINANCEFUTURE;
					}else if (Symbol.Split('_')[2].Contains("BMEX"))
					{
						piyasaTipleri = PiyasaTipleri.KRIPTOBITMEX;
					}
				}else
				{
					piyasaTipleri = PiyasaTipleri.KRIPTOBTCTURK;
				}
				Sembol1 = Symbol.Split('_')[0];
				Sembol2 = Symbol.Split('_')[1];
			}
		}

		public void FX_Alis()
		{
			decimal _close = FX_Sonfiyat();

			if (FX_BalanceKontrolu() && LastOrderSide.Obj != Side.Buy)
			{
				// Alabileceği adet
				if (piyasaTipleri == PiyasaTipleri.BISTPP || piyasaTipleri == PiyasaTipleri.BISTVIOP)
				{
					Adet = Math.Floor(AlisTutari / _close);
				}else
				{
					Adet = FX_MinSize(AlisTutari / _close);
				}

				if (Adet != 0)
				{
					SendMarketOrder(Symbol, Adet, (OrderSide.Buy));
					Debug("Alış sinyali oluştu. Sinyal fiyatı: " + _close + " - Adet: " + Adet);
				}
			}else
			{
				Debug("Alış sinyali oluştu. Bakiyeniz yetersiz. AlisTutari: " + AlisTutari);
			}
		}

		public void FX_Satis()
		{
			if (Adet != 0 && LastOrderSide.Obj != Side.Sell)
			{
				SendMarketOrder(Symbol, Adet, (OrderSide.Sell));
				Debug("Satış sinyali oluştu. Sinyal fiyatı: " + FX_Sonfiyat() + " - Adet: " + Adet);
			}else
			{
				Debug("Satış sinyali oluştu. Satılacak enstrüman yok. ");
			}
		}


		public override void OnOrderUpdate(IOrder order)
		{
			if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Buy)
			{
				Adet = order.OrderQty;

				if (KomisyonuDahilEt)
				{
					if (piyasaTipleri == PiyasaTipleri.KRIPTOBINANCE)
					{
						Adet = FX_MinSize(Adet - Adet * KomisyonOranı);
					}
				}
				Debug("Alış gerçekleşti. Gerçekleşen fiyat: " + order.Price + " - Adet: " + Adet);

			}
		}
		// # Gerekli bitti

	}
}

 

 

 

Algoritmik Trading kategorisinde (25 puan) tarafından | 52 kez görüntülendi

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

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.



4,811 soru
4,817 cevap
3,179 yorum
3,596 kullanıcı