0 beğenilme 0 beğenilmeme
432 kez görüntülendi

Merhaba, Matriks IQ strateji editörü üzerinden rsi 8 - rsi 34 kesişim botunun backtestini yaparken bazı emirleri atladığını fark ettim. Son 500 barda test ettiğimde 23 Haziran saat 03.00'te verilen alış emrinin satış emri geç veriliyor. Bunun gibi alım emirlerinin kayma ve satış emirlerinin gerçekleşmeme durumlar da oluşuyor. Bu sorunu nasıl çözebilirim? Kod:

using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using System.Windows.Media;
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 RSI_34_8_Cross : MatriksAlgo
	{
		[SymbolParameter("BTC_USDT_BIN")]
		public string Symbol;

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

		[Parameter(0.005)]
		public decimal BuyOrderQuantity;

		[Parameter(0.005)]
		public decimal SellOrderQuantity;
		
		[Parameter(1.04)]
		public decimal TakeProfitPercentage;

		[Parameter(0.98)]
		public decimal StopLossPercentage;

		[Parameter(8)]
		public int RSIPeriodS;

		[Parameter(34)]
		public int RSIPeriodL;

		RSI rsil;
		RSI rsis;
		
		decimal orderclose = 0;
		decimal stoploss = 0;
		decimal takeprofit = 0;
		
		public override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod);
			
			rsil = RSIIndicator(Symbol, SymbolPeriod, OHLCType.Close, RSIPeriodL);
			rsis = RSIIndicator(Symbol, SymbolPeriod, OHLCType.Close, RSIPeriodS);
			
			WorkWithPermanentSignal(true);
			
			SendOrderSequential(true);
			
		}

		public override void OnInitCompleted()
		{

		}

		public override void OnDataUpdate(BarDataEventArgs barData)
		{
			var close = barData.BarData.Close;
			
			if (CrossAbove(rsis,rsil))
			{
				SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
				orderclose = close;
				takeprofit = orderclose*TakeProfitPercentage;
				stoploss = orderclose*StopLossPercentage;
				Debug(orderclose);
				Debug(takeprofit);
			}
			
			if (close > takeprofit)
			{
				SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
			}
			
			if (close < stoploss)
			{
				SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
			}
				
				
			
		}

		public override void OnOrderUpdate(IOrder order)
		{
			if (order.OrdStatus.Obj == OrdStatus.Filled)
			{

			}
		}

		public override void OnStopped()
		{
		}
	}
}

 

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

1 cevap

0 beğenilme 0 beğenilmeme
En İyi Cevap

Merhabalar,

Algoritma Sihirbazında kripto para seçimi yapıp sistem oluşturduğunuzda Kar Al ve Zarar Durdur emir tipleri görünmez.

Bizlerde bunun yerine herhangi bir BIST sembolü seçip bütün sistemi buna göre hazırlamanızı tavsiye ediyoruz. 

Çünkü sonrasında (backtest yaparken ya da sistemi çalıştırırken) sembol ismini değiştirebiliyorsunuz.

Size Kar Al ve Zarar Durdur ekleyebileceğiniz yeri ve kodunuzun bu iki fonksiyon ile yazılmış halini aşağıya bırakıyorum, inceleyebilirsiniz.

Sisteminizde herhangi bir değişiklik yapmadım.

Yalnızca alış koşulunun altına Kar Al ve Zarar Durdur satırlarını ekledim.

using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using System.Windows.Media;
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 RSI_34_8 : MatriksAlgo
	{
		[SymbolParameter("BTC_USDT_BIN")]
		public string Symbol;

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

		[Parameter(0.005)]
		public decimal BuyOrderQuantity;

		[Parameter(0.005)]
		public decimal SellOrderQuantity;

		[Parameter(1.04)]
		public decimal TakeProfitPercentage;

		[Parameter(0.98)]
		public decimal StopLossPercentage;

		[Parameter(8)]
		public int RSIPeriodS;

		[Parameter(34)]
		public int RSIPeriodL;

		RSI rsil;
		RSI rsis;



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

			rsil = RSIIndicator(Symbol, SymbolPeriod, OHLCType.Close, RSIPeriodL);
			rsis = RSIIndicator(Symbol, SymbolPeriod, OHLCType.Close, RSIPeriodS);

			WorkWithPermanentSignal(true);

			SendOrderSequential(true);

		}

		public override void OnInitCompleted()
		{

		}

		public override void OnDataUpdate(BarDataEventArgs barData)
		{


			if (CrossAbove(rsis, rsil) && LastOrderSide.Obj != Side.Buy)
			{
				SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
				TakeProfit(Symbol, SyntheticOrderPriceType.Percent, TakeProfitPercentage);
				StopLoss(Symbol, SyntheticOrderPriceType.Percent, StopLossPercentage);

			}
		}

		public override void OnOrderUpdate(IOrder order)
		{
			if (order.OrdStatus.Obj == OrdStatus.Filled)
			{

			}
		}

		public override void OnStopped()
		{
		}
	}
}

Birde bunlara ek olarak sentetik emir fonksiyonlarının doğru çalışabilmesi için alış koşulunuz içerisine yön kontrolü ekledim.

Bunun detayı içinse aşağıdaki linki lütfen inceleyiniz.

https://destek.matriksdata.com/?qa=12386/matriks-iq-kar-al-y%C3%BCzdelik

İyi çalışmalar.

 

(11,059 puan) tarafından
tarafından seçilmiş
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,469 soru
8,418 cevap
4,744 yorum
18,717 kullanıcı