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

Take Profit ve Stop Loss Pozisyon Takibi

Soruldu
Görüntülenme
2.453 görüntülenme
Durum
Cevaplandı
Merhaba, bu ilk sorum ama son sorum değil :)

Hem long hem de short pozisyon açabilen bir algo yazdım. Örnepin mevcut stokta X kadar long varsa bunu parametre ile giriyorum başta, dolayısıyla sonra sat sinyali geldiğinde 2X kadar short pozisyon açıyor. Dolayısıyla eksi X pozisyona geçmiş oluyor.

Sonraki işlemde Takeprofit ve Stop Loss çalıştıırsa ben X kadar long işlem yapmasını isteyerek pozisyonun sıfırlanmasını isterim. Ama mevcut TP ve SL fonksiyonu 2X kadar pozisyon açmaktadır.

Örnek kodlarınızda pozisyon takipleri var. Ama TP ve SL'de ne kadar satış yapılacağı bilgisi parametrik girilemiyor.
Paylaş

1 Cevap

0

Merhaba,

Miktarları x e düşürüp, peş peşe 2 sefer al ve peş peşe 2 sefer sat yaparak kurgulamalısınız.

Aşağıda bir örnek de var.

iyi ç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 crossmov1 : 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;

                        [Parameter(10)]
                        public decimal Kar_al_yuzdesi;

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

                        int FirstRun = 0;
                        decimal realposition = 0;

                        public override void OnInit()
                        {
                                   //Symbol = "GARAN";
                                   //SymbolPeriod = SymbolPeriod.Min5;
                                   //BuyOrderQuantity = 1;
                                   //SellOrderQuantity = 1;
                                   //MovPeriod = 5;
                                   //MovPeriod2 = 22;
                                   AddSymbol(Symbol, SymbolPeriod);
                                   mov = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod, MovMethod.Exponential);
                                   mov2 = MOVIndicator(Symbol, SymbolPeriod, OHLCType.Close, MovPeriod2, MovMethod.Exponential);

                                   SendOrderSequential(true, true);
                                   WorkWithPermanentSignal(true);
                        }

                        /// <summary>
                        /// Init islemleri tamamlaninca, bardatalar kullanmaya hazir hale gelince bu fonksiyon tetiklenir. Data uzerinde bir defa yapilacak islemler icin kullanilir
                        /// </summary>
                        public override void OnInitComplated()
                        {

                        }

                        /// <summary>
                        /// SetTimerInterval fonksiyonu ile belirtilen sürede bir bu fonksiyon tetiklenir.
                        /// </summary>
                        public override void OnTimer()
                        {

                        }

                        /// <summary>
                        /// AddNewsSymbol ve AddNewsKeyword ile haberlere kayit olunmuşsa bu fonksiyon tetiklenir.
                        /// </summary>
                        /// <param name="newsId">Gelen haberin id'si</param>
                        /// <param name="relatedSymbols">Gelen haberin ilişkili sembolleri</param>
                        public override void OnNewsReceived(int newsId, List<string> relatedSymbols)
                        {

                        }

                        /// <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))
                                   {
                                               if (FirstRun == 0)
                                               {
                                                           SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
                                                           Debug("Alış Emri Gönderildi");
                                                           FirstRun = 1;
                                                           TakeProfit(Symbol, SyntheticOrderPriceType.Percent, Kar_al_yuzdesi);
                                               }
                                               else
                                               {
                                                           SendMarketOrder(Symbol, BuyOrderQuantity * 2, OrderSide.Buy);
                                                           Debug("Alış Emri Gönderildi");
                                                           TakeProfit(Symbol, SyntheticOrderPriceType.Percent, Kar_al_yuzdesi);
                                               }
                                   }

                                   if (CrossBelow(mov, mov2))
                                   {
                                               if (FirstRun == 0)
                                               {
                                                           SendMarketOrder(Symbol, SellOrderQuantity, OrderSide.Sell);
                                                           Debug("Satış Emri Gönderildi");
                                                           FirstRun = 1;
                                                           TakeProfit(Symbol, SyntheticOrderPriceType.Percent, Kar_al_yuzdesi);
                                               }
                                               else
                                               {
                                                           SendMarketOrder(Symbol, SellOrderQuantity * 2, OrderSide.Sell);
                                                           Debug("Satış Emri Gönderildi");
                                                           TakeProfit(Symbol, SyntheticOrderPriceType.Percent, Kar_al_yuzdesi);
                                               }

                                   }
                        }

                        /// <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)
                        {
                                   var position = GetRealPositions();

                                   //QtyAvailable Belirtilen sembole ait kullanılabilir adedi portföyden döndürür.
                                   var quantity = position[Symbol].QtyAvailable;

                                   if (quantity == 0) FirstRun = 0;
                        }
            }
}

 

BağlantıBayraklailhan69Matriks Destek14.380

Yorumlar (2)

Cevabınız

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