Matriks Destek ve Yardım Platformu

Matriks Ürünleri ile ilgili tüm sorularınız için bizlere buradan ulaşabilirsiniz. Daha önce sorulan soruları ve verilen cevapları ilgili sekmelerden ve arama üzerinden inceleyebilirsiniz. Sağ taraftaki kategoriler üzerinden İlgilendiğiniz özelliklerle ilgili soruları filtreleyebilirsiniz. Soru ve cevapları sosyal medyada paylaşabilirsiniz. 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.

0

Pmax ve most indikatörünü birleştireblirmisiniz

Soruldu
Kategori
İndikator
Görüntülenme
895 görüntülenme
Durum
Çözüldü
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
Paylaş

1 Cevap

1

Kabul edilen 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***

 

BağlantıBayrakladüzenlendi · erolcapMatt RicksMatriks Destek8.033

Cevabınız

Cevap yazmak için giriş yapın.Giriş yapKayıt ol