MatriksIQ Destek
Matriks Destek
Matriks Web Destek
Matriks Mobile Destek
0 beğenilme 0 beğenilmeme
34 kez görüntülendi

Selam 

BIST te PMAX stratejisi kullanıyorum, formül aşağıdaki şekilde; bu formül hisse bazında açığa satışta çalışmıyor zira SendMarketShortOrder formülü ayrı şekilde yazılması gerekiyor sanırım. Mevcut stratejide x2 ile yazılmış ama ayrıca satır olarak eklemek istiyorum, ancak burada emirlerin sırayla gitmesi daha sağlıklı zira elimde hisse varsa önce onu satmalı sonrada açığa satış yapmalı. Formül konusunda yardımcı olabilir misiniz?

            if (!AcigaSatisYapilsin) FirstRun = 0;

            var pmaxKline = Math.Round(pmax.KLine.CurrentValue, 2);

            var pmaxSTline = Math.Round(pmax.StLine.CurrentValue, 2);

            Debug("***********************************************");

            Debug("pmaxSTline = " + pmaxSTline);

            Debug("pmaxKline = " + pmaxKline);

            if (CrossAbove(pmax.KLine, pmax.StLine))

            {

                if (FirstRun == 0)

                {

                    SendMarketOrder(Symbol, BuyOrderQuantity, (OrderSide.Buy));

                    Debug("Alış emri gonderildi.");

                    FirstRun = 1;

                }

                else

                {

                    SendMarketOrder(Symbol, BuyOrderQuantity * 2, (OrderSide.Buy));

                    Debug("Alış emri gonderildi.");

                }

            }

            if (CrossBelow(pmax.KLine, pmax))

            {

                if (FirstRun == 0)

                {

                    SendMarketOrder(Symbol, SellOrderQuantity, (OrderSide.Sell));

                    Debug("Satış emri gonderildi.");

                    FirstRun = 1;

                }

                else

                {

                    SendMarketOrder(Symbol, SellOrderQuantity * 2, (OrderSide.Sell));

                    Debug("Satış emri gonderildi.");

                }

            }

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

1 cevap

0 beğenilme 0 beğenilmeme

Merhaba,

BİST hisse senetleri için açığa satış .içeren bir örnek aşağıdadır. 

Yukarıdaki kod yapısı VİOP tarafı için mümkün sadece.

Aşağıdaki örneğe geçiş yapınız bir yandan. 

İyi çalışmalar


using System;
using System.Collections.Generic;
using System.Linq;
using Matriks.Data.Symbol;
using Matriks.Engines;
using Matriks.Indicators;
using Matriks.Symbols;
using Matriks.Trader.Core;
using Matriks.Trader.Core.Fields;
using Matriks.Lean.Algotrader.AlgoBase;
using Matriks.Lean.Algotrader.Models;
using Matriks.Lean.Algotrader.Trading;

namespace Matriks.Lean.Algotrader
{
	public class ACIGASATISLICROSSMOV : 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("GARAN")]
		public string Symbol;

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

		[Parameter(5)]
		public decimal BuyOrderQuantity;

		[Parameter(5)]
		public decimal SellOrderQuantity;

		[Parameter(5)]
		public int MovPeriod;

		[Parameter(22)]
		public int MovPeriod2;

		// indikator tanımları.
		MOV mov;
		MOV mov2;

		[Parameter(true)]
		public bool AcigaSatisYapilsin;

		public void FX_Alis()
		{

		}


		public override void OnInit()
		{
			AddSymbol(Symbol, SymbolPeriod);
			mov = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod, MovMethod.Exponential);
			mov2 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod2, MovMethod.Exponential);

			// 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 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, Side.All);
			SendOrderSequentialForShort(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)
		{
			if (CrossAbove(mov, mov2) && LastOrderSide.Obj != Side.Buy)
			{
				if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)
				{
					SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
					Debug("Alış emri gönderildi");
				}else
				{
					SendMarketCloseShortOrder(Symbol, BuyOrderQuantity);
					Debug("Açık pozisyonlar kapatıldı");
					SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
					Debug("Alış emri gönderildi");
				}
				LastOrderSide.Obj = Side.Buy;
			}

			if (CrossBelow(mov, mov2) && LastOrderSide.Obj != Side.Sell)
			{
				if (LastOrderSide.Obj == Side.All || !AcigaSatisYapilsin)
				{
					if (AcigaSatisYapilsin)
					{
						SendShortSaleMarketOrder(Symbol, SellOrderQuantity);
						Debug("Açığa satış yapıldı");
					}else
					{
						SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
						Debug("Satış emri gönderildi");
					}
				}else
				{
					SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
					Debug("Satış emri gönderildi");
					SendShortSaleMarketOrder(Symbol, SellOrderQuantity);
					Debug("Açığa satış yapıldı");
				}
				LastOrderSide.Obj = Side.Sell;
			}
		}

		/// <summary>
		/// Gönderilen emirlerin son durumu değiştikçe bu fonksiyon tetiklenir.
		/// </summary>
		/// <param name="barData">Emrin son durumu</param>
		public override void OnOrderUpdate(IOrder order)
		{
			if (order.OrdStatus.Obj == OrdStatus.Filled)
			{

			}
		}
	}
}


 

(5,323 puan) tarafından
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.



2,766 soru
2,649 cevap
2,144 yorum
1,942 kullanıcı