0 beğenilme 0 beğenilmeme
435 kez görüntülendi
MERHABA LONG ALIM ŞARTI PMAX AND MOST VE İLE BAĞLI LONG POZİSYON KAPATMA PMAX IN ŞARTINA BAĞLI MOST ETKEN OLMAYACAK

ŞORT POZİSYON ALIM ŞARTI PMAX AND MOST VE İLE BAĞLI ŞORT POZİSYON KAPATMA PMAX IN ŞARTINA BAĞLI MOST ETKEN OLMAYACAK

 ŞEKİLDE HAZIR STRATEJİ YAZABİLİRMİSİNİZ
İndikator kategorisinde (292 puan) tarafından | 435 kez görüntülendi

1 cevap

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

Deneme ortaminda test ediniz. Gercek ortamda testlerini yapmadim, gercek ortamda calistirmayin. Test'de karsilastiginiz sorunlari yazabilirsiniz, duzeltme yapariz.

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Matriks.Data.Symbol;
using Matriks.Engines;
using Matriks.Indicators;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;

namespace Matriks.Lean.Algotrader
{
	public class pmax_most_strategy: 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.Min)]
		public SymbolPeriod SymbolPeriod;
		[Parameter(0.015)]
		public decimal BuyOrderQuantity;
		[Parameter(0.015)]
		public decimal SellOrderQuantity;
		//PMAX
		[Parameter(1)]
		public int ATRPeriod;
		[Parameter(1)]
		public int MovPeriod;
		[Parameter(0.5)]
		public decimal Coefficient;
		[Parameter(MovMethod.E)]
		public MovMethod MovMethod;
		//MOST
		[Parameter(3)]
		public int MOST_periyot;
		[Parameter(3)]
		public decimal MOST_yuzde;
		
		[Parameter(false)]
		public bool AcigaSatisYapilsin;

		int FirstRun = 0;
		int realposition = 0;
		PMaxIndicator pmax;

		MOST most;

		public override void OnInit()
		{
			most = MOSTIndicator(Symbol, SymbolPeriod, OHLCType.Close, MOST_periyot, MOST_yuzde, MovMethod.Exponential);
			pmax = PMaxIndicators(Symbol, SymbolPeriod, ATRPeriod, MovPeriod, (decimal) Coefficient, MovMethod);

			AddSymbol(Symbol, SymbolPeriod);

			// 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(false);
		}


		/// <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)
		{
			var pmaxKline = Math.Round(pmax.KLine.CurrentValue, 2);
			var pmaxSTline = Math.Round(pmax.StLine.CurrentValue, 2);
			var mostline = Math.Round(most.CurrentValue, 2);
			var exmov = Math.Round(most.ExMOV.CurrentValue, 2);
			Debug("***********************************************");
			Debug("pmaxSTline = " + pmaxSTline);
			Debug("pmaxKline = " + pmaxKline);
			
			//long_entry
			if (CrossAbove(pmax.KLine, pmax.StLine) && exmov > mostline && realposition == 0)
			{
				SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));
				Debug("Alış emri gonderildi.");
			}
			//short_entry
			if (CrossBelow(pmax.KLine, pmax) && exmov > mostline && realposition == 0)
			{
				SendMarketOrder(Symbol, SellOrderQuantity, (OrderSide.Sell));
				Debug("Satış emri gonderildi.");
			}
			//long_exit
			if (CrossBelow(pmax.KLine, pmax.StLine) && realposition > 0)
			{
				SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Sell));
				Debug("Long pozisyon kapatildi.");
			}
			//short_exit
			if (CrossAbove(pmax.KLine, pmax.StLine) && realposition < 0)
			{
				SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));
				Debug("Short pozisyon kapatildi.");
			}
		}

		public override void OnOrderUpdate(IOrder order)
		{
			//Gercek zamanli pozisyon takibi
			if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Buy)
			{
				var positionChange = order.OrderQty;
				realposition += (int) positionChange;
				Debug("[ONORDERUPDATE]: Pozisyon = " + realposition);
			}
			if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Sell)
			{
				var positionChange = order.OrderQty;
				realposition -= (int) positionChange;
				Debug("[ONORDERUPDATE]: Pozisyon = " + realposition);
			}
		}
	}
}

***STRATEJILERI TEST/DENEME ORTAMINDA SINAMADAN VE SIZIN ISTEDIGINIZ SEKILDE CALISTIGINA EMIN OLMADAN GERCEK ORTAMDA HIC BIR ZAMAN CALISTIRMAYIN***

 

(8,035 puan) tarafından
tarafından seçilmiş
bu stradtejide Most MovMethod. becktest kontrol panelinde değiştirilebilir şekilde yazarmısınız
bu pmax_most_strategy sine birden fazla most eklenirmi
7,519 soru
7,522 cevap
4,408 yorum
8,774 kullanıcı