MatriksIQ Destek
Matriks Destek
Matriks Web Destek
Matriks Mobile Destek
0 beğenilme 0 beğenilmeme
139 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 | 139 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,479 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.



5,417 soru
5,463 cevap
3,491 yorum
4,224 kullanıcı