0 beğenilme 0 beğenilmeme
498 kez görüntülendi
Algoritmik Trading kategorisinde (14 puan) tarafından
tarafından yeniden gösterildi | 498 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhabalar,

Stratejiyi lütfen inceleyiniz.

***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 Matriks.Data.Symbol;
using Matriks.Engines;
using Matriks.Indicators;
using Matriks.Symbols;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Lean.Algotrader.Trading;

namespace Matriks.Lean.Algotrader
{
	public class HHVLLVAcıgaSatıs : MatriksAlgo
	{
		[SymbolParameter("GARAN")]
		public string Symbol;

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

		[Parameter(5)]
		public decimal BuyOrderQuantity;

		[Parameter(5)]
		public decimal SellOrderQuantity;

		[Parameter(5)]
		public int Opt1;

		HighestHigh HHV;
		LowestLow LLV;

		public override void OnDataUpdate(BarDataEventArgs barData)
		{
			var barDataModel = GetBarData();
			var C = Ref(barDataModel, OHLCType.Close, 0);

			if (C>HHV.Value[0][HHV.CurrentIndex -1])
			{
				FX_Alis();
				// sentetik emirler OnOrderUpdate() methodundan eklenmesi gerekir - örnekteki gibi 
			}

			if (C<LLV.Value[0][LLV.CurrentIndex -1])
			{
				FX_Satis();
				// sentetik emirler OnOrderUpdate() methodundan eklenmesi gerekir - örnekteki gibi 
			}
		}

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

			HHV = HighestHighIndicator(Symbol, SymbolPeriod, Opt1);
			LLV = LowestLowIndicator(Symbol, SymbolPeriod, Opt1);


			// Gerekli			
			WorkWithPermanentSignal(true);

			if (AcigaSatisYapilsin)
			{
				SendOrderSequential(true, Side.All);
				SendOrderSequentialForShort(true, Side.All);
			}else
			{
				SendOrderSequential(true, Side.Buy);
			}
			// #Gerekli
		}

		// Gerekli
		[Parameter(true)]
		public bool AcigaSatisYapilsin;

		[Parameter(false)]
		public bool AksamSeansiniDahilEt;

		List<string> orderIDList = new List<string>();

		string orderID;

		public override void OnInitComplated()
		{
			FX_PiyasaTipi();
		}

		public void FX_Alis()
		{
			if (LastOrderSide.Obj != Side.Buy)
			{
				if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)
				{
					orderID = SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
					orderIDList.Add(orderID);
					Debug("Alış emri gönderildi.[ " + BuyOrderQuantity + " adet ]");
				}else
				{
					if (piyasaTipleri == PiyasaTipleri.BISTPP)
					{
						// Açık pozisyonu kapat
						orderID = SendMarketCloseShortOrder(Symbol, BuyOrderQuantity);
						orderIDList.Add(orderID);
						Debug("Açık pozisyonlar kapatıldı.[ " + BuyOrderQuantity + " adet ]");

						// Al
						orderID = SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
						orderIDList.Add(orderID);
						Debug("Alış emri gönderildi.[ " + BuyOrderQuantity + " adet ]");
					}else
					{
						// pozsiyon kapat ve al
						orderID = SendMarketOrder(Symbol, BuyOrderQuantity * 2, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
						orderIDList.Add(orderID);
						Debug("Alış emri gönderildi.[ " + (BuyOrderQuantity * 2) + " adet ]");
					}
				}
				LastOrderSide.Obj = Side.Buy;
			}
		}

		public void FX_Satis()
		{
			if (LastOrderSide.Obj != Side.Sell)
			{
				if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)
				{
					if (piyasaTipleri == PiyasaTipleri.BISTPP)
					{
						if (AcigaSatisYapilsin)
						{
							orderID = SendShortSaleMarketOrder(Symbol, SellOrderQuantity);
							orderIDList.Add(orderID);
							Debug("Açığa satış yapıldı.[ " + (SellOrderQuantity) + " adet ]");
						}else
						{
							orderID = SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
							orderIDList.Add(orderID);
							Debug("Satış emri gönderildi.[ " + (SellOrderQuantity) + " adet ]");
						}
					}else
					{
						orderID = SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
						orderIDList.Add(orderID);
						Debug("Satış emri gönderildi.[ " + (SellOrderQuantity) + " adet ]");
					}

				}else
				{
					if (piyasaTipleri == PiyasaTipleri.BISTPP)
					{
						orderID = SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
						orderIDList.Add(orderID);
						Debug("Satış emri gönderildi.[ " + (SellOrderQuantity) + " adet ]");

						orderID = SendShortSaleMarketOrder(Symbol, SellOrderQuantity);
						orderIDList.Add(orderID);
						Debug("Açığa satış yapıldı.[ " + (SellOrderQuantity) + " adet ]");
					}else
					{
						orderID = SendMarketOrder(Symbol, SellOrderQuantity * 2, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
						orderIDList.Add(orderID);
						Debug("Satış emri gönderildi.[ " + (SellOrderQuantity * 2) + " adet ]");
					}
				}
				LastOrderSide.Obj = Side.Sell;
			}
		}

		[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;
			Sembol2 = 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 if (SymbolDetail.ExchangeDetail.ExchangeCode == "")
			{
				Sembol1 = Symbol.Split('_')[0];
				Sembol2 = Symbol.Split('_')[1];

				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;
						Sembol1 = Symbol;
						Sembol2 = Symbol;

					}else if (Symbol.Split('_')[2].Contains("BMEX"))
					{
						piyasaTipleri = PiyasaTipleri.KRIPTOBITMEX;
					}
				}else
				{
					piyasaTipleri = PiyasaTipleri.KRIPTOBTCTURK;
				}

			}
		}


		public override void OnOrderUpdate(IOrder order)
		{
			//	if (order.OrdStatus.Obj == OrdStatus.Filled){
			//		StopLoss(Symbol, SyntheticOrderPriceType.PricePoint, 0.3m);
			//		TakeProfit(Symbol, SyntheticOrderPriceType.PricePoint, 0.3m);
			//	}

			if (order.OrdStatus.Obj == OrdStatus.Filled && !orderIDList.Contains(order.CliOrdID) && AcigaSatisYapilsin)
			{
				if (order.Side.Obj == Side.Buy)
				{
					Debug("Sentetik emir tetiklendi ");
					LastOrderSide.Obj = Side.Sell;

					orderID = SendMarketOrder(Symbol, order.OrderQty, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
					orderIDList.Add(orderID);
					LastOrderSide.Obj = Side.Buy;

					Debug("Sentetik emrin kalan kısmı için alış emri gönderildi.[ " + order.OrderQty + " adet ]");

				}else
				{
					Debug("Sentetik emir tetiklendi ");
					LastOrderSide.Obj = Side.Buy;

					if (piyasaTipleri == PiyasaTipleri.BISTPP)
					{
						orderID = SendShortSaleMarketOrder(Symbol, order.OrderQty);
						orderIDList.Add(orderID);
					}else
					{
						orderID = SendMarketOrder(Symbol, order.OrderQty, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
						orderIDList.Add(orderID);
					}
					LastOrderSide.Obj = Side.Sell;

					Debug("Sentetik emrin kalan kısmı için satış emri gönderildi.[ " + order.OrderQty + " adet ]");
				}
			}
		}
		// #Gerekli
	}
}

İyi çalışmalar.

 

(11,059 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,635 soru
8,589 cevap
4,821 yorum
19,782 kullanıcı