0 beğenilme 0 beğenilmeme
1,054 kez görüntülendi

selamlar,

RSİ 'ın üzerine OTT atarak sistem oluşturmaya çalıştım. kodları kontrol edebilirmisiniz , biyerde hatam varsa düzeltirseniz sevinirim

 

using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
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 Risotto : 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("BTC_USDT_BIN")]
		public string Symbol;

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

		[Parameter(1)]
		public decimal BuyOrderQuantity;

		[Parameter(1)]
		public decimal SellOrderQuantity;

		[Parameter(3)]
		public int Period;

		[Parameter(2)]
		public decimal Percentage;
		
		[Parameter(3)]
		public int RsiPeriod;
		
		OTT ott;
		RSI rsi;
		MOV mov;

		public override void OnInit()
		{
			rsi = RSIIndicator(Symbol, SymbolPeriod, OHLCType.Close, 14);

			ott = OTTIndicator(rsi, 2, 1.4m, MovMethod.VAR, true);

			AddSymbol(Symbol, SymbolPeriod);

			ott = OTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period, Percentage, MovMethod.VAR);
			//ottSupportLine = new OTTSupportLine(null, Period, MovMethod.VAR);
		
			mov = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, Period, MovMethod.VAR);

			// Algoritmanın kalıcı veya geçici sinyal ile çalışıp çalışmayacağını belirleyen fonksiyondur.
			// true geçerseniz algoritma sadece yeni bar açılışlarında çalışır, bu fonksiyonu çağırmazsanız veya false geçerseniz her işlem olduğunda algoritma tetiklenir.
			WorkWithPermanentSignal(true);
			
			//Eger backtestte emri bir al bir sat seklinde gonderilmesi isteniyor bu true set edilir.
			//Alttaki satırı silerek veya false geçerek emirlerin sirayla gönderilmesini engelleyebilirsiniz.
			SendOrderSequential(true);
		}

		/// <summary>
		/// Eklenen sembollerin bardata'ları ve indikatorler güncellendikçe bu fonksiyon tetiklenir.
		/// </summary>
		/// <param name="barData">Bardata ve hesaplanan gerçekleşen işleme ait detaylar</param>
		public override void OnDataUpdate(BarDataEventArgs barData)
		{
			if (CrossAbove(mov, ott))
			{
				SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));
				Debug("Alış emri verildi.");
				Debug("OTT_SupportLine:" + mov.CurrentValue);
				Debug("OTTLine:" + ott.ottLine.CurrentValue);
			}
			if (CrossBelow(mov, ott))
			{
				SendMarketOrder(Symbol, SellOrderQuantity, (OrderSide.Sell));
				Debug("Satış emri verildi.");
				Debug("OTT_SupportLine:" + mov.CurrentValue);
				Debug("OTTLine:" + ott.ottLine.CurrentValue);
			}
		}
	}
}

 

Algoritmik Trading kategorisinde (200 puan) tarafından | 1,054 kez görüntülendi

1 cevap

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

Merhaba, 

OnInit içerisinde 2 kez Ott indikatörü tanımlamışsınız. 2. tanımladığınız Ott'yi silmeniz gerekli. Ek olarak Ott indikatörünün sinyal koşulları genellikle ott çizgisi ile Ottsupportline arasındaki kırılımlara göre verilmekte. Tabi bu işlem sizin kurduğunuz veya kurmak istediğiniz stratejiye göre değişebilir.

İç içe indikatörler kullanarak kolay bir şekilde strateji oluşturmak için aşağıdaki eğitim videomuzu izleyebilirsiniz.

 

İyi çalışmalar

 

(4,555 puan) tarafından
tarafından seçilmiş
8,636 soru
8,590 cevap
4,821 yorum
19,786 kullanıcı