24.12.2021
0
3
319
100

Tott ve Sott indikatörlerine göre sinyal oluşur.


Stratejinin açığa satış ve açık pozisyonu kapatması için AcigaSatisYapilsin, Viop sembollerine akşam seansında da emir gönderilmesi için AksamSeansiniDahilEt değişkenlerinin true geçilmesi gerekir.


Prime Kodu:


AL

if(MOV(C,opt1,VAR)>OTT(C,opt1,opt2),

MOV(C,opt1,VAR)>OTT(C,opt1,opt3)*(1+opt4) AND STOSK(opt5,opt6,33,VAR)+1000>OTT(STOSK(opt5,opt6,33,VAR)+1000,2,opt7),

MOV(C,opt1,VAR)>OTT(C,opt1,opt3)*(1+opt4) AND STOSK(opt5,opt6,33,VAR)+1000>OTT(STOSK(opt5,opt6,33,VAR)+1000,2,opt7))


SAT

if(MOV(C,opt1,VAR)>OTT(C,opt1,opt2),

MOV(C,opt1,VAR)<OTT(C,opt1,opt3)*(1-opt4) AND STOSK(opt5,opt6,33,VAR)+1000<OTT(STOSK(opt5,opt6,33,VAR)+1000,2,opt7),

MOV(C,opt1,VAR)<OTT(C,opt1,opt3)*(1-opt4) AND STOSK(opt5,opt6,33,VAR)+1000<OTT(STOSK(opt5,opt6,33,VAR)+1000,2,opt7))

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;
using Matriks.AI;
using Matriks.AI.AiParameters;
using Matriks.AI.Data;
using Matriks.Trader.Core.TraderModels;

/* 
AL
if(MOV(C,opt1,VAR)>OTT(C,opt1,opt2),
	MOV(C,opt1,VAR)>OTT(C,opt1,opt3)*(1+opt4) AND STOSK(opt5,opt6,33,VAR)+1000>OTT(STOSK(opt5,opt6,33,VAR)+1000,2,opt7),
	MOV(C,opt1,VAR)>OTT(C,opt1,opt3)*(1+opt4) AND STOSK(opt5,opt6,33,VAR)+1000>OTT(STOSK(opt5,opt6,33,VAR)+1000,2,opt7))

SAT
if(MOV(C,opt1,VAR)>OTT(C,opt1,opt2),
	MOV(C,opt1,VAR)<OTT(C,opt1,opt3)*(1-opt4) AND STOSK(opt5,opt6,33,VAR)+1000<OTT(STOSK(opt5,opt6,33,VAR)+1000,2,opt7),
	MOV(C,opt1,VAR)<OTT(C,opt1,opt3)*(1-opt4) AND STOSK(opt5,opt6,33,VAR)+1000<OTT(STOSK(opt5,opt6,33,VAR)+1000,2,opt7))
*/

