24.03.2022
0
4
260
100


HangiEmirleriToplasin değişkeni ile belirlenen yöndeki emirler toplanırken ters işlem olduğunda pozisyon varsa tümü kapatılır.

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;
/*

HangiEmirleriToplasin değişkeni ile belirlenen yöndeki emirler toplanırken 
ters işlem olduğunda pozisyon varsa tümü kapatılır.

*/

namespace Matriks.Lean.Algotrader
{
	public class KumbaraStratejisi : MatriksAlgo
	{
		[SymbolParameter("GARAN")]
		public string Symbol1;

		[Parameter(SymbolPeriod.Min)]
		public SymbolPeriod SymbolPeriod1;
		
		[Parameter(1)]
		public decimal Quantity;

		[Parameter(14)]
		public int Period;

		[Parameter(7)]
		public int KPercent;				

		StocRSI stocRSI;

		public override void OnInit()
		{
			stocRSI = StocRSIIndicator(Symbol1, SymbolPeriod1, OHLCType.Close, Period, KPercent);			
			SendOrderSequential(false, Side.All);
			WorkWithPermanentSignal(true);
		}

		public override void OnDataUpdate(BarDataEventArgs barData)
		{
			if (CrossAbove(stocRSI, 30m, 0))
			{
				if (HangiEmirleriToplasin.Obj == Side.Buy)
				{
					SendMarketOrder(Symbol1, Quantity, OrderSide.Buy);
					Debug("Alış emri gönderildi. adet: " + Quantity);
				}else if (HangiEmirleriToplasin.Obj == Side.Sell && kumbara != 0)
				{
					SendMarketOrder(Symbol1, kumbara, OrderSide.Buy);
					Debug("Alış emri gönderildi. kumbara: " + kumbara);
				}
			}

			if (CrossBelow(stocRSI, 80m, 0))
			{
				if (HangiEmirleriToplasin.Obj == Side.Sell)
				{
					SendMarketOrder(Symbol1, Quantity, OrderSide.Sell);
					Debug("Satış emri gönderildi. adet: " + Quantity);
				}else if (HangiEmirleriToplasin.Obj == Side.Buy && kumbara != 0)
				{
					SendMarketOrder(Symbol1, kumbara, OrderSide.Sell);
					Debug("Satış emri gönderildi. kumbara: " + kumbara);
				}
			}
		}

		// Gerekli
		[Parameter(Side.Buy)]
		public Side HangiEmirleriToplasin;
		
		decimal kumbara = 0;

		public override void OnOrderUpdate(IOrder order)
		{
			if (order.OrdStatus.Obj == OrdStatus.Filled)
			{
				if (order.Side.Obj == HangiEmirleriToplasin.Obj)
				{
					kumbara += order.OrderQty;
					Debug("Emir Gerçekleşti. adet: " + order.OrderQty);
				}else{
					kumbara = 0;
					Debug("Ters emir Gerçekleşti. adet: " + order.OrderQty);
				}
			}
		}
		// #Gerekli
	}
}

0 Yorum