MatriksIQ Destek
Matriks Destek
Matriks Web Destek
Matriks Mobile Destek
0 beğenilme 0 beğenilmeme
197 kez görüntülendi
Algoritmik Trading kategorisinde (14 puan) tarafından
tarafından yeniden gösterildi | 197 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.

 

(4,449 puan) tarafından
4,841 soru
4,849 cevap
3,196 yorum
3,629 kullanıcı