0 beğenilme 0 beğenilmeme
419 kez görüntülendi
Formasyonlar için strateji kullanıyorum ama kripto tarafı için tek tek bütün paritelere robot kurmak çok makul değil,hepsinin olayı aynı.

 

1 Stratejiye 1'den fazla parite nasıl eklerim ? tek tuşla hepsini çalıştırmak istiyorum
Algoritmik Trading kategorisinde (406 puan) tarafından | 419 kez görüntülendi

1 cevap

0 beğenilme 0 beğenilmeme
En İyi Cevap

Merhabalar,

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

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



namespace Matriks.Lean.Algotrader
{
    public class CokluSembolMost : 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.
        [Parameter(SymbolPeriod.Min15)]
        public SymbolPeriod SymbolPeriod;



       [Parameter(3)]
        public int Period;



       [Parameter(2)]
        public decimal Percentage;



       public class SembolDetay
        {
            public string Sembol
            {
                get; set;
            }
            public decimal Adet
            {
                get; set;
            }
        }



       List<SembolDetay> SembolDetaylari = new List<SembolDetay>();




        Dictionary<string, MOST> dic = new Dictionary<string, MOST>();



       MOST most;



       /// <summary>
        /// Strateji ilk çalıştırıldığında bu fonksiyon tetiklenir. Tüm sembole kayit işlemleri,
        /// indikator ekleme, haberlere kayıt olma işlemleri burada yapılır.
        /// </summary>
        public override void OnInit()
        {
            //1. yöntem sembolleri bir txt dosyasından okuyup işleyebilirsiniz.
            //bU işlem için readFile() methodundaki dosya_yolu belirtmeniz gerekmektedir.



           //2. yöntem yukarıda bulunan List<string> sembol değişkenini direk kodda doldurabilirsiniz.



           SembolDetaylari.Add(new SembolDetay()
                {
                    Sembol = "GARAN", Adet = 15
                });
            SembolDetaylari.Add(new SembolDetay()
                {
                    Sembol = "AKBNK", Adet = 25
                });
            SembolDetaylari.Add(new SembolDetay()
                {
                    Sembol = "TTKOM", Adet = 5
                });
            SembolDetaylari.Add(new SembolDetay()
                {
                    Sembol = "THYAO", Adet = 12
                });



           foreach (var symbol in SembolDetaylari)
            {
                most = MOSTIndicator(symbol.Sembol, SymbolPeriod, OHLCType.Close, Period, Percentage, MovMethod.Exponential);
                dic.Add(symbol.Sembol, most);
                AddSymbol(symbol.Sembol, 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(BarDataCurrentValues barDataCurrentValues)
        {
            var barSembol = barDataCurrentValues.LastUpdate.SymbolName;



           if (dic.ContainsKey(barSembol))
            {
                decimal adet = SembolDetaylari.FirstOrDefault(x => x.Sembol == barSembol).Adet;



               //Sembol verilerinden türetilen most indikatörü
                var mostvalue = dic[barSembol];



               if (CrossAbove(mostvalue.ExMOV, mostvalue))
                {
                    SendMarketOrder(barSembol, adet, (OrderSide.Buy));
                    Debug("Sembol : " + barSembol);
                    Debug("Alış emri verildi.");
                    Debug("Most.ExMov:" + mostvalue.ExMOV.CurrentValue);
                    Debug("Most:" + mostvalue.CurrentValue + "\n");
                }
                if (CrossBelow(mostvalue.ExMOV, mostvalue))
                {
                    SendMarketOrder(barSembol, adet, (OrderSide.Sell));
                    Debug("Sembol : " + barSembol);
                    Debug("Satış emri verildi.");
                    Debug("Most.ExMov:" + mostvalue.ExMOV.CurrentValue);
                    Debug("Most:" + mostvalue.CurrentValue + "\n");
                }
            }
        }
    }
}

İyi çalışmalar.

(11,059 puan) tarafından
tarafından seçilmiş
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.



8,636 soru
8,590 cevap
4,821 yorum
19,785 kullanıcı