namespace Matriks.Lean.Algotrader
{
	public class TottSott : 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("FGARAN")]
		public string Symbol;

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

		[Parameter(40)]
		public int OPT1;

		[Parameter(0.5)]
		public decimal OPT2;

		[Parameter(1)]
		public decimal OPT3;

		[Parameter(0.001)]
		public decimal OPT4;

		[Parameter(500)]
		public int OPT5;

		[Parameter(200)]
		public int OPT6;

		[Parameter(0.3)]
		public decimal OPT7;

		[Parameter(1)]
		public decimal BuyOrderQuantity;

		[Parameter(1)]
		public decimal SellOrderQuantity;

		TOTT tott;
		SOTT sott;
		OTT ott;

		public override void OnDataUpdate(BarDataEventArgs barData)
		{
			/* 	AL			
				if(MOV(C,opt1,VAR)>OTT(C,opt1,opt2),			
					MOV(C,opt1,VAR)>OTT(C,opt1,opt3)*(1+opt4) AND STOSK(opt5,opt6,33,VAR)+1000>OTT(STOSK(opt5,opt6,33,VAR)+1000,2,opt7),
					MOV(C,opt1,VAR)>OTT(C,opt1,opt3)*(1+opt4) AND STOSK(opt5,opt6,33,VAR)+1000>OTT(STOSK(opt5,opt6,33,VAR)+1000,2,opt7))
			*/
			if (ott.Value[1][ott.CurrentIndex] >ott.Value[0][ott.CurrentIndex])
			{
				if (tott.Value[0][tott.CurrentIndex] > tott.Value[1][tott.CurrentIndex] &&
					sott.Value[0][sott.CurrentIndex] > sott.Value[1][sott.CurrentIndex] &&
					LastOrderSide.Obj != Side.Buy)
				{
					FX_Alis();
//					Senntetik emirler tanımlanıyor	
//					StopLoss(Symbol, SyntheticOrderPriceType.Percent, 3);
//					TakeProfit(Symbol, SyntheticOrderPriceType.Percent, 3);
				}
			}else
			{
				if (tott.Value[0][tott.CurrentIndex] > tott.Value[1][tott.CurrentIndex] &&
					sott.Value[0][sott.CurrentIndex] > sott.Value[1][sott.CurrentIndex] &&
					LastOrderSide.Obj != Side.Buy)
				{
					FX_Alis();
//					Senntetik emirler tanımlanıyor	
//					StopLoss(Symbol, SyntheticOrderPriceType.Percent, 3);
//					TakeProfit(Symbol, SyntheticOrderPriceType.Percent, 3);
				}
			}


			/* 	SAT			
				if(MOV(C,opt1,VAR)>OTT(C,opt1,opt2),
					MOV(C,opt1,VAR)<OTT(C,opt1,opt3)*(1-opt4) AND STOSK(opt5,opt6,33,VAR)+1000<OTT(STOSK(opt5,opt6,33,VAR)+1000,2,opt7),
					MOV(C,opt1,VAR)<OTT(C,opt1,opt3)*(1-opt4) AND STOSK(opt5,opt6,33,VAR)+1000<OTT(STOSK(opt5,opt6,33,VAR)+1000,2,opt7))
			*/
			if (ott.Value[1][ott.CurrentIndex] >ott.Value[0][ott.CurrentIndex])
			{
				if (tott.Value[0][tott.CurrentIndex] < tott.Value[2][tott.CurrentIndex] &&
					sott.Value[0][sott.CurrentIndex] < sott.Value[1][sott.CurrentIndex] &&
					LastOrderSide.Obj != Side.Sell)
				{
					FX_Satis();
//					Senntetik emirler tanımlanıyor	
//					StopLoss(Symbol, SyntheticOrderPriceType.Percent, 3);
//					TakeProfit(Symbol, SyntheticOrderPriceType.Percent, 3);
				}
			}else
			{
				if (tott.Value[0][tott.CurrentIndex] < tott.Value[2][tott.CurrentIndex] &&
					sott.Value[0][sott.CurrentIndex] < sott.Value[1][sott.CurrentIndex] &&
					LastOrderSide.Obj != Side.Sell)
				{
					FX_Satis();
//					Senntetik emirler tanımlanıyor	
//					StopLoss(Symbol, SyntheticOrderPriceType.Percent, 3);
//					TakeProfit(Symbol, SyntheticOrderPriceType.Percent, 3);
				}
			}

		}

		public override void OnInit()
		{
			ott = OTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, OPT1, OPT2, MovMethod.VAR, true);

			tott = TOTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, OPT1, OPT3, OPT4, MovMethod.Variable);
			sott = SOTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, OPT5, OPT6, 2, OPT7, MovMethod.Variable, MovMethod.Variable);

			// Gerekli			
			WorkWithPermanentSignal(true);

			if (AcigaSatisYapilsin)
			{
				SendOrderSequential(true, Side.All);
			}else
			{
				SendOrderSequential(true, Side.Buy);
			}
		}

		[Parameter(false)]
		public bool AcigaSatisYapilsin;

		[Parameter(false)]
		public bool AksamSeansiniDahilEt;

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

		string orderID;

		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
				{
					// pozsiyon kapat ve al
					orderID = SendMarketOrder(Symbol, BuyOrderQuantity * 2, OrderSide.Buy, includeAfterSession:AksamSeansiniDahilEt);
					orderIDList.Add(orderID);
					Debug("Alış emri gönderildi.[ " + (BuyOrderQuantity * 2) + " adet ]");
				}
			}
		}

		public void FX_Satis()
		{
			if (LastOrderSide.Obj != Side.Sell)
			{
				if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)
				{
					orderID = SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
					orderIDList.Add(orderID);
					Debug("Satış emri gönderildi.[ " + (SellOrderQuantity) + " adet ]");
				}else
				{
					orderID = SendMarketOrder(Symbol, SellOrderQuantity * 2, OrderSide.Sell, includeAfterSession:AksamSeansiniDahilEt);
					orderIDList.Add(orderID);
					Debug("Satış emri gönderildi.[ " + (SellOrderQuantity * 2) + " adet ]");
				}
			}
		}

		public override void OnOrderUpdate(IOrder order)
		{
			if (order.OrdStatus.Obj == OrdStatus.Filled)
			{
				if (!orderIDList.Contains(order.CliOrdID) && AcigaSatisYapilsin)
				{
					LastOrderSide.Obj = Side.All;
					Debug("Sentetik emir tetiklendi");
				}
			}
		}
		// #Gerekli
	}
}


0 Yorum