0 beğenilme 0 beğenilmeme
284 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 (372 puan) tarafından | 284 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,069 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.



7,509 soru
7,511 cevap
4,405 yorum
8,750 kullanıcı