0 beğenilme 0 beğenilmeme
302 kez görüntülendi
//long_entry if (CrossAbove(pmax.KLine, pmax.StLine) && exmov > mostline && realposition == 0)

bu satır pmax.kline>pmax.StLin ve exmov yukarı cross mostline şeklinde

//short_entry
if (CrossBelow(pmax.KLine, pmax) && exmov > mostline && realposition == 0)
bu satırı pmax.kline<pmax.StLin    ve    exmov .aşağı cross mostline  şeklinde yazabilirmisinz
Algoritmik Trading kategorisinde (292 puan) tarafından | 302 kez görüntülendi

1 cevap

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

Merhaba, istediginiz duzeltmeler eklenmistir, lutfen test ediniz.

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: 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(MovMethod.E)]
		public MovMethod MOST_MovMethod;

		[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, MOST_MovMethod);
			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)
		{
			//Degisiklikler
			/*//long_entry if (CrossAbove(pmax.KLine, pmax.StLine) && exmov > mostline && realposition == 0)
			bu satır pmax.kline>pmax.StLin ve exmov yukarı cross mostline şeklinde
			//short_entry
			if (CrossBelow(pmax.KLine, pmax) && exmov > mostline && realposition == 0)
			bu satırı pmax.kline<pmax.StLin    ve    exmov .aşağı cross mostline  şeklinde yazabilirmisinz*/
			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(most.ExMOV, most) && pmaxKline > pmaxSTline && realposition == 0)
			{
				SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));
				Debug("Alış emri gonderildi.");
			}
			//short_entry
			if (CrossBelow(most.ExMOV, most) && pmaxKline < pmaxSTline && 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 CALISTIRMADAN VE SIZIN ISTEDIGINIZ SEKILDE CALISTIGINA EMIN OLMADAN GERCEK ORTAMDA HIC BIR ZAMAN CALISTIRMAYINIZ***

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