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

Borsa İstanbul’da işlem yapmaktayım. Açığa satış kullanmıyorum. Stratejim belli koşullarda alım yapmakta ve karı almak için de sat koşulları oluştuğunda işlem kapanmakta. Bu koşulları değiştirmeden kar oranı %10 olduğunda işlemin %25’inin ve devamında kar oranı %20’ye çıktığında kalan lotlarımın yine %25’inin satılmasını yani kapatılmasını istiyorum. Bunu nasıl yapabilirim.

Teşekkürler.
Algoritmik Trading kategorisinde (14 puan) tarafından | 91 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme

Merhabalar,

Dilerseniz aşağıdaki yapıyı inceleyebilirsiniz.

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;
using Matriks.AI;
using Matriks.AI.AiParameters;
using Matriks.AI.Data;
using Matriks.Trader.Core.TraderModels;

namespace Matriks.Lean.Algotrader
{
            public class Test2 : MatriksAlgo
            {
                        [SymbolParameter("GARAN")]
                                   public string Symbol;

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

                        [Parameter(10)]
                                   public decimal BuyOrderQuantity;
                        
                        [Output]
                        public bool AktifMI = false;

                        OTT ott;

                        public override void OnInit()
                        {
                                   ott = OTTIndicator(Symbol, SymbolPeriod, OHLCType.Close, 2, 1.4m, MovMethod.VAR, true);

                                   SendOrderSequential(true, Side.Buy);
                                   WorkWithPermanentSignal(true);
                                   SetTimerInterval(1);
                        }                      

                        public override void OnTimer()
                        {
                                   if (AktifMI)
                                   {
                                               var barDataModel = GetBarData();
                                               var close = barDataModel.Close[barDataModel.Close.Count];
                                               
                                               var tut=kademeliKarAlListesi.Where(x=> x.Key>=close);
                                               
                                               if(tut.Count()>0){
                                                           foreach(var deger in tut){
                                                                       LastOrderSide.Obj=Side.Buy;
                                                                       SendMarketOrder(Symbol,deger.Value,OrderSide.Sell);
                                                                       kalanLot-=deger.Value;
                                                                       kademeliKarAlListesi.Remove(deger.Key);
                                                                       LastOrderSide.Obj=Side.Buy;
                                                           }
                                               }
                                   }
                        }

                        public override void OnDataUpdate(BarDataEventArgs barData)
                        {
                                   if (CrossAbove(ott, ott, 1, 0))
                                   {
                                               SendMarketOrder(Symbol, BuyOrderQuantity, OrderSide.Buy);
                                               Debug("Alış gönderildi.");
                                               AktifMI=true;
                                   }

                                   if (CrossBelow(ott, ott, 1, 0) && kalanLot>0)
                                   {
                                               SendMarketOrder(Symbol, kalanLot, OrderSide.Sell);
                                               Debug("Satış gönderildi.");
                                               AktifMI=false;
                                               kalanLot=decimal.MinValue;
                                   }
                        }

                        decimal kalanLot = decimal.MinValue;

                        Dictionary<decimal, decimal> kademeliKarAlListesi = new Dictionary<decimal, decimal>();

                        public override void OnOrderUpdate(IOrder order)
                        {
                                   if (order.OrdStatus.Obj == OrdStatus.Filled && order.Side.Obj == Side.Buy)
                                   {
                                               kademeliKarAlListesi[order.Price * 1.10m] = Math.Ceiling(order.OrderQty * 0.25m);
                                               kademeliKarAlListesi[order.Price * 1.30m] = Math.Ceiling(order.OrderQty * 0.25m);
                                               kalanLot = order.OrderQty;                                      
                                   }
                        }
            }
}

İyi çalışmalar.

(4,449 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.



4,814 soru
4,820 cevap
3,180 yorum
3,597 kullanıcı